@withbuddi/buddi 0.1.0-pre.44 → 0.1.0-pre.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extension/background.js +157 -1
- package/extension/manifest.json +5 -2
- package/extension/popup.html +4 -0
- package/extension/popup.js +18 -0
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts +3 -8
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.js +22 -4
- package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/artifacts/orphans.d.ts +6 -4
- package/node_modules/@buddi/core/dist/artifacts/orphans.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/artifacts/orphans.js +10 -3
- package/node_modules/@buddi/core/dist/artifacts/orphans.js.map +1 -1
- package/node_modules/@buddi/core/dist/groups.d.ts +0 -9
- package/node_modules/@buddi/core/dist/groups.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/groups.js +13 -1
- package/node_modules/@buddi/core/dist/groups.js.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +24 -1
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +61 -1
- package/node_modules/@buddi/core/dist/pages.js.map +1 -1
- package/node_modules/@buddi/core/dist/pending-input.d.ts +13 -2
- package/node_modules/@buddi/core/dist/pending-input.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pending-input.js +57 -12
- package/node_modules/@buddi/core/dist/pending-input.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/tools.d.ts +6 -1
- package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/tools.js.map +1 -1
- package/node_modules/@buddi/core/dist/web-settings.d.ts +8 -0
- package/node_modules/@buddi/core/dist/web-settings.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/web-settings.js +14 -0
- package/node_modules/@buddi/core/dist/web-settings.js.map +1 -1
- package/node_modules/@buddi/core/migrations/078_pending_input_files.sql +8 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/agents/agent-intro.d.ts +31 -0
- package/node_modules/@buddi/gateway/dist/agents/agent-intro.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/agent-intro.js +116 -0
- package/node_modules/@buddi/gateway/dist/agents/agent-intro.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/delegation.d.ts +10 -0
- package/node_modules/@buddi/gateway/dist/agents/delegation.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/delegation.js +18 -1
- package/node_modules/@buddi/gateway/dist/agents/delegation.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +14 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.js +44 -11
- 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 +2 -0
- package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/browser-host.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/browser-host.js +1 -0
- package/node_modules/@buddi/gateway/dist/browser-host.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/edition-origin.d.ts +57 -0
- package/node_modules/@buddi/gateway/dist/edition-origin.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/edition-origin.js +156 -0
- package/node_modules/@buddi/gateway/dist/edition-origin.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/system-context.d.ts +9 -0
- package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/system-context.js +28 -2
- package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/approvals.js +10 -2
- package/node_modules/@buddi/gateway/dist/telegram/approvals.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.js +10 -3
- package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts +9 -0
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js +43 -0
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js +2 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/engine.d.ts +32 -0
- package/node_modules/@buddi/gateway/dist/tips/engine.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/engine.js +69 -0
- package/node_modules/@buddi/gateway/dist/tips/engine.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/route.d.ts +1 -3
- package/node_modules/@buddi/gateway/dist/tips/route.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/route.js +54 -30
- package/node_modules/@buddi/gateway/dist/tips/route.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts +10 -1
- package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agent-offers.js +14 -1
- package/node_modules/@buddi/gateway/dist/web/agent-offers.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 +38 -7
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/approval-ask.d.ts +16 -0
- package/node_modules/@buddi/gateway/dist/web/approval-ask.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/approval-ask.js +51 -0
- package/node_modules/@buddi/gateway/dist/web/approval-ask.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/attention.d.ts +37 -0
- package/node_modules/@buddi/gateway/dist/web/attention.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/attention.js +54 -10
- package/node_modules/@buddi/gateway/dist/web/attention.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.d.ts +41 -0
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.js +68 -0
- package/node_modules/@buddi/gateway/dist/web/canvas-tabs.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts +6 -9
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +37 -19
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts +11 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js +51 -0
- package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/live.d.ts +7 -0
- package/node_modules/@buddi/gateway/dist/web/live.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/live.js +12 -0
- package/node_modules/@buddi/gateway/dist/web/live.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/pages.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/pages.js +10 -1
- package/node_modules/@buddi/gateway/dist/web/pages.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts +0 -4
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +102 -7
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +1 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.js +1 -1
- package/node_modules/@buddi/runtime/dist/grounding.d.ts +54 -0
- package/node_modules/@buddi/runtime/dist/grounding.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/grounding.js +158 -0
- package/node_modules/@buddi/runtime/dist/grounding.js.map +1 -0
- 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.d.ts +19 -0
- package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.js +123 -13
- package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/extract.d.ts +6 -0
- package/node_modules/@buddi/tool-artifacts/dist/extract.d.ts.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/extract.js +6 -0
- package/node_modules/@buddi/tool-artifacts/dist/extract.js.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.d.ts +1 -0
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.d.ts.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.js +30 -8
- package/node_modules/@buddi/tool-artifacts/dist/tools/artifacts.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts +25 -0
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js +25 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/downloads.d.ts +138 -0
- package/node_modules/@buddi/tool-browser/dist/downloads.d.ts.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/downloads.js +529 -0
- package/node_modules/@buddi/tool-browser/dist/downloads.js.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts +17 -1
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/driver.js +48 -0
- package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts +23 -0
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.js +20 -0
- package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/host.d.ts +3 -1
- package/node_modules/@buddi/tool-browser/dist/host.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/host.js +9 -2
- package/node_modules/@buddi/tool-browser/dist/host.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.d.ts +7 -3
- package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.js +5 -3
- package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.d.ts +28 -0
- package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.js +58 -1
- package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/settings.d.ts +8 -0
- package/node_modules/@buddi/tool-browser/dist/settings.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/settings.js +9 -0
- package/node_modules/@buddi/tool-browser/dist/settings.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.d.ts +31 -24
- package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/agent.d.ts +6 -1
- package/node_modules/@buddi/tool-email/dist/agent.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/agent.js +6 -1
- package/node_modules/@buddi/tool-email/dist/agent.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts +8 -0
- package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/fake.js +15 -0
- package/node_modules/@buddi/tool-email/dist/imap/fake.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js +26 -17
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/index.d.ts +5 -1
- package/node_modules/@buddi/tool-email/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/index.js +11 -3
- package/node_modules/@buddi/tool-email/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.js +4 -1
- package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.d.ts +2 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.js +2 -2
- package/node_modules/@buddi/tool-email/dist/pages/index.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts +3 -2
- package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/queries.js +19 -7
- package/node_modules/@buddi/tool-email/dist/pages/queries.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.d.ts +15 -0
- package/node_modules/@buddi/tool-email/dist/ports.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts +9 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js +1 -0
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/text-cleanup.d.ts +69 -0
- package/node_modules/@buddi/tool-email/dist/text-cleanup.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/text-cleanup.js +96 -0
- package/node_modules/@buddi/tool-email/dist/text-cleanup.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/text.d.ts +29 -0
- package/node_modules/@buddi/tool-email/dist/text.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/text.js +153 -0
- package/node_modules/@buddi/tool-email/dist/text.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/worker.d.ts +64 -0
- package/node_modules/@buddi/tool-email/dist/worker.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/worker.js +123 -0
- package/node_modules/@buddi/tool-email/dist/worker.js.map +1 -0
- package/node_modules/@buddi/tool-email/migrations/028_reading.sql +5 -2
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/marked/bin/main.js +1 -1
- package/node_modules/marked/lib/marked.d.ts +7 -0
- package/node_modules/marked/lib/marked.esm.js +14 -14
- package/node_modules/marked/lib/marked.esm.js.map +3 -3
- package/node_modules/marked/lib/marked.umd.js +19 -19
- package/node_modules/marked/lib/marked.umd.js.map +3 -3
- package/node_modules/marked/man/marked.1 +1 -1
- package/node_modules/marked/package.json +1 -1
- package/node_modules/nanoid/README.md +3 -3
- package/node_modules/nanoid/index.browser.js +4 -5
- package/node_modules/nanoid/index.d.ts +3 -3
- package/node_modules/nanoid/index.js +2 -3
- package/node_modules/nanoid/nanoid.js +1 -1
- package/node_modules/nanoid/package.json +2 -2
- package/node_modules/nanoid/url-alphabet/index.js +1 -1
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/mcp/tools.d.ts +3 -8
- package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
- package/packages/cli/dist/mcp/tools.js +22 -4
- package/packages/cli/dist/mcp/tools.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/artifacts/orphans.d.ts +6 -4
- package/packages/core/dist/artifacts/orphans.d.ts.map +1 -1
- package/packages/core/dist/artifacts/orphans.js +10 -3
- package/packages/core/dist/artifacts/orphans.js.map +1 -1
- package/packages/core/dist/groups.d.ts +0 -9
- package/packages/core/dist/groups.d.ts.map +1 -1
- package/packages/core/dist/groups.js +13 -1
- package/packages/core/dist/groups.js.map +1 -1
- package/packages/core/dist/pages.d.ts +24 -1
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +61 -1
- package/packages/core/dist/pages.js.map +1 -1
- package/packages/core/dist/pending-input.d.ts +13 -2
- package/packages/core/dist/pending-input.d.ts.map +1 -1
- package/packages/core/dist/pending-input.js +57 -12
- package/packages/core/dist/pending-input.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/tools.d.ts +6 -1
- package/packages/core/dist/tools.d.ts.map +1 -1
- package/packages/core/dist/tools.js.map +1 -1
- package/packages/core/dist/web-settings.d.ts +8 -0
- package/packages/core/dist/web-settings.d.ts.map +1 -1
- package/packages/core/dist/web-settings.js +14 -0
- package/packages/core/dist/web-settings.js.map +1 -1
- package/packages/core/migrations/078_pending_input_files.sql +8 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/agents/agent-intro.d.ts +31 -0
- package/packages/gateway/dist/agents/agent-intro.d.ts.map +1 -0
- package/packages/gateway/dist/agents/agent-intro.js +116 -0
- package/packages/gateway/dist/agents/agent-intro.js.map +1 -0
- package/packages/gateway/dist/agents/delegation.d.ts +10 -0
- package/packages/gateway/dist/agents/delegation.d.ts.map +1 -1
- package/packages/gateway/dist/agents/delegation.js +18 -1
- package/packages/gateway/dist/agents/delegation.js.map +1 -1
- package/packages/gateway/dist/agents/platform.d.ts +14 -1
- package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform.js +44 -11
- 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 +2 -0
- package/packages/gateway/dist/bootstrap.js.map +1 -1
- package/packages/gateway/dist/browser-host.d.ts.map +1 -1
- package/packages/gateway/dist/browser-host.js +1 -0
- package/packages/gateway/dist/browser-host.js.map +1 -1
- package/packages/gateway/dist/edition-origin.d.ts +57 -0
- package/packages/gateway/dist/edition-origin.d.ts.map +1 -0
- package/packages/gateway/dist/edition-origin.js +156 -0
- package/packages/gateway/dist/edition-origin.js.map +1 -0
- package/packages/gateway/dist/system-context.d.ts +9 -0
- package/packages/gateway/dist/system-context.d.ts.map +1 -1
- package/packages/gateway/dist/system-context.js +28 -2
- package/packages/gateway/dist/system-context.js.map +1 -1
- package/packages/gateway/dist/telegram/approvals.d.ts +6 -0
- package/packages/gateway/dist/telegram/approvals.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/approvals.js +10 -2
- package/packages/gateway/dist/telegram/approvals.js.map +1 -1
- package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/main.js +10 -3
- package/packages/gateway/dist/telegram/main.js.map +1 -1
- package/packages/gateway/dist/telegram/outbound.d.ts +9 -0
- package/packages/gateway/dist/telegram/outbound.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/outbound.js +43 -0
- package/packages/gateway/dist/telegram/outbound.js.map +1 -1
- package/packages/gateway/dist/telegram/surface.d.ts +2 -0
- package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/surface.js +2 -1
- package/packages/gateway/dist/telegram/surface.js.map +1 -1
- package/packages/gateway/dist/tips/engine.d.ts +32 -0
- package/packages/gateway/dist/tips/engine.d.ts.map +1 -1
- package/packages/gateway/dist/tips/engine.js +69 -0
- package/packages/gateway/dist/tips/engine.js.map +1 -1
- package/packages/gateway/dist/tips/route.d.ts +1 -3
- package/packages/gateway/dist/tips/route.d.ts.map +1 -1
- package/packages/gateway/dist/tips/route.js +54 -30
- package/packages/gateway/dist/tips/route.js.map +1 -1
- package/packages/gateway/dist/web/agent-offers.d.ts +10 -1
- package/packages/gateway/dist/web/agent-offers.d.ts.map +1 -1
- package/packages/gateway/dist/web/agent-offers.js +14 -1
- package/packages/gateway/dist/web/agent-offers.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +38 -7
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/approval-ask.d.ts +16 -0
- package/packages/gateway/dist/web/approval-ask.d.ts.map +1 -0
- package/packages/gateway/dist/web/approval-ask.js +51 -0
- package/packages/gateway/dist/web/approval-ask.js.map +1 -0
- package/packages/gateway/dist/web/attention.d.ts +37 -0
- package/packages/gateway/dist/web/attention.d.ts.map +1 -1
- package/packages/gateway/dist/web/attention.js +54 -10
- package/packages/gateway/dist/web/attention.js.map +1 -1
- package/packages/gateway/dist/web/canvas-tabs.d.ts +41 -0
- package/packages/gateway/dist/web/canvas-tabs.d.ts.map +1 -0
- package/packages/gateway/dist/web/canvas-tabs.js +68 -0
- package/packages/gateway/dist/web/canvas-tabs.js.map +1 -0
- package/packages/gateway/dist/web/chat.d.ts +6 -9
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +37 -19
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/extension.d.ts +11 -1
- package/packages/gateway/dist/web/extension.d.ts.map +1 -1
- package/packages/gateway/dist/web/extension.js +51 -0
- package/packages/gateway/dist/web/extension.js.map +1 -1
- package/packages/gateway/dist/web/live.d.ts +7 -0
- package/packages/gateway/dist/web/live.d.ts.map +1 -1
- package/packages/gateway/dist/web/live.js +12 -0
- package/packages/gateway/dist/web/live.js.map +1 -1
- package/packages/gateway/dist/web/pages.d.ts.map +1 -1
- package/packages/gateway/dist/web/pages.js +10 -1
- package/packages/gateway/dist/web/pages.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts +0 -4
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +102 -7
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/codex-direct.d.ts +1 -1
- package/packages/runtime/dist/codex-direct.js +1 -1
- package/packages/runtime/dist/grounding.d.ts +54 -0
- package/packages/runtime/dist/grounding.d.ts.map +1 -0
- package/packages/runtime/dist/grounding.js +158 -0
- package/packages/runtime/dist/grounding.js.map +1 -0
- 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.d.ts +19 -0
- package/packages/runtime/dist/loop.d.ts.map +1 -1
- package/packages/runtime/dist/loop.js +123 -13
- package/packages/runtime/dist/loop.js.map +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/artifacts/dist/extract.d.ts +6 -0
- package/packages/tools/artifacts/dist/extract.d.ts.map +1 -1
- package/packages/tools/artifacts/dist/extract.js +6 -0
- package/packages/tools/artifacts/dist/extract.js.map +1 -1
- package/packages/tools/artifacts/dist/tools/artifacts.d.ts +1 -0
- package/packages/tools/artifacts/dist/tools/artifacts.d.ts.map +1 -1
- package/packages/tools/artifacts/dist/tools/artifacts.js +30 -8
- package/packages/tools/artifacts/dist/tools/artifacts.js.map +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/controller.d.ts +25 -0
- package/packages/tools/browser/dist/controller.d.ts.map +1 -1
- package/packages/tools/browser/dist/controller.js +25 -1
- package/packages/tools/browser/dist/controller.js.map +1 -1
- package/packages/tools/browser/dist/downloads.d.ts +138 -0
- package/packages/tools/browser/dist/downloads.d.ts.map +1 -0
- package/packages/tools/browser/dist/downloads.js +529 -0
- package/packages/tools/browser/dist/downloads.js.map +1 -0
- package/packages/tools/browser/dist/driver.d.ts +17 -1
- package/packages/tools/browser/dist/driver.d.ts.map +1 -1
- package/packages/tools/browser/dist/driver.js +48 -0
- package/packages/tools/browser/dist/driver.js.map +1 -1
- package/packages/tools/browser/dist/extension.d.ts +23 -0
- package/packages/tools/browser/dist/extension.d.ts.map +1 -1
- package/packages/tools/browser/dist/extension.js +20 -0
- package/packages/tools/browser/dist/extension.js.map +1 -1
- package/packages/tools/browser/dist/host.d.ts +3 -1
- package/packages/tools/browser/dist/host.d.ts.map +1 -1
- package/packages/tools/browser/dist/host.js +9 -2
- package/packages/tools/browser/dist/host.js.map +1 -1
- package/packages/tools/browser/dist/index.d.ts +7 -3
- package/packages/tools/browser/dist/index.d.ts.map +1 -1
- package/packages/tools/browser/dist/index.js +5 -3
- package/packages/tools/browser/dist/index.js.map +1 -1
- package/packages/tools/browser/dist/service.d.ts +28 -0
- package/packages/tools/browser/dist/service.d.ts.map +1 -1
- package/packages/tools/browser/dist/service.js +58 -1
- package/packages/tools/browser/dist/service.js.map +1 -1
- package/packages/tools/browser/dist/settings.d.ts +8 -0
- package/packages/tools/browser/dist/settings.d.ts.map +1 -1
- package/packages/tools/browser/dist/settings.js +9 -0
- package/packages/tools/browser/dist/settings.js.map +1 -1
- package/packages/tools/browser/dist/types.d.ts +31 -24
- package/packages/tools/browser/dist/types.d.ts.map +1 -1
- package/packages/tools/browser/dist/types.js.map +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/agent.d.ts +6 -1
- package/packages/tools/email/dist/agent.d.ts.map +1 -1
- package/packages/tools/email/dist/agent.js +6 -1
- package/packages/tools/email/dist/agent.js.map +1 -1
- package/packages/tools/email/dist/imap/fake.d.ts +8 -0
- package/packages/tools/email/dist/imap/fake.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/fake.js +15 -0
- package/packages/tools/email/dist/imap/fake.js.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.js +26 -17
- package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
- package/packages/tools/email/dist/index.d.ts +5 -1
- package/packages/tools/email/dist/index.d.ts.map +1 -1
- package/packages/tools/email/dist/index.js +11 -3
- package/packages/tools/email/dist/index.js.map +1 -1
- package/packages/tools/email/dist/mail.d.ts.map +1 -1
- package/packages/tools/email/dist/mail.js +4 -1
- package/packages/tools/email/dist/mail.js.map +1 -1
- package/packages/tools/email/dist/pages/index.d.ts +2 -1
- package/packages/tools/email/dist/pages/index.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/index.js +2 -2
- package/packages/tools/email/dist/pages/index.js.map +1 -1
- package/packages/tools/email/dist/pages/queries.d.ts +3 -2
- package/packages/tools/email/dist/pages/queries.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/queries.js +19 -7
- package/packages/tools/email/dist/pages/queries.js.map +1 -1
- package/packages/tools/email/dist/ports.d.ts +15 -0
- package/packages/tools/email/dist/ports.d.ts.map +1 -1
- package/packages/tools/email/dist/ports.js.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.d.ts +9 -1
- package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.js +1 -0
- package/packages/tools/email/dist/sources/inbox-poll.js.map +1 -1
- package/packages/tools/email/dist/text-cleanup.d.ts +69 -0
- package/packages/tools/email/dist/text-cleanup.d.ts.map +1 -0
- package/packages/tools/email/dist/text-cleanup.js +96 -0
- package/packages/tools/email/dist/text-cleanup.js.map +1 -0
- package/packages/tools/email/dist/text.d.ts +29 -0
- package/packages/tools/email/dist/text.d.ts.map +1 -0
- package/packages/tools/email/dist/text.js +153 -0
- package/packages/tools/email/dist/text.js.map +1 -0
- package/packages/tools/email/dist/worker.d.ts +64 -0
- package/packages/tools/email/dist/worker.d.ts.map +1 -0
- package/packages/tools/email/dist/worker.js +123 -0
- package/packages/tools/email/dist/worker.js.map +1 -0
- package/packages/tools/email/migrations/028_reading.sql +5 -2
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-C2yWZED2.css +1 -0
- package/packages/web/dist/assets/index-CIhME8Ui.js +150 -0
- package/packages/web/dist/assets/{lottie_light-DnYl9yaP.js → lottie_light-CVXFbeEK.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/packages/web/dist/assets/index-C1sRt7zd.js +0 -149
- package/packages/web/dist/assets/index-CdZpSJ4_.css +0 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The grounding guard's eye: does a reply name sources it never read?
|
|
3
|
+
*
|
|
4
|
+
* An owner asked the concierge about a headline in today's news; it answered
|
|
5
|
+
* at length, citing CBS, AP, NPR and a law school, with no tool call at all.
|
|
6
|
+
* Every citation was invented. The prompt already says not to (the grounding
|
|
7
|
+
* lines in every agent's platform context); this is the deterministic check
|
|
8
|
+
* behind it, run by the loop on the final text of a turn that read nothing.
|
|
9
|
+
*
|
|
10
|
+
* Biased hard toward precision, because a false positive costs the owner a
|
|
11
|
+
* second model call and, worse, a "not checked" flag on an honest answer:
|
|
12
|
+
*
|
|
13
|
+
* - an outlet or a domain counts only where it is *cited* — in parentheses,
|
|
14
|
+
* after "according to" / "selon" / "d'après" / "per" / "via", before
|
|
15
|
+
* "reports" / "said" / "writes", or as a markdown link. "The BBC is a
|
|
16
|
+
* broadcaster" is a mention, not a citation, and so is a bare link ("open
|
|
17
|
+
* https://github.com"): a bare link only backs up markers or a "Sources:"
|
|
18
|
+
* line, it never counts as a source on its own;
|
|
19
|
+
* - one citation is not enough on its own: it takes two distinct sources, or
|
|
20
|
+
* one (or a bare link) with numbered markers ([1]) or a "Sources:" line;
|
|
21
|
+
* - an outlet and its own domain ("Reuters", "reuters.com") are one source;
|
|
22
|
+
* - a source the conversation already holds (the owner named it, a tool
|
|
23
|
+
* returned it earlier) is not counted;
|
|
24
|
+
* - code is ignored, and so is an email address.
|
|
25
|
+
*
|
|
26
|
+
* Figures alone are never a signal: "it costs about €20" is how people talk.
|
|
27
|
+
*/
|
|
28
|
+
/** What the model is told when it cited sources without reading anything. */
|
|
29
|
+
export const GROUNDING_RETRY_TEXT = 'You cited sources without reading anything. Verify with your tools or a colleague, or remove the claims.';
|
|
30
|
+
/** The muted line the surfaces draw under a reply the guard could not get checked. */
|
|
31
|
+
export const UNCHECKED_LINE = 'Answered from memory, not checked';
|
|
32
|
+
/**
|
|
33
|
+
* News outlets and agencies a model reaches for when it invents a citation.
|
|
34
|
+
* Not a directory: the names that showed up in fabricated answers, and their
|
|
35
|
+
* neighbours. Matched case-sensitively, so "AP" is the agency and "ap" is not.
|
|
36
|
+
*/
|
|
37
|
+
const OUTLETS = [
|
|
38
|
+
'Associated Press', 'AP', 'Reuters', 'AFP', 'Agence France-Presse', 'Bloomberg',
|
|
39
|
+
'BBC', 'CNN', 'CBS', 'NBC', 'ABC News', 'NPR', 'PBS', 'Fox News', 'MSNBC', 'CNBC',
|
|
40
|
+
'New York Times', 'NYT', 'Washington Post', 'Wall Street Journal', 'WSJ', 'USA Today',
|
|
41
|
+
'Los Angeles Times', 'The Guardian', 'Financial Times', 'The Economist', 'Politico', 'Axios',
|
|
42
|
+
'The Atlantic', 'The Hill', 'Al Jazeera', 'Sky News', 'The Telegraph', 'The Times', 'Forbes',
|
|
43
|
+
'TechCrunch', 'The Verge', 'Le Monde', 'Le Figaro', 'Libération', 'Les Echos', 'France 24',
|
|
44
|
+
'franceinfo', 'Le Parisien', 'RFI', 'Der Spiegel', 'El País', 'Deutsche Welle', 'Euronews',
|
|
45
|
+
'Jeune Afrique', 'Nikkei', 'South China Morning Post',
|
|
46
|
+
];
|
|
47
|
+
const TLDS = 'com|org|net|gov|edu|int|news|info|co\\.uk|org\\.uk|ac\\.uk|fr|de|es|it|ch|be|ca|au|uk|eu|tv|us|ng|tg|sn|ci|za|ke|jp|in';
|
|
48
|
+
/** A host name, with or without a scheme. Not preceded by `@` (an email) or a word character. */
|
|
49
|
+
const DOMAIN = new RegExp(`(?<![@\\w.-])(?:https?://)?(?:www\\.)?((?:[a-z0-9-]+\\.)+(?:${TLDS}))(?![\\w-])`, 'gi');
|
|
50
|
+
const URL = /https?:\/\/[^\s)>\]]+/gi;
|
|
51
|
+
const ATTRIBUTION = /\b(?:[Aa]ccording to|[Ss]elon|[Dd]['’]apr[eè]s|[Aa]s reported by|[Rr]eported by|[Cc]ited by)\s+(?:the\s+|l[ae]\s+|les\s+|l['’])?([A-Z][\p{L}&.'’-]*(?:\s+(?:of\s+|de\s+|du\s+|for\s+)?[A-Z][\p{L}&.'’-]*){0,4})/gu;
|
|
52
|
+
/** Right before a citation: "according to", "per", "via", "source:". */
|
|
53
|
+
const BEFORE = /(?:according to|selon|d['’]apr[eè]s|as reported by|reported by|cited by|\bper|\bvia|sources?\s*:)\s+(?:the\s+|l[ae]\s+|les\s+)?$/i;
|
|
54
|
+
/** Right after one: "reports", "said", "writes". */
|
|
55
|
+
const AFTER = /^['’]?s?\s+(?:has\s+|have\s+|had\s+)?(?:reports?|reported|reporting|said|says|wrote|writes|notes?|noted|confirmed|found|revealed|rapporte|indique|affirme|écrit|a rapporté|a indiqué)\b/i;
|
|
56
|
+
const MARKER = /\[(\d{1,2})\](?!\()|[¹²³⁴⁵⁶⁷⁸⁹]/g;
|
|
57
|
+
const SOURCES_LINE = /^\s*(?:[*_#>-]+\s*)?(?:Sources?|R[ée]f[ée]rences?|References)\s*(?:[*_]+)?\s*:/im;
|
|
58
|
+
/** Code is not prose: a fenced block or inline code never cites anything. */
|
|
59
|
+
function stripCode(text) {
|
|
60
|
+
return text.replace(/```[\s\S]*?```/g, ' ').replace(/`[^`\n]*`/g, ' ');
|
|
61
|
+
}
|
|
62
|
+
const norm = (token) => token.normalize('NFKD').replace(/[̀-ͯ]/g, '').toLowerCase().replace(/^www\./, '').replace(/^the\s+/, '').trim();
|
|
63
|
+
const escape = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
64
|
+
const compact = (name) => norm(name).replace(/[^a-z0-9]/g, '');
|
|
65
|
+
/** Each outlet under the keys its own domain is likely to carry: "reuters", "cbsnews", "theguardian". */
|
|
66
|
+
const OUTLET_KEYS = new Map(OUTLETS.flatMap((outlet) => {
|
|
67
|
+
const key = compact(outlet);
|
|
68
|
+
const raw = outlet.normalize('NFKD').replace(/[̀-ͯ]/g, '').toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
69
|
+
return [...new Set([key, `${key}news`, raw, `${raw}news`])].map((k) => [k, norm(outlet)]);
|
|
70
|
+
}));
|
|
71
|
+
const TLD_SUFFIX = new RegExp(`\\.(?:${TLDS})$`, 'i');
|
|
72
|
+
/** The outlet a host belongs to ("www.reuters.com" → "reuters"), or the host itself. */
|
|
73
|
+
function sourceOfHost(host) {
|
|
74
|
+
const label = norm(host).replace(TLD_SUFFIX, '').split('.').pop() ?? '';
|
|
75
|
+
return OUTLET_KEYS.get(label) ?? host;
|
|
76
|
+
}
|
|
77
|
+
/** Is the occurrence at [start, end) in a citation position? */
|
|
78
|
+
function cited(text, start, end) {
|
|
79
|
+
const before = text.slice(Math.max(0, start - 40), start);
|
|
80
|
+
if (BEFORE.test(before))
|
|
81
|
+
return true;
|
|
82
|
+
if (AFTER.test(text.slice(end, end + 40)))
|
|
83
|
+
return true;
|
|
84
|
+
// Inside a short parenthesis: "(CBS News, Oct 3)", "(reuters.com)".
|
|
85
|
+
const open = text.lastIndexOf('(', start);
|
|
86
|
+
if (open !== -1 && start - open <= 60 && !text.slice(open, start).includes(')')) {
|
|
87
|
+
const close = text.indexOf(')', end);
|
|
88
|
+
if (close !== -1 && close - end <= 60 && !text.slice(end, close).includes('('))
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
// A markdown link's label: "[CBS News](https://…)".
|
|
92
|
+
const bracket = text.lastIndexOf('[', start);
|
|
93
|
+
if (bracket !== -1 && start - bracket <= 80 && !text.slice(bracket, start).includes(']')) {
|
|
94
|
+
const shut = text.indexOf('](', end);
|
|
95
|
+
if (shut !== -1 && shut - end <= 80 && !text.slice(end, shut).includes('['))
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The citation signals in a reply. `known` is everything the conversation
|
|
102
|
+
* already held before this answer (the owner's words, earlier tool results,
|
|
103
|
+
* earlier replies): a source found there is not counted.
|
|
104
|
+
*/
|
|
105
|
+
export function citationSignals(reply, known = '') {
|
|
106
|
+
const text = stripCode(reply);
|
|
107
|
+
const found = new Set();
|
|
108
|
+
const bare = new Set();
|
|
109
|
+
const add = (token, into = found) => {
|
|
110
|
+
const n = norm(token);
|
|
111
|
+
if (n.length >= 2)
|
|
112
|
+
into.add(n);
|
|
113
|
+
};
|
|
114
|
+
for (const outlet of OUTLETS) {
|
|
115
|
+
const re = new RegExp(`(?<![\\p{L}\\p{N}])${escape(outlet)}(?:\\s+News)?(?![\\p{L}\\p{N}])`, 'gu');
|
|
116
|
+
for (const m of text.matchAll(re)) {
|
|
117
|
+
if (cited(text, m.index, m.index + m[0].length))
|
|
118
|
+
add(outlet);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const m of text.matchAll(URL)) {
|
|
122
|
+
const host = /^https?:\/\/(?:www\.)?([^/:?#]+)/i.exec(m[0])?.[1];
|
|
123
|
+
if (host)
|
|
124
|
+
add(sourceOfHost(host), cited(text, m.index, m.index + m[0].length) ? found : bare);
|
|
125
|
+
}
|
|
126
|
+
for (const m of text.matchAll(DOMAIN)) {
|
|
127
|
+
if (cited(text, m.index, m.index + m[0].length))
|
|
128
|
+
add(sourceOfHost(m[1]));
|
|
129
|
+
}
|
|
130
|
+
for (const m of text.matchAll(ATTRIBUTION)) {
|
|
131
|
+
const name = m[1].replace(/[.,;:'’]+$/, '');
|
|
132
|
+
// An outlet already counted under its own name is one source, not two.
|
|
133
|
+
const outlet = OUTLETS.find((o) => name === o || name.startsWith(`${o} `));
|
|
134
|
+
add(outlet ?? name);
|
|
135
|
+
}
|
|
136
|
+
const held = known.normalize('NFKD').replace(/[̀-ͯ]/g, '').toLowerCase();
|
|
137
|
+
const unheld = (token) => !new RegExp(`(?<![\\p{L}\\p{N}])${escape(token)}(?![\\p{L}\\p{N}])`, 'u').test(held);
|
|
138
|
+
const sources = [...found].filter(unheld);
|
|
139
|
+
const links = [...bare].filter((token) => !found.has(token) && unheld(token));
|
|
140
|
+
const markers = new Set();
|
|
141
|
+
for (const m of text.matchAll(MARKER))
|
|
142
|
+
markers.add(m[1] ?? m[0]);
|
|
143
|
+
return { sources, links, markers: markers.size, sourcesLine: SOURCES_LINE.test(text) };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Does this reply cite sources the conversation never read? The loop asks
|
|
147
|
+
* only for the final text of a turn in which nothing was read — no tool call,
|
|
148
|
+
* no delegation, no native search — so "cites" here means "invented".
|
|
149
|
+
*/
|
|
150
|
+
export function citesUnread(reply, known = '') {
|
|
151
|
+
const s = citationSignals(reply, known);
|
|
152
|
+
if (s.sources.length >= 2)
|
|
153
|
+
return true;
|
|
154
|
+
if (s.sources.length + s.links.length >= 1 && (s.markers >= 1 || s.sourcesLine))
|
|
155
|
+
return true;
|
|
156
|
+
return s.markers >= 2 && s.sourcesLine;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=grounding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grounding.js","sourceRoot":"","sources":["../src/grounding.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export * from './rate-limit.js';
|
|
|
8
8
|
export * from './transport.js';
|
|
9
9
|
export * from './attachments.js';
|
|
10
10
|
export * from './loop.js';
|
|
11
|
+
export * from './grounding.js';
|
|
11
12
|
export * from './delegate.js';
|
|
12
13
|
export * from './projection.js';
|
|
13
14
|
export * from './context-window.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAE5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACnJ,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAE5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACnJ,cAAc,qBAAqB,CAAC"}
|
|
@@ -8,6 +8,7 @@ export * from './rate-limit.js';
|
|
|
8
8
|
export * from './transport.js';
|
|
9
9
|
export * from './attachments.js';
|
|
10
10
|
export * from './loop.js';
|
|
11
|
+
export * from './grounding.js';
|
|
11
12
|
export * from './delegate.js';
|
|
12
13
|
export * from './projection.js';
|
|
13
14
|
export * from './context-window.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,yEAAyE;AACzE,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAwB,MAAM,sBAAsB,CAAC;AACnJ,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,yEAAyE;AACzE,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAwB,MAAM,sBAAsB,CAAC;AACnJ,cAAc,qBAAqB,CAAC"}
|
|
@@ -76,6 +76,13 @@ export interface RunAgentOptions {
|
|
|
76
76
|
* is `onText`.
|
|
77
77
|
*/
|
|
78
78
|
onDelta?: (delta: CompletionDelta) => void;
|
|
79
|
+
/**
|
|
80
|
+
* The words streamed through `onDelta` for the turn just written are
|
|
81
|
+
* withdrawn: the grounding guard held that answer back (it cited sources
|
|
82
|
+
* nothing in the run had read) and the model is answering again. A surface
|
|
83
|
+
* drawing the live text clears it; nothing of it was stored. Never awaited.
|
|
84
|
+
*/
|
|
85
|
+
onRetract?: () => void;
|
|
79
86
|
/**
|
|
80
87
|
* Whether a run that runs out of budget says so in the transcript. Default
|
|
81
88
|
* true — the owner is owed the sentence.
|
|
@@ -213,6 +220,12 @@ export interface Interjection {
|
|
|
213
220
|
/** Whoever queued it knows it by this. The loop only hands it back. */
|
|
214
221
|
id?: string;
|
|
215
222
|
text: string;
|
|
223
|
+
/**
|
|
224
|
+
* Files the owner sent with it. Hydrated when the loop takes the line — the
|
|
225
|
+
* bytes go to the model in the same tool-results turn as the words — and
|
|
226
|
+
* stored as references, the way an opening turn's files are.
|
|
227
|
+
*/
|
|
228
|
+
attachments?: readonly AttachmentRef[];
|
|
216
229
|
}
|
|
217
230
|
/**
|
|
218
231
|
* Where a run hears about what the owner said while it worked.
|
|
@@ -312,6 +325,12 @@ export interface RunResult {
|
|
|
312
325
|
usage: Usage;
|
|
313
326
|
/** Set only when `stopped === 'awaiting-approval'`. */
|
|
314
327
|
pendingActionId?: string;
|
|
328
|
+
/**
|
|
329
|
+
* The grounding guard's verdict: the answer cited sources, nothing in the
|
|
330
|
+
* run read anything, and asked once to verify it still did not. It was
|
|
331
|
+
* delivered all the same, and the surfaces draw `UNCHECKED_LINE` under it.
|
|
332
|
+
*/
|
|
333
|
+
unchecked?: boolean;
|
|
315
334
|
/**
|
|
316
335
|
* What this run actually ran on (docs/architecture.md, "Runtime provider port").
|
|
317
336
|
* Pinned provider, pinned model, credential kind — plus the concrete model
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAA0G,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzN,OAAO,KAAK,EAGV,YAAY,EAEZ,cAAc,EACd,eAAe,EACf,UAAU,EACV,KAAK,EACL,eAAe,EAChB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,9 @@ import { APPROVAL_RESUME_SPEAKER, DELEGATE_TOOL_NAME, SYSTEM_TOOLS, collectUntru
|
|
|
13
13
|
import { primeSecretScrubber, scrubDeep, scrubText } from '@buddi/core';
|
|
14
14
|
import { ProviderError, isThinkingBlock } from './anthropic.js';
|
|
15
15
|
import { NATIVE_SEARCH_SYSTEM_NOTE, planNativeSearch } from './search.js';
|
|
16
|
+
import { GROUNDING_RETRY_TEXT, citationSignals, citesUnread } from './grounding.js';
|
|
16
17
|
import { compactObservations } from './projection.js';
|
|
17
|
-
import { degradeMessages, DEFAULT_CAPABILITIES, } from './capabilities.js';
|
|
18
|
+
import { degradeContent, degradeMessages, DEFAULT_CAPABILITIES, } from './capabilities.js';
|
|
18
19
|
import { assertAttachmentCount, hydrateContent, hydrateMessages, toArtifactRefBlocks, } from './attachments.js';
|
|
19
20
|
/**
|
|
20
21
|
* The in-memory queue a surface with no durable store of its own hands to a
|
|
@@ -527,7 +528,13 @@ async function runAgentOnce(opts) {
|
|
|
527
528
|
const memory = opts.memoryPreamble ? await opts.memoryPreamble(agent.id) : '';
|
|
528
529
|
// The run's own agent and grant go along: a paragraph that is only for an
|
|
529
530
|
// agent holding certain tools (the learning one) is decided by the grant.
|
|
530
|
-
|
|
531
|
+
// The owner's words ride along, so the context can name a story of today's
|
|
532
|
+
// edition the message is about (the gateway's edition origin line).
|
|
533
|
+
const platformContext = await ctx.systemContext?.({
|
|
534
|
+
agentId: agent.id,
|
|
535
|
+
tools: tools.map((t) => t.name),
|
|
536
|
+
...(userMessage !== undefined ? { message: userMessage } : {}),
|
|
537
|
+
});
|
|
531
538
|
const system = composeSystem(agent.systemPrompt, [opts.systemSuffix, platformContext?.prompt].filter(Boolean).join('\n\n'), memory, opts.surface, search.enabled ? NATIVE_SEARCH_SYSTEM_NOTE : undefined);
|
|
532
539
|
// Provenance for every tool call this run makes. The caller's context is not
|
|
533
540
|
// mutated: it is shared across runs, and a run's identity is its own.
|
|
@@ -568,8 +575,10 @@ async function runAgentOnce(opts) {
|
|
|
568
575
|
const history = compactObservations(opts.transcript ? await opts.transcript.load() : await loadMessages(pool, conversationId));
|
|
569
576
|
// Stored history carries artifact_ref blocks; the provider needs the bytes.
|
|
570
577
|
const replayed = await hydrateMessages(history, opts.loadArtifact);
|
|
578
|
+
// Files sent with no words: the turn is the files alone. Providers refuse an
|
|
579
|
+
// empty text block, and each file already carries its own note to the model.
|
|
571
580
|
const userBlocks = [
|
|
572
|
-
{ type: 'text', text: openingText },
|
|
581
|
+
...(openingText.trim() === '' && attachments.length > 0 ? [] : [{ type: 'text', text: openingText }]),
|
|
573
582
|
...toArtifactRefBlocks(attachments),
|
|
574
583
|
];
|
|
575
584
|
const sentUserBlocks = await hydrateContent(userBlocks, opts.loadArtifact, {
|
|
@@ -668,6 +677,19 @@ async function runAgentOnce(opts) {
|
|
|
668
677
|
let waitingForOwner = false;
|
|
669
678
|
/** Turns spent only on own-budget tools: not counted against maxTurns. */
|
|
670
679
|
let exemptTurns = 0;
|
|
680
|
+
/**
|
|
681
|
+
* The grounding guard (docs/system-context.md, Grounding). `read` turns true
|
|
682
|
+
* at the first tool call or delegation that came back successfully, or the
|
|
683
|
+
* first native search of the run. A call that was unknown, refused,
|
|
684
|
+
* truncated, failed or still waits on the owner read nothing; until
|
|
685
|
+
* something did, an answer that cites sources cited them from memory. `regrounded`:
|
|
686
|
+
* that answer was held back once and the model asked to verify.
|
|
687
|
+
*/
|
|
688
|
+
let read = false;
|
|
689
|
+
let regrounded = false;
|
|
690
|
+
/** The answer the guard held back, delivered (flagged) if the retry says nothing. */
|
|
691
|
+
let heldBack;
|
|
692
|
+
let unchecked = false;
|
|
671
693
|
/**
|
|
672
694
|
* What the owner added, leased for the step that has not happened yet.
|
|
673
695
|
*
|
|
@@ -759,7 +781,6 @@ async function runAgentOnce(opts) {
|
|
|
759
781
|
// What is *sent back* keeps the provider's own blocks — a paused turn is
|
|
760
782
|
// only continuable with them. What is *stored* does not: see `persistable`.
|
|
761
783
|
messages.push({ role: 'assistant', content: assistantContent });
|
|
762
|
-
await persistMessage(pool, conversationId, 'assistant', persistable(assistantContent), opts.transcript?.speaker);
|
|
763
784
|
// The audit line for a search nobody dispatched. Written before the run can
|
|
764
785
|
// end, and before the next request, so the order in the log is the order it
|
|
765
786
|
// happened in.
|
|
@@ -780,7 +801,59 @@ async function runAgentOnce(opts) {
|
|
|
780
801
|
}
|
|
781
802
|
}
|
|
782
803
|
const toolUses = assistantContent.filter((b) => b.type === 'tool_use');
|
|
783
|
-
|
|
804
|
+
let turnText = textOf(assistantContent);
|
|
805
|
+
let delivered = assistantContent;
|
|
806
|
+
if ((res.searches?.length ?? 0) > 0)
|
|
807
|
+
read = true;
|
|
808
|
+
/*
|
|
809
|
+
* The grounding guard. A final answer, in a run that read nothing — no
|
|
810
|
+
* tool, no colleague, no search, not a decided approval coming back — that
|
|
811
|
+
* names sources the conversation never held was written from memory. It is
|
|
812
|
+
* not delivered: not stored, not said, its streamed words withdrawn. The
|
|
813
|
+
* model is told so once, in a turn the transcript does not keep, and
|
|
814
|
+
* answers again. A second answer that still reads nothing is delivered
|
|
815
|
+
* with the run marked `unchecked`, which the surfaces draw as a quiet
|
|
816
|
+
* line under it. `citesUnread` is precision-first; see grounding.ts.
|
|
817
|
+
*/
|
|
818
|
+
const finalAnswer = toolUses.length === 0 && res.stopReason !== 'pause_turn' && res.stopReason !== 'max_tokens';
|
|
819
|
+
if (finalAnswer && !read && resume === undefined && !waitingForOwner && (turnText !== '' || regrounded)) {
|
|
820
|
+
if (regrounded) {
|
|
821
|
+
unchecked = true;
|
|
822
|
+
// A retry that said nothing: the held-back answer goes out, flagged,
|
|
823
|
+
// rather than an empty reply.
|
|
824
|
+
if (turnText === '' && heldBack) {
|
|
825
|
+
delivered = heldBack.content;
|
|
826
|
+
turnText = heldBack.text;
|
|
827
|
+
}
|
|
828
|
+
await appendEvent(pool, 'run.grounding', { stage: 'unchecked', agentId: agent.id, ...(opts.runId ? { runId: opts.runId } : {}) }, conversationId);
|
|
829
|
+
}
|
|
830
|
+
else {
|
|
831
|
+
// What the agent legitimately carries counts as held too: its own
|
|
832
|
+
// prompt, its memory notes, the platform context it was given.
|
|
833
|
+
const known = [knownText(messages.slice(0, -1)), agent.systemPrompt, memory, platformContext?.prompt ?? ''].join('\n');
|
|
834
|
+
if (citesUnread(turnText, known)) {
|
|
835
|
+
regrounded = true;
|
|
836
|
+
const budgetLeft = turns - exemptTurns < agent.maxTurns && turns < agent.maxTurns + MAX_EXEMPT_TURNS;
|
|
837
|
+
await appendEvent(pool, 'run.grounding', {
|
|
838
|
+
stage: budgetLeft ? 'retried' : 'unchecked',
|
|
839
|
+
agentId: agent.id,
|
|
840
|
+
sources: citationSignals(turnText, known).sources.slice(0, 8),
|
|
841
|
+
...(opts.runId ? { runId: opts.runId } : {}),
|
|
842
|
+
}, conversationId);
|
|
843
|
+
if (budgetLeft) {
|
|
844
|
+
heldBack = { content: assistantContent, text: turnText };
|
|
845
|
+
try {
|
|
846
|
+
opts.onRetract?.();
|
|
847
|
+
}
|
|
848
|
+
catch { /* a surface's drawing never decides a run */ }
|
|
849
|
+
messages.push({ role: 'user', content: [{ type: 'text', text: GROUNDING_RETRY_TEXT }] });
|
|
850
|
+
continue;
|
|
851
|
+
}
|
|
852
|
+
unchecked = true;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
await persistMessage(pool, conversationId, 'assistant', persistable(delivered), opts.transcript?.speaker);
|
|
784
857
|
if (turnText) {
|
|
785
858
|
spoken.push({ text: turnText, beforeToolCall: toolUses.length > 0 });
|
|
786
859
|
await opts.onText?.(turnText);
|
|
@@ -872,6 +945,8 @@ async function runAgentOnce(opts) {
|
|
|
872
945
|
catch { /* a surface's drawing never decides a run */ }
|
|
873
946
|
}
|
|
874
947
|
if (outcome.ok) {
|
|
948
|
+
// Something came back: from here on the run has read (the guard).
|
|
949
|
+
read = true;
|
|
875
950
|
if (registry.waitsForOwner(call.name, outcome.output))
|
|
876
951
|
waitingForOwner = true;
|
|
877
952
|
// A tool that declares it saves files, and names them in its output,
|
|
@@ -968,17 +1043,30 @@ async function runAgentOnce(opts) {
|
|
|
968
1043
|
if (toolUses.length > 0 && toolUses.every((call) => registry.hasOwnBudget(call.name)))
|
|
969
1044
|
exemptTurns++;
|
|
970
1045
|
const lastTurn = turns - exemptTurns >= agent.maxTurns || turns >= agent.maxTurns + MAX_EXEMPT_TURNS || pendingActionId !== undefined || ctx.signal?.aborted === true;
|
|
971
|
-
const leased = lastTurn ? [] : ((await opts.interjections?.lease()) ?? [])
|
|
1046
|
+
const leased = lastTurn ? [] : ((await opts.interjections?.lease()) ?? [])
|
|
1047
|
+
.filter((item) => item.text.trim() !== '' || (item.attachments?.length ?? 0) > 0);
|
|
972
1048
|
// What the model is shown, and what the transcript keeps: the framing is
|
|
973
1049
|
// for the model — the record holds the owner's own words.
|
|
974
|
-
const
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
1050
|
+
const said = leased.map((item) => item.text).filter((text) => text.trim() !== '');
|
|
1051
|
+
// Files that came with them: references in the record, the bytes (or the
|
|
1052
|
+
// note, for what a model cannot look at) in what is sent. Never capped
|
|
1053
|
+
// into a failure here — each file was accepted when it was uploaded, and
|
|
1054
|
+
// a run must not die between two tool calls over one; an oversize one
|
|
1055
|
+
// goes as a placeholder, the way a replayed one does.
|
|
1056
|
+
const leasedRefs = toArtifactRefBlocks(leased.flatMap((item) => item.attachments ?? []));
|
|
1057
|
+
const sentRefs = leasedRefs.length === 0 ? [] : degradeContent(await hydrateContent(leasedRefs, opts.loadArtifact), capabilities);
|
|
1058
|
+
const spokenBlocks = [
|
|
1059
|
+
...(said.length === 0 ? [] : [{ type: 'text', text: interjectionText(said) }]),
|
|
1060
|
+
...sentRefs,
|
|
1061
|
+
];
|
|
1062
|
+
const storedBlocks = [
|
|
1063
|
+
...(said.length === 0 ? [] : [{ type: 'text', text: said.map((text) => text.trim()).join('\n\n') }]),
|
|
1064
|
+
...leasedRefs,
|
|
1065
|
+
];
|
|
1066
|
+
const uploaded = leased.flatMap((item) => item.attachments ?? [])
|
|
1067
|
+
.map((a) => ({ artifactId: a.artifactId, kind: 'uploaded', agentId: null }));
|
|
980
1068
|
messages.push({ role: 'user', content: [...results, ...spokenBlocks] });
|
|
981
|
-
const turnMessageId = await persistMessage(pool, conversationId, 'user', [...results, ...storedBlocks], opts.transcript?.speaker, produced);
|
|
1069
|
+
const turnMessageId = await persistMessage(pool, conversationId, 'user', [...results, ...storedBlocks], opts.transcript?.speaker, [...produced, ...uploaded]);
|
|
982
1070
|
if (leased.length > 0) {
|
|
983
1071
|
inFlight = leased;
|
|
984
1072
|
inFlightMessageId = turnMessageId;
|
|
@@ -1069,6 +1157,8 @@ async function runAgentOnce(opts) {
|
|
|
1069
1157
|
...(opts.surface ? { surface: opts.surface.id } : {}),
|
|
1070
1158
|
...(opts.runId ? { runId: opts.runId } : {}),
|
|
1071
1159
|
...(pendingActionId ? { actionId: pendingActionId } : {}),
|
|
1160
|
+
// Delivered from memory after the grounding guard asked for a check.
|
|
1161
|
+
...(unchecked ? { unchecked: true } : {}),
|
|
1072
1162
|
}, conversationId);
|
|
1073
1163
|
return {
|
|
1074
1164
|
text: joinSpoken(spoken),
|
|
@@ -1077,6 +1167,26 @@ async function runAgentOnce(opts) {
|
|
|
1077
1167
|
usage,
|
|
1078
1168
|
snapshot,
|
|
1079
1169
|
...(pendingActionId ? { pendingActionId } : {}),
|
|
1170
|
+
...(unchecked ? { unchecked: true } : {}),
|
|
1080
1171
|
};
|
|
1081
1172
|
}
|
|
1173
|
+
/**
|
|
1174
|
+
* Everything the conversation held before an answer, as one string, for the
|
|
1175
|
+
* grounding guard: a source the owner named, or a tool returned earlier, is
|
|
1176
|
+
* not one the answer invented.
|
|
1177
|
+
*/
|
|
1178
|
+
function knownText(messages) {
|
|
1179
|
+
const parts = [];
|
|
1180
|
+
for (const message of messages) {
|
|
1181
|
+
for (const block of message.content) {
|
|
1182
|
+
if (block.type === 'text')
|
|
1183
|
+
parts.push(block.text);
|
|
1184
|
+
else if (block.type === 'tool_result')
|
|
1185
|
+
parts.push(typeof block.content === 'string' ? block.content : JSON.stringify(block.content));
|
|
1186
|
+
else if (block.type === 'tool_use')
|
|
1187
|
+
parts.push(JSON.stringify(block.input));
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
return parts.join('\n');
|
|
1191
|
+
}
|
|
1082
1192
|
//# sourceMappingURL=loop.js.map
|