@withbuddi/buddi 0.1.0-pre.23 → 0.1.0-pre.25
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/README.md +66 -50
- package/extension/background.js +24 -1
- package/extension/blob.png +0 -0
- package/extension/fonts/dm-mono-latin-400-normal.woff2 +0 -0
- package/extension/fonts/dm-mono-latin-500-normal.woff2 +0 -0
- package/extension/fonts/dm-sans-latin-ext-standard-normal.woff2 +0 -0
- package/extension/fonts/dm-sans-latin-standard-normal.woff2 +0 -0
- package/extension/icons/128.png +0 -0
- package/extension/icons/16.png +0 -0
- package/extension/icons/32.png +0 -0
- package/extension/icons/48.png +0 -0
- package/extension/manifest.json +4 -3
- package/extension/popup.css +199 -81
- package/extension/popup.html +39 -17
- package/extension/popup.js +133 -37
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/args.d.ts +59 -0
- package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/args.js +141 -0
- package/node_modules/@buddi/cli/dist/args.js.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.d.ts +2 -0
- package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +83 -3
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/cli/dist/connections-cmd.d.ts +93 -0
- package/node_modules/@buddi/cli/dist/connections-cmd.d.ts.map +1 -0
- package/node_modules/@buddi/cli/dist/connections-cmd.js +657 -0
- package/node_modules/@buddi/cli/dist/connections-cmd.js.map +1 -0
- package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.js +53 -9
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts +1 -8
- package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.js +1 -15
- package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
- package/node_modules/@buddi/cli/dist/init-plan.d.ts +1 -2
- package/node_modules/@buddi/cli/dist/init-plan.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/init-plan.js +2 -6
- package/node_modules/@buddi/cli/dist/init-plan.js.map +1 -1
- package/node_modules/@buddi/cli/dist/init.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/init.js +5 -29
- package/node_modules/@buddi/cli/dist/init.js.map +1 -1
- package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/main.js +12 -2
- package/node_modules/@buddi/cli/dist/main.js.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.d.ts +5 -0
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.js +15 -4
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.js.map +1 -1
- package/node_modules/@buddi/cli/dist/plugins-toggle.d.ts +9 -0
- package/node_modules/@buddi/cli/dist/plugins-toggle.d.ts.map +1 -0
- package/node_modules/@buddi/cli/dist/plugins-toggle.js +20 -0
- package/node_modules/@buddi/cli/dist/plugins-toggle.js.map +1 -0
- package/node_modules/@buddi/cli/dist/service/index.d.ts +4 -2
- package/node_modules/@buddi/cli/dist/service/index.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/service/index.js +5 -7
- package/node_modules/@buddi/cli/dist/service/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/agents/provider-from-env.d.ts +7 -6
- package/node_modules/@buddi/core/dist/agents/provider-from-env.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/provider-from-env.js +9 -12
- package/node_modules/@buddi/core/dist/agents/provider-from-env.js.map +1 -1
- package/node_modules/@buddi/core/dist/backup/load.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/backup/load.js +37 -0
- package/node_modules/@buddi/core/dist/backup/load.js.map +1 -1
- package/node_modules/@buddi/core/dist/backup/restore.js +2 -2
- package/node_modules/@buddi/core/dist/backup/restore.js.map +1 -1
- package/node_modules/@buddi/core/dist/connection-config.d.ts +96 -0
- package/node_modules/@buddi/core/dist/connection-config.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/connection-config.js +308 -0
- package/node_modules/@buddi/core/dist/connection-config.js.map +1 -0
- package/node_modules/@buddi/core/dist/failures/owner-message.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/failures/owner-message.js +37 -10
- package/node_modules/@buddi/core/dist/failures/owner-message.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/build.d.ts +7 -0
- package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/host/build.js +14 -1
- package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/store.js +17 -1
- package/node_modules/@buddi/core/dist/onboarding/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts +14 -0
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts +21 -1
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.js +31 -1
- package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/core/dist/provider.d.ts +4 -3
- package/node_modules/@buddi/core/dist/provider.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider.js +7 -4
- package/node_modules/@buddi/core/dist/provider.js.map +1 -1
- package/node_modules/@buddi/core/dist/registry.d.ts +9 -0
- package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/registry.js +32 -2
- package/node_modules/@buddi/core/dist/registry.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/destinations.d.ts +2 -0
- package/node_modules/@buddi/core/dist/secrets/destinations.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/destinations.js +6 -0
- package/node_modules/@buddi/core/dist/secrets/destinations.js.map +1 -1
- package/node_modules/@buddi/core/dist/testing/accounts.d.ts +12 -0
- package/node_modules/@buddi/core/dist/testing/accounts.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/testing/accounts.js +7 -0
- package/node_modules/@buddi/core/dist/testing/accounts.js.map +1 -0
- package/node_modules/@buddi/core/dist/testing/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/testing/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/testing/index.js +1 -0
- package/node_modules/@buddi/core/dist/testing/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/vault/resolve.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/vault/resolve.js +0 -2
- package/node_modules/@buddi/core/dist/vault/resolve.js.map +1 -1
- package/node_modules/@buddi/core/migrations/053_drop_legacy_anthropic_env.sql +31 -0
- package/node_modules/@buddi/core/package.json +4 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts +3 -2
- package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalog.js +3 -2
- package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents-cli.js +1 -1
- package/node_modules/@buddi/gateway/dist/agents-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.d.ts +1 -3
- package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js +13 -8
- package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/cli.js +1 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts +1 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/mlxh.d.ts +44 -0
- package/node_modules/@buddi/gateway/dist/mlxh.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/mlxh.js +98 -0
- package/node_modules/@buddi/gateway/dist/mlxh.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/owner-secrets.d.ts +21 -1
- package/node_modules/@buddi/gateway/dist/owner-secrets.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/owner-secrets.js +96 -2
- package/node_modules/@buddi/gateway/dist/owner-secrets.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/live.d.ts +42 -0
- package/node_modules/@buddi/gateway/dist/plugins/live.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/live.js +81 -0
- package/node_modules/@buddi/gateway/dist/plugins/live.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts +4 -0
- package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/stage.js +3 -0
- package/node_modules/@buddi/gateway/dist/plugins/stage.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/toggle.d.ts +18 -2
- package/node_modules/@buddi/gateway/dist/plugins/toggle.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/toggle.js +36 -12
- package/node_modules/@buddi/gateway/dist/plugins/toggle.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/update.d.ts +8 -0
- package/node_modules/@buddi/gateway/dist/plugins/update.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/update.js +8 -2
- package/node_modules/@buddi/gateway/dist/plugins/update.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +44 -5
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.js +177 -20
- package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts +6 -13
- package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.js +76 -16
- package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/providers.d.ts +3 -3
- package/node_modules/@buddi/gateway/dist/providers.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/providers.js +7 -7
- package/node_modules/@buddi/gateway/dist/providers.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.js +2 -0
- package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/context-budget.d.ts +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js +46 -3
- package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js.map +1 -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 +2 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/rules.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/rules.js +10 -0
- package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agents.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agents.js +5 -1
- package/node_modules/@buddi/gateway/dist/web/agents.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/connections.d.ts +15 -5
- package/node_modules/@buddi/gateway/dist/web/connections.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/connections.js +70 -2
- package/node_modules/@buddi/gateway/dist/web/connections.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js +5 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/folders.d.ts +23 -0
- package/node_modules/@buddi/gateway/dist/web/folders.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/folders.js +100 -0
- package/node_modules/@buddi/gateway/dist/web/folders.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/market.d.ts +129 -0
- package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/market.js +353 -0
- package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts +21 -7
- package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/onboarding.js +59 -9
- package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/plugins.d.ts +42 -7
- package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/plugins.js +54 -14
- package/node_modules/@buddi/gateway/dist/web/plugins.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/recovery.js +1 -1
- package/node_modules/@buddi/gateway/dist/web/recovery.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 +100 -3
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/static.d.ts +8 -0
- package/node_modules/@buddi/gateway/dist/web/static.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/static.js +21 -1
- package/node_modules/@buddi/gateway/dist/web/static.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/svg.d.ts +23 -0
- package/node_modules/@buddi/gateway/dist/web/svg.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/svg.js +125 -0
- package/node_modules/@buddi/gateway/dist/web/svg.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/take-on.d.ts +91 -0
- package/node_modules/@buddi/gateway/dist/web/take-on.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/take-on.js +287 -0
- package/node_modules/@buddi/gateway/dist/web/take-on.js.map +1 -0
- 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 +29 -3
- package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/provider-models.d.ts +2 -0
- package/node_modules/@buddi/runtime/dist/provider-models.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/provider-models.js +22 -0
- package/node_modules/@buddi/runtime/dist/provider-models.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/search.js +2 -2
- 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-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-mcp/dist/catalog.d.ts +32 -2
- package/node_modules/@buddi/tool-mcp/dist/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/catalog.js +41 -7
- package/node_modules/@buddi/tool-mcp/dist/catalog.js.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/device.d.ts +53 -0
- package/node_modules/@buddi/tool-mcp/dist/device.d.ts.map +1 -0
- package/node_modules/@buddi/tool-mcp/dist/device.js +100 -0
- package/node_modules/@buddi/tool-mcp/dist/device.js.map +1 -0
- package/node_modules/@buddi/tool-mcp/dist/fetch.d.ts +10 -1
- package/node_modules/@buddi/tool-mcp/dist/fetch.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/fetch.js +7 -1
- package/node_modules/@buddi/tool-mcp/dist/fetch.js.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/index.d.ts +5 -3
- package/node_modules/@buddi/tool-mcp/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/index.js +7 -4
- package/node_modules/@buddi/tool-mcp/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/ports.d.ts +31 -0
- package/node_modules/@buddi/tool-mcp/dist/ports.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/preview.d.ts +16 -0
- package/node_modules/@buddi/tool-mcp/dist/preview.d.ts.map +1 -0
- package/node_modules/@buddi/tool-mcp/dist/preview.js +52 -0
- package/node_modules/@buddi/tool-mcp/dist/preview.js.map +1 -0
- package/node_modules/@buddi/tool-mcp/dist/program.d.ts +73 -0
- package/node_modules/@buddi/tool-mcp/dist/program.d.ts.map +1 -0
- package/node_modules/@buddi/tool-mcp/dist/program.js +306 -0
- package/node_modules/@buddi/tool-mcp/dist/program.js.map +1 -0
- package/node_modules/@buddi/tool-mcp/dist/service.d.ts +131 -22
- package/node_modules/@buddi/tool-mcp/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/service.js +717 -29
- package/node_modules/@buddi/tool-mcp/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/session.d.ts +13 -1
- package/node_modules/@buddi/tool-mcp/dist/session.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/session.js +27 -4
- package/node_modules/@buddi/tool-mcp/dist/session.js.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/store.d.ts +39 -1
- package/node_modules/@buddi/tool-mcp/dist/store.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/store.js +24 -0
- package/node_modules/@buddi/tool-mcp/dist/store.js.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/testing/fake.d.ts +6 -0
- package/node_modules/@buddi/tool-mcp/dist/testing/fake.d.ts.map +1 -1
- package/node_modules/@buddi/tool-mcp/dist/testing/fake.js +26 -0
- package/node_modules/@buddi/tool-mcp/dist/testing/fake.js.map +1 -1
- package/node_modules/@buddi/tool-mcp/migrations/003_token_auth.sql +14 -0
- package/node_modules/@buddi/tool-mcp/migrations/004_programs.sql +26 -0
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/@hono/node-server/README.md +21 -10
- package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
- package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
- package/node_modules/@hono/node-server/dist/index.cjs +41 -19
- package/node_modules/@hono/node-server/dist/index.mjs +42 -20
- package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
- package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
- package/node_modules/@hono/node-server/package.json +3 -2
- package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/language/language.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +1 -0
- package/node_modules/hono/dist/middleware/language/language.js +1 -1
- package/node_modules/hono/dist/middleware/serve-static/index.js +1 -0
- package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +2 -0
- package/node_modules/hono/package.json +1 -1
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/args.d.ts +59 -0
- package/packages/cli/dist/args.d.ts.map +1 -1
- package/packages/cli/dist/args.js +141 -0
- package/packages/cli/dist/args.js.map +1 -1
- package/packages/cli/dist/commands.d.ts +2 -0
- package/packages/cli/dist/commands.d.ts.map +1 -1
- package/packages/cli/dist/commands.js +83 -3
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/cli/dist/connections-cmd.d.ts +93 -0
- package/packages/cli/dist/connections-cmd.d.ts.map +1 -0
- package/packages/cli/dist/connections-cmd.js +657 -0
- package/packages/cli/dist/connections-cmd.js.map +1 -0
- package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
- package/packages/cli/dist/doctor-probes.js +53 -9
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/doctor.d.ts +1 -8
- package/packages/cli/dist/doctor.d.ts.map +1 -1
- package/packages/cli/dist/doctor.js +1 -15
- package/packages/cli/dist/doctor.js.map +1 -1
- package/packages/cli/dist/init-plan.d.ts +1 -2
- package/packages/cli/dist/init-plan.d.ts.map +1 -1
- package/packages/cli/dist/init-plan.js +2 -6
- package/packages/cli/dist/init-plan.js.map +1 -1
- package/packages/cli/dist/init.d.ts.map +1 -1
- package/packages/cli/dist/init.js +5 -29
- package/packages/cli/dist/init.js.map +1 -1
- package/packages/cli/dist/main.d.ts.map +1 -1
- package/packages/cli/dist/main.js +12 -2
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/dist/mcp/gateway-client.d.ts +5 -0
- package/packages/cli/dist/mcp/gateway-client.d.ts.map +1 -1
- package/packages/cli/dist/mcp/gateway-client.js +15 -4
- package/packages/cli/dist/mcp/gateway-client.js.map +1 -1
- package/packages/cli/dist/plugins-toggle.d.ts +9 -0
- package/packages/cli/dist/plugins-toggle.d.ts.map +1 -0
- package/packages/cli/dist/plugins-toggle.js +20 -0
- package/packages/cli/dist/plugins-toggle.js.map +1 -0
- package/packages/cli/dist/service/index.d.ts +4 -2
- package/packages/cli/dist/service/index.d.ts.map +1 -1
- package/packages/cli/dist/service/index.js +5 -7
- package/packages/cli/dist/service/index.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/agents/provider-from-env.d.ts +7 -6
- package/packages/core/dist/agents/provider-from-env.d.ts.map +1 -1
- package/packages/core/dist/agents/provider-from-env.js +9 -12
- package/packages/core/dist/agents/provider-from-env.js.map +1 -1
- package/packages/core/dist/backup/load.d.ts.map +1 -1
- package/packages/core/dist/backup/load.js +37 -0
- package/packages/core/dist/backup/load.js.map +1 -1
- package/packages/core/dist/backup/restore.js +2 -2
- package/packages/core/dist/backup/restore.js.map +1 -1
- package/packages/core/dist/connection-config.d.ts +96 -0
- package/packages/core/dist/connection-config.d.ts.map +1 -0
- package/packages/core/dist/connection-config.js +308 -0
- package/packages/core/dist/connection-config.js.map +1 -0
- package/packages/core/dist/failures/owner-message.d.ts.map +1 -1
- package/packages/core/dist/failures/owner-message.js +37 -10
- package/packages/core/dist/failures/owner-message.js.map +1 -1
- package/packages/core/dist/host/build.d.ts +7 -0
- package/packages/core/dist/host/build.d.ts.map +1 -1
- package/packages/core/dist/host/build.js +14 -1
- package/packages/core/dist/host/build.js.map +1 -1
- package/packages/core/dist/onboarding/store.d.ts.map +1 -1
- package/packages/core/dist/onboarding/store.js +17 -1
- package/packages/core/dist/onboarding/store.js.map +1 -1
- package/packages/core/dist/onboarding/types.d.ts +14 -0
- package/packages/core/dist/onboarding/types.d.ts.map +1 -1
- package/packages/core/dist/provider-accounts.d.ts +21 -1
- package/packages/core/dist/provider-accounts.d.ts.map +1 -1
- package/packages/core/dist/provider-accounts.js +31 -1
- package/packages/core/dist/provider-accounts.js.map +1 -1
- package/packages/core/dist/provider.d.ts +4 -3
- package/packages/core/dist/provider.d.ts.map +1 -1
- package/packages/core/dist/provider.js +7 -4
- package/packages/core/dist/provider.js.map +1 -1
- package/packages/core/dist/registry.d.ts +9 -0
- package/packages/core/dist/registry.d.ts.map +1 -1
- package/packages/core/dist/registry.js +32 -2
- package/packages/core/dist/registry.js.map +1 -1
- package/packages/core/dist/secrets/destinations.d.ts +2 -0
- package/packages/core/dist/secrets/destinations.d.ts.map +1 -1
- package/packages/core/dist/secrets/destinations.js +6 -0
- package/packages/core/dist/secrets/destinations.js.map +1 -1
- package/packages/core/dist/testing/accounts.d.ts +12 -0
- package/packages/core/dist/testing/accounts.d.ts.map +1 -0
- package/packages/core/dist/testing/accounts.js +7 -0
- package/packages/core/dist/testing/accounts.js.map +1 -0
- package/packages/core/dist/testing/index.d.ts +1 -0
- package/packages/core/dist/testing/index.d.ts.map +1 -1
- package/packages/core/dist/testing/index.js +1 -0
- package/packages/core/dist/testing/index.js.map +1 -1
- package/packages/core/dist/vault/resolve.d.ts.map +1 -1
- package/packages/core/dist/vault/resolve.js +0 -2
- package/packages/core/dist/vault/resolve.js.map +1 -1
- package/packages/core/migrations/053_drop_legacy_anthropic_env.sql +31 -0
- package/packages/core/package.json +4 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/agents/catalog.d.ts +3 -2
- package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
- package/packages/gateway/dist/agents/catalog.js +3 -2
- package/packages/gateway/dist/agents/catalog.js.map +1 -1
- package/packages/gateway/dist/agents-cli.js +1 -1
- package/packages/gateway/dist/agents-cli.js.map +1 -1
- package/packages/gateway/dist/bootstrap.d.ts +1 -3
- package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
- package/packages/gateway/dist/bootstrap.js +13 -8
- package/packages/gateway/dist/bootstrap.js.map +1 -1
- package/packages/gateway/dist/cli.js +1 -1
- package/packages/gateway/dist/index.d.ts +1 -1
- package/packages/gateway/dist/index.d.ts.map +1 -1
- package/packages/gateway/dist/index.js.map +1 -1
- package/packages/gateway/dist/mlxh.d.ts +44 -0
- package/packages/gateway/dist/mlxh.d.ts.map +1 -0
- package/packages/gateway/dist/mlxh.js +98 -0
- package/packages/gateway/dist/mlxh.js.map +1 -0
- package/packages/gateway/dist/owner-secrets.d.ts +21 -1
- package/packages/gateway/dist/owner-secrets.d.ts.map +1 -1
- package/packages/gateway/dist/owner-secrets.js +96 -2
- package/packages/gateway/dist/owner-secrets.js.map +1 -1
- package/packages/gateway/dist/plugins/live.d.ts +42 -0
- package/packages/gateway/dist/plugins/live.d.ts.map +1 -0
- package/packages/gateway/dist/plugins/live.js +81 -0
- package/packages/gateway/dist/plugins/live.js.map +1 -0
- package/packages/gateway/dist/plugins/stage.d.ts +4 -0
- package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/stage.js +3 -0
- package/packages/gateway/dist/plugins/stage.js.map +1 -1
- package/packages/gateway/dist/plugins/toggle.d.ts +18 -2
- package/packages/gateway/dist/plugins/toggle.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/toggle.js +36 -12
- package/packages/gateway/dist/plugins/toggle.js.map +1 -1
- package/packages/gateway/dist/plugins/update.d.ts +8 -0
- package/packages/gateway/dist/plugins/update.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/update.js +8 -2
- package/packages/gateway/dist/plugins/update.js.map +1 -1
- package/packages/gateway/dist/plugins-cli.d.ts +44 -5
- package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/packages/gateway/dist/plugins-cli.js +177 -20
- package/packages/gateway/dist/plugins-cli.js.map +1 -1
- package/packages/gateway/dist/provider-accounts.d.ts +6 -13
- package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/packages/gateway/dist/provider-accounts.js +76 -16
- package/packages/gateway/dist/provider-accounts.js.map +1 -1
- package/packages/gateway/dist/providers.d.ts +3 -3
- package/packages/gateway/dist/providers.d.ts.map +1 -1
- package/packages/gateway/dist/providers.js +7 -7
- package/packages/gateway/dist/providers.js.map +1 -1
- package/packages/gateway/dist/serve.d.ts.map +1 -1
- package/packages/gateway/dist/serve.js +2 -0
- package/packages/gateway/dist/serve.js.map +1 -1
- package/packages/gateway/dist/surfaces/context-budget.d.ts +1 -1
- package/packages/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/context-budget.js +46 -3
- package/packages/gateway/dist/surfaces/context-budget.js.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.js +2 -1
- package/packages/gateway/dist/surfaces/pending-question.js.map +1 -1
- package/packages/gateway/dist/tips/rules.d.ts +2 -0
- package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
- package/packages/gateway/dist/tips/rules.js +10 -0
- package/packages/gateway/dist/tips/rules.js.map +1 -1
- package/packages/gateway/dist/web/agents.d.ts.map +1 -1
- package/packages/gateway/dist/web/agents.js +5 -1
- package/packages/gateway/dist/web/agents.js.map +1 -1
- package/packages/gateway/dist/web/connections.d.ts +15 -5
- package/packages/gateway/dist/web/connections.d.ts.map +1 -1
- package/packages/gateway/dist/web/connections.js +70 -2
- package/packages/gateway/dist/web/connections.js.map +1 -1
- package/packages/gateway/dist/web/extension.d.ts +6 -0
- package/packages/gateway/dist/web/extension.d.ts.map +1 -1
- package/packages/gateway/dist/web/extension.js +5 -1
- package/packages/gateway/dist/web/extension.js.map +1 -1
- package/packages/gateway/dist/web/folders.d.ts +23 -0
- package/packages/gateway/dist/web/folders.d.ts.map +1 -0
- package/packages/gateway/dist/web/folders.js +100 -0
- package/packages/gateway/dist/web/folders.js.map +1 -0
- package/packages/gateway/dist/web/market.d.ts +129 -0
- package/packages/gateway/dist/web/market.d.ts.map +1 -0
- package/packages/gateway/dist/web/market.js +353 -0
- package/packages/gateway/dist/web/market.js.map +1 -0
- package/packages/gateway/dist/web/onboarding.d.ts +21 -7
- package/packages/gateway/dist/web/onboarding.d.ts.map +1 -1
- package/packages/gateway/dist/web/onboarding.js +59 -9
- package/packages/gateway/dist/web/onboarding.js.map +1 -1
- package/packages/gateway/dist/web/plugins.d.ts +42 -7
- package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
- package/packages/gateway/dist/web/plugins.js +54 -14
- package/packages/gateway/dist/web/plugins.js.map +1 -1
- package/packages/gateway/dist/web/recovery.js +1 -1
- package/packages/gateway/dist/web/recovery.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +100 -3
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/static.d.ts +8 -0
- package/packages/gateway/dist/web/static.d.ts.map +1 -1
- package/packages/gateway/dist/web/static.js +21 -1
- package/packages/gateway/dist/web/static.js.map +1 -1
- package/packages/gateway/dist/web/svg.d.ts +23 -0
- package/packages/gateway/dist/web/svg.d.ts.map +1 -0
- package/packages/gateway/dist/web/svg.js +125 -0
- package/packages/gateway/dist/web/svg.js.map +1 -0
- package/packages/gateway/dist/web/take-on.d.ts +91 -0
- package/packages/gateway/dist/web/take-on.d.ts.map +1 -0
- package/packages/gateway/dist/web/take-on.js +287 -0
- package/packages/gateway/dist/web/take-on.js.map +1 -0
- 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 +29 -3
- package/packages/runtime/dist/anthropic.js.map +1 -1
- package/packages/runtime/dist/provider-models.d.ts +2 -0
- package/packages/runtime/dist/provider-models.d.ts.map +1 -1
- package/packages/runtime/dist/provider-models.js +22 -0
- package/packages/runtime/dist/provider-models.js.map +1 -1
- package/packages/runtime/dist/search.js +2 -2
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +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/mcp/dist/catalog.d.ts +32 -2
- package/packages/tools/mcp/dist/catalog.d.ts.map +1 -1
- package/packages/tools/mcp/dist/catalog.js +41 -7
- package/packages/tools/mcp/dist/catalog.js.map +1 -1
- package/packages/tools/mcp/dist/device.d.ts +53 -0
- package/packages/tools/mcp/dist/device.d.ts.map +1 -0
- package/packages/tools/mcp/dist/device.js +100 -0
- package/packages/tools/mcp/dist/device.js.map +1 -0
- package/packages/tools/mcp/dist/fetch.d.ts +10 -1
- package/packages/tools/mcp/dist/fetch.d.ts.map +1 -1
- package/packages/tools/mcp/dist/fetch.js +7 -1
- package/packages/tools/mcp/dist/fetch.js.map +1 -1
- package/packages/tools/mcp/dist/index.d.ts +5 -3
- package/packages/tools/mcp/dist/index.d.ts.map +1 -1
- package/packages/tools/mcp/dist/index.js +7 -4
- package/packages/tools/mcp/dist/index.js.map +1 -1
- package/packages/tools/mcp/dist/ports.d.ts +31 -0
- package/packages/tools/mcp/dist/ports.d.ts.map +1 -1
- package/packages/tools/mcp/dist/preview.d.ts +16 -0
- package/packages/tools/mcp/dist/preview.d.ts.map +1 -0
- package/packages/tools/mcp/dist/preview.js +52 -0
- package/packages/tools/mcp/dist/preview.js.map +1 -0
- package/packages/tools/mcp/dist/program.d.ts +73 -0
- package/packages/tools/mcp/dist/program.d.ts.map +1 -0
- package/packages/tools/mcp/dist/program.js +306 -0
- package/packages/tools/mcp/dist/program.js.map +1 -0
- package/packages/tools/mcp/dist/service.d.ts +131 -22
- package/packages/tools/mcp/dist/service.d.ts.map +1 -1
- package/packages/tools/mcp/dist/service.js +717 -29
- package/packages/tools/mcp/dist/service.js.map +1 -1
- package/packages/tools/mcp/dist/session.d.ts +13 -1
- package/packages/tools/mcp/dist/session.d.ts.map +1 -1
- package/packages/tools/mcp/dist/session.js +27 -4
- package/packages/tools/mcp/dist/session.js.map +1 -1
- package/packages/tools/mcp/dist/store.d.ts +39 -1
- package/packages/tools/mcp/dist/store.d.ts.map +1 -1
- package/packages/tools/mcp/dist/store.js +24 -0
- package/packages/tools/mcp/dist/store.js.map +1 -1
- package/packages/tools/mcp/dist/testing/fake.d.ts +6 -0
- package/packages/tools/mcp/dist/testing/fake.d.ts.map +1 -1
- package/packages/tools/mcp/dist/testing/fake.js +26 -0
- package/packages/tools/mcp/dist/testing/fake.js.map +1 -1
- package/packages/tools/mcp/migrations/003_token_auth.sql +14 -0
- package/packages/tools/mcp/migrations/004_programs.sql +26 -0
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-DIXokQ4n.css +1 -0
- package/packages/web/dist/assets/index-uqQyuYjR.js +128 -0
- package/packages/web/dist/assets/{lottie_light-e1djomjW.js → lottie_light-j3HICV9o.js} +1 -1
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/manifest.webmanifest +24 -5
- package/packages/web/dist/precache.json +4 -4
- package/packages/web/dist/assets/index-4hpqlMjL.css +0 -1
- package/packages/web/dist/assets/index-B8crjABB.js +0 -125
package/README.md
CHANGED
|
@@ -1,24 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center"><img src="https://raw.githubusercontent.com/withbuddi/buddi/main/docs/images/header.png" alt="buddi, with the Buddi Blob" width="800"></p>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**A small AI team that lives on your computer.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
AI teammates that use tools, work on schedules, remember what matters, and
|
|
6
|
+
ask before doing anything consequential.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
markdown file: a front matter that names the tools it may call, and a body that
|
|
9
|
-
is its persona. Agents get real access: your mail, your files, a browser of
|
|
10
|
-
their own, commands on the machine. They reach you on a dashboard in your
|
|
11
|
-
browser and on Telegram. They also work while you are away: scheduled
|
|
12
|
-
missions, watchers that speak only when something is wrong, reminders they set
|
|
13
|
-
themselves. Anything consequential waits for your approval, as a card you
|
|
14
|
-
approve or reject.
|
|
8
|
+
[withbuddi.com](https://withbuddi.com) · [npm](https://www.npmjs.com/package/@withbuddi/buddi) · [docs](docs/README.md) · [plugins](https://withbuddi.com/plugins)
|
|
15
9
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Secrets live in a vault the agents can use but never see.
|
|
10
|
+
Give each teammate a job. Planner prepares your mornings. Mail Triage watches
|
|
11
|
+
your inbox. Ledger keeps an eye on your money. Add your own for anything
|
|
12
|
+
else.
|
|
20
13
|
|
|
21
|
-
|
|
14
|
+
They use tools, work with your files, browse the web in a browser of their
|
|
15
|
+
own, and keep working on schedules while you're away. **Anything
|
|
16
|
+
consequential stops for your approval**, as a card on the dashboard or on
|
|
17
|
+
your phone.
|
|
18
|
+
|
|
19
|
+
**Everything stays home.** Conversations, files and memory live in a private
|
|
20
|
+
database on your machine. When a teammate uses a remote AI, the context it
|
|
21
|
+
needs for that request goes to the provider and model you chose for that
|
|
22
|
+
teammate. The whole list of what leaves is short enough to print, and it is
|
|
23
|
+
[printed below](#where-your-data-lives-and-what-leaves-the-machine). Your
|
|
24
|
+
passwords live in a vault the team can use but never see.
|
|
25
|
+
|
|
26
|
+
Your first teammate is Buddi, the front desk, and the Buddi Blob is its face.
|
|
27
|
+
Rename it, rewrite its personality, or add others. Under the hood every
|
|
28
|
+
teammate is a markdown file, which the docs and the dashboard call an agent
|
|
29
|
+
where that is the accurate word.
|
|
30
|
+
|
|
31
|
+
<img src="https://raw.githubusercontent.com/withbuddi/buddi/main/docs/images/home.png" alt="The buddi dashboard: a greeting by name, an approval card, the team, what is coming up." width="100%">
|
|
22
32
|
|
|
23
33
|
---
|
|
24
34
|
|
|
@@ -91,24 +101,27 @@ The full install story, including what is not built yet, is
|
|
|
91
101
|
|
|
92
102
|
## The first ten minutes
|
|
93
103
|
|
|
94
|
-
**The wizard.**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
or
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
104
|
+
**The wizard.** Five short chapters, with a map on the left so you always
|
|
105
|
+
know where you are and can go back:
|
|
106
|
+
|
|
107
|
+
1. **Hello**: your name and your clock, taken from the browser.
|
|
108
|
+
2. **A brain**: the AI your team thinks with. Free to start with Ollama Cloud
|
|
109
|
+
in one tap; or your Claude or ChatGPT account; or an API key from
|
|
110
|
+
Anthropic, OpenAI or Google; or Ollama on this computer. buddi tests it
|
|
111
|
+
with one small call before moving on.
|
|
112
|
+
3. **What buddi takes on**: your days (weather and calendars, with Planner's
|
|
113
|
+
morning brief), your mail, your money, voice, your code, pictures. Each
|
|
114
|
+
tile installs its plugin in the background, from withbuddi.com, while you
|
|
115
|
+
answer the rest; nothing runs before you have seen its card.
|
|
116
|
+
4. **Reach me**: your phone through Telegram, a mailbox for Mail Triage, buddi
|
|
117
|
+
as an app and a browser of its own. All optional.
|
|
118
|
+
5. **Your assistant**: a name, a colour for the Blob, and a persona you can
|
|
119
|
+
keep or rewrite.
|
|
120
|
+
|
|
121
|
+
Then your assistant speaks first, in the real chat, already knowing your
|
|
122
|
+
clock, the weather at home and who is on the team, and one card lists what is
|
|
123
|
+
still waiting. Every chapter keeps a "change" link, and a reload resumes where
|
|
124
|
+
you were. [docs/onboarding.md](docs/onboarding.md) is the full script.
|
|
112
125
|
|
|
113
126
|
**The first chat.** A few things to try:
|
|
114
127
|
|
|
@@ -122,23 +135,24 @@ script.
|
|
|
122
135
|
about what it shows.
|
|
123
136
|
- "Every Friday at 6, send me a recap of the week." A mission, on a schedule.
|
|
124
137
|
|
|
125
|
-
**A mailbox.** In Settings →
|
|
126
|
-
|
|
127
|
-
the
|
|
128
|
-
and threaded but nobody reads it. Sending always stops at an approval card
|
|
138
|
+
**A mailbox.** In Settings → Mail, or in chapter 4 of the wizard, add an
|
|
139
|
+
account with its address and an app password. buddi then offers Mail Triage,
|
|
140
|
+
the teammate who reads new mail in the background. Accept it with one click;
|
|
141
|
+
until you do, mail is fetched and threaded but nobody reads it. Sending always stops at an approval card
|
|
129
142
|
that shows the full message. [docs/email.md](docs/email.md) has the rest.
|
|
130
143
|
|
|
131
|
-
**More
|
|
132
|
-
|
|
133
|
-
|
|
144
|
+
**More teammates.** Home and the Agents page offer a starter team: Scout,
|
|
145
|
+
Planner and Keeper, one tap each. For anything else, Agent Father (@father)
|
|
146
|
+
interviews you, proposes the file and the tools it should have, and writes it
|
|
147
|
+
once you approve.
|
|
134
148
|
|
|
135
149
|
---
|
|
136
150
|
|
|
137
151
|
## How it works
|
|
138
152
|
|
|
139
|
-
**
|
|
140
|
-
front matter says which tools
|
|
141
|
-
|
|
153
|
+
**A teammate is a file.** One folder per agent, with an `agent.md` in it. The
|
|
154
|
+
front matter says which tools it may call; nothing else is callable, and no
|
|
155
|
+
conversation can grant more. The body is the persona, in plain
|
|
142
156
|
markdown. The provider and model are a line in the same file, and the
|
|
143
157
|
dashboard's Agents page edits them for you.
|
|
144
158
|
|
|
@@ -159,9 +173,10 @@ talking to. Today is {{today}}.
|
|
|
159
173
|
|
|
160
174
|
**Tools and plugins.** The core has no tools; every capability is a plugin.
|
|
161
175
|
Built in: `system`, `email`, `memory`, `artifacts`, `web`, `browser`, `host`,
|
|
162
|
-
`reminder`, `schedule`, `goal`, `learning` and `canvas`. Installable from
|
|
163
|
-
on the Plugins page
|
|
164
|
-
|
|
176
|
+
`reminder`, `schedule`, `goal`, `learning` and `canvas`. Installable from
|
|
177
|
+
[withbuddi.com/plugins](https://withbuddi.com/plugins), on the Plugins page's
|
|
178
|
+
Browse tab or with `buddi plugins install`: `weather`, `calendar`, `finance`,
|
|
179
|
+
`image`, `speech` and more. Installing a plugin shows everything it brings first: each tool
|
|
165
180
|
and whether it runs without asking, the database schema it will own, what it
|
|
166
181
|
runs on a timer, and the hosts it talks to. Nothing happens until you approve.
|
|
167
182
|
[docs/plugins.md](docs/plugins.md) is the guide to writing one.
|
|
@@ -239,9 +254,10 @@ nightly schedule in Settings → Backup, or with
|
|
|
239
254
|
**What leaves.** Each agent's conversation, including what its tools returned,
|
|
240
255
|
goes to the provider its file names, and nowhere else. A model is never
|
|
241
256
|
switched for you, and delegating to another agent uses that agent's provider.
|
|
242
|
-
Besides that, buddi makes
|
|
243
|
-
the npm registry once a day, which you can turn off in Settings,
|
|
244
|
-
install when you ask for one
|
|
257
|
+
Besides that, buddi makes three kinds of outbound call: a version check against
|
|
258
|
+
the npm registry once a day, which you can turn off in Settings, a plugin
|
|
259
|
+
install when you ask for one, and the plugin list from withbuddi.com, when you
|
|
260
|
+
open Browse. The dashboard loads nothing from the internet.
|
|
245
261
|
There is no telemetry.
|
|
246
262
|
|
|
247
263
|
[docs/operations.md](docs/operations.md) has the details: what an archive
|
package/extension/background.js
CHANGED
|
@@ -1266,6 +1266,7 @@ function handleExternal(message, context, respond) {
|
|
|
1266
1266
|
var DEFAULT_GATEWAY = "http://127.0.0.1:4317";
|
|
1267
1267
|
var GATEWAY_KEY = "gateway";
|
|
1268
1268
|
var MAX_BACKOFF = 3e4;
|
|
1269
|
+
var KNOCK_MS = 3e3;
|
|
1269
1270
|
var SILENCE = 7e4;
|
|
1270
1271
|
function socketUrl(address) {
|
|
1271
1272
|
const parsed = new URL(address);
|
|
@@ -1353,6 +1354,11 @@ async function connect() {
|
|
|
1353
1354
|
protocol.closed(error instanceof Error ? error.message : String(error));
|
|
1354
1355
|
return;
|
|
1355
1356
|
}
|
|
1357
|
+
if (attempt > 0 && !await answering(url)) {
|
|
1358
|
+
protocol.closed("buddi did not answer at this address. Is it running?");
|
|
1359
|
+
schedule();
|
|
1360
|
+
return;
|
|
1361
|
+
}
|
|
1356
1362
|
const opening = new WebSocket(url);
|
|
1357
1363
|
socket = opening;
|
|
1358
1364
|
opening.addEventListener("open", () => {
|
|
@@ -1380,10 +1386,27 @@ async function connect() {
|
|
|
1380
1386
|
clearTimeout(silence);
|
|
1381
1387
|
silence = void 0;
|
|
1382
1388
|
}
|
|
1383
|
-
protocol.closed("
|
|
1389
|
+
protocol.closed("buddi did not answer at this address. Is it running?");
|
|
1384
1390
|
schedule();
|
|
1385
1391
|
});
|
|
1386
1392
|
}
|
|
1393
|
+
async function answering(socket2) {
|
|
1394
|
+
let http;
|
|
1395
|
+
try {
|
|
1396
|
+
http = new URL(socket2);
|
|
1397
|
+
http.protocol = http.protocol === "wss:" ? "https:" : "http:";
|
|
1398
|
+
http.pathname = "/api/version";
|
|
1399
|
+
http.search = "";
|
|
1400
|
+
} catch {
|
|
1401
|
+
return false;
|
|
1402
|
+
}
|
|
1403
|
+
try {
|
|
1404
|
+
await fetch(http.toString(), { method: "GET", cache: "no-store", signal: AbortSignal.timeout(KNOCK_MS) });
|
|
1405
|
+
return true;
|
|
1406
|
+
} catch {
|
|
1407
|
+
return false;
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1387
1410
|
function schedule() {
|
|
1388
1411
|
if (timer) return;
|
|
1389
1412
|
const wait = Math.min(MAX_BACKOFF, 1e3 * 2 ** Math.min(attempt, 5));
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/extension/icons/128.png
CHANGED
|
Binary file
|
package/extension/icons/16.png
CHANGED
|
Binary file
|
package/extension/icons/32.png
CHANGED
|
Binary file
|
package/extension/icons/48.png
CHANGED
|
Binary file
|
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 your buddi work in
|
|
4
|
+
"version": "0.1.0.25",
|
|
5
|
+
"description": "Lets your buddi work in background tabs of this browser. The sites it opens are the ones you ask it for; it opens none on its own.",
|
|
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": [
|
|
@@ -37,5 +37,6 @@
|
|
|
37
37
|
"32": "icons/32.png",
|
|
38
38
|
"48": "icons/48.png",
|
|
39
39
|
"128": "icons/128.png"
|
|
40
|
-
}
|
|
40
|
+
},
|
|
41
|
+
"version_name": "0.1.0-pre.25"
|
|
41
42
|
}
|
package/extension/popup.css
CHANGED
|
@@ -3,86 +3,137 @@
|
|
|
3
3
|
*
|
|
4
4
|
* It cannot import the web bundle: this is a separate origin with no build step
|
|
5
5
|
* in common, so the tokens below are copied from `packages/web/src/tokens.css`
|
|
6
|
-
*
|
|
7
|
-
* in this file writes a colour that is not a token, and the dark
|
|
8
|
-
* same
|
|
6
|
+
* (only the ones this 340px panel uses) and the controls follow `ui.css`.
|
|
7
|
+
* Nothing in this file writes a colour that is not a token, and the dark
|
|
8
|
+
* variant is the same cascade as the dashboard's.
|
|
9
|
+
*
|
|
10
|
+
* The fonts are the dashboard's too, shipped inside the extension: an extension
|
|
11
|
+
* page may load nothing remote.
|
|
9
12
|
*/
|
|
10
13
|
|
|
14
|
+
@font-face {
|
|
15
|
+
font-family: 'DM Sans Variable';
|
|
16
|
+
font-style: normal;
|
|
17
|
+
font-display: swap;
|
|
18
|
+
font-weight: 100 1000;
|
|
19
|
+
src: url('fonts/dm-sans-latin-standard-normal.woff2') format('woff2-variations');
|
|
20
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
21
|
+
}
|
|
22
|
+
@font-face {
|
|
23
|
+
font-family: 'DM Sans Variable';
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-display: swap;
|
|
26
|
+
font-weight: 100 1000;
|
|
27
|
+
src: url('fonts/dm-sans-latin-ext-standard-normal.woff2') format('woff2-variations');
|
|
28
|
+
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
29
|
+
}
|
|
30
|
+
@font-face {
|
|
31
|
+
font-family: 'DM Mono';
|
|
32
|
+
font-style: normal;
|
|
33
|
+
font-display: swap;
|
|
34
|
+
font-weight: 400;
|
|
35
|
+
src: url('fonts/dm-mono-latin-400-normal.woff2') format('woff2');
|
|
36
|
+
}
|
|
37
|
+
@font-face {
|
|
38
|
+
font-family: 'DM Mono';
|
|
39
|
+
font-style: normal;
|
|
40
|
+
font-display: swap;
|
|
41
|
+
font-weight: 500;
|
|
42
|
+
src: url('fonts/dm-mono-latin-500-normal.woff2') format('woff2');
|
|
43
|
+
}
|
|
44
|
+
|
|
11
45
|
:root {
|
|
12
|
-
--font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
|
|
13
|
-
--font-
|
|
14
|
-
--font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
|
|
46
|
+
--font-sans: 'DM Sans Variable', 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
47
|
+
--font-mono: 'DM Mono', ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
|
|
15
48
|
|
|
16
|
-
--text-2xs: 10px;
|
|
17
49
|
--text-xs: 11px;
|
|
18
50
|
--text-sm: 12px;
|
|
19
51
|
--text-md: 13px;
|
|
20
52
|
--text-base: 14px;
|
|
21
|
-
--text-
|
|
53
|
+
--text-lg: 15px;
|
|
54
|
+
--text-xl: 18px;
|
|
55
|
+
--text-3xl: 30px;
|
|
22
56
|
|
|
57
|
+
--leading-tight: 1.3;
|
|
23
58
|
--leading: 1.5;
|
|
24
59
|
--weight-normal: 450;
|
|
25
60
|
--weight-medium: 550;
|
|
26
61
|
--weight-semibold: 650;
|
|
62
|
+
--weight-bold: 750;
|
|
63
|
+
--tracking-title: -0.01em;
|
|
27
64
|
|
|
65
|
+
--space-0: 2px;
|
|
28
66
|
--space-1: 4px;
|
|
29
67
|
--space-2: 8px;
|
|
30
68
|
--space-3: 12px;
|
|
31
69
|
--space-4: 16px;
|
|
70
|
+
--space-5: 20px;
|
|
32
71
|
|
|
33
72
|
--control-h: 32px;
|
|
34
73
|
--control-h-sm: 26px;
|
|
74
|
+
--popup-w: 340px;
|
|
75
|
+
--blob: 28px;
|
|
76
|
+
--pill-h: 20px;
|
|
77
|
+
--dot: 6px;
|
|
35
78
|
|
|
36
|
-
--radius-sm: 4px;
|
|
37
79
|
--radius: 7px;
|
|
80
|
+
--radius-lg: 12px;
|
|
38
81
|
--radius-pill: 999px;
|
|
39
82
|
|
|
40
|
-
--
|
|
83
|
+
--ease: cubic-bezier(0.2, 0.7, 0.2, 1);
|
|
84
|
+
--dur-fast: 120ms;
|
|
85
|
+
--dur-view: 150ms;
|
|
86
|
+
|
|
41
87
|
--surface: #ffffff;
|
|
42
|
-
--surface-sunken: #
|
|
43
|
-
--line: #
|
|
88
|
+
--surface-sunken: #e6eef9;
|
|
89
|
+
--line: #dbe4f1;
|
|
90
|
+
--line-strong: #c3d0e3;
|
|
44
91
|
|
|
45
|
-
--text: #
|
|
46
|
-
--text-muted: #
|
|
92
|
+
--text: #152642;
|
|
93
|
+
--text-muted: #5a6477;
|
|
94
|
+
--text-faint: #8b92a0;
|
|
47
95
|
|
|
48
|
-
--accent: #
|
|
49
|
-
--accent-
|
|
96
|
+
--accent: #2b6fe6;
|
|
97
|
+
--accent-hover: #245fc7;
|
|
98
|
+
--accent-soft: #e7f0fe;
|
|
50
99
|
--accent-contrast: #ffffff;
|
|
51
100
|
|
|
52
101
|
--good: #1f7a46;
|
|
53
102
|
--good-soft: #e3f3e9;
|
|
54
103
|
--warning: #8a5a00;
|
|
55
104
|
--warning-soft: #fbf0d9;
|
|
56
|
-
--critical: #
|
|
57
|
-
--critical-soft: #
|
|
105
|
+
--critical: #c0352a;
|
|
106
|
+
--critical-soft: #ffe9e6;
|
|
58
107
|
|
|
59
|
-
--focus-ring: #
|
|
108
|
+
--focus-ring: #2b6fe6;
|
|
60
109
|
|
|
61
110
|
color-scheme: light;
|
|
62
111
|
}
|
|
63
112
|
|
|
64
113
|
@media (prefers-color-scheme: dark) {
|
|
65
114
|
:root:not([data-theme='light']) {
|
|
66
|
-
--
|
|
67
|
-
--surface: #
|
|
68
|
-
--
|
|
69
|
-
--line: #
|
|
115
|
+
--surface: #131e31;
|
|
116
|
+
--surface-sunken: #0a1322;
|
|
117
|
+
--line: #22324c;
|
|
118
|
+
--line-strong: #37465f;
|
|
70
119
|
|
|
71
|
-
--text: #
|
|
72
|
-
--text-muted: #
|
|
120
|
+
--text: #ecf1f8;
|
|
121
|
+
--text-muted: #a3adbe;
|
|
122
|
+
--text-faint: #717c8f;
|
|
73
123
|
|
|
74
|
-
--accent: #
|
|
75
|
-
--accent-
|
|
76
|
-
--accent-
|
|
124
|
+
--accent: #7db3ff;
|
|
125
|
+
--accent-hover: #9ac4ff;
|
|
126
|
+
--accent-soft: #16294a;
|
|
127
|
+
--accent-contrast: #0b1426;
|
|
77
128
|
|
|
78
129
|
--good: #5fc98a;
|
|
79
|
-
--good-soft: #
|
|
80
|
-
--warning: #
|
|
130
|
+
--good-soft: #13301f;
|
|
131
|
+
--warning: #e8b454;
|
|
81
132
|
--warning-soft: #33280f;
|
|
82
|
-
--critical: #
|
|
83
|
-
--critical-soft: #
|
|
133
|
+
--critical: #ff8e82;
|
|
134
|
+
--critical-soft: #3a1d1c;
|
|
84
135
|
|
|
85
|
-
--focus-ring: #
|
|
136
|
+
--focus-ring: #9ac4ff;
|
|
86
137
|
|
|
87
138
|
color-scheme: dark;
|
|
88
139
|
}
|
|
@@ -90,18 +141,25 @@
|
|
|
90
141
|
|
|
91
142
|
* { box-sizing: border-box; }
|
|
92
143
|
|
|
144
|
+
/* `hidden` means hidden, whatever display a rule below gives the element. */
|
|
145
|
+
[hidden] { display: none !important; }
|
|
146
|
+
|
|
147
|
+
html, body { margin: 0; padding: 0; }
|
|
148
|
+
|
|
93
149
|
body {
|
|
94
|
-
width:
|
|
95
|
-
margin: 0;
|
|
150
|
+
width: var(--popup-w);
|
|
96
151
|
background: var(--surface);
|
|
97
152
|
color: var(--text);
|
|
98
153
|
font-family: var(--font-sans);
|
|
99
154
|
font-size: var(--text-base);
|
|
100
155
|
font-weight: var(--weight-normal);
|
|
101
156
|
line-height: var(--leading);
|
|
157
|
+
-webkit-font-smoothing: antialiased;
|
|
102
158
|
}
|
|
103
159
|
|
|
104
|
-
|
|
160
|
+
p { margin: 0; }
|
|
161
|
+
|
|
162
|
+
/* ---- the head: the Blob, the name, the one word of state ---- */
|
|
105
163
|
|
|
106
164
|
.head {
|
|
107
165
|
display: flex;
|
|
@@ -111,50 +169,57 @@ body {
|
|
|
111
169
|
border-bottom: 1px solid var(--line);
|
|
112
170
|
}
|
|
113
171
|
|
|
114
|
-
.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
border-radius: var(--radius-sm);
|
|
121
|
-
background: var(--accent);
|
|
122
|
-
color: var(--accent-contrast);
|
|
123
|
-
font-family: var(--font-display);
|
|
124
|
-
font-size: var(--text-base);
|
|
125
|
-
font-weight: var(--weight-semibold);
|
|
172
|
+
.blob { width: var(--blob); height: var(--blob); flex: none; user-select: none; }
|
|
173
|
+
|
|
174
|
+
.wordmark {
|
|
175
|
+
font-size: var(--text-xl);
|
|
176
|
+
font-weight: var(--weight-bold);
|
|
177
|
+
letter-spacing: var(--tracking-title);
|
|
126
178
|
line-height: 1;
|
|
127
|
-
user-select: none;
|
|
128
179
|
}
|
|
129
180
|
|
|
130
|
-
.
|
|
131
|
-
|
|
132
|
-
|
|
181
|
+
.pill {
|
|
182
|
+
display: inline-flex;
|
|
183
|
+
align-items: center;
|
|
184
|
+
gap: var(--space-1);
|
|
185
|
+
height: var(--pill-h);
|
|
133
186
|
margin-left: auto;
|
|
134
|
-
padding:
|
|
187
|
+
padding: 0 var(--space-2);
|
|
188
|
+
border: 1px solid var(--line);
|
|
135
189
|
border-radius: var(--radius-pill);
|
|
190
|
+
background: var(--surface);
|
|
191
|
+
color: var(--text-muted);
|
|
136
192
|
font-size: var(--text-xs);
|
|
137
193
|
font-weight: var(--weight-medium);
|
|
138
|
-
|
|
139
|
-
color: var(--text-muted);
|
|
194
|
+
white-space: nowrap;
|
|
140
195
|
}
|
|
141
|
-
.
|
|
142
|
-
.
|
|
143
|
-
.
|
|
196
|
+
.pill::before { content: ''; width: var(--dot); height: var(--dot); border-radius: 50%; background: currentColor; }
|
|
197
|
+
.pill[data-tone='good'] { color: var(--good); background: var(--good-soft); border-color: transparent; }
|
|
198
|
+
.pill[data-tone='waiting'] { color: var(--warning); background: var(--warning-soft); border-color: transparent; }
|
|
199
|
+
.pill[data-tone='bad'] { color: var(--critical); background: var(--critical-soft); border-color: transparent; }
|
|
144
200
|
|
|
145
|
-
/* ----
|
|
201
|
+
/* ---- one view at a time, faded in ---- */
|
|
146
202
|
|
|
147
|
-
.
|
|
203
|
+
.view {
|
|
148
204
|
display: flex;
|
|
149
205
|
flex-direction: column;
|
|
150
|
-
gap: var(--space-
|
|
151
|
-
padding: var(--space-
|
|
152
|
-
|
|
206
|
+
gap: var(--space-3);
|
|
207
|
+
padding: var(--space-4);
|
|
208
|
+
animation: view-in var(--dur-view) var(--ease);
|
|
153
209
|
}
|
|
154
|
-
|
|
210
|
+
|
|
211
|
+
@keyframes view-in { from { opacity: 0; } to { opacity: 1; } }
|
|
212
|
+
|
|
213
|
+
@media (prefers-reduced-motion: reduce) {
|
|
214
|
+
.view { animation: none; }
|
|
215
|
+
.btn { transition: none; }
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.field-group { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
155
219
|
|
|
156
220
|
.label { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-muted); }
|
|
157
|
-
.hint {
|
|
221
|
+
.hint { font-size: var(--text-sm); color: var(--text-muted); }
|
|
222
|
+
.quiet { font-size: var(--text-md); color: var(--text-muted); }
|
|
158
223
|
|
|
159
224
|
.field {
|
|
160
225
|
height: var(--control-h);
|
|
@@ -167,34 +232,87 @@ body {
|
|
|
167
232
|
font-size: var(--text-md);
|
|
168
233
|
}
|
|
169
234
|
.field:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
|
|
235
|
+
.field:disabled { color: var(--text-muted); }
|
|
236
|
+
|
|
237
|
+
.notice {
|
|
238
|
+
padding: var(--space-2) var(--space-3);
|
|
239
|
+
border-radius: var(--radius-lg);
|
|
240
|
+
font-size: var(--text-md);
|
|
241
|
+
}
|
|
242
|
+
.notice[data-tone='critical'] { background: var(--critical-soft); color: var(--critical); }
|
|
170
243
|
|
|
171
244
|
/* The one that acts sits on the right. */
|
|
172
|
-
.actions { display: flex; justify-content: flex-end; }
|
|
173
|
-
.actions-
|
|
245
|
+
.actions { display: flex; align-items: center; justify-content: flex-end; gap: var(--space-2); }
|
|
246
|
+
.actions-split { justify-content: space-between; }
|
|
174
247
|
|
|
175
|
-
.
|
|
176
|
-
|
|
248
|
+
.btn {
|
|
249
|
+
display: inline-flex;
|
|
250
|
+
align-items: center;
|
|
251
|
+
justify-content: center;
|
|
252
|
+
height: var(--control-h);
|
|
177
253
|
padding: 0 var(--space-3);
|
|
178
|
-
border: 1px solid
|
|
254
|
+
border: 1px solid var(--line);
|
|
179
255
|
border-radius: var(--radius);
|
|
180
|
-
background: var(--
|
|
181
|
-
color: var(--
|
|
256
|
+
background: var(--surface);
|
|
257
|
+
color: var(--text);
|
|
182
258
|
font-family: inherit;
|
|
183
259
|
font-size: var(--text-md);
|
|
184
260
|
font-weight: var(--weight-medium);
|
|
261
|
+
line-height: 1;
|
|
262
|
+
white-space: nowrap;
|
|
263
|
+
cursor: pointer;
|
|
264
|
+
transition: background-color var(--dur-fast) ease, border-color var(--dur-fast) ease, transform var(--dur-fast) var(--ease);
|
|
265
|
+
}
|
|
266
|
+
.btn:hover:not(:disabled) { border-color: var(--line-strong); background: var(--surface-sunken); }
|
|
267
|
+
.btn:active:not(:disabled) { transform: translateY(1px); }
|
|
268
|
+
.btn:disabled { opacity: 0.45; cursor: default; }
|
|
269
|
+
.btn:focus-visible, .link:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
|
|
270
|
+
.btn[data-size='sm'] { height: var(--control-h-sm); padding: 0 var(--space-2); font-size: var(--text-sm); }
|
|
271
|
+
.btn[data-variant='accent'] { background: var(--accent); border-color: var(--accent); color: var(--accent-contrast); }
|
|
272
|
+
.btn[data-variant='accent']:hover:not(:disabled) { background: var(--accent-hover); border-color: var(--accent-hover); }
|
|
273
|
+
|
|
274
|
+
.link {
|
|
275
|
+
padding: 0;
|
|
276
|
+
border: 0;
|
|
277
|
+
background: none;
|
|
278
|
+
color: var(--text-muted);
|
|
279
|
+
font-family: inherit;
|
|
280
|
+
font-size: var(--text-sm);
|
|
185
281
|
cursor: pointer;
|
|
282
|
+
text-underline-offset: 2px;
|
|
186
283
|
}
|
|
187
|
-
.
|
|
188
|
-
|
|
284
|
+
.link:hover { color: var(--text); text-decoration: underline; }
|
|
285
|
+
|
|
286
|
+
/* ---- the code: large, tabular, grouped in threes ---- */
|
|
189
287
|
|
|
190
|
-
.code-
|
|
191
|
-
|
|
288
|
+
.code-tile {
|
|
289
|
+
display: flex;
|
|
290
|
+
align-items: center;
|
|
291
|
+
gap: var(--space-3);
|
|
292
|
+
padding: var(--space-3) var(--space-4);
|
|
293
|
+
border-radius: var(--radius-lg);
|
|
294
|
+
background: var(--surface-sunken);
|
|
295
|
+
}
|
|
192
296
|
|
|
193
297
|
.code {
|
|
194
|
-
|
|
298
|
+
flex: 1;
|
|
195
299
|
font-family: var(--font-mono);
|
|
196
|
-
font-size: var(--text-
|
|
197
|
-
font-weight:
|
|
198
|
-
|
|
199
|
-
|
|
300
|
+
font-size: var(--text-3xl);
|
|
301
|
+
font-weight: 500;
|
|
302
|
+
font-variant-numeric: tabular-nums;
|
|
303
|
+
letter-spacing: 0.02em;
|
|
304
|
+
line-height: var(--leading-tight);
|
|
305
|
+
color: var(--text);
|
|
306
|
+
white-space: pre;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/* ---- connected ---- */
|
|
310
|
+
|
|
311
|
+
.facts { display: flex; flex-direction: column; gap: var(--space-0); }
|
|
312
|
+
.fact { font-size: var(--text-base); font-weight: var(--weight-medium); overflow-wrap: anywhere; }
|
|
313
|
+
|
|
314
|
+
.foot {
|
|
315
|
+
margin: 0 calc(var(--space-4) * -1) calc(var(--space-4) * -1);
|
|
316
|
+
padding: var(--space-2) var(--space-4);
|
|
317
|
+
border-top: 1px solid var(--line);
|
|
200
318
|
}
|