@agenticmail/enterprise 0.5.327 → 0.5.329
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/dist/agent-tools-F3CYENMK.js +13949 -0
- package/dist/browser-tool-P57PLVW2.js +4002 -0
- package/dist/chunk-3RI3AIJN.js +1519 -0
- package/dist/chunk-AD4DFKHR.js +4928 -0
- package/dist/chunk-UQXPVWXG.js +5101 -0
- package/dist/cli-agent-K6UFZRXC.js +2473 -0
- package/dist/cli-serve-4MT7RDEL.js +260 -0
- package/dist/cli.js +3 -3
- package/dist/dashboard/app.js +1 -1
- package/dist/dashboard/components/transport-encryption.js +0 -62
- package/dist/dashboard/pages/agent-detail/index.js +5 -2
- package/dist/dashboard/pages/agent-detail/manager.js +1 -1
- package/dist/dashboard/pages/agent-detail/overview.js +4 -2
- package/dist/dashboard/pages/agent-detail/tool-security.js +1 -1
- package/dist/dashboard/pages/domain-status.js +3 -6
- package/dist/dashboard/pages/memory-transfer.js +1 -1
- package/dist/dashboard/pages/messages.js +0 -1
- package/dist/dashboard/pages/roles.js +0 -2
- package/dist/dashboard/pages/workforce.js +0 -1
- package/dist/index.js +3 -3
- package/dist/runtime-L5ADJORP.js +45 -0
- package/dist/server-KSN56EZQ.js +28 -0
- package/dist/setup-UUNBBOQH.js +20 -0
- package/logs/cloudflared-error.log +42 -0
- package/logs/enterprise-out.log +6 -0
- package/package.json +1 -1
- package/src/admin/page-registry.ts +0 -290
- package/src/admin/routes.ts +0 -2968
- package/src/agent-tools/common.ts +0 -260
- package/src/agent-tools/index.ts +0 -542
- package/src/agent-tools/merge.ts +0 -62
- package/src/agent-tools/middleware.ts +0 -436
- package/src/agent-tools/schema/typebox.ts +0 -25
- package/src/agent-tools/security.ts +0 -352
- package/src/agent-tools/tool-resolver.ts +0 -1018
- package/src/agent-tools/tools/agenticmail.ts +0 -1017
- package/src/agent-tools/tools/bash.ts +0 -179
- package/src/agent-tools/tools/browser-tool.schema.ts +0 -112
- package/src/agent-tools/tools/browser-tool.ts +0 -388
- package/src/agent-tools/tools/browser.ts +0 -764
- package/src/agent-tools/tools/edit.ts +0 -100
- package/src/agent-tools/tools/enterprise-code-sandbox.ts +0 -395
- package/src/agent-tools/tools/enterprise-database.ts +0 -377
- package/src/agent-tools/tools/enterprise-diff.ts +0 -580
- package/src/agent-tools/tools/enterprise-documents.ts +0 -896
- package/src/agent-tools/tools/enterprise-http.ts +0 -485
- package/src/agent-tools/tools/enterprise-security-scan.ts +0 -528
- package/src/agent-tools/tools/enterprise-spreadsheet.ts +0 -825
- package/src/agent-tools/tools/glob.ts +0 -129
- package/src/agent-tools/tools/google/calendar.ts +0 -230
- package/src/agent-tools/tools/google/chat.ts +0 -725
- package/src/agent-tools/tools/google/contacts.ts +0 -209
- package/src/agent-tools/tools/google/docs.ts +0 -162
- package/src/agent-tools/tools/google/drive.ts +0 -392
- package/src/agent-tools/tools/google/forms.ts +0 -367
- package/src/agent-tools/tools/google/gmail.ts +0 -897
- package/src/agent-tools/tools/google/index.ts +0 -86
- package/src/agent-tools/tools/google/maps.ts +0 -543
- package/src/agent-tools/tools/google/meeting-voice.ts +0 -885
- package/src/agent-tools/tools/google/meetings.ts +0 -1094
- package/src/agent-tools/tools/google/sheets.ts +0 -215
- package/src/agent-tools/tools/google/slides.ts +0 -559
- package/src/agent-tools/tools/google/tasks.ts +0 -200
- package/src/agent-tools/tools/grep.ts +0 -178
- package/src/agent-tools/tools/integrations/_factory.ts +0 -102
- package/src/agent-tools/tools/integrations/activecampaign.ts +0 -14
- package/src/agent-tools/tools/integrations/adobe-sign.ts +0 -14
- package/src/agent-tools/tools/integrations/adp.ts +0 -14
- package/src/agent-tools/tools/integrations/airtable.ts +0 -14
- package/src/agent-tools/tools/integrations/apollo.ts +0 -14
- package/src/agent-tools/tools/integrations/asana.ts +0 -14
- package/src/agent-tools/tools/integrations/auth0.ts +0 -14
- package/src/agent-tools/tools/integrations/aws.ts +0 -14
- package/src/agent-tools/tools/integrations/azure-devops.ts +0 -14
- package/src/agent-tools/tools/integrations/bamboohr.ts +0 -14
- package/src/agent-tools/tools/integrations/basecamp.ts +0 -14
- package/src/agent-tools/tools/integrations/bigcommerce.ts +0 -14
- package/src/agent-tools/tools/integrations/bitbucket.ts +0 -14
- package/src/agent-tools/tools/integrations/box.ts +0 -14
- package/src/agent-tools/tools/integrations/brex.ts +0 -14
- package/src/agent-tools/tools/integrations/buffer.ts +0 -14
- package/src/agent-tools/tools/integrations/calendly.ts +0 -14
- package/src/agent-tools/tools/integrations/canva.ts +0 -14
- package/src/agent-tools/tools/integrations/chargebee.ts +0 -14
- package/src/agent-tools/tools/integrations/circleci.ts +0 -14
- package/src/agent-tools/tools/integrations/clickup.ts +0 -14
- package/src/agent-tools/tools/integrations/close.ts +0 -14
- package/src/agent-tools/tools/integrations/cloudflare.ts +0 -14
- package/src/agent-tools/tools/integrations/confluence.ts +0 -14
- package/src/agent-tools/tools/integrations/contentful.ts +0 -14
- package/src/agent-tools/tools/integrations/copper.ts +0 -14
- package/src/agent-tools/tools/integrations/crisp.ts +0 -14
- package/src/agent-tools/tools/integrations/crowdstrike.ts +0 -14
- package/src/agent-tools/tools/integrations/datadog.ts +0 -14
- package/src/agent-tools/tools/integrations/digitalocean.ts +0 -14
- package/src/agent-tools/tools/integrations/discord.ts +0 -14
- package/src/agent-tools/tools/integrations/docker.ts +0 -14
- package/src/agent-tools/tools/integrations/docusign.ts +0 -14
- package/src/agent-tools/tools/integrations/drift.ts +0 -14
- package/src/agent-tools/tools/integrations/dropbox.ts +0 -14
- package/src/agent-tools/tools/integrations/figma.ts +0 -14
- package/src/agent-tools/tools/integrations/firebase.ts +0 -14
- package/src/agent-tools/tools/integrations/flyio.ts +0 -14
- package/src/agent-tools/tools/integrations/freshbooks.ts +0 -14
- package/src/agent-tools/tools/integrations/freshdesk.ts +0 -14
- package/src/agent-tools/tools/integrations/freshsales.ts +0 -14
- package/src/agent-tools/tools/integrations/freshservice.ts +0 -14
- package/src/agent-tools/tools/integrations/front.ts +0 -14
- package/src/agent-tools/tools/integrations/github-actions.ts +0 -14
- package/src/agent-tools/tools/integrations/github.ts +0 -14
- package/src/agent-tools/tools/integrations/gitlab.ts +0 -14
- package/src/agent-tools/tools/integrations/gong.ts +0 -14
- package/src/agent-tools/tools/integrations/google-ads.ts +0 -14
- package/src/agent-tools/tools/integrations/google-analytics.ts +0 -14
- package/src/agent-tools/tools/integrations/google-cloud.ts +0 -14
- package/src/agent-tools/tools/integrations/gotomeeting.ts +0 -14
- package/src/agent-tools/tools/integrations/grafana.ts +0 -14
- package/src/agent-tools/tools/integrations/greenhouse.ts +0 -14
- package/src/agent-tools/tools/integrations/gusto.ts +0 -14
- package/src/agent-tools/tools/integrations/hashicorp-vault.ts +0 -14
- package/src/agent-tools/tools/integrations/heroku.ts +0 -14
- package/src/agent-tools/tools/integrations/hibob.ts +0 -14
- package/src/agent-tools/tools/integrations/hootsuite.ts +0 -14
- package/src/agent-tools/tools/integrations/hubspot.ts +0 -14
- package/src/agent-tools/tools/integrations/huggingface.ts +0 -14
- package/src/agent-tools/tools/integrations/index.ts +0 -474
- package/src/agent-tools/tools/integrations/intercom.ts +0 -14
- package/src/agent-tools/tools/integrations/jira.ts +0 -14
- package/src/agent-tools/tools/integrations/klaviyo.ts +0 -14
- package/src/agent-tools/tools/integrations/kubernetes.ts +0 -14
- package/src/agent-tools/tools/integrations/lattice.ts +0 -14
- package/src/agent-tools/tools/integrations/launchdarkly.ts +0 -14
- package/src/agent-tools/tools/integrations/lever.ts +0 -14
- package/src/agent-tools/tools/integrations/linear.ts +0 -14
- package/src/agent-tools/tools/integrations/linkedin.ts +0 -14
- package/src/agent-tools/tools/integrations/livechat.ts +0 -14
- package/src/agent-tools/tools/integrations/loom.ts +0 -14
- package/src/agent-tools/tools/integrations/mailchimp.ts +0 -14
- package/src/agent-tools/tools/integrations/mailgun.ts +0 -14
- package/src/agent-tools/tools/integrations/miro.ts +0 -14
- package/src/agent-tools/tools/integrations/mixpanel.ts +0 -14
- package/src/agent-tools/tools/integrations/monday.ts +0 -14
- package/src/agent-tools/tools/integrations/mongodb-atlas.ts +0 -14
- package/src/agent-tools/tools/integrations/neon.ts +0 -14
- package/src/agent-tools/tools/integrations/netlify.ts +0 -14
- package/src/agent-tools/tools/integrations/netsuite.ts +0 -14
- package/src/agent-tools/tools/integrations/newrelic.ts +0 -14
- package/src/agent-tools/tools/integrations/notion.ts +0 -14
- package/src/agent-tools/tools/integrations/okta.ts +0 -14
- package/src/agent-tools/tools/integrations/openai.ts +0 -14
- package/src/agent-tools/tools/integrations/opsgenie.ts +0 -14
- package/src/agent-tools/tools/integrations/outreach.ts +0 -14
- package/src/agent-tools/tools/integrations/paddle.ts +0 -14
- package/src/agent-tools/tools/integrations/pagerduty.ts +0 -14
- package/src/agent-tools/tools/integrations/pandadoc.ts +0 -14
- package/src/agent-tools/tools/integrations/paypal.ts +0 -14
- package/src/agent-tools/tools/integrations/personio.ts +0 -14
- package/src/agent-tools/tools/integrations/pinecone.ts +0 -14
- package/src/agent-tools/tools/integrations/pipedrive.ts +0 -14
- package/src/agent-tools/tools/integrations/plaid.ts +0 -14
- package/src/agent-tools/tools/integrations/postmark.ts +0 -14
- package/src/agent-tools/tools/integrations/power-automate.ts +0 -14
- package/src/agent-tools/tools/integrations/quickbooks.ts +0 -14
- package/src/agent-tools/tools/integrations/recurly.ts +0 -14
- package/src/agent-tools/tools/integrations/reddit.ts +0 -14
- package/src/agent-tools/tools/integrations/render.ts +0 -14
- package/src/agent-tools/tools/integrations/ringcentral.ts +0 -14
- package/src/agent-tools/tools/integrations/rippling.ts +0 -14
- package/src/agent-tools/tools/integrations/salesforce.ts +0 -14
- package/src/agent-tools/tools/integrations/salesloft.ts +0 -14
- package/src/agent-tools/tools/integrations/sanity.ts +0 -14
- package/src/agent-tools/tools/integrations/sap.ts +0 -14
- package/src/agent-tools/tools/integrations/segment.ts +0 -14
- package/src/agent-tools/tools/integrations/sendgrid.ts +0 -14
- package/src/agent-tools/tools/integrations/sentry.ts +0 -14
- package/src/agent-tools/tools/integrations/servicenow.ts +0 -14
- package/src/agent-tools/tools/integrations/shopify.ts +0 -14
- package/src/agent-tools/tools/integrations/shortcut.ts +0 -14
- package/src/agent-tools/tools/integrations/slack.ts +0 -14
- package/src/agent-tools/tools/integrations/smartsheet.ts +0 -14
- package/src/agent-tools/tools/integrations/snowflake.ts +0 -14
- package/src/agent-tools/tools/integrations/snyk.ts +0 -14
- package/src/agent-tools/tools/integrations/splunk.ts +0 -14
- package/src/agent-tools/tools/integrations/square.ts +0 -14
- package/src/agent-tools/tools/integrations/statuspage.ts +0 -14
- package/src/agent-tools/tools/integrations/stripe.ts +0 -14
- package/src/agent-tools/tools/integrations/supabase.ts +0 -14
- package/src/agent-tools/tools/integrations/teamwork.ts +0 -14
- package/src/agent-tools/tools/integrations/telegram.ts +0 -14
- package/src/agent-tools/tools/integrations/terraform.ts +0 -14
- package/src/agent-tools/tools/integrations/todoist.ts +0 -14
- package/src/agent-tools/tools/integrations/trello.ts +0 -14
- package/src/agent-tools/tools/integrations/twilio.ts +0 -14
- package/src/agent-tools/tools/integrations/twitter.ts +0 -14
- package/src/agent-tools/tools/integrations/vercel.ts +0 -14
- package/src/agent-tools/tools/integrations/weaviate.ts +0 -14
- package/src/agent-tools/tools/integrations/webex.ts +0 -14
- package/src/agent-tools/tools/integrations/webflow.ts +0 -14
- package/src/agent-tools/tools/integrations/whatsapp.ts +0 -14
- package/src/agent-tools/tools/integrations/whereby.ts +0 -14
- package/src/agent-tools/tools/integrations/woocommerce.ts +0 -14
- package/src/agent-tools/tools/integrations/wordpress.ts +0 -14
- package/src/agent-tools/tools/integrations/workday.ts +0 -14
- package/src/agent-tools/tools/integrations/wrike.ts +0 -14
- package/src/agent-tools/tools/integrations/xero.ts +0 -14
- package/src/agent-tools/tools/integrations/youtube.ts +0 -14
- package/src/agent-tools/tools/integrations/zendesk.ts +0 -14
- package/src/agent-tools/tools/integrations/zoho-crm.ts +0 -14
- package/src/agent-tools/tools/integrations/zoom.ts +0 -14
- package/src/agent-tools/tools/integrations/zuora.ts +0 -14
- package/src/agent-tools/tools/knowledge-search.ts +0 -318
- package/src/agent-tools/tools/local/coding.ts +0 -626
- package/src/agent-tools/tools/local/dependency-manager.ts +0 -647
- package/src/agent-tools/tools/local/file-edit.ts +0 -31
- package/src/agent-tools/tools/local/file-list.ts +0 -39
- package/src/agent-tools/tools/local/file-ops.ts +0 -48
- package/src/agent-tools/tools/local/file-read.ts +0 -39
- package/src/agent-tools/tools/local/file-search.ts +0 -46
- package/src/agent-tools/tools/local/file-write.ts +0 -28
- package/src/agent-tools/tools/local/filesystem.ts +0 -5
- package/src/agent-tools/tools/local/index.ts +0 -55
- package/src/agent-tools/tools/local/resolve-path.ts +0 -18
- package/src/agent-tools/tools/local/shell.ts +0 -277
- package/src/agent-tools/tools/local/system-info.ts +0 -29
- package/src/agent-tools/tools/management.ts +0 -425
- package/src/agent-tools/tools/mcp-bridge.ts +0 -142
- package/src/agent-tools/tools/mcp-server-tools.ts +0 -91
- package/src/agent-tools/tools/meeting-lifecycle.ts +0 -438
- package/src/agent-tools/tools/memory.ts +0 -509
- package/src/agent-tools/tools/messaging/index.ts +0 -6
- package/src/agent-tools/tools/messaging/telegram.ts +0 -167
- package/src/agent-tools/tools/messaging/whatsapp.ts +0 -651
- package/src/agent-tools/tools/microsoft/contacts.ts +0 -176
- package/src/agent-tools/tools/microsoft/excel-vba.ts +0 -331
- package/src/agent-tools/tools/microsoft/excel.ts +0 -261
- package/src/agent-tools/tools/microsoft/graph-api.ts +0 -161
- package/src/agent-tools/tools/microsoft/index.ts +0 -95
- package/src/agent-tools/tools/microsoft/onedrive.ts +0 -429
- package/src/agent-tools/tools/microsoft/onenote.ts +0 -186
- package/src/agent-tools/tools/microsoft/outlook-calendar.ts +0 -286
- package/src/agent-tools/tools/microsoft/outlook-mail.ts +0 -723
- package/src/agent-tools/tools/microsoft/planner.ts +0 -200
- package/src/agent-tools/tools/microsoft/powerbi.ts +0 -266
- package/src/agent-tools/tools/microsoft/powerpoint.ts +0 -186
- package/src/agent-tools/tools/microsoft/sharepoint.ts +0 -328
- package/src/agent-tools/tools/microsoft/teams.ts +0 -463
- package/src/agent-tools/tools/microsoft/todo.ts +0 -181
- package/src/agent-tools/tools/oauth-token-provider.ts +0 -101
- package/src/agent-tools/tools/read.ts +0 -160
- package/src/agent-tools/tools/visual-memory/capture.ts +0 -217
- package/src/agent-tools/tools/visual-memory/diff.ts +0 -283
- package/src/agent-tools/tools/visual-memory/index.ts +0 -698
- package/src/agent-tools/tools/visual-memory/phash.ts +0 -120
- package/src/agent-tools/tools/visual-memory/similarity.ts +0 -354
- package/src/agent-tools/tools/visual-memory/storage.ts +0 -534
- package/src/agent-tools/tools/visual-memory/types.ts +0 -100
- package/src/agent-tools/tools/web-fetch-utils.ts +0 -202
- package/src/agent-tools/tools/web-fetch.ts +0 -464
- package/src/agent-tools/tools/web-search.ts +0 -480
- package/src/agent-tools/tools/web-shared.ts +0 -232
- package/src/agent-tools/tools/write.ts +0 -68
- package/src/agent-tools/types.ts +0 -214
- package/src/agenticmail/index.ts +0 -34
- package/src/agenticmail/manager.ts +0 -253
- package/src/agenticmail/providers/google.ts +0 -391
- package/src/agenticmail/providers/imap.ts +0 -454
- package/src/agenticmail/providers/index.ts +0 -28
- package/src/agenticmail/providers/microsoft.ts +0 -260
- package/src/agenticmail/types.ts +0 -173
- package/src/auth/routes.ts +0 -1589
- package/src/browser/bridge-auth-registry.ts +0 -34
- package/src/browser/bridge-server.ts +0 -93
- package/src/browser/cdp.helpers.ts +0 -180
- package/src/browser/cdp.ts +0 -466
- package/src/browser/chrome.executables.ts +0 -625
- package/src/browser/chrome.profile-decoration.ts +0 -198
- package/src/browser/chrome.ts +0 -349
- package/src/browser/client-actions-core.ts +0 -259
- package/src/browser/client-actions-observe.ts +0 -184
- package/src/browser/client-actions-state.ts +0 -284
- package/src/browser/client-actions-types.ts +0 -16
- package/src/browser/client-actions-url.ts +0 -11
- package/src/browser/client-actions.ts +0 -4
- package/src/browser/client-fetch.ts +0 -253
- package/src/browser/client.ts +0 -337
- package/src/browser/config.ts +0 -301
- package/src/browser/constants.ts +0 -8
- package/src/browser/control-auth.ts +0 -94
- package/src/browser/control-service.ts +0 -81
- package/src/browser/csrf.ts +0 -87
- package/src/browser/enterprise-compat.ts +0 -562
- package/src/browser/extension-relay.ts +0 -834
- package/src/browser/http-auth.ts +0 -63
- package/src/browser/navigation-guard.ts +0 -50
- package/src/browser/paths.ts +0 -49
- package/src/browser/playwright.d.ts +0 -12
- package/src/browser/profiles-service.ts +0 -187
- package/src/browser/profiles.ts +0 -114
- package/src/browser/proxy-files.ts +0 -41
- package/src/browser/pw-ai-module.ts +0 -52
- package/src/browser/pw-ai-state.ts +0 -9
- package/src/browser/pw-ai.ts +0 -65
- package/src/browser/pw-role-snapshot.ts +0 -434
- package/src/browser/pw-session.ts +0 -810
- package/src/browser/pw-tools-core.activity.ts +0 -68
- package/src/browser/pw-tools-core.downloads.ts +0 -281
- package/src/browser/pw-tools-core.interactions.ts +0 -646
- package/src/browser/pw-tools-core.responses.ts +0 -124
- package/src/browser/pw-tools-core.shared.ts +0 -70
- package/src/browser/pw-tools-core.snapshot.ts +0 -213
- package/src/browser/pw-tools-core.state.ts +0 -209
- package/src/browser/pw-tools-core.storage.ts +0 -128
- package/src/browser/pw-tools-core.trace.ts +0 -37
- package/src/browser/pw-tools-core.ts +0 -8
- package/src/browser/resolved-config-refresh.ts +0 -59
- package/src/browser/routes/agent.act.shared.ts +0 -52
- package/src/browser/routes/agent.act.ts +0 -575
- package/src/browser/routes/agent.debug.ts +0 -149
- package/src/browser/routes/agent.shared.ts +0 -143
- package/src/browser/routes/agent.snapshot.ts +0 -333
- package/src/browser/routes/agent.storage.ts +0 -451
- package/src/browser/routes/agent.ts +0 -13
- package/src/browser/routes/basic.ts +0 -202
- package/src/browser/routes/dispatcher.ts +0 -126
- package/src/browser/routes/index.ts +0 -11
- package/src/browser/routes/path-output.ts +0 -1
- package/src/browser/routes/tabs.ts +0 -217
- package/src/browser/routes/types.ts +0 -26
- package/src/browser/routes/utils.ts +0 -73
- package/src/browser/screenshot.ts +0 -54
- package/src/browser/server-context.ts +0 -688
- package/src/browser/server-context.types.ts +0 -65
- package/src/browser/server-lifecycle.ts +0 -48
- package/src/browser/server-middleware.ts +0 -37
- package/src/browser/server.ts +0 -110
- package/src/browser/target-id.ts +0 -30
- package/src/browser/trash.ts +0 -21
- package/src/cli-agent.ts +0 -2452
- package/src/cli-reset-password.ts +0 -138
- package/src/cli-serve.ts +0 -314
- package/src/cli.ts +0 -103
- package/src/dashboard/app.js +0 -579
- package/src/dashboard/assets/brand-logos.js +0 -350
- package/src/dashboard/assets/icons/emoji-icons.js +0 -893
- package/src/dashboard/assets/logo.png +0 -0
- package/src/dashboard/assets/provider-logos.js +0 -139
- package/src/dashboard/components/error-boundary.js +0 -21
- package/src/dashboard/components/help-button.js +0 -65
- package/src/dashboard/components/icons.js +0 -64
- package/src/dashboard/components/knowledge-link.js +0 -79
- package/src/dashboard/components/modal.js +0 -125
- package/src/dashboard/components/org-switcher.js +0 -156
- package/src/dashboard/components/persona-fields.js +0 -460
- package/src/dashboard/components/settings-help.js +0 -193
- package/src/dashboard/components/tag-input.js +0 -96
- package/src/dashboard/components/timezones.js +0 -352
- package/src/dashboard/components/transport-encryption.js +0 -288
- package/src/dashboard/components/utils.js +0 -205
- package/src/dashboard/data/countries.js +0 -255
- package/src/dashboard/docs/activity.html +0 -253
- package/src/dashboard/docs/agent-activity.html +0 -199
- package/src/dashboard/docs/agent-autonomy.html +0 -161
- package/src/dashboard/docs/agent-budget.html +0 -190
- package/src/dashboard/docs/agent-channels.html +0 -189
- package/src/dashboard/docs/agent-communication.html +0 -171
- package/src/dashboard/docs/agent-configuration.html +0 -194
- package/src/dashboard/docs/agent-deployment.html +0 -323
- package/src/dashboard/docs/agent-email.html +0 -184
- package/src/dashboard/docs/agent-guardrails.html +0 -206
- package/src/dashboard/docs/agent-manager.html +0 -226
- package/src/dashboard/docs/agent-memory.html +0 -215
- package/src/dashboard/docs/agent-overview.html +0 -226
- package/src/dashboard/docs/agent-permissions.html +0 -305
- package/src/dashboard/docs/agent-personal.html +0 -155
- package/src/dashboard/docs/agent-security.html +0 -188
- package/src/dashboard/docs/agent-skills.html +0 -224
- package/src/dashboard/docs/agent-tool-security.html +0 -205
- package/src/dashboard/docs/agent-tools.html +0 -238
- package/src/dashboard/docs/agent-whatsapp.html +0 -210
- package/src/dashboard/docs/agent-workforce.html +0 -199
- package/src/dashboard/docs/agents.html +0 -258
- package/src/dashboard/docs/approvals.html +0 -200
- package/src/dashboard/docs/audit.html +0 -206
- package/src/dashboard/docs/browser-providers.html +0 -313
- package/src/dashboard/docs/cluster.html +0 -285
- package/src/dashboard/docs/community-skills.html +0 -253
- package/src/dashboard/docs/compliance.html +0 -221
- package/src/dashboard/docs/dashboard.html +0 -84
- package/src/dashboard/docs/database-access.html +0 -322
- package/src/dashboard/docs/dlp.html +0 -268
- package/src/dashboard/docs/docs-style.css +0 -26
- package/src/dashboard/docs/domain-status.html +0 -294
- package/src/dashboard/docs/guardrails.html +0 -265
- package/src/dashboard/docs/journal.html +0 -197
- package/src/dashboard/docs/knowledge-contributions.html +0 -286
- package/src/dashboard/docs/knowledge.html +0 -268
- package/src/dashboard/docs/memory-transfer.html +0 -311
- package/src/dashboard/docs/messages.html +0 -217
- package/src/dashboard/docs/multi-tenant.html +0 -311
- package/src/dashboard/docs/org-chart.html +0 -239
- package/src/dashboard/docs/organizations.html +0 -182
- package/src/dashboard/docs/roles.html +0 -195
- package/src/dashboard/docs/settings-network.html +0 -321
- package/src/dashboard/docs/settings-security.html +0 -347
- package/src/dashboard/docs/settings-tool-security.html +0 -176
- package/src/dashboard/docs/settings.html +0 -280
- package/src/dashboard/docs/skill-connections.html +0 -270
- package/src/dashboard/docs/skills.html +0 -206
- package/src/dashboard/docs/task-pipeline.html +0 -261
- package/src/dashboard/docs/transport-encryption.html +0 -359
- package/src/dashboard/docs/users.html +0 -225
- package/src/dashboard/docs/vault.html +0 -260
- package/src/dashboard/docs/workforce.html +0 -245
- package/src/dashboard/index.html +0 -444
- package/src/dashboard/pages/activity.js +0 -379
- package/src/dashboard/pages/agent-detail/activity.js +0 -277
- package/src/dashboard/pages/agent-detail/autonomy.js +0 -244
- package/src/dashboard/pages/agent-detail/budget.js +0 -269
- package/src/dashboard/pages/agent-detail/channels.js +0 -494
- package/src/dashboard/pages/agent-detail/communication.js +0 -296
- package/src/dashboard/pages/agent-detail/configuration.js +0 -882
- package/src/dashboard/pages/agent-detail/deployment.js +0 -958
- package/src/dashboard/pages/agent-detail/email.js +0 -674
- package/src/dashboard/pages/agent-detail/guardrails.js +0 -521
- package/src/dashboard/pages/agent-detail/index.js +0 -261
- package/src/dashboard/pages/agent-detail/manager.js +0 -357
- package/src/dashboard/pages/agent-detail/meeting-browser.js +0 -933
- package/src/dashboard/pages/agent-detail/memory.js +0 -368
- package/src/dashboard/pages/agent-detail/overview.js +0 -844
- package/src/dashboard/pages/agent-detail/permissions.js +0 -1163
- package/src/dashboard/pages/agent-detail/personal-details.js +0 -404
- package/src/dashboard/pages/agent-detail/security.js +0 -409
- package/src/dashboard/pages/agent-detail/shared.js +0 -85
- package/src/dashboard/pages/agent-detail/skills-section.js +0 -183
- package/src/dashboard/pages/agent-detail/tool-security.js +0 -380
- package/src/dashboard/pages/agent-detail/tools.js +0 -322
- package/src/dashboard/pages/agent-detail/whatsapp.js +0 -824
- package/src/dashboard/pages/agent-detail/workforce.js +0 -683
- package/src/dashboard/pages/agents.js +0 -1242
- package/src/dashboard/pages/approvals.js +0 -100
- package/src/dashboard/pages/audit.js +0 -198
- package/src/dashboard/pages/cluster.js +0 -512
- package/src/dashboard/pages/community-skills.js +0 -1219
- package/src/dashboard/pages/compliance.js +0 -475
- package/src/dashboard/pages/dashboard.js +0 -180
- package/src/dashboard/pages/database-access.js +0 -812
- package/src/dashboard/pages/dlp.js +0 -293
- package/src/dashboard/pages/domain-status.js +0 -951
- package/src/dashboard/pages/guardrails.js +0 -1035
- package/src/dashboard/pages/journal.js +0 -172
- package/src/dashboard/pages/knowledge-contributions.js +0 -1682
- package/src/dashboard/pages/knowledge-import.js +0 -455
- package/src/dashboard/pages/knowledge.js +0 -582
- package/src/dashboard/pages/login.js +0 -1056
- package/src/dashboard/pages/memory-transfer.js +0 -631
- package/src/dashboard/pages/messages.js +0 -303
- package/src/dashboard/pages/org-chart.js +0 -349
- package/src/dashboard/pages/organizations.js +0 -1081
- package/src/dashboard/pages/roles.js +0 -780
- package/src/dashboard/pages/settings.js +0 -3790
- package/src/dashboard/pages/skill-connections.js +0 -982
- package/src/dashboard/pages/skills.js +0 -879
- package/src/dashboard/pages/task-pipeline.js +0 -684
- package/src/dashboard/pages/users.js +0 -867
- package/src/dashboard/pages/vault.js +0 -791
- package/src/dashboard/pages/workforce.js +0 -851
- package/src/dashboard/vendor/react-dom.development.js +0 -29924
- package/src/dashboard/vendor/react-dom.production.min.js +0 -267
- package/src/dashboard/vendor/react.development.js +0 -3343
- package/src/dashboard/vendor/react.production.min.js +0 -31
- package/src/database-access/agent-tools.ts +0 -193
- package/src/database-access/connection-manager.ts +0 -1341
- package/src/database-access/index.ts +0 -21
- package/src/database-access/query-sanitizer.ts +0 -220
- package/src/database-access/routes.ts +0 -226
- package/src/database-access/types.ts +0 -226
- package/src/db/adapter.ts +0 -510
- package/src/db/dynamodb.ts +0 -454
- package/src/db/factory.ts +0 -129
- package/src/db/mongodb.ts +0 -360
- package/src/db/mysql.ts +0 -531
- package/src/db/postgres.ts +0 -863
- package/src/db/proxy.ts +0 -39
- package/src/db/resolve-driver.ts +0 -29
- package/src/db/sql-schema.ts +0 -124
- package/src/db/sqlite.ts +0 -493
- package/src/db/turso.ts +0 -470
- package/src/deploy/fly.ts +0 -368
- package/src/deploy/managed.ts +0 -235
- package/src/domain-lock/cli-recover.ts +0 -591
- package/src/domain-lock/cli-verify.ts +0 -190
- package/src/domain-lock/index.ts +0 -220
- package/src/engine/activity-routes.ts +0 -154
- package/src/engine/activity.ts +0 -568
- package/src/engine/agent-autonomy.ts +0 -974
- package/src/engine/agent-config.ts +0 -646
- package/src/engine/agent-heartbeat.ts +0 -720
- package/src/engine/agent-hierarchy.ts +0 -1064
- package/src/engine/agent-memory.ts +0 -806
- package/src/engine/agent-notify.ts +0 -50
- package/src/engine/agent-routes.ts +0 -2583
- package/src/engine/agent-status.ts +0 -311
- package/src/engine/ambient-memory.ts +0 -401
- package/src/engine/approvals.ts +0 -615
- package/src/engine/assets/thinking-hum.mp3 +0 -0
- package/src/engine/catalog-routes.ts +0 -232
- package/src/engine/chat-poller.ts +0 -913
- package/src/engine/chat-webhook-routes.ts +0 -304
- package/src/engine/cli-build-skill.ts +0 -285
- package/src/engine/cli-submit-skill.ts +0 -200
- package/src/engine/cli-validate.ts +0 -188
- package/src/engine/cluster.ts +0 -278
- package/src/engine/communication-routes.ts +0 -139
- package/src/engine/communication.ts +0 -765
- package/src/engine/community-registry.ts +0 -1529
- package/src/engine/community-routes.ts +0 -260
- package/src/engine/compliance-routes.ts +0 -133
- package/src/engine/compliance.ts +0 -1679
- package/src/engine/config-bus.ts +0 -103
- package/src/engine/db-adapter.ts +0 -1156
- package/src/engine/db-schema.ts +0 -1945
- package/src/engine/deploy-schema-routes.ts +0 -176
- package/src/engine/deployer.ts +0 -957
- package/src/engine/dlp-routes.ts +0 -101
- package/src/engine/dlp.ts +0 -410
- package/src/engine/email-poller.ts +0 -855
- package/src/engine/emoji.ts +0 -106
- package/src/engine/guardrail-routes.ts +0 -125
- package/src/engine/guardrails.ts +0 -465
- package/src/engine/index.ts +0 -255
- package/src/engine/journal-routes.ts +0 -56
- package/src/engine/journal.ts +0 -249
- package/src/engine/knowledge-contribution-routes.ts +0 -633
- package/src/engine/knowledge-contribution.ts +0 -1386
- package/src/engine/knowledge-import/chunker.ts +0 -241
- package/src/engine/knowledge-import/import-manager.ts +0 -416
- package/src/engine/knowledge-import/index.ts +0 -27
- package/src/engine/knowledge-import/processors/clean.ts +0 -149
- package/src/engine/knowledge-import/processors/extract-gdrive.ts +0 -102
- package/src/engine/knowledge-import/processors/extract-github.ts +0 -74
- package/src/engine/knowledge-import/processors/extract-sharepoint.ts +0 -69
- package/src/engine/knowledge-import/processors/extract-web.ts +0 -275
- package/src/engine/knowledge-import/processors/index.ts +0 -18
- package/src/engine/knowledge-import/processors/pipeline.ts +0 -171
- package/src/engine/knowledge-import/processors/types.ts +0 -78
- package/src/engine/knowledge-import/processors/validate.ts +0 -150
- package/src/engine/knowledge-import/provider-file-upload.ts +0 -95
- package/src/engine/knowledge-import/provider-github.ts +0 -144
- package/src/engine/knowledge-import/provider-google-sites.ts +0 -323
- package/src/engine/knowledge-import/provider-sharepoint.ts +0 -276
- package/src/engine/knowledge-import/provider-url.ts +0 -218
- package/src/engine/knowledge-import/routes.ts +0 -94
- package/src/engine/knowledge-import/types.ts +0 -92
- package/src/engine/knowledge-routes.ts +0 -231
- package/src/engine/knowledge.ts +0 -587
- package/src/engine/lifecycle.ts +0 -1420
- package/src/engine/mcp-process-manager.ts +0 -573
- package/src/engine/meeting-monitor.ts +0 -483
- package/src/engine/meeting-voice-intelligence.ts +0 -340
- package/src/engine/memory-routes.ts +0 -142
- package/src/engine/memory-transfer-routes.ts +0 -339
- package/src/engine/messaging-history.ts +0 -177
- package/src/engine/messaging-poller.ts +0 -786
- package/src/engine/model-fallback.ts +0 -141
- package/src/engine/oauth-connect-routes.ts +0 -603
- package/src/engine/oauth-connect.ts +0 -304
- package/src/engine/onboarding-routes.ts +0 -148
- package/src/engine/onboarding.ts +0 -574
- package/src/engine/org-approval-routes.ts +0 -146
- package/src/engine/org-integration-routes.ts +0 -399
- package/src/engine/org-integrations.ts +0 -608
- package/src/engine/org-policies.ts +0 -502
- package/src/engine/policy-import-routes.ts +0 -125
- package/src/engine/policy-import.ts +0 -1186
- package/src/engine/policy-routes.ts +0 -163
- package/src/engine/routes.ts +0 -1236
- package/src/engine/screen-unlock.ts +0 -136
- package/src/engine/session-router.ts +0 -212
- package/src/engine/skill-updater-routes.ts +0 -132
- package/src/engine/skill-updater.ts +0 -480
- package/src/engine/skill-validator.ts +0 -331
- package/src/engine/skills/agent-management.ts +0 -119
- package/src/engine/skills/agent-memory.ts +0 -19
- package/src/engine/skills/agenticmail.ts +0 -116
- package/src/engine/skills/core-tools.ts +0 -25
- package/src/engine/skills/database-access.ts +0 -78
- package/src/engine/skills/enterprise-code-sandbox.ts +0 -113
- package/src/engine/skills/enterprise-database.ts +0 -123
- package/src/engine/skills/enterprise-diff.ts +0 -95
- package/src/engine/skills/enterprise-documents.ts +0 -162
- package/src/engine/skills/enterprise-http.ts +0 -99
- package/src/engine/skills/enterprise-security-scan.ts +0 -125
- package/src/engine/skills/enterprise-spreadsheet.ts +0 -171
- package/src/engine/skills/gws-admin.ts +0 -18
- package/src/engine/skills/gws-calendar.ts +0 -21
- package/src/engine/skills/gws-chat.ts +0 -29
- package/src/engine/skills/gws-contacts.ts +0 -20
- package/src/engine/skills/gws-docs.ts +0 -18
- package/src/engine/skills/gws-drive.ts +0 -23
- package/src/engine/skills/gws-forms.ts +0 -23
- package/src/engine/skills/gws-gmail.ts +0 -30
- package/src/engine/skills/gws-groups.ts +0 -17
- package/src/engine/skills/gws-keep.ts +0 -17
- package/src/engine/skills/gws-maps.ts +0 -25
- package/src/engine/skills/gws-meet.ts +0 -23
- package/src/engine/skills/gws-sheets.ts +0 -22
- package/src/engine/skills/gws-sites.ts +0 -16
- package/src/engine/skills/gws-slides.ts +0 -27
- package/src/engine/skills/gws-tasks.ts +0 -22
- package/src/engine/skills/gws-vault.ts +0 -17
- package/src/engine/skills/index.ts +0 -159
- package/src/engine/skills/knowledge-search.ts +0 -18
- package/src/engine/skills/local-system.ts +0 -61
- package/src/engine/skills/m365-admin.ts +0 -18
- package/src/engine/skills/m365-bookings.ts +0 -17
- package/src/engine/skills/m365-copilot.ts +0 -17
- package/src/engine/skills/m365-excel.ts +0 -60
- package/src/engine/skills/m365-forms.ts +0 -17
- package/src/engine/skills/m365-onedrive.ts +0 -60
- package/src/engine/skills/m365-onenote.ts +0 -17
- package/src/engine/skills/m365-outlook.ts +0 -27
- package/src/engine/skills/m365-planner.ts +0 -18
- package/src/engine/skills/m365-power-automate.ts +0 -18
- package/src/engine/skills/m365-power-bi.ts +0 -19
- package/src/engine/skills/m365-powerpoint.ts +0 -33
- package/src/engine/skills/m365-sharepoint.ts +0 -20
- package/src/engine/skills/m365-teams.ts +0 -21
- package/src/engine/skills/m365-todo.ts +0 -17
- package/src/engine/skills/m365-whiteboard.ts +0 -16
- package/src/engine/skills/m365-word.ts +0 -42
- package/src/engine/skills/mcp-bridge.ts +0 -45
- package/src/engine/skills/meeting-lifecycle.ts +0 -20
- package/src/engine/skills/messaging.ts +0 -46
- package/src/engine/skills/visual-memory.ts +0 -25
- package/src/engine/skills.ts +0 -688
- package/src/engine/soul-library.ts +0 -142
- package/src/engine/soul-templates.json +0 -1525
- package/src/engine/storage-manager.ts +0 -252
- package/src/engine/storage-routes.ts +0 -113
- package/src/engine/storage.ts +0 -528
- package/src/engine/task-poller.ts +0 -394
- package/src/engine/task-queue-after-spawn.ts +0 -66
- package/src/engine/task-queue-before-spawn.ts +0 -113
- package/src/engine/task-queue-routes.ts +0 -161
- package/src/engine/task-queue.ts +0 -664
- package/src/engine/tenant.ts +0 -409
- package/src/engine/tool-catalog.ts +0 -354
- package/src/engine/vault-routes.ts +0 -134
- package/src/engine/vault.ts +0 -601
- package/src/engine/workforce-routes.ts +0 -331
- package/src/engine/workforce.ts +0 -1161
- package/src/index.ts +0 -77
- package/src/lib/cidr.ts +0 -122
- package/src/lib/config-store.ts +0 -86
- package/src/lib/resilience.ts +0 -326
- package/src/lib/text-search.ts +0 -358
- package/src/mcp/adapters/activecampaign.adapter.ts +0 -391
- package/src/mcp/adapters/adobe-sign.adapter.ts +0 -469
- package/src/mcp/adapters/adp.adapter.ts +0 -358
- package/src/mcp/adapters/airtable.adapter.ts +0 -273
- package/src/mcp/adapters/apollo.adapter.ts +0 -420
- package/src/mcp/adapters/asana.adapter.ts +0 -315
- package/src/mcp/adapters/auth0.adapter.ts +0 -386
- package/src/mcp/adapters/aws.adapter.ts +0 -345
- package/src/mcp/adapters/azure-devops.adapter.ts +0 -389
- package/src/mcp/adapters/bamboohr.adapter.ts +0 -376
- package/src/mcp/adapters/basecamp.adapter.ts +0 -366
- package/src/mcp/adapters/bigcommerce.adapter.ts +0 -429
- package/src/mcp/adapters/bitbucket.adapter.ts +0 -260
- package/src/mcp/adapters/box.adapter.ts +0 -350
- package/src/mcp/adapters/brex.adapter.ts +0 -367
- package/src/mcp/adapters/buffer.adapter.ts +0 -303
- package/src/mcp/adapters/calendly.adapter.ts +0 -262
- package/src/mcp/adapters/canva.adapter.ts +0 -256
- package/src/mcp/adapters/chargebee.adapter.ts +0 -448
- package/src/mcp/adapters/circleci.adapter.ts +0 -216
- package/src/mcp/adapters/clickup.adapter.ts +0 -335
- package/src/mcp/adapters/close.adapter.ts +0 -390
- package/src/mcp/adapters/cloudflare.adapter.ts +0 -378
- package/src/mcp/adapters/confluence.adapter.ts +0 -301
- package/src/mcp/adapters/contentful.adapter.ts +0 -355
- package/src/mcp/adapters/copper.adapter.ts +0 -468
- package/src/mcp/adapters/crisp.adapter.ts +0 -415
- package/src/mcp/adapters/crowdstrike.adapter.ts +0 -413
- package/src/mcp/adapters/datadog.adapter.ts +0 -373
- package/src/mcp/adapters/digitalocean.adapter.ts +0 -336
- package/src/mcp/adapters/discord.adapter.ts +0 -248
- package/src/mcp/adapters/docker.adapter.ts +0 -238
- package/src/mcp/adapters/docusign.adapter.ts +0 -431
- package/src/mcp/adapters/drift.adapter.ts +0 -386
- package/src/mcp/adapters/dropbox.adapter.ts +0 -315
- package/src/mcp/adapters/figma.adapter.ts +0 -302
- package/src/mcp/adapters/firebase.adapter.ts +0 -446
- package/src/mcp/adapters/flyio.adapter.ts +0 -302
- package/src/mcp/adapters/freshbooks.adapter.ts +0 -474
- package/src/mcp/adapters/freshdesk.adapter.ts +0 -441
- package/src/mcp/adapters/freshsales.adapter.ts +0 -457
- package/src/mcp/adapters/freshservice.adapter.ts +0 -481
- package/src/mcp/adapters/front.adapter.ts +0 -357
- package/src/mcp/adapters/github-actions.adapter.ts +0 -329
- package/src/mcp/adapters/github.adapter.ts +0 -387
- package/src/mcp/adapters/gitlab.adapter.ts +0 -368
- package/src/mcp/adapters/gong.adapter.ts +0 -386
- package/src/mcp/adapters/google-ads.adapter.ts +0 -363
- package/src/mcp/adapters/google-analytics.adapter.ts +0 -316
- package/src/mcp/adapters/google-cloud.adapter.ts +0 -312
- package/src/mcp/adapters/gotomeeting.adapter.ts +0 -255
- package/src/mcp/adapters/grafana.adapter.ts +0 -361
- package/src/mcp/adapters/greenhouse.adapter.ts +0 -354
- package/src/mcp/adapters/gusto.adapter.ts +0 -329
- package/src/mcp/adapters/hashicorp-vault.adapter.ts +0 -355
- package/src/mcp/adapters/heroku.adapter.ts +0 -291
- package/src/mcp/adapters/hibob.adapter.ts +0 -334
- package/src/mcp/adapters/hootsuite.adapter.ts +0 -322
- package/src/mcp/adapters/hubspot.adapter.ts +0 -400
- package/src/mcp/adapters/huggingface.adapter.ts +0 -349
- package/src/mcp/adapters/index.ts +0 -524
- package/src/mcp/adapters/intercom.adapter.ts +0 -269
- package/src/mcp/adapters/jira.adapter.ts +0 -482
- package/src/mcp/adapters/klaviyo.adapter.ts +0 -353
- package/src/mcp/adapters/kubernetes.adapter.ts +0 -431
- package/src/mcp/adapters/lattice.adapter.ts +0 -339
- package/src/mcp/adapters/launchdarkly.adapter.ts +0 -368
- package/src/mcp/adapters/lever.adapter.ts +0 -347
- package/src/mcp/adapters/linear.adapter.ts +0 -300
- package/src/mcp/adapters/linkedin.adapter.ts +0 -331
- package/src/mcp/adapters/livechat.adapter.ts +0 -259
- package/src/mcp/adapters/loom.adapter.ts +0 -230
- package/src/mcp/adapters/mailchimp.adapter.ts +0 -394
- package/src/mcp/adapters/mailgun.adapter.ts +0 -425
- package/src/mcp/adapters/miro.adapter.ts +0 -274
- package/src/mcp/adapters/mixpanel.adapter.ts +0 -324
- package/src/mcp/adapters/monday.adapter.ts +0 -308
- package/src/mcp/adapters/mongodb-atlas.adapter.ts +0 -345
- package/src/mcp/adapters/neon.adapter.ts +0 -312
- package/src/mcp/adapters/netlify.adapter.ts +0 -324
- package/src/mcp/adapters/netsuite.adapter.ts +0 -411
- package/src/mcp/adapters/newrelic.adapter.ts +0 -339
- package/src/mcp/adapters/notion.adapter.ts +0 -338
- package/src/mcp/adapters/okta.adapter.ts +0 -394
- package/src/mcp/adapters/openai.adapter.ts +0 -315
- package/src/mcp/adapters/opsgenie.adapter.ts +0 -375
- package/src/mcp/adapters/outreach.adapter.ts +0 -372
- package/src/mcp/adapters/paddle.adapter.ts +0 -467
- package/src/mcp/adapters/pagerduty.adapter.ts +0 -412
- package/src/mcp/adapters/pandadoc.adapter.ts +0 -389
- package/src/mcp/adapters/paypal.adapter.ts +0 -465
- package/src/mcp/adapters/personio.adapter.ts +0 -401
- package/src/mcp/adapters/pinecone.adapter.ts +0 -340
- package/src/mcp/adapters/pipedrive.adapter.ts +0 -324
- package/src/mcp/adapters/plaid.adapter.ts +0 -444
- package/src/mcp/adapters/postmark.adapter.ts +0 -387
- package/src/mcp/adapters/power-automate.adapter.ts +0 -388
- package/src/mcp/adapters/quickbooks.adapter.ts +0 -431
- package/src/mcp/adapters/recurly.adapter.ts +0 -433
- package/src/mcp/adapters/reddit.adapter.ts +0 -371
- package/src/mcp/adapters/render.adapter.ts +0 -332
- package/src/mcp/adapters/ringcentral.adapter.ts +0 -281
- package/src/mcp/adapters/rippling.adapter.ts +0 -287
- package/src/mcp/adapters/salesforce.adapter.ts +0 -321
- package/src/mcp/adapters/salesloft.adapter.ts +0 -413
- package/src/mcp/adapters/sanity.adapter.ts +0 -363
- package/src/mcp/adapters/sap.adapter.ts +0 -483
- package/src/mcp/adapters/segment.adapter.ts +0 -260
- package/src/mcp/adapters/sendgrid.adapter.ts +0 -265
- package/src/mcp/adapters/sentry.adapter.ts +0 -331
- package/src/mcp/adapters/servicenow.adapter.ts +0 -468
- package/src/mcp/adapters/shopify.adapter.ts +0 -451
- package/src/mcp/adapters/shortcut.adapter.ts +0 -290
- package/src/mcp/adapters/slack.adapter.ts +0 -380
- package/src/mcp/adapters/smartsheet.adapter.ts +0 -326
- package/src/mcp/adapters/snowflake.adapter.ts +0 -347
- package/src/mcp/adapters/snyk.adapter.ts +0 -394
- package/src/mcp/adapters/splunk.adapter.ts +0 -403
- package/src/mcp/adapters/square.adapter.ts +0 -467
- package/src/mcp/adapters/statuspage.adapter.ts +0 -401
- package/src/mcp/adapters/stripe.adapter.ts +0 -380
- package/src/mcp/adapters/supabase.adapter.ts +0 -334
- package/src/mcp/adapters/teamwork.adapter.ts +0 -404
- package/src/mcp/adapters/telegram.adapter.ts +0 -299
- package/src/mcp/adapters/terraform.adapter.ts +0 -300
- package/src/mcp/adapters/todoist.adapter.ts +0 -239
- package/src/mcp/adapters/trello.adapter.ts +0 -316
- package/src/mcp/adapters/twilio.adapter.ts +0 -233
- package/src/mcp/adapters/twitter.adapter.ts +0 -348
- package/src/mcp/adapters/vercel.adapter.ts +0 -219
- package/src/mcp/adapters/weaviate.adapter.ts +0 -371
- package/src/mcp/adapters/webex.adapter.ts +0 -237
- package/src/mcp/adapters/webflow.adapter.ts +0 -287
- package/src/mcp/adapters/whatsapp.adapter.ts +0 -273
- package/src/mcp/adapters/whereby.adapter.ts +0 -240
- package/src/mcp/adapters/woocommerce.adapter.ts +0 -454
- package/src/mcp/adapters/wordpress.adapter.ts +0 -455
- package/src/mcp/adapters/workday.adapter.ts +0 -354
- package/src/mcp/adapters/wrike.adapter.ts +0 -349
- package/src/mcp/adapters/xero.adapter.ts +0 -472
- package/src/mcp/adapters/youtube.adapter.ts +0 -401
- package/src/mcp/adapters/zendesk.adapter.ts +0 -399
- package/src/mcp/adapters/zoho-crm.adapter.ts +0 -410
- package/src/mcp/adapters/zoom.adapter.ts +0 -241
- package/src/mcp/adapters/zuora.adapter.ts +0 -476
- package/src/mcp/framework/api-executor.ts +0 -192
- package/src/mcp/framework/aws-sigv4.ts +0 -216
- package/src/mcp/framework/credential-resolver.ts +0 -128
- package/src/mcp/framework/oauth-token-manager.ts +0 -22
- package/src/mcp/framework/skill-mcp-framework.ts +0 -226
- package/src/mcp/framework/types.ts +0 -130
- package/src/mcp/index.ts +0 -124
- package/src/mcp/integration-catalog.ts +0 -178
- package/src/middleware/dns-rebinding.ts +0 -44
- package/src/middleware/egress-filter.ts +0 -104
- package/src/middleware/firewall.ts +0 -192
- package/src/middleware/geo-ip.ts +0 -156
- package/src/middleware/index.ts +0 -390
- package/src/middleware/network-config.ts +0 -90
- package/src/middleware/proxy-config.ts +0 -71
- package/src/middleware/request-limits.ts +0 -59
- package/src/middleware/transport-encryption.ts +0 -398
- package/src/registry/cli.ts +0 -63
- package/src/registry/server.ts +0 -504
- package/src/runtime/agent-loop.ts +0 -779
- package/src/runtime/compaction.ts +0 -638
- package/src/runtime/email-channel.ts +0 -120
- package/src/runtime/environment.ts +0 -300
- package/src/runtime/followup.ts +0 -211
- package/src/runtime/gateway.ts +0 -260
- package/src/runtime/hooks.ts +0 -564
- package/src/runtime/index.ts +0 -1110
- package/src/runtime/llm-client.ts +0 -1056
- package/src/runtime/model-router.ts +0 -97
- package/src/runtime/providers.ts +0 -228
- package/src/runtime/session-manager.ts +0 -345
- package/src/runtime/subagent.ts +0 -153
- package/src/runtime/tool-executor.ts +0 -208
- package/src/runtime/types.ts +0 -255
- package/src/security/brute-force.ts +0 -423
- package/src/security/config.ts +0 -159
- package/src/security/csp.ts +0 -407
- package/src/security/external-content.ts +0 -299
- package/src/security/index.ts +0 -557
- package/src/security/input-sanitizer.ts +0 -452
- package/src/security/output-filter.ts +0 -575
- package/src/security/port-scanner.ts +0 -342
- package/src/security/prompt-guard.ts +0 -387
- package/src/security/sql-guard.ts +0 -338
- package/src/security/threat-logger.ts +0 -484
- package/src/server.ts +0 -828
- package/src/setup/company.ts +0 -183
- package/src/setup/database.ts +0 -153
- package/src/setup/deployment.ts +0 -561
- package/src/setup/domain.ts +0 -112
- package/src/setup/index.ts +0 -171
- package/src/setup/provision.ts +0 -532
- package/src/setup/registration.ts +0 -302
- package/src/system-prompts/catchup.ts +0 -48
- package/src/system-prompts/google/calendar.ts +0 -37
- package/src/system-prompts/google/chat.ts +0 -92
- package/src/system-prompts/google/contacts.ts +0 -25
- package/src/system-prompts/google/docs.ts +0 -29
- package/src/system-prompts/google/drive.ts +0 -34
- package/src/system-prompts/google/forms.ts +0 -25
- package/src/system-prompts/google/gmail.ts +0 -50
- package/src/system-prompts/google/index.ts +0 -23
- package/src/system-prompts/google/maps.ts +0 -20
- package/src/system-prompts/google/meet.ts +0 -130
- package/src/system-prompts/google/sheets.ts +0 -32
- package/src/system-prompts/google/slides.ts +0 -26
- package/src/system-prompts/google/tasks.ts +0 -27
- package/src/system-prompts/index.ts +0 -88
- package/src/system-prompts/microsoft/contacts.ts +0 -34
- package/src/system-prompts/microsoft/excel.ts +0 -52
- package/src/system-prompts/microsoft/index.ts +0 -31
- package/src/system-prompts/microsoft/onedrive.ts +0 -41
- package/src/system-prompts/microsoft/onenote.ts +0 -36
- package/src/system-prompts/microsoft/outlook-calendar.ts +0 -37
- package/src/system-prompts/microsoft/outlook-mail.ts +0 -46
- package/src/system-prompts/microsoft/planner.ts +0 -37
- package/src/system-prompts/microsoft/powerbi.ts +0 -38
- package/src/system-prompts/microsoft/powerpoint.ts +0 -35
- package/src/system-prompts/microsoft/sharepoint.ts +0 -44
- package/src/system-prompts/microsoft/teams.ts +0 -49
- package/src/system-prompts/microsoft/todo.ts +0 -37
- package/src/system-prompts/shared-blocks.ts +0 -87
- package/src/system-prompts/task.ts +0 -21
- package/src/system-prompts/triage.ts +0 -34
- package/src/types/hono-env.ts +0 -18
- package/src/types/optional-deps.d.ts +0 -10
- /package/{src → dist}/dashboard/HELP-TOOLTIPS-GUIDE.md +0 -0
package/src/runtime/index.ts
DELETED
|
@@ -1,1110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgenticMail Agent Runtime — Public API
|
|
3
|
-
*
|
|
4
|
-
* Standalone agent runtime for AgenticMail Enterprise.
|
|
5
|
-
* Runs agents entirely in-process with the enterprise engine.
|
|
6
|
-
* Built for long-running tasks (hours) with:
|
|
7
|
-
* - Incremental message persistence (crash recovery)
|
|
8
|
-
* - Session resume on startup
|
|
9
|
-
* - Heartbeat + stale session detection
|
|
10
|
-
* - LLM retry with exponential backoff
|
|
11
|
-
* - Budget gates before every LLM call
|
|
12
|
-
* - SSE keepalive streaming
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```ts
|
|
16
|
-
* import { createAgentRuntime } from '@agenticmail/enterprise';
|
|
17
|
-
*
|
|
18
|
-
* const runtime = createAgentRuntime({
|
|
19
|
-
* engineDb: db,
|
|
20
|
-
* apiKeys: { anthropic: "<from-database>" },
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* await runtime.start();
|
|
24
|
-
* const session = await runtime.spawnSession({
|
|
25
|
-
* agentId: 'agent-1',
|
|
26
|
-
* message: 'Hello!',
|
|
27
|
-
* });
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
import type { Hono } from 'hono';
|
|
32
|
-
import { nanoid } from 'nanoid';
|
|
33
|
-
import type {
|
|
34
|
-
RuntimeConfig,
|
|
35
|
-
SessionState,
|
|
36
|
-
SpawnOptions,
|
|
37
|
-
StreamEvent,
|
|
38
|
-
AgentConfig,
|
|
39
|
-
ModelConfig,
|
|
40
|
-
AgentMessage,
|
|
41
|
-
FollowUp,
|
|
42
|
-
} from './types.js';
|
|
43
|
-
import { SessionManager } from './session-manager.js';
|
|
44
|
-
import { createRuntimeHooks } from './hooks.js';
|
|
45
|
-
import { runAgentLoop } from './agent-loop.js';
|
|
46
|
-
import { createToolsForContext, detectSessionContext, getToolSetStats, getToolsForSession, clearSessionToolState, type SessionContext } from '../agent-tools/tool-resolver.js';
|
|
47
|
-
import { resolveModelForContext as resolveModel, type ModelRoute, type ModelContext } from './model-router.js';
|
|
48
|
-
import { createRuntimeGateway, emitSessionEvent } from './gateway.js';
|
|
49
|
-
import { SubAgentManager, type SpawnSubAgentResult } from './subagent.js';
|
|
50
|
-
import { EmailChannel, type InboundEmail, type InboundEmailResult } from './email-channel.js';
|
|
51
|
-
import { FollowUpScheduler } from './followup.js';
|
|
52
|
-
import { resolveApiKeyForProvider, PROVIDER_REGISTRY, type CustomProviderDef } from './providers.js';
|
|
53
|
-
|
|
54
|
-
// ─── Re-exports ──────────────────────────────────────────
|
|
55
|
-
|
|
56
|
-
export type {
|
|
57
|
-
AgentMessage,
|
|
58
|
-
AgentConfig,
|
|
59
|
-
SessionState,
|
|
60
|
-
StreamEvent,
|
|
61
|
-
RuntimeConfig,
|
|
62
|
-
ModelConfig,
|
|
63
|
-
SpawnOptions,
|
|
64
|
-
RuntimeHooks,
|
|
65
|
-
ToolCallContext,
|
|
66
|
-
HookResult,
|
|
67
|
-
ToolCallResult,
|
|
68
|
-
BudgetCheckResult,
|
|
69
|
-
FollowUp,
|
|
70
|
-
ContentBlock,
|
|
71
|
-
ToolCall,
|
|
72
|
-
ToolResultMsg,
|
|
73
|
-
SessionStatus,
|
|
74
|
-
} from './types.js';
|
|
75
|
-
|
|
76
|
-
export { SessionManager } from './session-manager.js';
|
|
77
|
-
export { createRuntimeHooks, createNoopHooks } from './hooks.js';
|
|
78
|
-
export { runAgentLoop } from './agent-loop.js';
|
|
79
|
-
export { callLLM, toolsToDefinitions, estimateTokens, estimateMessageTokens } from './llm-client.js';
|
|
80
|
-
export { ToolRegistry, executeTool } from './tool-executor.js';
|
|
81
|
-
export { SubAgentManager } from './subagent.js';
|
|
82
|
-
export { EmailChannel } from './email-channel.js';
|
|
83
|
-
export { FollowUpScheduler } from './followup.js';
|
|
84
|
-
export {
|
|
85
|
-
PROVIDER_REGISTRY,
|
|
86
|
-
resolveProvider,
|
|
87
|
-
resolveApiKeyForProvider,
|
|
88
|
-
listAllProviders,
|
|
89
|
-
type ProviderDef,
|
|
90
|
-
type CustomProviderDef,
|
|
91
|
-
type ApiType,
|
|
92
|
-
} from './providers.js';
|
|
93
|
-
|
|
94
|
-
// ─── Default Model ───────────────────────────────────────
|
|
95
|
-
|
|
96
|
-
var DEFAULT_MODEL: ModelConfig = {
|
|
97
|
-
provider: 'anthropic',
|
|
98
|
-
modelId: 'claude-sonnet-4-5-20250929',
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
// ─── Constants ───────────────────────────────────────────
|
|
102
|
-
|
|
103
|
-
var DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000; // 30s
|
|
104
|
-
var DEFAULT_STALE_SESSION_TIMEOUT_MS = 15 * 60_000; // 15 min — agents do real work (meetings, browser, etc.)
|
|
105
|
-
var DEFAULT_SSE_KEEPALIVE_MS = 15_000; // 15s
|
|
106
|
-
|
|
107
|
-
// ─── Agent Runtime ───────────────────────────────────────
|
|
108
|
-
|
|
109
|
-
export class AgentRuntime {
|
|
110
|
-
private config: RuntimeConfig;
|
|
111
|
-
private sessionManager: SessionManager | null = null;
|
|
112
|
-
private subAgentManager: SubAgentManager;
|
|
113
|
-
private followUpScheduler: FollowUpScheduler;
|
|
114
|
-
private emailChannel: EmailChannel | null = null;
|
|
115
|
-
private gatewayApp: Hono | null = null;
|
|
116
|
-
private activeSessions = new Map<string, AbortController>();
|
|
117
|
-
private sessionCompleteCallbacks = new Map<string, Array<(result: any) => void>>();
|
|
118
|
-
/** Sessions that should NOT complete even when the LLM returns end_turn (e.g., meeting monitor active) */
|
|
119
|
-
private keepAliveSessions = new Set<string>();
|
|
120
|
-
/** Sessions with an agent loop currently executing (LLM call in flight) */
|
|
121
|
-
private loopRunning = new Set<string>();
|
|
122
|
-
/** Queued messages for sessions whose loop is currently running — prevents concurrent loops */
|
|
123
|
-
private pendingMessages = new Map<string, string[]>();
|
|
124
|
-
private heartbeatTimer: NodeJS.Timeout | null = null;
|
|
125
|
-
private staleCheckTimer: NodeJS.Timeout | null = null;
|
|
126
|
-
private sseKeepaliveTimer: NodeJS.Timeout | null = null;
|
|
127
|
-
private started = false;
|
|
128
|
-
|
|
129
|
-
constructor(config: RuntimeConfig) {
|
|
130
|
-
this.config = config;
|
|
131
|
-
this.subAgentManager = new SubAgentManager();
|
|
132
|
-
this.followUpScheduler = new FollowUpScheduler({
|
|
133
|
-
engineDb: config.engineDb,
|
|
134
|
-
onDue: async (followUp) => {
|
|
135
|
-
if (followUp.sessionId) {
|
|
136
|
-
await this.sendMessage(followUp.sessionId, `[Scheduled Reminder] ${followUp.message}`);
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/** Build tool options for a given agent, including OAuth email config if available */
|
|
143
|
-
private buildToolOptions(agentId: string, sessionId?: string): any {
|
|
144
|
-
const self = this;
|
|
145
|
-
const base: any = {
|
|
146
|
-
agentId,
|
|
147
|
-
workspaceDir: process.cwd(),
|
|
148
|
-
agenticmailManager: this.config.agenticmailManager,
|
|
149
|
-
agentMemoryManager: this.config.agentMemoryManager,
|
|
150
|
-
engineDb: this.config.engineDb,
|
|
151
|
-
knowledgeEngine: this.config.knowledgeEngine,
|
|
152
|
-
orgId: this.config.orgId || process.env.ORG_ID || 'default',
|
|
153
|
-
runtimeRef: {
|
|
154
|
-
sendMessage: (sid: string, message: string) => self.sendMessage(sid, message),
|
|
155
|
-
getCurrentSessionId: () => sessionId,
|
|
156
|
-
setKeepAlive: (sid: string, keepAlive: boolean) => self.setKeepAlive(sid, keepAlive),
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
if (this.config.getEmailConfig) {
|
|
160
|
-
const ec = this.config.getEmailConfig(agentId);
|
|
161
|
-
if (ec?.oauthAccessToken) {
|
|
162
|
-
base.emailConfig = ec;
|
|
163
|
-
if (this.config.onTokenRefresh) {
|
|
164
|
-
const onRefresh = this.config.onTokenRefresh;
|
|
165
|
-
base.onTokenRefresh = (tokens: any) => onRefresh(agentId, tokens);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// Pass enabledGoogleServices from agent config
|
|
170
|
-
// Auto-derive from skills array if enabledGoogleServices is not explicitly set
|
|
171
|
-
if (this.config.getAgentConfig) {
|
|
172
|
-
const agentConfig = this.config.getAgentConfig(agentId);
|
|
173
|
-
if (agentConfig?.enabledGoogleServices?.length) {
|
|
174
|
-
base.enabledGoogleServices = agentConfig.enabledGoogleServices;
|
|
175
|
-
} else if (agentConfig?.skills?.length) {
|
|
176
|
-
// Map gws-* skills to Google service names
|
|
177
|
-
const skillToService: Record<string, string> = {
|
|
178
|
-
'gws-gmail': 'gmail', 'gws-calendar': 'calendar', 'gws-drive': 'drive',
|
|
179
|
-
'gws-tasks': 'tasks', 'gws-docs': 'docs', 'gws-sheets': 'sheets',
|
|
180
|
-
'gws-contacts': 'contacts', 'gws-chat': 'chat', 'gws-slides': 'slides',
|
|
181
|
-
'gws-forms': 'forms', 'gws-meet': 'meetings',
|
|
182
|
-
};
|
|
183
|
-
const derived = agentConfig.skills
|
|
184
|
-
.filter((s: string) => s.startsWith('gws-'))
|
|
185
|
-
.map((s: string) => skillToService[s])
|
|
186
|
-
.filter(Boolean);
|
|
187
|
-
if (derived.length) base.enabledGoogleServices = derived;
|
|
188
|
-
}
|
|
189
|
-
// Pass voice config for meeting TTS
|
|
190
|
-
if (agentConfig?.voiceConfig) {
|
|
191
|
-
base.voiceConfig = agentConfig.voiceConfig;
|
|
192
|
-
console.log(`[runtime] Voice config loaded: ${JSON.stringify(agentConfig.voiceConfig)}`);
|
|
193
|
-
} else {
|
|
194
|
-
console.log(`[runtime] No voiceConfig in agent config (keys: ${Object.keys(agentConfig || {}).join(', ')})`);
|
|
195
|
-
}
|
|
196
|
-
// Pass messaging channels config so telegram/whatsapp tools can be created
|
|
197
|
-
if (agentConfig?.messagingChannels) {
|
|
198
|
-
(base as any).agentConfig = { messagingChannels: agentConfig.messagingChannels };
|
|
199
|
-
}
|
|
200
|
-
// Pass agent-level tool security (path sandbox, SSRF, command sanitizer)
|
|
201
|
-
// Agent overrides take precedence, then fall back to org defaults
|
|
202
|
-
if (agentConfig?.toolSecurity?.security) {
|
|
203
|
-
base.security = agentConfig.toolSecurity.security;
|
|
204
|
-
} else if (self.orgToolSecurity) {
|
|
205
|
-
base.security = self.orgToolSecurity;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
// Pass vault for MCP skill bridge (Slack, GitHub, Jira, etc.)
|
|
209
|
-
if (this.config.vault) {
|
|
210
|
-
base.vault = this.config.vault;
|
|
211
|
-
}
|
|
212
|
-
// Pass permission engine for dynamic MCP tool registration
|
|
213
|
-
if (this.config.permissionEngine) {
|
|
214
|
-
base.permissionEngine = this.config.permissionEngine;
|
|
215
|
-
}
|
|
216
|
-
// API key resolvers from vault
|
|
217
|
-
if (this.config.getIntegrationKey) {
|
|
218
|
-
const getKey = this.config.getIntegrationKey;
|
|
219
|
-
base.mapsApiKeyResolver = () => getKey('google-maps');
|
|
220
|
-
base.elevenLabsKeyResolver = () => getKey('elevenlabs');
|
|
221
|
-
}
|
|
222
|
-
// Hierarchy manager for management tools
|
|
223
|
-
if (this.config.hierarchyManager) {
|
|
224
|
-
base.hierarchyManager = this.config.hierarchyManager;
|
|
225
|
-
}
|
|
226
|
-
// MCP Process Manager — external MCP server tools
|
|
227
|
-
if (this.config.mcpProcessManager) {
|
|
228
|
-
base.mcpProcessManager = this.config.mcpProcessManager;
|
|
229
|
-
}
|
|
230
|
-
// Database Connection Manager — enterprise database access tools
|
|
231
|
-
if (this.config.databaseManager) {
|
|
232
|
-
base.databaseManager = this.config.databaseManager;
|
|
233
|
-
}
|
|
234
|
-
return base;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Start the runtime — initializes session manager, gateway, schedulers,
|
|
239
|
-
* heartbeat, stale detection, and resumes active sessions.
|
|
240
|
-
*/
|
|
241
|
-
async start(): Promise<void> {
|
|
242
|
-
if (this.started) return;
|
|
243
|
-
|
|
244
|
-
// Load custom providers from DB
|
|
245
|
-
try {
|
|
246
|
-
if (this.config.adminDb) {
|
|
247
|
-
var settings = await this.config.adminDb.getSettings();
|
|
248
|
-
var pricingConfig = (settings as any)?.modelPricingConfig;
|
|
249
|
-
if (pricingConfig && pricingConfig.customProviders) {
|
|
250
|
-
this.customProviders = pricingConfig.customProviders;
|
|
251
|
-
}
|
|
252
|
-
// Load org-level tool security defaults
|
|
253
|
-
var toolSecConfig = (settings as any)?.toolSecurityConfig;
|
|
254
|
-
if (toolSecConfig?.security) {
|
|
255
|
-
this.orgToolSecurity = toolSecConfig.security;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
} catch {}
|
|
259
|
-
|
|
260
|
-
this.sessionManager = new SessionManager({ engineDb: this.config.engineDb });
|
|
261
|
-
|
|
262
|
-
// Set up email channel
|
|
263
|
-
var self = this;
|
|
264
|
-
this.emailChannel = new EmailChannel({
|
|
265
|
-
async resolveAgent(email) {
|
|
266
|
-
try {
|
|
267
|
-
var rows = await self.config.engineDb.query(
|
|
268
|
-
`SELECT id, org_id FROM managed_agents WHERE config LIKE ? AND state = 'running'`,
|
|
269
|
-
[`%${email}%`],
|
|
270
|
-
);
|
|
271
|
-
if (rows && rows.length > 0) {
|
|
272
|
-
var row = rows[0] as any;
|
|
273
|
-
return { agentId: row.id, orgId: row.org_id };
|
|
274
|
-
}
|
|
275
|
-
} catch {}
|
|
276
|
-
return null;
|
|
277
|
-
},
|
|
278
|
-
async findActiveSession(agentId, _senderEmail) {
|
|
279
|
-
var sessions = await self.sessionManager!.listSessions(agentId, { status: 'active', limit: 1 });
|
|
280
|
-
return sessions.length > 0 ? await self.sessionManager!.getSession(sessions[0].id) : null;
|
|
281
|
-
},
|
|
282
|
-
async createSession(agentId, orgId) {
|
|
283
|
-
return self.sessionManager!.createSession(agentId, orgId);
|
|
284
|
-
},
|
|
285
|
-
async sendMessage(sessionId, message) {
|
|
286
|
-
await self.sendMessage(sessionId, message);
|
|
287
|
-
},
|
|
288
|
-
});
|
|
289
|
-
|
|
290
|
-
// Create gateway app
|
|
291
|
-
if (this.config.gatewayEnabled !== false) {
|
|
292
|
-
this.gatewayApp = createRuntimeGateway({ runtime: this });
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Start follow-up scheduler (loads pending from DB)
|
|
296
|
-
await this.followUpScheduler.start();
|
|
297
|
-
|
|
298
|
-
// Start heartbeat timer — periodically touch active sessions
|
|
299
|
-
var heartbeatMs = this.config.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;
|
|
300
|
-
this.heartbeatTimer = setInterval(function() {
|
|
301
|
-
self.emitHeartbeats().catch(function() {});
|
|
302
|
-
}, heartbeatMs);
|
|
303
|
-
this.heartbeatTimer.unref();
|
|
304
|
-
|
|
305
|
-
// Start stale session detector
|
|
306
|
-
var staleTimeoutMs = this.config.staleSessionTimeoutMs ?? DEFAULT_STALE_SESSION_TIMEOUT_MS;
|
|
307
|
-
this.staleCheckTimer = setInterval(function() {
|
|
308
|
-
self.cleanupStaleSessions(staleTimeoutMs).catch(function() {});
|
|
309
|
-
}, staleTimeoutMs);
|
|
310
|
-
this.staleCheckTimer.unref();
|
|
311
|
-
|
|
312
|
-
// SSE keepalive — prevents proxy/LB from closing idle connections
|
|
313
|
-
this.sseKeepaliveTimer = setInterval(function() {
|
|
314
|
-
for (var [sessionId] of self.activeSessions) {
|
|
315
|
-
emitSessionEvent(sessionId, {
|
|
316
|
-
type: 'heartbeat',
|
|
317
|
-
timestamp: Date.now(),
|
|
318
|
-
activeTurns: self.activeSessions.size,
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
}, DEFAULT_SSE_KEEPALIVE_MS);
|
|
322
|
-
this.sseKeepaliveTimer.unref();
|
|
323
|
-
|
|
324
|
-
this.started = true;
|
|
325
|
-
console.log('[runtime] Agent runtime started');
|
|
326
|
-
|
|
327
|
-
// Resume active sessions from DB (unless disabled)
|
|
328
|
-
if (this.config.resumeOnStartup !== false) {
|
|
329
|
-
await this.resumeActiveSessions();
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* Spawn a new agent session and begin processing.
|
|
335
|
-
*/
|
|
336
|
-
async spawnSession(opts: SpawnOptions): Promise<SessionState> {
|
|
337
|
-
this.ensureStarted();
|
|
338
|
-
|
|
339
|
-
var agentId = opts.agentId;
|
|
340
|
-
var orgId = opts.orgId || 'default';
|
|
341
|
-
var model = opts.model || this.config.defaultModel || DEFAULT_MODEL;
|
|
342
|
-
|
|
343
|
-
// Create session in DB
|
|
344
|
-
var session = await this.sessionManager!.createSession(agentId, orgId, opts.parentSessionId);
|
|
345
|
-
|
|
346
|
-
// Inject persistent memory context into system prompt
|
|
347
|
-
var memoryContext = '';
|
|
348
|
-
if (this.config.agentMemoryManager) {
|
|
349
|
-
try { memoryContext = await this.config.agentMemoryManager.generateMemoryContext(agentId); } catch {}
|
|
350
|
-
}
|
|
351
|
-
// Inject hierarchy/management context
|
|
352
|
-
var hierarchyContext = '';
|
|
353
|
-
if (this.config.hierarchyManager) {
|
|
354
|
-
try { hierarchyContext = await this.config.hierarchyManager.buildManagerPrompt(agentId) || ''; } catch {}
|
|
355
|
-
}
|
|
356
|
-
var _agentCfg = this.config.getAgentConfig ? this.config.getAgentConfig(agentId) : null;
|
|
357
|
-
var _agentIdentity = _agentCfg?.identity || null;
|
|
358
|
-
// Get database connections for this agent
|
|
359
|
-
var _dbConnections: string[] = [];
|
|
360
|
-
try { if (this.config.databaseManager) _dbConnections = this.config.databaseManager.getAgentConnectionSummary(agentId); } catch {}
|
|
361
|
-
var systemPrompt = opts.systemPrompt || buildDefaultSystemPrompt(agentId, memoryContext, hierarchyContext, _agentIdentity, _dbConnections);
|
|
362
|
-
|
|
363
|
-
// Detect session context for dynamic tool loading
|
|
364
|
-
var sessionContext = detectSessionContext({
|
|
365
|
-
systemPrompt,
|
|
366
|
-
sessionKind: (opts as any).kind,
|
|
367
|
-
explicitContext: opts.sessionContext,
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
// Build tools — context-aware (only loads what's needed)
|
|
371
|
-
var toolOpts = this.buildToolOptions(agentId, session.id);
|
|
372
|
-
var tools = opts.tools || await createToolsForContext(toolOpts, sessionContext, {
|
|
373
|
-
additionalSets: opts.additionalSets as any,
|
|
374
|
-
sessionId: session.id,
|
|
375
|
-
userMessage: opts.message,
|
|
376
|
-
});
|
|
377
|
-
var toolStats = getToolSetStats(tools);
|
|
378
|
-
console.log(`[runtime] Session ${session.id} tools: ${toolStats.total} (context: ${sessionContext})${toolStats.unregistered.length ? `, unregistered: ${toolStats.unregistered.join(',')}` : ''}`);
|
|
379
|
-
|
|
380
|
-
// Track real-time status — report to enterprise server
|
|
381
|
-
if ((this as any)._reportStatus) {
|
|
382
|
-
(this as any)._reportStatus({
|
|
383
|
-
status: 'online',
|
|
384
|
-
activeSessions: this.activeSessions.size,
|
|
385
|
-
currentActivity: { type: sessionContext, detail: opts.message?.slice(0, 100), sessionId: session.id, startedAt: new Date().toISOString() },
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
// Per-context model override — resolves from agent's modelRouting config
|
|
390
|
-
var _contextModel = this.resolveModelForContext(agentId, sessionContext);
|
|
391
|
-
if (_contextModel) {
|
|
392
|
-
model = _contextModel;
|
|
393
|
-
console.log(`[runtime] ${sessionContext} session — using model: ${_contextModel.provider}/${_contextModel.modelId}`);
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
var agentConfig: AgentConfig = {
|
|
397
|
-
agentId,
|
|
398
|
-
orgId,
|
|
399
|
-
model,
|
|
400
|
-
systemPrompt,
|
|
401
|
-
tools,
|
|
402
|
-
};
|
|
403
|
-
|
|
404
|
-
// Resolve API key (org-scoped → system-wide)
|
|
405
|
-
var apiKey = await this.resolveApiKeyAsync(model.provider, agentId);
|
|
406
|
-
if (!apiKey) {
|
|
407
|
-
await this.sessionManager!.updateSession(session.id, { status: 'failed' });
|
|
408
|
-
throw new Error(`No API key configured for provider: ${model.provider}`);
|
|
409
|
-
}
|
|
410
|
-
// Debug: detect non-ASCII in API key
|
|
411
|
-
for (let ci = 0; ci < apiKey.length; ci++) {
|
|
412
|
-
if (apiKey.charCodeAt(ci) > 127) {
|
|
413
|
-
console.error(`[runtime] WARNING: API key for ${model.provider} contains non-ASCII at index ${ci}: charCode=${apiKey.charCodeAt(ci)}`);
|
|
414
|
-
break;
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
const initialContent = opts.messageContent || opts.message;
|
|
419
|
-
this.runSessionLoop(session.id, agentConfig, [{ role: 'user', content: initialContent }], apiKey);
|
|
420
|
-
|
|
421
|
-
return session;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/**
|
|
425
|
-
* Send a message to an active session.
|
|
426
|
-
*/
|
|
427
|
-
async sendMessage(sessionId: string, message: string): Promise<void> {
|
|
428
|
-
this.ensureStarted();
|
|
429
|
-
|
|
430
|
-
var session = await this.sessionManager!.getSession(sessionId);
|
|
431
|
-
if (!session) throw new Error(`Session not found: ${sessionId}`);
|
|
432
|
-
if (session.status !== 'active') throw new Error(`Session is not active: ${session.status}`);
|
|
433
|
-
|
|
434
|
-
// Append user message to DB immediately (always persisted)
|
|
435
|
-
await this.sessionManager!.appendMessage(sessionId, { role: 'user', content: message });
|
|
436
|
-
|
|
437
|
-
// If a loop is already running for this session, queue the message instead of starting
|
|
438
|
-
// a concurrent loop. The running loop will pick up queued messages when it finishes its turn.
|
|
439
|
-
if (this.loopRunning.has(sessionId)) {
|
|
440
|
-
var queue = this.pendingMessages.get(sessionId);
|
|
441
|
-
if (!queue) { queue = []; this.pendingMessages.set(sessionId, queue); }
|
|
442
|
-
queue.push(message);
|
|
443
|
-
console.log(`[runtime] Session ${sessionId} loop active — queued message (${queue.length} pending)`);
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
// Re-fetch session to get messages INCLUDING the newly appended user message
|
|
448
|
-
var updatedSession = await this.sessionManager!.getSession(sessionId);
|
|
449
|
-
var messages = updatedSession?.messages || [...session.messages, { role: 'user' as const, content: message }];
|
|
450
|
-
|
|
451
|
-
// Resume the agent loop with the updated messages
|
|
452
|
-
var model = this.config.defaultModel || DEFAULT_MODEL;
|
|
453
|
-
|
|
454
|
-
// Per-context model override (meeting, chat, email, task, etc.)
|
|
455
|
-
var _smCtx = this.keepAliveSessions.has(sessionId) ? 'meeting' : 'chat';
|
|
456
|
-
var _smModel = this.resolveModelForContext(session.agentId, _smCtx);
|
|
457
|
-
if (_smModel) {
|
|
458
|
-
model = _smModel;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
var apiKey = await this.resolveApiKeyAsync(model.provider, session.agentId);
|
|
462
|
-
if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
|
|
463
|
-
|
|
464
|
-
var memoryContext = '';
|
|
465
|
-
if (this.config.agentMemoryManager) {
|
|
466
|
-
try { memoryContext = await this.config.agentMemoryManager.generateMemoryContext(session.agentId); } catch {}
|
|
467
|
-
}
|
|
468
|
-
var _hierarchyCtx = '';
|
|
469
|
-
if (this.config.hierarchyManager) {
|
|
470
|
-
try { _hierarchyCtx = await this.config.hierarchyManager.buildManagerPrompt(session.agentId) || ''; } catch {}
|
|
471
|
-
}
|
|
472
|
-
var _aCfg2 = this.config.getAgentConfig ? this.config.getAgentConfig(session.agentId) : null;
|
|
473
|
-
var _dbConns2: string[] = [];
|
|
474
|
-
try { if (this.config.databaseManager) _dbConns2 = this.config.databaseManager.getAgentConnectionSummary(session.agentId); } catch {}
|
|
475
|
-
var _systemPrompt = buildDefaultSystemPrompt(session.agentId, memoryContext, _hierarchyCtx, _aCfg2?.identity, _dbConns2);
|
|
476
|
-
|
|
477
|
-
// Context-aware tool loading — reuses session tool state (preserves dynamically loaded sets)
|
|
478
|
-
// Don't re-detect context for keep-alive sessions (meetings) — they stay in their original context
|
|
479
|
-
var _sessionContext: SessionContext | undefined;
|
|
480
|
-
if (!this.keepAliveSessions.has(sessionId)) {
|
|
481
|
-
_sessionContext = detectSessionContext({
|
|
482
|
-
systemPrompt: _systemPrompt,
|
|
483
|
-
isKeepAlive: false,
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
var tools = await getToolsForSession(sessionId, this.buildToolOptions(session.agentId, sessionId), {
|
|
487
|
-
context: _sessionContext,
|
|
488
|
-
userMessage: message,
|
|
489
|
-
});
|
|
490
|
-
|
|
491
|
-
var agentConfig: AgentConfig = {
|
|
492
|
-
agentId: session.agentId,
|
|
493
|
-
orgId: session.orgId,
|
|
494
|
-
model,
|
|
495
|
-
systemPrompt: _systemPrompt,
|
|
496
|
-
tools,
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
this.runSessionLoop(sessionId, agentConfig, messages, apiKey);
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
/**
|
|
503
|
-
* Register a callback for when a session completes (or fails).
|
|
504
|
-
*/
|
|
505
|
-
onSessionComplete(sessionId: string, callback: (result: any) => void): void {
|
|
506
|
-
var existing = this.sessionCompleteCallbacks.get(sessionId);
|
|
507
|
-
if (!existing) { existing = []; this.sessionCompleteCallbacks.set(sessionId, existing); }
|
|
508
|
-
existing.push(callback);
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
/**
|
|
512
|
-
* Terminate an active session.
|
|
513
|
-
*/
|
|
514
|
-
async terminateSession(sessionId: string): Promise<void> {
|
|
515
|
-
var controller = this.activeSessions.get(sessionId);
|
|
516
|
-
if (controller) {
|
|
517
|
-
controller.abort();
|
|
518
|
-
this.activeSessions.delete(sessionId);
|
|
519
|
-
}
|
|
520
|
-
if (this.sessionManager) {
|
|
521
|
-
await this.sessionManager.updateSession(sessionId, { status: 'completed' });
|
|
522
|
-
}
|
|
523
|
-
// Track session end
|
|
524
|
-
if ((this as any)._reportStatus) {
|
|
525
|
-
(this as any)._reportStatus({
|
|
526
|
-
status: this.activeSessions.size > 0 ? 'online' : 'idle',
|
|
527
|
-
activeSessions: this.activeSessions.size,
|
|
528
|
-
currentActivity: null,
|
|
529
|
-
});
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
/**
|
|
534
|
-
* Get a session by ID.
|
|
535
|
-
*/
|
|
536
|
-
async getSession(sessionId: string): Promise<SessionState | null> {
|
|
537
|
-
this.ensureStarted();
|
|
538
|
-
return this.sessionManager!.getSession(sessionId);
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
/**
|
|
542
|
-
* List sessions for an agent.
|
|
543
|
-
*/
|
|
544
|
-
async listSessions(agentId: string, opts?: { status?: string; limit?: number }): Promise<Omit<SessionState, 'messages'>[]> {
|
|
545
|
-
this.ensureStarted();
|
|
546
|
-
return this.sessionManager!.listSessions(agentId, opts);
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
/**
|
|
550
|
-
* Spawn a sub-agent.
|
|
551
|
-
*/
|
|
552
|
-
async spawnSubAgent(opts: {
|
|
553
|
-
parentSessionId: string;
|
|
554
|
-
task: string;
|
|
555
|
-
agentId?: string;
|
|
556
|
-
model?: ModelConfig;
|
|
557
|
-
}): Promise<SpawnSubAgentResult> {
|
|
558
|
-
this.ensureStarted();
|
|
559
|
-
|
|
560
|
-
var check = this.subAgentManager.canSpawn(opts.parentSessionId);
|
|
561
|
-
if (!check.allowed) {
|
|
562
|
-
return { id: '', childSessionId: '', agentId: '', status: 'error', error: check.reason };
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
var parentSession = await this.sessionManager!.getSession(opts.parentSessionId);
|
|
566
|
-
if (!parentSession) {
|
|
567
|
-
return { id: '', childSessionId: '', agentId: '', status: 'error', error: 'Parent session not found' };
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
var agentId = opts.agentId || parentSession.agentId;
|
|
571
|
-
var childSession = await this.spawnSession({
|
|
572
|
-
agentId,
|
|
573
|
-
orgId: parentSession.orgId,
|
|
574
|
-
message: `[Sub-Agent Task] ${opts.task}`,
|
|
575
|
-
model: opts.model,
|
|
576
|
-
parentSessionId: opts.parentSessionId,
|
|
577
|
-
});
|
|
578
|
-
|
|
579
|
-
var id = nanoid(12);
|
|
580
|
-
this.subAgentManager.register({
|
|
581
|
-
id,
|
|
582
|
-
parentSessionId: opts.parentSessionId,
|
|
583
|
-
childSessionId: childSession.id,
|
|
584
|
-
agentId,
|
|
585
|
-
task: opts.task,
|
|
586
|
-
status: 'active',
|
|
587
|
-
createdAt: Date.now(),
|
|
588
|
-
});
|
|
589
|
-
|
|
590
|
-
return {
|
|
591
|
-
id,
|
|
592
|
-
childSessionId: childSession.id,
|
|
593
|
-
agentId,
|
|
594
|
-
status: 'accepted',
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
/**
|
|
599
|
-
* Handle inbound email.
|
|
600
|
-
*/
|
|
601
|
-
async handleInboundEmail(email: InboundEmail): Promise<InboundEmailResult> {
|
|
602
|
-
this.ensureStarted();
|
|
603
|
-
if (!this.emailChannel) throw new Error('Email channel not initialized');
|
|
604
|
-
return this.emailChannel.handleInbound(email);
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
/**
|
|
608
|
-
* Schedule a follow-up.
|
|
609
|
-
*/
|
|
610
|
-
async scheduleFollowUp(opts: { agentId: string; sessionId?: string; message: string; executeAt: Date }): Promise<string> {
|
|
611
|
-
return this.followUpScheduler.schedule(opts);
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
/**
|
|
615
|
-
* Cancel a follow-up.
|
|
616
|
-
*/
|
|
617
|
-
async cancelFollowUp(followUpId: string): Promise<boolean> {
|
|
618
|
-
return this.followUpScheduler.cancel(followUpId);
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
/**
|
|
622
|
-
* Get the Hono sub-app for mounting.
|
|
623
|
-
*/
|
|
624
|
-
getApp(): Hono | null {
|
|
625
|
-
return this.gatewayApp;
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
/**
|
|
629
|
-
* Get the number of active sessions.
|
|
630
|
-
*/
|
|
631
|
-
getActiveSessionCount(): number {
|
|
632
|
-
return this.activeSessions.size;
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
/**
|
|
636
|
-
* Mark a session as "keep alive" — prevents it from completing when the LLM returns end_turn.
|
|
637
|
-
* Used by MeetingMonitor to keep meeting sessions alive for incoming caption/chat updates.
|
|
638
|
-
* The session stays in 'active' status and waits for the next sendMessage() call.
|
|
639
|
-
*/
|
|
640
|
-
setKeepAlive(sessionId: string, keepAlive: boolean): void {
|
|
641
|
-
if (keepAlive) {
|
|
642
|
-
this.keepAliveSessions.add(sessionId);
|
|
643
|
-
console.log(`[runtime] Session ${sessionId} marked as keep-alive`);
|
|
644
|
-
} else {
|
|
645
|
-
this.keepAliveSessions.delete(sessionId);
|
|
646
|
-
console.log(`[runtime] Session ${sessionId} keep-alive removed`);
|
|
647
|
-
}
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
isKeepAlive(sessionId: string): boolean {
|
|
651
|
-
return this.keepAliveSessions.has(sessionId);
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
/**
|
|
655
|
-
* Stop the runtime.
|
|
656
|
-
*/
|
|
657
|
-
async stop(): Promise<void> {
|
|
658
|
-
if (!this.started) return;
|
|
659
|
-
|
|
660
|
-
// Cancel all active sessions
|
|
661
|
-
for (var [_sessionId, controller] of this.activeSessions) {
|
|
662
|
-
controller.abort();
|
|
663
|
-
}
|
|
664
|
-
this.activeSessions.clear();
|
|
665
|
-
|
|
666
|
-
// Stop timers
|
|
667
|
-
if (this.heartbeatTimer) { clearInterval(this.heartbeatTimer); this.heartbeatTimer = null; }
|
|
668
|
-
if (this.staleCheckTimer) { clearInterval(this.staleCheckTimer); this.staleCheckTimer = null; }
|
|
669
|
-
if (this.sseKeepaliveTimer) { clearInterval(this.sseKeepaliveTimer); this.sseKeepaliveTimer = null; }
|
|
670
|
-
|
|
671
|
-
// Stop scheduler
|
|
672
|
-
this.followUpScheduler.stop();
|
|
673
|
-
|
|
674
|
-
this.started = false;
|
|
675
|
-
console.log('[runtime] Agent runtime stopped');
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
// ─── Private: Session Loop ─────────────────────────
|
|
679
|
-
|
|
680
|
-
/**
|
|
681
|
-
* Run the agent loop for a session with all long-running features wired in:
|
|
682
|
-
* incremental persistence, heartbeat, retry, budget checks.
|
|
683
|
-
*/
|
|
684
|
-
private runSessionLoop(
|
|
685
|
-
sessionId: string,
|
|
686
|
-
agentConfig: AgentConfig,
|
|
687
|
-
initialMessages: AgentMessage[],
|
|
688
|
-
apiKey: string,
|
|
689
|
-
isResume?: boolean,
|
|
690
|
-
): void {
|
|
691
|
-
var self = this;
|
|
692
|
-
|
|
693
|
-
// Mark loop as running to prevent concurrent loops from sendMessage
|
|
694
|
-
this.loopRunning.add(sessionId);
|
|
695
|
-
|
|
696
|
-
// Per-context model override (deferred to async block for org-aware key resolution)
|
|
697
|
-
var _loopCtx = this.keepAliveSessions.has(sessionId) ? 'meeting' : 'chat';
|
|
698
|
-
var _loopModel = this.resolveModelForContext(agentConfig.agentId, _loopCtx);
|
|
699
|
-
|
|
700
|
-
// Create hooks
|
|
701
|
-
var hooks = createRuntimeHooks({
|
|
702
|
-
engineDb: this.config.engineDb,
|
|
703
|
-
agentId: agentConfig.agentId,
|
|
704
|
-
orgId: agentConfig.orgId,
|
|
705
|
-
});
|
|
706
|
-
|
|
707
|
-
// Create abort controller
|
|
708
|
-
var abortController = new AbortController();
|
|
709
|
-
this.activeSessions.set(sessionId, abortController);
|
|
710
|
-
|
|
711
|
-
// Emit session event
|
|
712
|
-
if (isResume) {
|
|
713
|
-
emitSessionEvent(sessionId, { type: 'session_resumed', sessionId, turnCount: 0 });
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
// Notify hooks
|
|
717
|
-
hooks.onSessionStart(sessionId, agentConfig.agentId, agentConfig.orgId).catch(function() {});
|
|
718
|
-
|
|
719
|
-
// Fire and forget — the loop runs in the background
|
|
720
|
-
(async function() {
|
|
721
|
-
try {
|
|
722
|
-
// Apply deferred model override with org-aware key resolution
|
|
723
|
-
if (_loopModel && agentConfig.model.modelId !== _loopModel.modelId) {
|
|
724
|
-
agentConfig = { ...agentConfig, model: _loopModel };
|
|
725
|
-
apiKey = await self.resolveApiKeyAsync(_loopModel.provider, agentConfig.agentId) || apiKey;
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
// Resolve fallback models for this agent
|
|
729
|
-
var _fallbackModels: string[] = [];
|
|
730
|
-
if (self.config.getAgentConfig) {
|
|
731
|
-
var _ac = self.config.getAgentConfig(agentConfig.agentId);
|
|
732
|
-
if (_ac?.fallbackModels) _fallbackModels = _ac.fallbackModels;
|
|
733
|
-
else if (_ac?.modelFallback?.fallbacks) _fallbackModels = _ac.modelFallback.fallbacks;
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
var result = await runAgentLoop(agentConfig, initialMessages, hooks, {
|
|
737
|
-
apiKey,
|
|
738
|
-
signal: abortController.signal,
|
|
739
|
-
sessionId,
|
|
740
|
-
retryConfig: self.config.retry,
|
|
741
|
-
runtime: self,
|
|
742
|
-
fallbackModels: _fallbackModels,
|
|
743
|
-
resolveApiKey: async function(provider: string) { return self.resolveApiKeyAsync(provider, agentConfig.agentId); },
|
|
744
|
-
|
|
745
|
-
// Incremental persistence — save messages after every turn
|
|
746
|
-
onCheckpoint: async function(data) {
|
|
747
|
-
try {
|
|
748
|
-
await self.sessionManager!.replaceMessages(sessionId, data.messages);
|
|
749
|
-
await self.sessionManager!.touchSession(sessionId, {
|
|
750
|
-
tokenCount: data.tokenCount,
|
|
751
|
-
turnCount: data.turnCount,
|
|
752
|
-
});
|
|
753
|
-
emitSessionEvent(sessionId, {
|
|
754
|
-
type: 'checkpoint',
|
|
755
|
-
turnNumber: data.turnCount,
|
|
756
|
-
tokenCount: data.tokenCount,
|
|
757
|
-
messageCount: data.messages.length,
|
|
758
|
-
});
|
|
759
|
-
} catch (err: any) {
|
|
760
|
-
console.warn(`[runtime] Checkpoint save error for ${sessionId}: ${err.message}`);
|
|
761
|
-
}
|
|
762
|
-
},
|
|
763
|
-
|
|
764
|
-
// Heartbeat — keep session alive during long operations
|
|
765
|
-
onHeartbeat: async function(data) {
|
|
766
|
-
try {
|
|
767
|
-
await self.sessionManager!.touchSession(sessionId, {
|
|
768
|
-
tokenCount: data.tokenCount,
|
|
769
|
-
turnCount: data.turnCount,
|
|
770
|
-
});
|
|
771
|
-
} catch {}
|
|
772
|
-
},
|
|
773
|
-
|
|
774
|
-
onEvent: function(event) {
|
|
775
|
-
emitSessionEvent(sessionId, event);
|
|
776
|
-
},
|
|
777
|
-
});
|
|
778
|
-
|
|
779
|
-
// Save messages and token count
|
|
780
|
-
await self.sessionManager!.replaceMessages(sessionId, result.messages);
|
|
781
|
-
|
|
782
|
-
// Check keep-alive: if active, DON'T complete — wait for next sendMessage()
|
|
783
|
-
if (self.keepAliveSessions.has(sessionId)) {
|
|
784
|
-
// Keep session in 'active' status — just save progress
|
|
785
|
-
await self.sessionManager!.touchSession(sessionId, {
|
|
786
|
-
tokenCount: result.tokenCount,
|
|
787
|
-
turnCount: result.turnCount,
|
|
788
|
-
});
|
|
789
|
-
|
|
790
|
-
// Clear loop-running flag BEFORE checking queue
|
|
791
|
-
self.loopRunning.delete(sessionId);
|
|
792
|
-
|
|
793
|
-
// Drain any messages that arrived while the loop was running
|
|
794
|
-
var queued = self.pendingMessages.get(sessionId);
|
|
795
|
-
if (queued && queued.length > 0) {
|
|
796
|
-
self.pendingMessages.delete(sessionId);
|
|
797
|
-
console.log(`[runtime] Session ${sessionId} keep-alive loop done — draining ${queued.length} queued message(s)`);
|
|
798
|
-
// result.messages was already saved via replaceMessages above, which overwrote
|
|
799
|
-
// the queued user messages that were appended during the loop. Re-append them now.
|
|
800
|
-
for (var qm of queued) {
|
|
801
|
-
await self.sessionManager!.appendMessage(sessionId, { role: 'user', content: qm });
|
|
802
|
-
}
|
|
803
|
-
// Re-fetch to get the complete history ending with user message(s)
|
|
804
|
-
var freshSession = await self.sessionManager!.getSession(sessionId);
|
|
805
|
-
var freshMessages = freshSession?.messages || [...result.messages, ...queued.map(function(q) { return { role: 'user' as const, content: q }; })];
|
|
806
|
-
// Verify conversation ends with a user message
|
|
807
|
-
var lastMsg = freshMessages[freshMessages.length - 1];
|
|
808
|
-
if (lastMsg && lastMsg.role !== 'user') {
|
|
809
|
-
// Safety: append a nudge so the LLM has a user message to respond to
|
|
810
|
-
var nudge = { role: 'user' as const, content: '[System] You have new messages above. Please respond.' };
|
|
811
|
-
freshMessages.push(nudge);
|
|
812
|
-
await self.sessionManager!.appendMessage(sessionId, nudge);
|
|
813
|
-
}
|
|
814
|
-
// Restart the loop with the accumulated messages
|
|
815
|
-
self.runSessionLoop(sessionId, agentConfig, freshMessages, apiKey);
|
|
816
|
-
} else {
|
|
817
|
-
console.log(`[runtime] Session ${sessionId} finished LLM turn but is keep-alive — staying active for incoming messages`);
|
|
818
|
-
}
|
|
819
|
-
// Don't delete from activeSessions, don't fire completion callbacks
|
|
820
|
-
// The next sendMessage() call will restart the loop
|
|
821
|
-
return;
|
|
822
|
-
}
|
|
823
|
-
|
|
824
|
-
// Normal completion
|
|
825
|
-
await self.sessionManager!.updateSession(sessionId, {
|
|
826
|
-
status: result.status,
|
|
827
|
-
tokenCount: result.tokenCount,
|
|
828
|
-
turnCount: result.turnCount,
|
|
829
|
-
});
|
|
830
|
-
|
|
831
|
-
// Clean up sub-agents
|
|
832
|
-
var cancelledChildren = self.subAgentManager.cancelAll(sessionId);
|
|
833
|
-
for (var childId of cancelledChildren) {
|
|
834
|
-
await self.terminateSession(childId).catch(function() {});
|
|
835
|
-
}
|
|
836
|
-
|
|
837
|
-
// Notify hooks of session end
|
|
838
|
-
await hooks.onSessionEnd(sessionId, agentConfig.agentId, agentConfig.orgId);
|
|
839
|
-
|
|
840
|
-
// Fire completion callbacks
|
|
841
|
-
var cbs = self.sessionCompleteCallbacks.get(sessionId);
|
|
842
|
-
if (cbs) { for (var cb of cbs) { try { cb(result); } catch {} } self.sessionCompleteCallbacks.delete(sessionId); }
|
|
843
|
-
|
|
844
|
-
} catch (err: any) {
|
|
845
|
-
console.error(`[runtime] Session ${sessionId} error: ${err.message}`);
|
|
846
|
-
self.loopRunning.delete(sessionId);
|
|
847
|
-
self.pendingMessages.delete(sessionId);
|
|
848
|
-
await self.sessionManager!.updateSession(sessionId, { status: 'failed' }).catch(function() {});
|
|
849
|
-
emitSessionEvent(sessionId, { type: 'error', message: err.message });
|
|
850
|
-
// Fire completion callbacks with failed status
|
|
851
|
-
var cbs2 = self.sessionCompleteCallbacks.get(sessionId);
|
|
852
|
-
if (cbs2) { for (var cb2 of cbs2) { try { cb2({ status: 'failed', error: err.message }); } catch {} } self.sessionCompleteCallbacks.delete(sessionId); }
|
|
853
|
-
} finally {
|
|
854
|
-
// Only remove from activeSessions if NOT keep-alive
|
|
855
|
-
if (!self.keepAliveSessions.has(sessionId)) {
|
|
856
|
-
self.loopRunning.delete(sessionId);
|
|
857
|
-
self.pendingMessages.delete(sessionId);
|
|
858
|
-
self.activeSessions.delete(sessionId);
|
|
859
|
-
clearSessionToolState(sessionId);
|
|
860
|
-
}
|
|
861
|
-
}
|
|
862
|
-
})();
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
// ─── Private: Session Resume ───────────────────────
|
|
866
|
-
|
|
867
|
-
/**
|
|
868
|
-
* Resume active sessions from DB on startup.
|
|
869
|
-
* Sessions that were in-progress when the process died get picked up again.
|
|
870
|
-
*/
|
|
871
|
-
private async resumeActiveSessions(): Promise<void> {
|
|
872
|
-
try {
|
|
873
|
-
var activeSessions = await this.sessionManager!.findActiveSessions();
|
|
874
|
-
if (activeSessions.length === 0) return;
|
|
875
|
-
|
|
876
|
-
console.log(`[runtime] Found ${activeSessions.length} active session(s) to resume`);
|
|
877
|
-
|
|
878
|
-
for (var sessionMeta of activeSessions) {
|
|
879
|
-
try {
|
|
880
|
-
// Load full session with messages
|
|
881
|
-
var session = await this.sessionManager!.getSession(sessionMeta.id);
|
|
882
|
-
if (!session || session.messages.length === 0) {
|
|
883
|
-
// No messages to resume — mark as completed
|
|
884
|
-
await this.sessionManager!.updateSession(sessionMeta.id, { status: 'completed' });
|
|
885
|
-
continue;
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
// For failed sessions: only resume if last non-system message is from user (agent never replied)
|
|
889
|
-
if (sessionMeta.status === 'failed') {
|
|
890
|
-
var lastUserIdx = -1;
|
|
891
|
-
var lastAssistantIdx = -1;
|
|
892
|
-
for (var mi = session.messages.length - 1; mi >= 0; mi--) {
|
|
893
|
-
if (session.messages[mi].role === 'user' && lastUserIdx < 0) lastUserIdx = mi;
|
|
894
|
-
if (session.messages[mi].role === 'assistant' && lastAssistantIdx < 0) lastAssistantIdx = mi;
|
|
895
|
-
if (lastUserIdx >= 0 && lastAssistantIdx >= 0) break;
|
|
896
|
-
}
|
|
897
|
-
if (lastUserIdx < lastAssistantIdx || lastUserIdx < 0) {
|
|
898
|
-
// Agent already replied or no user message — don't retry
|
|
899
|
-
await this.sessionManager!.updateSession(sessionMeta.id, { status: 'completed' });
|
|
900
|
-
continue;
|
|
901
|
-
}
|
|
902
|
-
console.log(`[runtime] Recovering failed session ${session.id} — agent never replied to user message`);
|
|
903
|
-
}
|
|
904
|
-
|
|
905
|
-
// Mark as resuming
|
|
906
|
-
await this.sessionManager!.updateSession(session.id, { status: 'active' as any });
|
|
907
|
-
|
|
908
|
-
var model = this.config.defaultModel || DEFAULT_MODEL;
|
|
909
|
-
var apiKey = await this.resolveApiKeyAsync(model.provider, session.agentId);
|
|
910
|
-
if (!apiKey) {
|
|
911
|
-
console.warn(`[runtime] Cannot resume session ${session.id}: no API key for ${model.provider}`);
|
|
912
|
-
await this.sessionManager!.updateSession(session.id, { status: 'failed' });
|
|
913
|
-
continue;
|
|
914
|
-
}
|
|
915
|
-
|
|
916
|
-
var mc = '';
|
|
917
|
-
if (this.config.agentMemoryManager) {
|
|
918
|
-
try { mc = await this.config.agentMemoryManager.generateMemoryContext(session.agentId); } catch {}
|
|
919
|
-
}
|
|
920
|
-
var _hc = '';
|
|
921
|
-
if (this.config.hierarchyManager) {
|
|
922
|
-
try { _hc = await this.config.hierarchyManager.buildManagerPrompt(session.agentId) || ''; } catch {}
|
|
923
|
-
}
|
|
924
|
-
var _rCfg = this.config.getAgentConfig ? this.config.getAgentConfig(session.agentId) : null;
|
|
925
|
-
var _dbC3: string[] = [];
|
|
926
|
-
try { if (this.config.databaseManager) _dbC3 = this.config.databaseManager.getAgentConnectionSummary(session.agentId); } catch {}
|
|
927
|
-
var _resumePrompt = buildDefaultSystemPrompt(session.agentId, mc, _hc, _rCfg?.identity, _dbC3);
|
|
928
|
-
var _resumeCtx = detectSessionContext({
|
|
929
|
-
systemPrompt: _resumePrompt,
|
|
930
|
-
isKeepAlive: this.keepAliveSessions.has(session.id),
|
|
931
|
-
});
|
|
932
|
-
var tools = await createToolsForContext(this.buildToolOptions(session.agentId, session.id), _resumeCtx, {
|
|
933
|
-
sessionId: session.id,
|
|
934
|
-
});
|
|
935
|
-
|
|
936
|
-
var agentConfig: AgentConfig = {
|
|
937
|
-
agentId: session.agentId,
|
|
938
|
-
orgId: session.orgId,
|
|
939
|
-
model,
|
|
940
|
-
systemPrompt: _resumePrompt,
|
|
941
|
-
tools,
|
|
942
|
-
};
|
|
943
|
-
|
|
944
|
-
// Inject a system message noting the resume
|
|
945
|
-
var resumeMessages = [...session.messages];
|
|
946
|
-
resumeMessages.push({
|
|
947
|
-
role: 'system',
|
|
948
|
-
content: `[Runtime Notice] Session resumed after process restart. Continue where you left off. Current time: ${new Date().toISOString()}`,
|
|
949
|
-
});
|
|
950
|
-
|
|
951
|
-
this.runSessionLoop(session.id, agentConfig, resumeMessages, apiKey, true);
|
|
952
|
-
console.log(`[runtime] Resumed session ${session.id} (agent: ${session.agentId}, turns: ${session.turnCount})`);
|
|
953
|
-
|
|
954
|
-
} catch (err: any) {
|
|
955
|
-
console.error(`[runtime] Failed to resume session ${sessionMeta.id}: ${err.message}`);
|
|
956
|
-
await this.sessionManager!.updateSession(sessionMeta.id, { status: 'failed' }).catch(function() {});
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
} catch (err: any) {
|
|
960
|
-
console.warn(`[runtime] Session resume scan failed: ${err.message}`);
|
|
961
|
-
}
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
// ─── Private: Heartbeat + Stale Detection ──────────
|
|
965
|
-
|
|
966
|
-
/**
|
|
967
|
-
* Emit heartbeats for all active sessions (touch DB updated_at).
|
|
968
|
-
*/
|
|
969
|
-
private async emitHeartbeats(): Promise<void> {
|
|
970
|
-
for (var [sessionId] of this.activeSessions) {
|
|
971
|
-
try {
|
|
972
|
-
await this.sessionManager!.touchSession(sessionId);
|
|
973
|
-
} catch {}
|
|
974
|
-
}
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
/**
|
|
978
|
-
* Find and mark sessions that have gone stale (no heartbeat within timeout).
|
|
979
|
-
*/
|
|
980
|
-
private async cleanupStaleSessions(timeoutMs: number): Promise<void> {
|
|
981
|
-
try {
|
|
982
|
-
var staleIds = await this.sessionManager!.markStaleSessions(timeoutMs);
|
|
983
|
-
for (var id of staleIds) {
|
|
984
|
-
// Clean up in-memory state
|
|
985
|
-
var controller = this.activeSessions.get(id);
|
|
986
|
-
if (controller) {
|
|
987
|
-
controller.abort();
|
|
988
|
-
this.activeSessions.delete(id);
|
|
989
|
-
}
|
|
990
|
-
console.warn(`[runtime] Marked stale session: ${id}`);
|
|
991
|
-
}
|
|
992
|
-
} catch {}
|
|
993
|
-
}
|
|
994
|
-
|
|
995
|
-
// ─── Private: Helpers ──────────────────────────────
|
|
996
|
-
|
|
997
|
-
private ensureStarted(): void {
|
|
998
|
-
if (!this.started) {
|
|
999
|
-
throw new Error('Runtime not started. Call runtime.start() first.');
|
|
1000
|
-
}
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
private customProviders: CustomProviderDef[] = [];
|
|
1004
|
-
private orgToolSecurity: any = null;
|
|
1005
|
-
|
|
1006
|
-
private _resolveApiKey(provider: string, agentId?: string): string | undefined {
|
|
1007
|
-
// Synchronous system-wide resolution
|
|
1008
|
-
return resolveApiKeyForProvider(provider, this.config.apiKeys, this.customProviders);
|
|
1009
|
-
}
|
|
1010
|
-
|
|
1011
|
-
/** Resolve API key with org-scoped fallback (async — checks org integrations first) */
|
|
1012
|
-
private async resolveApiKeyAsync(provider: string, agentId?: string): Promise<string | undefined> {
|
|
1013
|
-
// 1. Try org-scoped key if agent has org
|
|
1014
|
-
if (agentId && this.config.resolveOrgApiKey) {
|
|
1015
|
-
try {
|
|
1016
|
-
const orgKey = await this.config.resolveOrgApiKey(agentId, provider);
|
|
1017
|
-
if (orgKey) return orgKey;
|
|
1018
|
-
} catch { /* fall through to system-wide */ }
|
|
1019
|
-
}
|
|
1020
|
-
// 2. System-wide fallback
|
|
1021
|
-
return resolveApiKeyForProvider(provider, this.config.apiKeys, this.customProviders);
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
|
-
/** Resolve per-context model from agent's modelRouting config */
|
|
1025
|
-
resolveModelForContext(agentId: string, context: string): { provider: string; modelId: string } | null {
|
|
1026
|
-
const agentCfg = this.config.getAgentConfig?.(agentId);
|
|
1027
|
-
return resolveModel(agentCfg, context as ModelContext);
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
/** Returns all available providers (built-in + custom). */
|
|
1031
|
-
getProviderRegistry(): { builtIn: typeof PROVIDER_REGISTRY; custom: CustomProviderDef[] } {
|
|
1032
|
-
return { builtIn: PROVIDER_REGISTRY, custom: this.customProviders };
|
|
1033
|
-
}
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
// ─── Factory ─────────────────────────────────────────────
|
|
1037
|
-
|
|
1038
|
-
export function createAgentRuntime(config: RuntimeConfig): AgentRuntime {
|
|
1039
|
-
return new AgentRuntime(config);
|
|
1040
|
-
}
|
|
1041
|
-
|
|
1042
|
-
// ─── Default System Prompt ───────────────────────────────
|
|
1043
|
-
|
|
1044
|
-
function buildDefaultSystemPrompt(agentId: string, memoryContext?: string, hierarchyContext?: string, agentIdentity?: any, dbConnections?: string[]): string {
|
|
1045
|
-
var base = `You are an AI agent managed by AgenticMail Enterprise (agent: ${agentId}).
|
|
1046
|
-
|
|
1047
|
-
You have access to a comprehensive set of tools for completing tasks. Use them effectively.
|
|
1048
|
-
|
|
1049
|
-
Guidelines:
|
|
1050
|
-
- Be helpful, accurate, and professional
|
|
1051
|
-
- Use tools when they help accomplish the task
|
|
1052
|
-
- Explain your reasoning when making decisions
|
|
1053
|
-
- If you encounter an error, try an alternative approach
|
|
1054
|
-
- Respect organization policies and permissions
|
|
1055
|
-
- Keep responses concise unless detail is requested
|
|
1056
|
-
- For long tasks, work systematically and report progress
|
|
1057
|
-
- ACTIVELY USE YOUR MEMORY: After corrections, lessons, or insights, call memory_reflect to record them
|
|
1058
|
-
- Before complex tasks, call memory_context to recall relevant knowledge
|
|
1059
|
-
- Your memory persists across conversations — it's how you grow as an expert
|
|
1060
|
-
|
|
1061
|
-
Database Tools:
|
|
1062
|
-
- ent_db_* tools: For LOCAL databases — SQLite files in the workspace. Read-only inspection.
|
|
1063
|
-
- db_* tools (db_query, db_list_connections, db_list_tables, db_describe_table): For EXTERNAL databases granted to you by your admin.
|
|
1064
|
-
IMPORTANT: When asked about any database by name, ALWAYS use db_* tools first. Start with db_list_connections.
|
|
1065
|
-
${dbConnections && dbConnections.length > 0 ? `\nYour External Database Access:\n${dbConnections.map(c => ' - ' + c).join('\n')}\nUse db_query with the connection name to query these databases.` : ''}
|
|
1066
|
-
|
|
1067
|
-
Current time: ${new Date().toISOString()}`;
|
|
1068
|
-
|
|
1069
|
-
if (memoryContext) {
|
|
1070
|
-
base += '\n\n' + memoryContext;
|
|
1071
|
-
}
|
|
1072
|
-
|
|
1073
|
-
if (hierarchyContext) {
|
|
1074
|
-
base += '\n\n' + hierarchyContext;
|
|
1075
|
-
}
|
|
1076
|
-
|
|
1077
|
-
// Language enforcement — if agent has a configured language, enforce it
|
|
1078
|
-
if (agentIdentity?.language && agentIdentity.language !== 'en-us') {
|
|
1079
|
-
var langMap: Record<string, string> = {
|
|
1080
|
-
'en-us': 'English (American)', 'en-gb': 'English (British)', 'en-au': 'English (Australian)',
|
|
1081
|
-
'en-ca': 'English (Canadian)', 'en-in': 'English (Indian)', 'en-za': 'English (South African)',
|
|
1082
|
-
'en-ie': 'English (Irish)', 'en-ng': 'English (Nigerian)',
|
|
1083
|
-
'es': 'Spanish', 'es-mx': 'Mexican Spanish', 'es-ar': 'Argentine Spanish',
|
|
1084
|
-
'es-co': 'Colombian Spanish', 'es-latam': 'Latin American Spanish',
|
|
1085
|
-
'pt': 'Portuguese', 'pt-br': 'Brazilian Portuguese',
|
|
1086
|
-
'fr': 'French', 'fr-ca': 'Canadian French', 'fr-be': 'Belgian French', 'fr-ch': 'Swiss French', 'fr-af': 'African French',
|
|
1087
|
-
'zh': 'Simplified Chinese (Mandarin)', 'zh-tw': 'Traditional Chinese (Mandarin)', 'zh-yue': 'Cantonese',
|
|
1088
|
-
'ar': 'Modern Standard Arabic', 'ar-eg': 'Egyptian Arabic', 'ar-sa': 'Saudi Arabic', 'ar-ma': 'Moroccan Arabic',
|
|
1089
|
-
'de': 'German', 'de-at': 'Austrian German', 'de-ch': 'Swiss German',
|
|
1090
|
-
'it': 'Italian', 'nl': 'Dutch', 'ru': 'Russian', 'pl': 'Polish', 'uk': 'Ukrainian',
|
|
1091
|
-
'ja': 'Japanese', 'ko': 'Korean', 'hi': 'Hindi', 'bn': 'Bengali', 'ur': 'Urdu',
|
|
1092
|
-
'ta': 'Tamil', 'te': 'Telugu', 'mr': 'Marathi',
|
|
1093
|
-
'th': 'Thai', 'vi': 'Vietnamese', 'id': 'Indonesian', 'ms': 'Malay', 'tl': 'Filipino (Tagalog)',
|
|
1094
|
-
'yo': 'Yoruba', 'ig': 'Igbo', 'ha': 'Hausa', 'sw': 'Swahili', 'am': 'Amharic',
|
|
1095
|
-
'tr': 'Turkish', 'sv': 'Swedish', 'no': 'Norwegian', 'da': 'Danish', 'fi': 'Finnish',
|
|
1096
|
-
'el': 'Greek', 'he': 'Hebrew', 'fa': 'Persian (Farsi)', 'ro': 'Romanian', 'hu': 'Hungarian',
|
|
1097
|
-
'cs': 'Czech', 'sk': 'Slovak', 'bg': 'Bulgarian', 'hr': 'Croatian', 'sr': 'Serbian',
|
|
1098
|
-
'ca': 'Catalan', 'gl': 'Galician', 'eu': 'Basque', 'af': 'Afrikaans',
|
|
1099
|
-
};
|
|
1100
|
-
var langName = langMap[agentIdentity.language] || agentIdentity.language;
|
|
1101
|
-
base += `\n\n## Language Requirement
|
|
1102
|
-
**CRITICAL: You MUST respond in ${langName} at all times.**
|
|
1103
|
-
- ALL your responses, messages, emails, and communications must be written in ${langName}.
|
|
1104
|
-
- When users write to you in any language, understand their message but ALWAYS reply in ${langName}.
|
|
1105
|
-
- Tool calls, code, and technical identifiers remain in their original language (English/code), but all human-facing text must be in ${langName}.
|
|
1106
|
-
- This is a hard requirement set by your administrator. Do not switch languages even if asked.`;
|
|
1107
|
-
}
|
|
1108
|
-
|
|
1109
|
-
return base;
|
|
1110
|
-
}
|