@withbuddi/buddi 0.1.0-pre.35 → 0.1.0-pre.37
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/examples/agents/concierge/agent.md +5 -0
- package/examples/skills/letterhead/SKILL.md +21 -0
- package/examples/skills/letterhead/assets/letterhead.md +16 -0
- package/examples/skills/letterhead/assets/logo.svg +6 -0
- package/extension/manifest.json +2 -2
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.js +44 -3
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts +37 -0
- package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.js +37 -0
- package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/actions/approvals.d.ts +7 -0
- package/node_modules/@buddi/core/dist/actions/approvals.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/actions/approvals.js +11 -1
- package/node_modules/@buddi/core/dist/actions/approvals.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.js +2 -2
- package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.d.ts +60 -1
- package/node_modules/@buddi/core/dist/agents/skills.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.js +157 -17
- package/node_modules/@buddi/core/dist/agents/skills.js.map +1 -1
- package/node_modules/@buddi/core/dist/day-month.d.ts +52 -0
- package/node_modules/@buddi/core/dist/day-month.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/day-month.js +101 -0
- package/node_modules/@buddi/core/dist/day-month.js.map +1 -0
- package/node_modules/@buddi/core/dist/host/build.d.ts +25 -2
- package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/host/build.js +169 -8
- package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/http.d.ts +97 -0
- package/node_modules/@buddi/core/dist/host/http.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/host/http.js +321 -26
- package/node_modules/@buddi/core/dist/host/http.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/types.d.ts +114 -4
- package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.d.ts +3 -0
- package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.js +3 -0
- package/node_modules/@buddi/core/dist/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/notify.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/notify.js +10 -6
- package/node_modules/@buddi/core/dist/notifications/notify.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/store.js +2 -1
- package/node_modules/@buddi/core/dist/notifications/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/types.d.ts +8 -0
- package/node_modules/@buddi/core/dist/notifications/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/types.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 +28 -5
- package/node_modules/@buddi/core/dist/onboarding/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts +10 -0
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +449 -20
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +223 -8
- package/node_modules/@buddi/core/dist/pages.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/assets.d.ts +52 -0
- package/node_modules/@buddi/core/dist/plugin/assets.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/assets.js +59 -0
- package/node_modules/@buddi/core/dist/plugin/assets.js.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/index.d.ts +10 -4
- package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.js +4 -1
- package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/requires.d.ts +3 -1
- package/node_modules/@buddi/core/dist/plugin/requires.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/requires.js +5 -3
- package/node_modules/@buddi/core/dist/plugin/requires.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts +78 -0
- package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/sign-in.js +54 -0
- package/node_modules/@buddi/core/dist/plugin/sign-in.js.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/uses.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/uses.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/uses.js +2 -0
- package/node_modules/@buddi/core/dist/plugin/uses.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
- package/node_modules/@buddi/core/dist/plugin-assets.d.ts +21 -0
- package/node_modules/@buddi/core/dist/plugin-assets.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/plugin-assets.js +140 -0
- package/node_modules/@buddi/core/dist/plugin-assets.js.map +1 -0
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts +7 -0
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.js +15 -0
- package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/core/dist/questions/types.d.ts +1 -1
- package/node_modules/@buddi/core/dist/questions/types.js +1 -1
- package/node_modules/@buddi/core/dist/queue/jobs.d.ts +57 -2
- package/node_modules/@buddi/core/dist/queue/jobs.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/jobs.js +114 -0
- package/node_modules/@buddi/core/dist/queue/jobs.js.map +1 -1
- package/node_modules/@buddi/core/dist/queue/worker.d.ts +24 -2
- package/node_modules/@buddi/core/dist/queue/worker.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/worker.js +66 -11
- package/node_modules/@buddi/core/dist/queue/worker.js.map +1 -1
- package/node_modules/@buddi/core/dist/registry.d.ts +17 -0
- package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/registry.js +48 -4
- package/node_modules/@buddi/core/dist/registry.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +14 -0
- package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/missions.js +17 -4
- package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/types.d.ts +13 -0
- package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/types.js +14 -0
- package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/scrub.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/scrub.js +15 -0
- package/node_modules/@buddi/core/dist/secrets/scrub.js.map +1 -1
- package/node_modules/@buddi/core/dist/surfaces.d.ts +10 -0
- package/node_modules/@buddi/core/dist/surfaces.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/surfaces.js +11 -0
- package/node_modules/@buddi/core/dist/surfaces.js.map +1 -1
- package/node_modules/@buddi/core/dist/tools.d.ts +72 -1
- package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/tools.js +38 -0
- package/node_modules/@buddi/core/dist/tools.js.map +1 -1
- package/node_modules/@buddi/core/dist/views.d.ts +29 -12
- package/node_modules/@buddi/core/dist/views.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/views.js +1 -0
- package/node_modules/@buddi/core/dist/views.js.map +1 -1
- package/node_modules/@buddi/core/dist/widget-settings.d.ts +2 -1
- package/node_modules/@buddi/core/dist/widget-settings.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/widget-settings.js +8 -2
- package/node_modules/@buddi/core/dist/widget-settings.js.map +1 -1
- package/node_modules/@buddi/core/dist/widgets.d.ts +46 -3
- package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/widgets.js +68 -5
- package/node_modules/@buddi/core/dist/widgets.js.map +1 -1
- package/node_modules/@buddi/core/migrations/073_mission_report.sql +15 -0
- package/node_modules/@buddi/core/migrations/074_owner_identity.sql +14 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalog.js +3 -3
- package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +76 -0
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +29 -5
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-text.d.ts +19 -0
- package/node_modules/@buddi/gateway/dist/agents/owner-text.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/owner-text.js +44 -0
- package/node_modules/@buddi/gateway/dist/agents/owner-text.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +36 -2
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +68 -3
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +264 -32
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +11 -4
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.js +15 -0
- package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js +7 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.d.ts +33 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.js +168 -3
- package/node_modules/@buddi/gateway/dist/evals/golden.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts +2 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.js +2 -1
- package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/agent-run.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/agent-run.js +2 -0
- package/node_modules/@buddi/gateway/dist/missions/agent-run.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/dates.d.ts +98 -0
- package/node_modules/@buddi/gateway/dist/missions/dates.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions/dates.js +252 -0
- package/node_modules/@buddi/gateway/dist/missions/dates.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/defaults.js +2 -0
- package/node_modules/@buddi/gateway/dist/missions/defaults.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +25 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js +80 -8
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/report.d.ts +25 -2
- package/node_modules/@buddi/gateway/dist/missions/report.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/report.js +71 -11
- package/node_modules/@buddi/gateway/dist/missions/report.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/ollama-local.d.ts +90 -0
- package/node_modules/@buddi/gateway/dist/ollama-local.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/ollama-local.js +201 -0
- package/node_modules/@buddi/gateway/dist/ollama-local.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/owner-notify.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/owner-notify.js +7 -3
- package/node_modules/@buddi/gateway/dist/owner-notify.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/asset-image-worker.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/plugins/asset-image-worker.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/asset-image-worker.js +18 -0
- package/node_modules/@buddi/gateway/dist/plugins/asset-image-worker.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/asset-image.d.ts +31 -0
- package/node_modules/@buddi/gateway/dist/plugins/asset-image.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/asset-image.js +332 -0
- package/node_modules/@buddi/gateway/dist/plugins/asset-image.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/load.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/load.js +14 -1
- package/node_modules/@buddi/gateway/dist/plugins/load.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/stage.js +5 -0
- package/node_modules/@buddi/gateway/dist/plugins/stage.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/uninstall.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/uninstall.js +8 -0
- package/node_modules/@buddi/gateway/dist/plugins/uninstall.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +8 -0
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.js +22 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.js +50 -5
- package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js +2 -2
- package/node_modules/@buddi/gateway/dist/system-context.d.ts +21 -1
- package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/system-context.js +76 -2
- package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/approvals.js +4 -2
- package/node_modules/@buddi/gateway/dist/telegram/approvals.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts +12 -0
- package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.js +49 -2
- package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/html.d.ts +34 -0
- package/node_modules/@buddi/gateway/dist/telegram/html.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/html.js +263 -0
- package/node_modules/@buddi/gateway/dist/telegram/html.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/notify.js +25 -3
- package/node_modules/@buddi/gateway/dist/telegram/notify.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/tips/facts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.js +4 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.js.map +1 -1
- 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/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +80 -11
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-scan.js +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-scan.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/catalogue.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/catalogue.js +7 -4
- package/node_modules/@buddi/gateway/dist/web/catalogue.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +9 -0
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/composer.d.ts +45 -0
- package/node_modules/@buddi/gateway/dist/web/composer.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/composer.js +85 -0
- package/node_modules/@buddi/gateway/dist/web/composer.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts +12 -0
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js +11 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.js +33 -2
- package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/market.d.ts +20 -1
- package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/market.js +41 -1
- package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/people.d.ts +44 -0
- package/node_modules/@buddi/gateway/dist/web/people.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/people.js +114 -0
- package/node_modules/@buddi/gateway/dist/web/people.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/server.d.ts +4 -0
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +171 -13
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts +101 -0
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.js +439 -0
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/skills.d.ts +57 -1
- package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/skills.js +171 -9
- package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/widgets.js +2 -2
- package/node_modules/@buddi/gateway/dist/web/widgets.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts +31 -0
- package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/zip-read.js +125 -0
- package/node_modules/@buddi/gateway/dist/web/zip-read.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/index.d.ts +1 -0
- package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/index.js +1 -0
- package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.js +11 -1
- package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts +12 -0
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.js +397 -0
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.js.map +1 -0
- package/node_modules/@buddi/runtime/dist/transport.d.ts +1 -1
- package/node_modules/@buddi/runtime/dist/transport.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/transport.js +6 -0
- package/node_modules/@buddi/runtime/dist/transport.js.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/write.d.ts.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/write.js +1 -0
- package/node_modules/@buddi/tool-artifacts/dist/tools/write.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/computer.d.ts +13 -0
- package/node_modules/@buddi/tool-browser/dist/computer.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/computer.js +22 -2
- package/node_modules/@buddi/tool-browser/dist/computer.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts +4 -0
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js +8 -3
- package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.d.ts +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.js +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/native/buddi-computer +0 -0
- package/node_modules/@buddi/tool-browser/dist/service.d.ts +5 -0
- package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/widgets.js +2 -1
- package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-host/dist/index.d.ts +2 -1
- package/node_modules/@buddi/tool-host/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-host/dist/index.js +3 -2
- package/node_modules/@buddi/tool-host/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/process.d.ts +4 -0
- package/node_modules/@buddi/tool-host/dist/process.d.ts.map +1 -1
- package/node_modules/@buddi/tool-host/dist/process.js +4 -2
- package/node_modules/@buddi/tool-host/dist/process.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/service.d.ts +66 -17
- package/node_modules/@buddi/tool-host/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-host/dist/service.js +172 -9
- package/node_modules/@buddi/tool-host/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/skill-run.d.ts +55 -0
- package/node_modules/@buddi/tool-host/dist/skill-run.d.ts.map +1 -0
- package/node_modules/@buddi/tool-host/dist/skill-run.js +132 -0
- package/node_modules/@buddi/tool-host/dist/skill-run.js.map +1 -0
- 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-memory/dist/index.d.ts +1 -0
- package/node_modules/@buddi/tool-memory/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-memory/dist/index.js +7 -2
- package/node_modules/@buddi/tool-memory/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-memory/dist/people.d.ts +218 -0
- package/node_modules/@buddi/tool-memory/dist/people.d.ts.map +1 -0
- package/node_modules/@buddi/tool-memory/dist/people.js +582 -0
- package/node_modules/@buddi/tool-memory/dist/people.js.map +1 -0
- package/node_modules/@buddi/tool-memory/dist/preamble.d.ts +4 -1
- package/node_modules/@buddi/tool-memory/dist/preamble.d.ts.map +1 -1
- package/node_modules/@buddi/tool-memory/dist/preamble.js +25 -7
- package/node_modules/@buddi/tool-memory/dist/preamble.js.map +1 -1
- package/node_modules/@buddi/tool-memory/migrations/002_people.sql +40 -0
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/imapflow/CHANGELOG.md +8 -0
- package/node_modules/imapflow/dist/cjs/commands/append.js +27 -3
- package/node_modules/imapflow/dist/cjs/commands/store.js +31 -6
- package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/imap-flow.js +1 -1
- 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/esm/commands/append.js +27 -3
- package/node_modules/imapflow/dist/esm/commands/store.js +31 -6
- package/node_modules/imapflow/dist/esm/imap-flow.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/imap-flow.js +1 -1
- 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/package.json +4 -4
- package/node_modules/pino/CONTRIBUTING.md +5 -1
- package/node_modules/pino/LICENSE +1 -1
- package/node_modules/pino/README.md +1 -1
- package/node_modules/pino/SECURITY.md +18 -2
- package/node_modules/pino/browser.js +68 -8
- package/node_modules/pino/docs/api.md +75 -4
- package/node_modules/pino/docs/asynchronous.md +18 -3
- package/node_modules/pino/docs/browser.md +63 -0
- package/node_modules/pino/docs/child-loggers.md +22 -1
- package/node_modules/pino/docs/ecosystem.md +1 -0
- package/node_modules/pino/docs/help.md +11 -3
- package/node_modules/pino/docs/lts.md +29 -0
- package/node_modules/pino/docs/pretty.md +3 -0
- package/node_modules/pino/docs/redaction.md +3 -8
- package/node_modules/pino/docs/transports.md +71 -0
- package/node_modules/pino/docs/web.md +11 -14
- package/node_modules/pino/eslint.config.js +15 -7
- package/node_modules/pino/lib/caller.js +10 -0
- package/node_modules/pino/lib/meta.js +1 -1
- package/node_modules/pino/lib/multistream.js +15 -7
- package/node_modules/pino/lib/redaction.js +8 -3
- package/node_modules/pino/lib/symbols.js +3 -1
- package/node_modules/pino/lib/tools.js +2 -2
- package/node_modules/pino/lib/transport.js +14 -1
- package/node_modules/pino/lib/worker.js +4 -1
- package/node_modules/pino/package.json +14 -22
- package/node_modules/pino/pino.d.ts +709 -736
- package/node_modules/pino/pino.js +27 -2
- package/node_modules/pino/test/basic.test.js +66 -0
- package/node_modules/pino/test/browser-bindings.test.js +114 -0
- package/node_modules/pino/test/browser-redaction.test.js +264 -0
- package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
- package/node_modules/pino/test/caller.test.js +20 -0
- package/node_modules/pino/test/escaping.test.js +17 -0
- package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
- package/node_modules/pino/test/fixtures/ts/transpile.cjs +3 -3
- package/node_modules/pino/test/helper.js +6 -2
- package/node_modules/pino/test/multistream.test.js +64 -0
- package/node_modules/pino/test/redact.test.js +30 -0
- package/node_modules/pino/test/smoke.js +59 -0
- package/node_modules/pino/test/transport/core.test.js +85 -0
- package/node_modules/pino/test/transport/sync-false.test.js +12 -0
- package/node_modules/pino/test/transport/uses-pino-config.test.js +4 -4
- package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
- package/node_modules/pino/test/types/pino-import.tst.js +73 -0
- package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
- package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
- package/node_modules/pino/test/types/{pino-transport.test-d.ts → pino-transport.tst.ts} +85 -70
- package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
- package/node_modules/pino/test/types/pino.ts +14 -7
- package/node_modules/pino/test/types/{pino.test-d.ts → pino.tst.ts} +135 -137
- package/node_modules/pino/test/types/tsconfig.json +10 -0
- package/node_modules/pino/tsconfig.json +6 -6
- package/node_modules/real-require/README.md +6 -6
- package/node_modules/real-require/package.json +10 -21
- package/node_modules/real-require/src/index.js +2 -2
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
- package/packages/cli/dist/doctor-probes.js +44 -3
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/doctor.d.ts +37 -0
- package/packages/cli/dist/doctor.d.ts.map +1 -1
- package/packages/cli/dist/doctor.js +37 -0
- package/packages/cli/dist/doctor.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/actions/approvals.d.ts +7 -0
- package/packages/core/dist/actions/approvals.d.ts.map +1 -1
- package/packages/core/dist/actions/approvals.js +11 -1
- package/packages/core/dist/actions/approvals.js.map +1 -1
- package/packages/core/dist/agents/catalog.d.ts.map +1 -1
- package/packages/core/dist/agents/catalog.js +2 -2
- package/packages/core/dist/agents/catalog.js.map +1 -1
- package/packages/core/dist/agents/skills.d.ts +60 -1
- package/packages/core/dist/agents/skills.d.ts.map +1 -1
- package/packages/core/dist/agents/skills.js +157 -17
- package/packages/core/dist/agents/skills.js.map +1 -1
- package/packages/core/dist/day-month.d.ts +52 -0
- package/packages/core/dist/day-month.d.ts.map +1 -0
- package/packages/core/dist/day-month.js +101 -0
- package/packages/core/dist/day-month.js.map +1 -0
- package/packages/core/dist/host/build.d.ts +25 -2
- package/packages/core/dist/host/build.d.ts.map +1 -1
- package/packages/core/dist/host/build.js +169 -8
- package/packages/core/dist/host/build.js.map +1 -1
- package/packages/core/dist/host/http.d.ts +97 -0
- package/packages/core/dist/host/http.d.ts.map +1 -1
- package/packages/core/dist/host/http.js +321 -26
- package/packages/core/dist/host/http.js.map +1 -1
- package/packages/core/dist/host/types.d.ts +114 -4
- package/packages/core/dist/host/types.d.ts.map +1 -1
- package/packages/core/dist/index.d.ts +3 -0
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +3 -0
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/notifications/notify.d.ts.map +1 -1
- package/packages/core/dist/notifications/notify.js +10 -6
- package/packages/core/dist/notifications/notify.js.map +1 -1
- package/packages/core/dist/notifications/store.d.ts.map +1 -1
- package/packages/core/dist/notifications/store.js +2 -1
- package/packages/core/dist/notifications/store.js.map +1 -1
- package/packages/core/dist/notifications/types.d.ts +8 -0
- package/packages/core/dist/notifications/types.d.ts.map +1 -1
- package/packages/core/dist/notifications/types.js.map +1 -1
- package/packages/core/dist/onboarding/store.d.ts.map +1 -1
- package/packages/core/dist/onboarding/store.js +28 -5
- package/packages/core/dist/onboarding/store.js.map +1 -1
- package/packages/core/dist/onboarding/types.d.ts +10 -0
- package/packages/core/dist/onboarding/types.d.ts.map +1 -1
- package/packages/core/dist/onboarding/types.js.map +1 -1
- package/packages/core/dist/pages.d.ts +449 -20
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +223 -8
- package/packages/core/dist/pages.js.map +1 -1
- package/packages/core/dist/plugin/assets.d.ts +52 -0
- package/packages/core/dist/plugin/assets.d.ts.map +1 -0
- package/packages/core/dist/plugin/assets.js +59 -0
- package/packages/core/dist/plugin/assets.js.map +1 -0
- package/packages/core/dist/plugin/index.d.ts +10 -4
- package/packages/core/dist/plugin/index.d.ts.map +1 -1
- package/packages/core/dist/plugin/index.js +4 -1
- package/packages/core/dist/plugin/index.js.map +1 -1
- package/packages/core/dist/plugin/requires.d.ts +3 -1
- package/packages/core/dist/plugin/requires.d.ts.map +1 -1
- package/packages/core/dist/plugin/requires.js +5 -3
- package/packages/core/dist/plugin/requires.js.map +1 -1
- package/packages/core/dist/plugin/sign-in.d.ts +78 -0
- package/packages/core/dist/plugin/sign-in.d.ts.map +1 -0
- package/packages/core/dist/plugin/sign-in.js +54 -0
- package/packages/core/dist/plugin/sign-in.js.map +1 -0
- package/packages/core/dist/plugin/uses.d.ts +1 -1
- package/packages/core/dist/plugin/uses.d.ts.map +1 -1
- package/packages/core/dist/plugin/uses.js +2 -0
- package/packages/core/dist/plugin/uses.js.map +1 -1
- package/packages/core/dist/plugin/version.d.ts +1 -1
- package/packages/core/dist/plugin/version.js +1 -1
- package/packages/core/dist/plugin-assets.d.ts +21 -0
- package/packages/core/dist/plugin-assets.d.ts.map +1 -0
- package/packages/core/dist/plugin-assets.js +140 -0
- package/packages/core/dist/plugin-assets.js.map +1 -0
- package/packages/core/dist/provider-accounts.d.ts +7 -0
- package/packages/core/dist/provider-accounts.d.ts.map +1 -1
- package/packages/core/dist/provider-accounts.js +15 -0
- package/packages/core/dist/provider-accounts.js.map +1 -1
- package/packages/core/dist/questions/types.d.ts +1 -1
- package/packages/core/dist/questions/types.js +1 -1
- package/packages/core/dist/queue/jobs.d.ts +57 -2
- package/packages/core/dist/queue/jobs.d.ts.map +1 -1
- package/packages/core/dist/queue/jobs.js +114 -0
- package/packages/core/dist/queue/jobs.js.map +1 -1
- package/packages/core/dist/queue/worker.d.ts +24 -2
- package/packages/core/dist/queue/worker.d.ts.map +1 -1
- package/packages/core/dist/queue/worker.js +66 -11
- package/packages/core/dist/queue/worker.js.map +1 -1
- package/packages/core/dist/registry.d.ts +17 -0
- package/packages/core/dist/registry.d.ts.map +1 -1
- package/packages/core/dist/registry.js +48 -4
- package/packages/core/dist/registry.js.map +1 -1
- package/packages/core/dist/scheduler/missions.d.ts +14 -0
- package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
- package/packages/core/dist/scheduler/missions.js +17 -4
- package/packages/core/dist/scheduler/missions.js.map +1 -1
- package/packages/core/dist/scheduler/types.d.ts +13 -0
- package/packages/core/dist/scheduler/types.d.ts.map +1 -1
- package/packages/core/dist/scheduler/types.js +14 -0
- package/packages/core/dist/scheduler/types.js.map +1 -1
- package/packages/core/dist/secrets/scrub.d.ts.map +1 -1
- package/packages/core/dist/secrets/scrub.js +15 -0
- package/packages/core/dist/secrets/scrub.js.map +1 -1
- package/packages/core/dist/surfaces.d.ts +10 -0
- package/packages/core/dist/surfaces.d.ts.map +1 -1
- package/packages/core/dist/surfaces.js +11 -0
- package/packages/core/dist/surfaces.js.map +1 -1
- package/packages/core/dist/tools.d.ts +72 -1
- package/packages/core/dist/tools.d.ts.map +1 -1
- package/packages/core/dist/tools.js +38 -0
- package/packages/core/dist/tools.js.map +1 -1
- package/packages/core/dist/views.d.ts +29 -12
- package/packages/core/dist/views.d.ts.map +1 -1
- package/packages/core/dist/views.js +1 -0
- package/packages/core/dist/views.js.map +1 -1
- package/packages/core/dist/widget-settings.d.ts +2 -1
- package/packages/core/dist/widget-settings.d.ts.map +1 -1
- package/packages/core/dist/widget-settings.js +8 -2
- package/packages/core/dist/widget-settings.js.map +1 -1
- package/packages/core/dist/widgets.d.ts +46 -3
- package/packages/core/dist/widgets.d.ts.map +1 -1
- package/packages/core/dist/widgets.js +68 -5
- package/packages/core/dist/widgets.js.map +1 -1
- package/packages/core/migrations/073_mission_report.sql +15 -0
- package/packages/core/migrations/074_owner_identity.sql +14 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
- package/packages/gateway/dist/agents/catalog.js +3 -3
- package/packages/gateway/dist/agents/catalog.js.map +1 -1
- package/packages/gateway/dist/agents/catalogue-package.d.ts +76 -0
- package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
- package/packages/gateway/dist/agents/catalogue-package.js +29 -5
- package/packages/gateway/dist/agents/catalogue-package.js.map +1 -1
- package/packages/gateway/dist/agents/owner-text.d.ts +19 -0
- package/packages/gateway/dist/agents/owner-text.d.ts.map +1 -0
- package/packages/gateway/dist/agents/owner-text.js +44 -0
- package/packages/gateway/dist/agents/owner-text.js.map +1 -0
- package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/packages/gateway/dist/agents/owner-tools.js +36 -2
- package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
- package/packages/gateway/dist/agents/platform-catalogue.d.ts +68 -3
- package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform-catalogue.js +264 -32
- package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -1
- package/packages/gateway/dist/agents/platform.d.ts +11 -4
- package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform.js +15 -0
- package/packages/gateway/dist/agents/platform.js.map +1 -1
- package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
- package/packages/gateway/dist/bootstrap.js +7 -1
- package/packages/gateway/dist/bootstrap.js.map +1 -1
- package/packages/gateway/dist/evals/golden.d.ts +33 -1
- package/packages/gateway/dist/evals/golden.d.ts.map +1 -1
- package/packages/gateway/dist/evals/golden.js +168 -3
- package/packages/gateway/dist/evals/golden.js.map +1 -1
- package/packages/gateway/dist/index.d.ts +2 -1
- package/packages/gateway/dist/index.d.ts.map +1 -1
- package/packages/gateway/dist/index.js +2 -1
- package/packages/gateway/dist/index.js.map +1 -1
- package/packages/gateway/dist/missions/agent-run.d.ts.map +1 -1
- package/packages/gateway/dist/missions/agent-run.js +2 -0
- package/packages/gateway/dist/missions/agent-run.js.map +1 -1
- package/packages/gateway/dist/missions/dates.d.ts +98 -0
- package/packages/gateway/dist/missions/dates.d.ts.map +1 -0
- package/packages/gateway/dist/missions/dates.js +252 -0
- package/packages/gateway/dist/missions/dates.js.map +1 -0
- package/packages/gateway/dist/missions/defaults.d.ts.map +1 -1
- package/packages/gateway/dist/missions/defaults.js +2 -0
- package/packages/gateway/dist/missions/defaults.js.map +1 -1
- package/packages/gateway/dist/missions/execute.d.ts +25 -1
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +80 -8
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/missions/report.d.ts +25 -2
- package/packages/gateway/dist/missions/report.d.ts.map +1 -1
- package/packages/gateway/dist/missions/report.js +71 -11
- package/packages/gateway/dist/missions/report.js.map +1 -1
- package/packages/gateway/dist/ollama-local.d.ts +90 -0
- package/packages/gateway/dist/ollama-local.d.ts.map +1 -0
- package/packages/gateway/dist/ollama-local.js +201 -0
- package/packages/gateway/dist/ollama-local.js.map +1 -0
- package/packages/gateway/dist/owner-notify.d.ts.map +1 -1
- package/packages/gateway/dist/owner-notify.js +7 -3
- package/packages/gateway/dist/owner-notify.js.map +1 -1
- package/packages/gateway/dist/plugins/asset-image-worker.d.ts +2 -0
- package/packages/gateway/dist/plugins/asset-image-worker.d.ts.map +1 -0
- package/packages/gateway/dist/plugins/asset-image-worker.js +18 -0
- package/packages/gateway/dist/plugins/asset-image-worker.js.map +1 -0
- package/packages/gateway/dist/plugins/asset-image.d.ts +31 -0
- package/packages/gateway/dist/plugins/asset-image.d.ts.map +1 -0
- package/packages/gateway/dist/plugins/asset-image.js +332 -0
- package/packages/gateway/dist/plugins/asset-image.js.map +1 -0
- package/packages/gateway/dist/plugins/load.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/load.js +14 -1
- package/packages/gateway/dist/plugins/load.js.map +1 -1
- package/packages/gateway/dist/plugins/stage.d.ts +6 -0
- package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/stage.js +5 -0
- package/packages/gateway/dist/plugins/stage.js.map +1 -1
- package/packages/gateway/dist/plugins/uninstall.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/uninstall.js +8 -0
- package/packages/gateway/dist/plugins/uninstall.js.map +1 -1
- package/packages/gateway/dist/plugins-cli.d.ts +8 -0
- package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/packages/gateway/dist/plugins-cli.js +22 -1
- package/packages/gateway/dist/plugins-cli.js.map +1 -1
- package/packages/gateway/dist/serve.d.ts.map +1 -1
- package/packages/gateway/dist/serve.js +50 -5
- package/packages/gateway/dist/serve.js.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.js +2 -2
- package/packages/gateway/dist/system-context.d.ts +21 -1
- package/packages/gateway/dist/system-context.d.ts.map +1 -1
- package/packages/gateway/dist/system-context.js +76 -2
- package/packages/gateway/dist/system-context.js.map +1 -1
- package/packages/gateway/dist/telegram/approvals.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/approvals.js +4 -2
- package/packages/gateway/dist/telegram/approvals.js.map +1 -1
- package/packages/gateway/dist/telegram/channel.d.ts +12 -0
- package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/channel.js +49 -2
- package/packages/gateway/dist/telegram/channel.js.map +1 -1
- package/packages/gateway/dist/telegram/html.d.ts +34 -0
- package/packages/gateway/dist/telegram/html.d.ts.map +1 -0
- package/packages/gateway/dist/telegram/html.js +263 -0
- package/packages/gateway/dist/telegram/html.js.map +1 -0
- package/packages/gateway/dist/telegram/notify.d.ts +6 -0
- package/packages/gateway/dist/telegram/notify.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/notify.js +25 -3
- package/packages/gateway/dist/telegram/notify.js.map +1 -1
- package/packages/gateway/dist/tips/facts.d.ts +2 -0
- package/packages/gateway/dist/tips/facts.d.ts.map +1 -1
- package/packages/gateway/dist/tips/facts.js +4 -1
- package/packages/gateway/dist/tips/facts.js.map +1 -1
- 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/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +80 -11
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/api-scan.d.ts +1 -1
- package/packages/gateway/dist/web/api-scan.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-scan.js +1 -0
- package/packages/gateway/dist/web/api-scan.js.map +1 -1
- package/packages/gateway/dist/web/catalogue.d.ts.map +1 -1
- package/packages/gateway/dist/web/catalogue.js +7 -4
- package/packages/gateway/dist/web/catalogue.js.map +1 -1
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +9 -0
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/composer.d.ts +45 -0
- package/packages/gateway/dist/web/composer.d.ts.map +1 -0
- package/packages/gateway/dist/web/composer.js +85 -0
- package/packages/gateway/dist/web/composer.js.map +1 -0
- package/packages/gateway/dist/web/extension.d.ts +12 -0
- package/packages/gateway/dist/web/extension.d.ts.map +1 -1
- package/packages/gateway/dist/web/extension.js +11 -1
- package/packages/gateway/dist/web/extension.js.map +1 -1
- package/packages/gateway/dist/web/lock.d.ts +6 -0
- package/packages/gateway/dist/web/lock.d.ts.map +1 -1
- package/packages/gateway/dist/web/lock.js +33 -2
- package/packages/gateway/dist/web/lock.js.map +1 -1
- package/packages/gateway/dist/web/market.d.ts +20 -1
- package/packages/gateway/dist/web/market.d.ts.map +1 -1
- package/packages/gateway/dist/web/market.js +41 -1
- package/packages/gateway/dist/web/market.js.map +1 -1
- package/packages/gateway/dist/web/people.d.ts +44 -0
- package/packages/gateway/dist/web/people.d.ts.map +1 -0
- package/packages/gateway/dist/web/people.js +114 -0
- package/packages/gateway/dist/web/people.js.map +1 -0
- package/packages/gateway/dist/web/server.d.ts +4 -0
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +171 -13
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/skill-bundles.d.ts +101 -0
- package/packages/gateway/dist/web/skill-bundles.d.ts.map +1 -0
- package/packages/gateway/dist/web/skill-bundles.js +439 -0
- package/packages/gateway/dist/web/skill-bundles.js.map +1 -0
- package/packages/gateway/dist/web/skills.d.ts +57 -1
- package/packages/gateway/dist/web/skills.d.ts.map +1 -1
- package/packages/gateway/dist/web/skills.js +171 -9
- package/packages/gateway/dist/web/skills.js.map +1 -1
- package/packages/gateway/dist/web/widgets.js +2 -2
- package/packages/gateway/dist/web/widgets.js.map +1 -1
- package/packages/gateway/dist/web/zip-read.d.ts +31 -0
- package/packages/gateway/dist/web/zip-read.d.ts.map +1 -0
- package/packages/gateway/dist/web/zip-read.js +125 -0
- package/packages/gateway/dist/web/zip-read.js.map +1 -0
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/index.d.ts +1 -0
- package/packages/runtime/dist/index.d.ts.map +1 -1
- package/packages/runtime/dist/index.js +1 -0
- package/packages/runtime/dist/index.js.map +1 -1
- package/packages/runtime/dist/loop.js +11 -1
- package/packages/runtime/dist/loop.js.map +1 -1
- package/packages/runtime/dist/plugin-sign-in.d.ts +12 -0
- package/packages/runtime/dist/plugin-sign-in.d.ts.map +1 -0
- package/packages/runtime/dist/plugin-sign-in.js +397 -0
- package/packages/runtime/dist/plugin-sign-in.js.map +1 -0
- package/packages/runtime/dist/transport.d.ts +1 -1
- package/packages/runtime/dist/transport.d.ts.map +1 -1
- package/packages/runtime/dist/transport.js +6 -0
- package/packages/runtime/dist/transport.js.map +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/artifacts/dist/tools/write.d.ts.map +1 -1
- package/packages/tools/artifacts/dist/tools/write.js +1 -0
- package/packages/tools/artifacts/dist/tools/write.js.map +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/computer.d.ts +13 -0
- package/packages/tools/browser/dist/computer.d.ts.map +1 -1
- package/packages/tools/browser/dist/computer.js +22 -2
- package/packages/tools/browser/dist/computer.js.map +1 -1
- package/packages/tools/browser/dist/controller.d.ts +4 -0
- package/packages/tools/browser/dist/controller.d.ts.map +1 -1
- package/packages/tools/browser/dist/controller.js +8 -3
- package/packages/tools/browser/dist/controller.js.map +1 -1
- package/packages/tools/browser/dist/index.d.ts +1 -1
- package/packages/tools/browser/dist/index.d.ts.map +1 -1
- package/packages/tools/browser/dist/index.js +1 -1
- package/packages/tools/browser/dist/index.js.map +1 -1
- package/packages/tools/browser/dist/native/buddi-computer +0 -0
- package/packages/tools/browser/dist/service.d.ts +5 -0
- package/packages/tools/browser/dist/service.d.ts.map +1 -1
- package/packages/tools/browser/dist/service.js.map +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/widgets.d.ts.map +1 -1
- package/packages/tools/email/dist/widgets.js +2 -1
- package/packages/tools/email/dist/widgets.js.map +1 -1
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/host/dist/index.d.ts +2 -1
- package/packages/tools/host/dist/index.d.ts.map +1 -1
- package/packages/tools/host/dist/index.js +3 -2
- package/packages/tools/host/dist/index.js.map +1 -1
- package/packages/tools/host/dist/process.d.ts +4 -0
- package/packages/tools/host/dist/process.d.ts.map +1 -1
- package/packages/tools/host/dist/process.js +4 -2
- package/packages/tools/host/dist/process.js.map +1 -1
- package/packages/tools/host/dist/service.d.ts +66 -17
- package/packages/tools/host/dist/service.d.ts.map +1 -1
- package/packages/tools/host/dist/service.js +172 -9
- package/packages/tools/host/dist/service.js.map +1 -1
- package/packages/tools/host/dist/skill-run.d.ts +55 -0
- package/packages/tools/host/dist/skill-run.d.ts.map +1 -0
- package/packages/tools/host/dist/skill-run.js +132 -0
- package/packages/tools/host/dist/skill-run.js.map +1 -0
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/index.d.ts +1 -0
- package/packages/tools/memory/dist/index.d.ts.map +1 -1
- package/packages/tools/memory/dist/index.js +7 -2
- package/packages/tools/memory/dist/index.js.map +1 -1
- package/packages/tools/memory/dist/people.d.ts +218 -0
- package/packages/tools/memory/dist/people.d.ts.map +1 -0
- package/packages/tools/memory/dist/people.js +582 -0
- package/packages/tools/memory/dist/people.js.map +1 -0
- package/packages/tools/memory/dist/preamble.d.ts +4 -1
- package/packages/tools/memory/dist/preamble.d.ts.map +1 -1
- package/packages/tools/memory/dist/preamble.js +25 -7
- package/packages/tools/memory/dist/preamble.js.map +1 -1
- package/packages/tools/memory/migrations/002_people.sql +40 -0
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-CN1AXMI1.css +1 -0
- package/packages/web/dist/assets/index-CQRE9LJX.js +145 -0
- package/packages/web/dist/assets/{lottie_light-DYHnHRWL.js → lottie_light-CKJ88Yuk.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/pino/test/types/pino-import.test-d.cts +0 -30
- package/node_modules/pino/test/types/pino-multistream.test-d.ts +0 -28
- package/node_modules/pino/test/types/pino-top-export.test-d.ts +0 -34
- package/node_modules/pino/test/types/pino-type-only.test-d.ts +0 -75
- package/node_modules/thread-stream/node_modules/real-require/LICENSE.md +0 -21
- package/node_modules/thread-stream/node_modules/real-require/README.md +0 -51
- package/node_modules/thread-stream/node_modules/real-require/package.json +0 -38
- package/node_modules/thread-stream/node_modules/real-require/src/index.js +0 -14
- package/packages/web/dist/assets/index-ZauRFo4G.js +0 -134
- package/packages/web/dist/assets/index-viBWQfeT.css +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings → Memory → People, and Home's birthday card (docs/memory.md,
|
|
3
|
+
* "People"; docs/dashboard.md, Home).
|
|
4
|
+
*
|
|
5
|
+
* GET /api/memory/people → { people: PersonRow[], today }
|
|
6
|
+
* POST /api/memory/people { id?, name, relationship?, addressAs?, birthday?, anniversary?, notes?, reminders? } → { person, people }
|
|
7
|
+
* POST /api/memory/people/:id/forget → { person, people }
|
|
8
|
+
* POST /api/memory/people/:id/restore → { person, people }
|
|
9
|
+
* GET /api/owner/birthday → BirthdayGlance
|
|
10
|
+
*
|
|
11
|
+
* The owner writes People directly: no proposal, because the owner is the one
|
|
12
|
+
* who decides. Every save brings the date missions in step at once
|
|
13
|
+
* (`syncDateMissions`), so "Remind me of their dates" is the mission's own
|
|
14
|
+
* switch, created off and turned on here.
|
|
15
|
+
*/
|
|
16
|
+
import { daysUntil, localDateString, ownerTimezone, setMissionEnabled, turning } from '@buddi/core';
|
|
17
|
+
import { PersonRefusal, forgetPerson, listPeople, restorePerson, upsertPerson } from '@buddi/tool-memory';
|
|
18
|
+
import { birthdayGlance, personMissionId, syncDateMissions } from '../missions/dates.js';
|
|
19
|
+
export async function peopleRows(deps) {
|
|
20
|
+
const today = localDateString(deps.now(), ownerTimezone());
|
|
21
|
+
let people = [];
|
|
22
|
+
try {
|
|
23
|
+
people = await listPeople(deps.pool);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
if (err?.code !== '42P01')
|
|
27
|
+
throw err;
|
|
28
|
+
}
|
|
29
|
+
const { rows: missions } = await deps.pool.query(`select id, enabled from core.missions where id like 'person-dates:%'`);
|
|
30
|
+
const enabled = new Map(missions.map((m) => [String(m.id), Boolean(m.enabled)]));
|
|
31
|
+
return {
|
|
32
|
+
today,
|
|
33
|
+
people: people.map((p) => {
|
|
34
|
+
const dates = ['birthday', 'anniversary']
|
|
35
|
+
.filter((what) => p[what] !== null)
|
|
36
|
+
.map((what) => ({ what, date: p[what], inDays: daysUntil(p[what], today) }))
|
|
37
|
+
.sort((a, b) => a.inDays - b.inDays);
|
|
38
|
+
const soonest = dates[0];
|
|
39
|
+
return {
|
|
40
|
+
...p,
|
|
41
|
+
next: soonest ? { what: soonest.what, inDays: soonest.inDays, turning: turning(soonest.date, today) } : null,
|
|
42
|
+
reminders: dates.length === 0 ? null : (enabled.get(personMissionId(p.id)) ?? false),
|
|
43
|
+
};
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const dateOf = (value) => {
|
|
48
|
+
if (value === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
if (value === null)
|
|
51
|
+
return null;
|
|
52
|
+
if (typeof value !== 'object')
|
|
53
|
+
return null;
|
|
54
|
+
const v = value;
|
|
55
|
+
return { day: Number(v.day), month: Number(v.month), year: v.year === undefined || v.year === null || v.year === '' ? null : Number(v.year) };
|
|
56
|
+
};
|
|
57
|
+
const textOf = (value) => value === undefined ? undefined : value === null ? null : typeof value === 'string' ? value : String(value);
|
|
58
|
+
export async function peopleRoute(deps, method, path, body) {
|
|
59
|
+
if (method === 'GET' && path === '/api/owner/birthday') {
|
|
60
|
+
return { status: 200, body: await birthdayGlance(deps.pool, deps.now()) };
|
|
61
|
+
}
|
|
62
|
+
if (method === 'GET' && path === '/api/memory/people') {
|
|
63
|
+
return { status: 200, body: await peopleRows(deps) };
|
|
64
|
+
}
|
|
65
|
+
if (method !== 'POST')
|
|
66
|
+
return undefined;
|
|
67
|
+
const sync = async () => {
|
|
68
|
+
try {
|
|
69
|
+
await syncDateMissions({ pool: deps.pool, catalog: deps.catalog, now: deps.now, log: deps.log });
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
deps.log(`dates: ${err instanceof Error ? err.message : String(err)}`);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
if (path === '/api/memory/people') {
|
|
76
|
+
const id = typeof body.id === 'string' && body.id !== '' ? body.id : undefined;
|
|
77
|
+
try {
|
|
78
|
+
const { person } = await upsertPerson(deps.pool, {
|
|
79
|
+
...(id ? { id } : {}),
|
|
80
|
+
...(body.name !== undefined ? { name: String(body.name) } : {}),
|
|
81
|
+
...(textOf(body.relationship) !== undefined ? { relationship: textOf(body.relationship) } : {}),
|
|
82
|
+
...(textOf(body.addressAs) !== undefined ? { addressAs: textOf(body.addressAs) } : {}),
|
|
83
|
+
...(textOf(body.notes) !== undefined ? { notes: textOf(body.notes) } : {}),
|
|
84
|
+
...(dateOf(body.birthday) !== undefined ? { birthday: dateOf(body.birthday) } : {}),
|
|
85
|
+
...(dateOf(body.anniversary) !== undefined ? { anniversary: dateOf(body.anniversary) } : {}),
|
|
86
|
+
}, { by: 'owner', now: deps.now() });
|
|
87
|
+
await sync();
|
|
88
|
+
// The switch on the sheet is the mission's own: it exists once a date does.
|
|
89
|
+
if (typeof body.reminders === 'boolean' && (person.birthday || person.anniversary)) {
|
|
90
|
+
await setMissionEnabled(deps.pool, personMissionId(person.id), body.reminders);
|
|
91
|
+
}
|
|
92
|
+
const rows = await peopleRows(deps);
|
|
93
|
+
return { status: 200, body: { person: rows.people.find((p) => p.id === person.id) ?? person, people: rows.people } };
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if (err instanceof PersonRefusal)
|
|
97
|
+
return { status: 400, body: { error: err.message } };
|
|
98
|
+
if (err?.code === '23505')
|
|
99
|
+
return { status: 409, body: { error: 'Someone with that name is already in People.' } };
|
|
100
|
+
throw err;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const one = /^\/api\/memory\/people\/([0-9a-f-]{36})\/(forget|restore)$/.exec(path);
|
|
104
|
+
if (one) {
|
|
105
|
+
const person = one[2] === 'forget' ? await forgetPerson(deps.pool, one[1], deps.now()) : await restorePerson(deps.pool, one[1]);
|
|
106
|
+
if (!person)
|
|
107
|
+
return { status: 404, body: { error: one[2] === 'forget' ? 'That person is not in People.' : 'That person cannot come back: someone with the same name is in People now.' } };
|
|
108
|
+
await sync();
|
|
109
|
+
const rows = await peopleRows(deps);
|
|
110
|
+
return { status: 200, body: { person, people: rows.people } };
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=people.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"people.js","sourceRoot":"","sources":["../../src/web/people.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO,EAAoC,MAAM,aAAa,CAAC;AACtI,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAE3H,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAqBzF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAsC;IACrE,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,GAAiB,EAAE,CAAC;IAC9B,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAC7C,OAAO,GAAG,EAAE,CAAC;QAAC,IAAK,GAAgC,EAAE,IAAI,KAAK,OAAO;YAAE,MAAM,GAAG,CAAC;IAAC,CAAC;IACnF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAC9C,sEAAsE,CACvE,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAkB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,OAAO;QACL,KAAK;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,KAAK,GAAI,CAAC,UAAU,EAAE,aAAa,CAAW;iBACjD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;iBAClC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAa,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAa,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;iBACnG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,OAAO;gBACL,GAAG,CAAC;gBACJ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;gBAC5G,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;aACrF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,KAAc,EAA+B,EAAE;IAC7D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAChJ,CAAC,CAAC;AACF,MAAM,MAAM,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC3D,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE9G,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB,EAAE,MAAc,EAAE,IAAY,EAAE,IAA6B;IAC7G,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACrC,IAAI,CAAC;YAAC,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAAC,CAAC;QACzG,OAAO,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACzF,CAAC,CAAC;IAEF,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC/C,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9F,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,IAAI,EAAE,CAAC;YACb,4EAA4E;YAC5E,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnF,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACvH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,aAAa;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YACvF,IAAK,GAAgC,EAAE,IAAI,KAAK,OAAO;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,8CAA8C,EAAE,EAAE,CAAC;YACjJ,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,4DAA4D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QAClI,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,4EAA4E,EAAE,EAAE,CAAC;QAC3L,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ProviderSettings } from '../providers.js';
|
|
2
2
|
import { type ProviderAccounts } from '../provider-accounts.js';
|
|
3
|
+
import { type OllamaMachine, type OllamaPulls } from '../ollama-local.js';
|
|
3
4
|
import { type TelegramControl } from './telegram.js';
|
|
4
5
|
import { type Server } from 'node:http';
|
|
5
6
|
import type { AgentCatalog, JobControl, CoreToolContext, ToolRegistry } from '@buddi/core';
|
|
@@ -24,6 +25,9 @@ export interface WebServerDeps {
|
|
|
24
25
|
* (plugins/requires.ts). Made here when absent.
|
|
25
26
|
*/
|
|
26
27
|
requirements?: Requirements;
|
|
28
|
+
/** The first run's Ollama pull and machine facts, for a test; made here when absent (ollama-local.ts). */
|
|
29
|
+
ollamaPulls?: OllamaPulls;
|
|
30
|
+
ollamaMachine?: () => OllamaMachine;
|
|
27
31
|
/** The place finder's road, for a test; Open-Meteo through core's guard otherwise. */
|
|
28
32
|
placesHttp?: HttpArea;
|
|
29
33
|
/** Host controller; test instances can inject a fake. Reads never enable it. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,9 +46,10 @@ import { agentMuteRoute, focusRoute, listNotificationsRoute, markSeenRoute, noti
|
|
|
46
46
|
import { catalogSkillLookup, discardProposalFromWeb, keepAllProposalsFromWeb, keepProposalFromWeb, readProposals, registryChangeLookup } from './proposals.js';
|
|
47
47
|
import { latestDigest, readDigestSchedule, setDigestSchedule } from '../agents/learning-digest.js';
|
|
48
48
|
import { readAgentSkills, removeLearnedSkillFromWeb } from '../agents/learned-skills.js';
|
|
49
|
-
import { createSkillRoute, deleteSkillRoute, editSkillRoute, grantSkillRoute, listSkillsRoute, skillDetailRoute, skillDownload, trustSkillRoute, } from './skills.js';
|
|
49
|
+
import { createSkillRoute, deleteSkillRoute, editSkillRoute, grantSkillRoute, listSkillsRoute, skillDetailRoute, skillDownload, skillFileRoute, skillImage, stagedFileRoute, stagedImage, acceptBundleRoute, trustSkillRoute, } from './skills.js';
|
|
50
|
+
import { discardStaged, incomingDirFor, receiveBundleUpload, stageBundle, uploadLabel } from './skill-bundles.js';
|
|
50
51
|
import { bindMcpRequests, requestThroughMcp } from '../mcp/requests.js';
|
|
51
|
-
import { randomUUID, createHmac } from 'node:crypto';
|
|
52
|
+
import { randomUUID, createHmac, createHash } from 'node:crypto';
|
|
52
53
|
import { StringDecoder } from 'node:string_decoder';
|
|
53
54
|
import { continueBrowserTask } from '../surfaces/browser-continuation.js';
|
|
54
55
|
import { carryOverDeps } from '../surfaces/carry-over.js';
|
|
@@ -59,14 +60,15 @@ import { listBrowserProfiles, listInstalledApps } from './apps.js';
|
|
|
59
60
|
import { agentSearchPath, EXAMPLES_AGENTS_DIR } from '../agents/catalog.js';
|
|
60
61
|
import { setDelegatesFromWeb } from './write.js';
|
|
61
62
|
import { mlxhBaseUrl, probeMlxh } from '../mlxh.js';
|
|
62
|
-
import {
|
|
63
|
+
import { PullRefusal, createOllamaPulls, ollamaMachine } from '../ollama-local.js';
|
|
64
|
+
import { OnboardingRefusal, WEB_ONBOARDING_STEPS, WEB_ONBOARDING_SURFACE, claimOpeningTurn, createFirstAgent, OLLAMA_BASE_URL, probeOllama, readOnboarding, rebindBrain, updateFirstAgent, withFirstRunFacts, readFirstAgentPersona } from './onboarding.js';
|
|
63
65
|
import { TakeOnRefusal, readTakeOn, startTakeOn } from './take-on.js';
|
|
64
66
|
import { TelegramWebError, saveTelegramToken, telegramBot, telegramDevices, telegramPairing, telegramStatus, unpairTelegramDevice, } from './telegram.js';
|
|
65
67
|
import { PAGE_ROUTE, sendPageFile, actOnPage, actRateLimited, listPageDescriptors, runPageQuery, } from './pages.js';
|
|
66
68
|
import { listSecrets, secretUses, secretsAct } from './secrets.js';
|
|
67
69
|
import { sayRoute, transcribeRoute } from './speech.js';
|
|
68
70
|
import { createServer } from 'node:http';
|
|
69
|
-
import { getAction, idleRolloverMs, inRecovery, listMissions, listPendingActions, isJobState, parseAgentFile, setSentinelEnabled, snoozeFinding, snoozeFindings, unmuteFindings } from '@buddi/core';
|
|
71
|
+
import { asksEachTime, getAction, idleRolloverMs, inRecovery, listMissions, listPendingActions, isJobState, parseAgentFile, setSentinelEnabled, snoozeFinding, snoozeFindings, unmuteFindings } from '@buddi/core';
|
|
70
72
|
import { actOnAlerts, askPrompt, findingsForAsk, muteAlert } from './alerts.js';
|
|
71
73
|
import { connectionsOf } from '@buddi/tool-mcp';
|
|
72
74
|
import { CONNECTIONS_CALLBACK_PATH, connectionsRoute } from './connections.js';
|
|
@@ -75,7 +77,7 @@ import { hostService } from '@buddi/tool-host';
|
|
|
75
77
|
import { listToolPermissions, revokeToolPermission, getArtifact, readArtifactBytes, artifactBytesExist, discardUnreferencedUpload, listLibrary, getLibraryEntry, decodeCursor, filterKey, textPreviewable, readArtifactPrefix, FILE_FAMILIES, LIBRARY_PAGE_MAX, getOwnerProfile, saveOwnerProfile, isKnownTimezone, listGroups, getGroup, createGroup, updateGroup, archiveGroup, deleteGroup, restoreGroup, clearGroupHistory, groupHistorySize, GROUP_UNDO_MS, GroupRefusal, createGroupConversation, listGroupConversations, latestGroupConversation, openGroupRequest, conversationGroup } from '@buddi/core';
|
|
76
78
|
import { EXPORT_MIME, MAX_EXPORT_SOURCE_BYTES, exportFormats, exportName } from '../export/document.js';
|
|
77
79
|
import { ExportRefused, runExport } from '../export/convert.js';
|
|
78
|
-
import { beginOnboarding, completeOnboarding, markStepDone, setOnboardingDetails, skipOnboarding, readWebSetting, writeWebSetting } from '@buddi/core';
|
|
80
|
+
import { beginOnboarding, completeOnboarding, markStepDone, setOnboardingDetails, skipOnboarding, readWebSetting, writeWebSetting, isAssetKey, readPluginAsset } from '@buddi/core';
|
|
79
81
|
import { listMemory, setPreference, forgetPreference, updateNote, forgetNote } from '@buddi/tool-memory';
|
|
80
82
|
import { purgeGroups, stopGroupWork } from './group-lifecycle.js';
|
|
81
83
|
import { engineChangeFromBody, readAgentEngines, readDefaultAgent, readEngineOptions, setAgentEngineFromWeb, setDefaultAgentFromWeb, } from './agents.js';
|
|
@@ -112,7 +114,9 @@ import { tipsRoute } from '../tips/route.js';
|
|
|
112
114
|
import { createWidgets, widgetsRoute } from './widgets.js';
|
|
113
115
|
import { createRequirements } from '../plugins/requires.js';
|
|
114
116
|
import { placesList, placesRoute } from './places.js';
|
|
115
|
-
import {
|
|
117
|
+
import { peopleRoute } from './people.js';
|
|
118
|
+
import { syncDateMissions } from '../missions/dates.js';
|
|
119
|
+
import { OWNER_DATE_FORMATS, OWNER_TIME_FORMATS, validDayMonth } from '@buddi/core';
|
|
116
120
|
import { readFacts, webSettingsStore } from '../tips/facts.js';
|
|
117
121
|
import { dismissAgentOffer, isPendingAccept, raiseAgentOffers, readAgentOffers } from './agent-offers.js';
|
|
118
122
|
import { currentVersion, upgradeJobRoute, upgradeRoute, versionCheckRoute, versionRoute, } from './version.js';
|
|
@@ -125,6 +129,8 @@ import { ensureWebToken, verifyTicket } from './token.js';
|
|
|
125
129
|
import { MAX_UPLOAD_BYTES, readUpload } from './upload.js';
|
|
126
130
|
import { LOCKED_BODY, LockUnavailable, allowedWhileLocked, clientOf, createLock } from './lock.js';
|
|
127
131
|
import { matchApiRoute, TOKEN_REFUSALS } from './api-routes.js';
|
|
132
|
+
import { QUIET_UNAVAILABLE_TEXT, pluginCommands } from './composer.js';
|
|
133
|
+
import { createEngagementHooks } from '../missions/engagement.js';
|
|
128
134
|
import { apiTokensRoute, bearerOf, verifyApiToken } from './api-tokens.js';
|
|
129
135
|
import { LockImageRefusal, MAX_LOCK_IMAGE_BYTES, normaliseLockImage } from './lock-image.js';
|
|
130
136
|
import { cancelJobFromWeb, cancelReminderFromWeb, decideApprovalFromWeb, retryJobFromWeb, retryJobsFromWeb, dismissJobsFromWeb, undismissJobsFromWeb, setMissionEnabledFromWeb, keepMissionFromWeb, answerStillUsefulFromWeb, setPausedFromWeb, setScheduleFromWeb, dismissOfferFromWeb, dismissOffersFromWeb, takeOfferFromWeb, } from './write.js';
|
|
@@ -312,6 +318,9 @@ export function createWebApp(deps) {
|
|
|
312
318
|
// Plugin readiness and requirements: serve's, or this server's own.
|
|
313
319
|
const requirements = deps.requirements ??
|
|
314
320
|
createRequirements({ registry: deps.registry, ctx: deps.ctx, env: deps.env ?? process.env, pool: deps.pool, now: deps.now, log });
|
|
321
|
+
// Ollama on this computer: the first run's pull of a small model, one at a time.
|
|
322
|
+
const ollamaPulls = deps.ollamaPulls ?? createOllamaPulls({ baseUrl: OLLAMA_BASE_URL });
|
|
323
|
+
const machine = deps.ollamaMachine ?? (() => ollamaMachine());
|
|
315
324
|
// Home's widgets: one cache per server (web/widgets.ts).
|
|
316
325
|
const widgets = createWidgets({ pool: deps.pool, registry: deps.registry, ctx: deps.ctx, now: deps.now });
|
|
317
326
|
/*
|
|
@@ -430,7 +439,8 @@ export function createWebApp(deps) {
|
|
|
430
439
|
*/
|
|
431
440
|
void chat?.recoverPendingInput().catch((err) => log(`web chat: recovering queued input failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
432
441
|
const streams = new StreamBudget();
|
|
433
|
-
|
|
442
|
+
// A bundle script's run asks every time: its card offers no standing permission (`asksEachTime`).
|
|
443
|
+
const permissionScopes = (tool, envelope) => deps.registry.lookup(tool)?.reusableApproval && !asksEachTime(envelope)
|
|
434
444
|
? { permissionScopes: ['conversation', 'always'] } : {};
|
|
435
445
|
writeDeps.resumeInteractive = (action, outcome) => chat?.resumeHost(action, outcome);
|
|
436
446
|
/*
|
|
@@ -1158,6 +1168,20 @@ export function createWebApp(deps) {
|
|
|
1158
1168
|
return sendEmpty(res, 204);
|
|
1159
1169
|
return sendJson(res, answer.status, answer.body);
|
|
1160
1170
|
}
|
|
1171
|
+
// `/quiet` typed into the composer: the verb Telegram and the terminal answer, in their words (missions/engagement.ts).
|
|
1172
|
+
if (path === '/api/quiet' && method === 'POST') {
|
|
1173
|
+
let body;
|
|
1174
|
+
try {
|
|
1175
|
+
body = await readJsonBody(req);
|
|
1176
|
+
}
|
|
1177
|
+
catch {
|
|
1178
|
+
return sendJson(res, 400, { error: 'request body must be JSON' });
|
|
1179
|
+
}
|
|
1180
|
+
const raw = body?.arg;
|
|
1181
|
+
const arg = typeof raw === 'string' ? raw.trim().slice(0, 40) : '';
|
|
1182
|
+
const text = await createEngagementHooks({ pool: deps.pool, now: deps.now, timezone: deps.timezone, unavailableText: QUIET_UNAVAILABLE_TEXT }).quiet(arg);
|
|
1183
|
+
return sendJson(res, 200, { text });
|
|
1184
|
+
}
|
|
1161
1185
|
// Home's widgets: the gallery, the owner's layout, each placed one's body (web/widgets.ts).
|
|
1162
1186
|
if (path === '/api/widgets' || path.startsWith('/api/widgets/')) {
|
|
1163
1187
|
let body = {};
|
|
@@ -1493,8 +1517,8 @@ export function createWebApp(deps) {
|
|
|
1493
1517
|
}
|
|
1494
1518
|
case '/api/approvals': {
|
|
1495
1519
|
const approvals = await readApprovals(deps.pool, now, boundedLimit(q.get('limit'), 50));
|
|
1496
|
-
return sendJson(res, 200, { pending: approvals.pending.map(a => ({ ...a, ...permissionScopes(a.tool) })),
|
|
1497
|
-
recent: approvals.recent.map(a => ({ ...a, ...permissionScopes(a.tool) })) });
|
|
1520
|
+
return sendJson(res, 200, { pending: approvals.pending.map(a => ({ ...a, ...permissionScopes(a.tool, a.envelope) })),
|
|
1521
|
+
recent: approvals.recent.map(a => ({ ...a, ...permissionScopes(a.tool, a.envelope) })) });
|
|
1498
1522
|
}
|
|
1499
1523
|
case '/api/offers':
|
|
1500
1524
|
// The roster goes in so the read can lapse an offer whose agent is
|
|
@@ -1524,7 +1548,8 @@ export function createWebApp(deps) {
|
|
|
1524
1548
|
case '/api/sentinels':
|
|
1525
1549
|
return sendJson(res, 200, await readSentinels(deps.pool, deps.registry, deps.now()));
|
|
1526
1550
|
case '/api/chat/agents':
|
|
1527
|
-
|
|
1551
|
+
// With the commands the plugins add to the composer's `/` menu (web/composer.ts).
|
|
1552
|
+
return sendJson(res, 200, { ...readChatAgents(deps.catalog, await avatarVersions(deps.pool)), commands: pluginCommands(deps.registry) });
|
|
1528
1553
|
// Which agents are waiting on the owner. One small query, and the only
|
|
1529
1554
|
// definition of "waiting" in the installation — see attention.ts.
|
|
1530
1555
|
case '/api/chat/attention':
|
|
@@ -1681,8 +1706,12 @@ export function createWebApp(deps) {
|
|
|
1681
1706
|
const persona = readFirstAgentPersona(onboardingDeps());
|
|
1682
1707
|
return persona ? sendJson(res, 200, persona) : sendJson(res, 404, { error: 'There is no assistant of your own yet.' });
|
|
1683
1708
|
}
|
|
1709
|
+
// With what the machine says: installed or not, how to install it, the
|
|
1710
|
+
// model the first run would fetch here, and a fetch already going.
|
|
1684
1711
|
case '/api/onboarding/ollama':
|
|
1685
|
-
return sendJson(res, 200, await probeOllama());
|
|
1712
|
+
return sendJson(res, 200, { ...(await probeOllama()), machine: machine(), pull: ollamaPulls.read() });
|
|
1713
|
+
case '/api/onboarding/ollama/pull':
|
|
1714
|
+
return sendJson(res, 200, { pull: ollamaPulls.read() });
|
|
1686
1715
|
// Is mlxh running here? The same question, asked the same way, of port 1060.
|
|
1687
1716
|
case '/api/onboarding/mlxh':
|
|
1688
1717
|
return sendJson(res, 200, await probeMlxh({ baseUrl: mlxhBaseUrl(deps.env ?? process.env) }));
|
|
@@ -1700,6 +1729,12 @@ export function createWebApp(deps) {
|
|
|
1700
1729
|
const profile = await getOwnerProfile(deps.pool);
|
|
1701
1730
|
return sendJson(res, 200, { ...profile, places: await placesList(deps.pool), detectedTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone, zones: knownTimezones() });
|
|
1702
1731
|
}
|
|
1732
|
+
// Settings → Memory → People, and Home's birthday card (web/people.ts).
|
|
1733
|
+
case '/api/memory/people':
|
|
1734
|
+
case '/api/owner/birthday': {
|
|
1735
|
+
const answered = await peopleRoute({ pool: deps.pool, catalog: deps.catalog, now: deps.now, log }, 'GET', path, {});
|
|
1736
|
+
return sendJson(res, answered.status, answered.body);
|
|
1737
|
+
}
|
|
1703
1738
|
case '/api/memory': {
|
|
1704
1739
|
try {
|
|
1705
1740
|
// `?agent=` narrows it to what that agent sees: the agent sheet's tab.
|
|
@@ -1768,6 +1803,38 @@ export function createWebApp(deps) {
|
|
|
1768
1803
|
* skills, its delegates. A read and only ever a read — a change to any of
|
|
1769
1804
|
* it goes through the maker agent, where it becomes an approval.
|
|
1770
1805
|
*/
|
|
1806
|
+
/*
|
|
1807
|
+
* A plugin's asset (host API 1.27): a PNG core drew itself from what the
|
|
1808
|
+
* plugin fetched, at 64 or 128 px. Only behind a session, like every
|
|
1809
|
+
* other read here; never a file the plugin wrote byte for byte. Kept a
|
|
1810
|
+
* day by the browser — a logo changes once a month — and revalidated
|
|
1811
|
+
* by its bytes.
|
|
1812
|
+
*/
|
|
1813
|
+
const asset = /^\/api\/plugin-assets\/([a-z][a-z0-9_-]{0,63})\/([^/]+)$/.exec(path);
|
|
1814
|
+
if (asset) {
|
|
1815
|
+
const key = decodeURIComponent(asset[2]);
|
|
1816
|
+
const size = url.searchParams.get('size') === '64' ? 64 : 128;
|
|
1817
|
+
const png = isAssetKey(key) ? await readPluginAsset(asset[1], key, size, deps.env ?? process.env).catch(() => null) : null;
|
|
1818
|
+
if (!png)
|
|
1819
|
+
return sendEmpty(res, 404);
|
|
1820
|
+
const etag = `"${createHash('sha256').update(png).digest('hex').slice(0, 32)}"`;
|
|
1821
|
+
res.setHeader('Content-Type', 'image/png');
|
|
1822
|
+
res.setHeader('ETag', etag);
|
|
1823
|
+
res.setHeader('Cache-Control', 'private, max-age=86400');
|
|
1824
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
1825
|
+
res.setHeader('Cross-Origin-Resource-Policy', 'same-origin');
|
|
1826
|
+
res.setHeader('Content-Security-Policy', "default-src 'none'; sandbox");
|
|
1827
|
+
const presented = first(req.headers['if-none-match']);
|
|
1828
|
+
if (presented !== undefined && presented.split(',').some((tag) => tag.trim() === etag)) {
|
|
1829
|
+
res.statusCode = 304;
|
|
1830
|
+
res.end();
|
|
1831
|
+
return;
|
|
1832
|
+
}
|
|
1833
|
+
res.setHeader('Content-Length', String(png.length));
|
|
1834
|
+
res.statusCode = 200;
|
|
1835
|
+
res.end(method === 'HEAD' ? undefined : png);
|
|
1836
|
+
return;
|
|
1837
|
+
}
|
|
1771
1838
|
const avatar = /^\/api\/agents\/([^/]+)\/avatar$/.exec(path);
|
|
1772
1839
|
if (avatar) {
|
|
1773
1840
|
const agent = deps.catalog.get(decodeURIComponent(avatar[1]));
|
|
@@ -1827,6 +1894,30 @@ export function createWebApp(deps) {
|
|
|
1827
1894
|
// The Skills page: every skill, grouped, who holds each; one whole; one as its file.
|
|
1828
1895
|
if (path === '/api/skills')
|
|
1829
1896
|
return reply(res, listSkillsRoute(skillsDeps()));
|
|
1897
|
+
/*
|
|
1898
|
+
* A bundle's files, for the viewer: one file's text (or its size when
|
|
1899
|
+
* it is not text), and a picture's bytes for an <img>. The same for an
|
|
1900
|
+
* upload still waiting in the preview. A picture is served with a CSP
|
|
1901
|
+
* that runs nothing, so an SVG opened on its own cannot script the page.
|
|
1902
|
+
*/
|
|
1903
|
+
const bundleRead = /^\/api\/skills\/(bundles\/)?([^/]+)\/(file|image)$/.exec(path);
|
|
1904
|
+
if (bundleRead) {
|
|
1905
|
+
const id = decodeURIComponent(bundleRead[2]);
|
|
1906
|
+
const rel = url.searchParams.get('path') ?? '';
|
|
1907
|
+
if (bundleRead[3] === 'file') {
|
|
1908
|
+
return reply(res, bundleRead[1] ? stagedFileRoute(skillsDeps(), id, rel) : skillFileRoute(skillsDeps(), id, rel));
|
|
1909
|
+
}
|
|
1910
|
+
const picture = bundleRead[1] ? stagedImage(skillsDeps(), id, rel) : skillImage(skillsDeps(), id, rel);
|
|
1911
|
+
if (!picture)
|
|
1912
|
+
return sendJson(res, 404, { error: `There is no picture "${rel}" in this bundle.` });
|
|
1913
|
+
res.statusCode = 200;
|
|
1914
|
+
res.setHeader('Content-Type', picture.type);
|
|
1915
|
+
res.setHeader('Content-Security-Policy', "default-src 'none'; style-src 'unsafe-inline'; sandbox");
|
|
1916
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
1917
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
1918
|
+
res.end(method === 'HEAD' ? undefined : picture.bytes);
|
|
1919
|
+
return;
|
|
1920
|
+
}
|
|
1830
1921
|
const skillRead = /^\/api\/skills\/([^/]+)(\/download)?$/.exec(path);
|
|
1831
1922
|
if (skillRead) {
|
|
1832
1923
|
const id = decodeURIComponent(skillRead[1]);
|
|
@@ -1835,6 +1926,14 @@ export function createWebApp(deps) {
|
|
|
1835
1926
|
const file = skillDownload(skillsDeps(), id);
|
|
1836
1927
|
if (!file)
|
|
1837
1928
|
return sendJson(res, 404, { error: `There is no skill "${id}".` });
|
|
1929
|
+
if ('zip' in file) {
|
|
1930
|
+
res.statusCode = 200;
|
|
1931
|
+
res.setHeader('Content-Type', 'application/zip');
|
|
1932
|
+
res.setHeader('Content-Disposition', `attachment; filename="${file.filename}"`);
|
|
1933
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
1934
|
+
res.end(method === 'HEAD' ? undefined : Buffer.from(file.zip));
|
|
1935
|
+
return;
|
|
1936
|
+
}
|
|
1838
1937
|
res.statusCode = 200;
|
|
1839
1938
|
res.setHeader('Content-Type', 'text/markdown; charset=utf-8');
|
|
1840
1939
|
res.setHeader('Content-Disposition', `attachment; filename="${file.filename}"`);
|
|
@@ -1882,7 +1981,7 @@ export function createWebApp(deps) {
|
|
|
1882
1981
|
const action = await getAction(deps.pool, decodeURIComponent(approval[1]));
|
|
1883
1982
|
if (!action)
|
|
1884
1983
|
return sendJson(res, 404, { error: 'no such action' });
|
|
1885
|
-
return sendJson(res, 200, { action: { ...toApprovalView(action), ...permissionScopes(action.tool) } });
|
|
1984
|
+
return sendJson(res, 200, { action: { ...toApprovalView(action), ...permissionScopes(action.tool, action.envelope) } });
|
|
1886
1985
|
}
|
|
1887
1986
|
/* ---------------- chat ---------------- */
|
|
1888
1987
|
const groupConversations = /^\/api\/groups\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\/conversations$/i.exec(path);
|
|
@@ -2046,6 +2145,9 @@ export function createWebApp(deps) {
|
|
|
2046
2145
|
return sendJson(res, forgotten.status, forgotten.body);
|
|
2047
2146
|
}
|
|
2048
2147
|
// Delete a skill: the agents that asked for it stop, the file goes to the trash.
|
|
2148
|
+
const stagedGone = /^\/api\/skills\/bundles\/([^/]+)$/.exec(path);
|
|
2149
|
+
if (stagedGone)
|
|
2150
|
+
return reply(res, discardStaged(incomingDirFor(skillsDeps().skillsDir), decodeURIComponent(stagedGone[1])));
|
|
2049
2151
|
const skillGone = /^\/api\/skills\/([^/]+)$/.exec(path);
|
|
2050
2152
|
if (skillGone)
|
|
2051
2153
|
return reply(res, await deleteSkillRoute(skillsDeps(), decodeURIComponent(skillGone[1])));
|
|
@@ -2337,6 +2439,20 @@ export function createWebApp(deps) {
|
|
|
2337
2439
|
* staged exactly like a `.tgz` path they could have typed, and the upload
|
|
2338
2440
|
* is deleted once staging has copied it.
|
|
2339
2441
|
*/
|
|
2442
|
+
/*
|
|
2443
|
+
* A skill bundle (.zip), handed over raw like a plugin tarball: streamed
|
|
2444
|
+
* to a temporary file under a cap, checked, unpacked into staging, and
|
|
2445
|
+
* answered with what is inside. Nothing in it runs, and nothing is kept
|
|
2446
|
+
* until the owner accepts it (`POST /api/skills/bundles/:staged`).
|
|
2447
|
+
*/
|
|
2448
|
+
if (path === '/api/skills/bundles') {
|
|
2449
|
+
const incoming = incomingDirFor(skillsDeps().skillsDir);
|
|
2450
|
+
const filename = uploadLabel(first(req.headers['x-filename']));
|
|
2451
|
+
const received = await receiveBundleUpload(incoming, req, filename);
|
|
2452
|
+
if ('status' in received)
|
|
2453
|
+
return reply(res, received);
|
|
2454
|
+
return reply(res, stageBundle(incoming, received.path, filename, deps.now()));
|
|
2455
|
+
}
|
|
2340
2456
|
if (path === '/api/plugins/upload') {
|
|
2341
2457
|
const received = await receivePluginUpload(pluginDeps(), req, first(req.headers['x-filename']));
|
|
2342
2458
|
if ('status' in received)
|
|
@@ -2982,6 +3098,20 @@ export function createWebApp(deps) {
|
|
|
2982
3098
|
* Chapter 3: what buddi takes on. Records the tiles and starts the By-buddi
|
|
2983
3099
|
* installs in the background; answers at once with a job per plugin.
|
|
2984
3100
|
*/
|
|
3101
|
+
/*
|
|
3102
|
+
* Fetch a model into the local Ollama, for the first run's "on this
|
|
3103
|
+
* computer". Answers at once; GET the same path for the progress.
|
|
3104
|
+
*/
|
|
3105
|
+
if (path === '/api/onboarding/ollama/pull') {
|
|
3106
|
+
try {
|
|
3107
|
+
return sendJson(res, 202, { pull: ollamaPulls.start(typeof body.model === 'string' ? body.model : '') });
|
|
3108
|
+
}
|
|
3109
|
+
catch (error) {
|
|
3110
|
+
if (error instanceof PullRefusal)
|
|
3111
|
+
return sendJson(res, error.status, { error: error.message });
|
|
3112
|
+
throw error;
|
|
3113
|
+
}
|
|
3114
|
+
}
|
|
2985
3115
|
if (path === '/api/onboarding/take-on') {
|
|
2986
3116
|
try {
|
|
2987
3117
|
return sendJson(res, 202, await startTakeOn(takeOnDeps(), body.tiles));
|
|
@@ -3161,7 +3291,7 @@ export function createWebApp(deps) {
|
|
|
3161
3291
|
*/
|
|
3162
3292
|
if (path === '/api/owner') {
|
|
3163
3293
|
const patch = {};
|
|
3164
|
-
for (const key of ['preferredName', 'timezone', 'language', 'about']) {
|
|
3294
|
+
for (const key of ['preferredName', 'timezone', 'language', 'about', 'fullName', 'pronouns']) {
|
|
3165
3295
|
const given = body[key];
|
|
3166
3296
|
if (given === undefined)
|
|
3167
3297
|
continue;
|
|
@@ -3186,8 +3316,27 @@ export function createWebApp(deps) {
|
|
|
3186
3316
|
return sendJson(res, 400, { error: 'The name is too long (80 characters at most).' });
|
|
3187
3317
|
if (patch.about && patch.about.length > 1000)
|
|
3188
3318
|
return sendJson(res, 400, { error: 'Keep the line about you under 1,000 characters.' });
|
|
3319
|
+
if (patch.fullName && patch.fullName.length > 120)
|
|
3320
|
+
return sendJson(res, 400, { error: 'The full name is too long (120 characters at most).' });
|
|
3321
|
+
if (patch.pronouns && patch.pronouns.length > 40)
|
|
3322
|
+
return sendJson(res, 400, { error: 'Keep the pronouns under 40 characters.' });
|
|
3323
|
+
// The birthday: day and month (the year optional), or null to clear it.
|
|
3324
|
+
if (body.birthday !== undefined) {
|
|
3325
|
+
if (body.birthday === null)
|
|
3326
|
+
patch.birthday = null;
|
|
3327
|
+
else {
|
|
3328
|
+
const birthday = validDayMonth(body.birthday);
|
|
3329
|
+
if (!birthday)
|
|
3330
|
+
return sendJson(res, 400, { error: 'The birthday needs a real day and month; the year is optional.' });
|
|
3331
|
+
patch.birthday = birthday;
|
|
3332
|
+
}
|
|
3333
|
+
}
|
|
3189
3334
|
// The zone applies at once; schedules kept in the old one move with it.
|
|
3190
3335
|
const { profile, zoneChange } = await saveOwnerProfile(deps.pool, patch, deps.env ?? process.env);
|
|
3336
|
+
// The birthday greeting follows the new day at once (missions/dates.ts).
|
|
3337
|
+
if (patch.birthday !== undefined) {
|
|
3338
|
+
await syncDateMissions({ pool: deps.pool, catalog: deps.catalog, now: deps.now, log }).catch((err) => log(`dates: ${err instanceof Error ? err.message : String(err)}`));
|
|
3339
|
+
}
|
|
3191
3340
|
if (zoneChange)
|
|
3192
3341
|
log(`owner: timezone ${zoneChange.from} → ${zoneChange.to}${zoneChange.missions.length > 0 ? `; moved ${zoneChange.missions.join(', ')}` : ''}`);
|
|
3193
3342
|
return sendJson(res, 200, { ...profile, places: await placesList(deps.pool), detectedTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone, zones: knownTimezones() });
|
|
@@ -3201,6 +3350,12 @@ export function createWebApp(deps) {
|
|
|
3201
3350
|
return sendJson(res, answered.status, answered.body);
|
|
3202
3351
|
}
|
|
3203
3352
|
}
|
|
3353
|
+
/* People, the owner's side: add, change, forget, bring back (web/people.ts). */
|
|
3354
|
+
if (path.startsWith('/api/memory/people')) {
|
|
3355
|
+
const answered = await peopleRoute({ pool: deps.pool, catalog: deps.catalog, now: deps.now, log }, 'POST', path, body);
|
|
3356
|
+
if (answered)
|
|
3357
|
+
return sendJson(res, answered.status, answered.body);
|
|
3358
|
+
}
|
|
3204
3359
|
/* Memory, the owner's side: correct a preference, retire one, edit or forget a note. */
|
|
3205
3360
|
if (path === '/api/memory/preferences') {
|
|
3206
3361
|
const key = typeof body.key === 'string' ? body.key.trim() : '';
|
|
@@ -3392,6 +3547,9 @@ export function createWebApp(deps) {
|
|
|
3392
3547
|
/* The Skills page's writes (skills.ts): each checked by reloading the catalog. */
|
|
3393
3548
|
if (path === '/api/skills')
|
|
3394
3549
|
return reply(res, createSkillRoute(skillsDeps(), body));
|
|
3550
|
+
const bundleAccept = /^\/api\/skills\/bundles\/([^/]+)$/.exec(path);
|
|
3551
|
+
if (bundleAccept)
|
|
3552
|
+
return reply(res, acceptBundleRoute(skillsDeps(), decodeURIComponent(bundleAccept[1]), body));
|
|
3395
3553
|
const skillWrite = /^\/api\/skills\/([^/]+)\/(text|grants|trust)$/.exec(path);
|
|
3396
3554
|
if (skillWrite) {
|
|
3397
3555
|
const id = decodeURIComponent(skillWrite[1]);
|