@arbium/enterprise-agent-connect 0.0.0-stage → 0.1.2-dev.9022f22
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/LICENSE +202 -0
- package/README.md +269 -2
- package/dist/connectors/dell-techdirect/connector.json +39 -0
- package/dist/connectors/dell-techdirect/index.d.ts +8 -0
- package/dist/connectors/dell-techdirect/index.js +7 -0
- package/dist/connectors/dell-techdirect/index.js.map +1 -0
- package/dist/connectors/dell-techdirect/tools.d.ts +2 -0
- package/dist/connectors/dell-techdirect/tools.js +49 -0
- package/dist/connectors/dell-techdirect/tools.js.map +1 -0
- package/dist/connectors/dell-techdirect/vendor.d.ts +6 -0
- package/dist/connectors/dell-techdirect/vendor.js +57 -0
- package/dist/connectors/dell-techdirect/vendor.js.map +1 -0
- package/dist/connectors/dynamics-365/connector.json +228 -0
- package/dist/connectors/dynamics-365/index.d.ts +8 -0
- package/dist/connectors/dynamics-365/index.js +10 -0
- package/dist/connectors/dynamics-365/index.js.map +1 -0
- package/dist/connectors/dynamics-365/tools.d.ts +35 -0
- package/dist/connectors/dynamics-365/tools.js +806 -0
- package/dist/connectors/dynamics-365/tools.js.map +1 -0
- package/dist/connectors/dynamics-365/vendor.d.ts +9 -0
- package/dist/connectors/dynamics-365/vendor.js +110 -0
- package/dist/connectors/dynamics-365/vendor.js.map +1 -0
- package/dist/connectors/entra/connector.json +85 -0
- package/dist/connectors/entra/index.d.ts +2 -0
- package/dist/connectors/entra/index.js +4 -0
- package/dist/connectors/entra/index.js.map +1 -0
- package/dist/connectors/entra/tools.d.ts +14 -0
- package/dist/connectors/entra/tools.js +262 -0
- package/dist/connectors/entra/tools.js.map +1 -0
- package/dist/connectors/fedex/connector.json +118 -0
- package/dist/connectors/fedex/index.d.ts +8 -0
- package/dist/connectors/fedex/index.js +7 -0
- package/dist/connectors/fedex/index.js.map +1 -0
- package/dist/connectors/fedex/tools.d.ts +3 -0
- package/dist/connectors/fedex/tools.js +152 -0
- package/dist/connectors/fedex/tools.js.map +1 -0
- package/dist/connectors/fedex/vendor.d.ts +7 -0
- package/dist/connectors/fedex/vendor.js +98 -0
- package/dist/connectors/fedex/vendor.js.map +1 -0
- package/dist/connectors/gong/connector.json +127 -0
- package/dist/connectors/gong/index.d.ts +8 -0
- package/dist/connectors/gong/index.js +7 -0
- package/dist/connectors/gong/index.js.map +1 -0
- package/dist/connectors/gong/tools.d.ts +8 -0
- package/dist/connectors/gong/tools.js +424 -0
- package/dist/connectors/gong/tools.js.map +1 -0
- package/dist/connectors/gong/vendor.d.ts +4 -0
- package/dist/connectors/gong/vendor.js +89 -0
- package/dist/connectors/gong/vendor.js.map +1 -0
- package/dist/connectors/http/index.d.ts +34 -0
- package/dist/connectors/http/index.js +325 -0
- package/dist/connectors/http/index.js.map +1 -0
- package/dist/connectors/intune/connector.json +106 -0
- package/dist/connectors/intune/index.d.ts +2 -0
- package/dist/connectors/intune/index.js +4 -0
- package/dist/connectors/intune/index.js.map +1 -0
- package/dist/connectors/intune/tools.d.ts +12 -0
- package/dist/connectors/intune/tools.js +416 -0
- package/dist/connectors/intune/tools.js.map +1 -0
- package/dist/connectors/jamf/connector.json +182 -0
- package/dist/connectors/jamf/index.d.ts +8 -0
- package/dist/connectors/jamf/index.js +7 -0
- package/dist/connectors/jamf/index.js.map +1 -0
- package/dist/connectors/jamf/tools.d.ts +7 -0
- package/dist/connectors/jamf/tools.js +659 -0
- package/dist/connectors/jamf/tools.js.map +1 -0
- package/dist/connectors/jamf/vendor.d.ts +5 -0
- package/dist/connectors/jamf/vendor.js +70 -0
- package/dist/connectors/jamf/vendor.js.map +1 -0
- package/dist/connectors/jira/connector.json +272 -0
- package/dist/connectors/jira/index.d.ts +8 -0
- package/dist/connectors/jira/index.js +7 -0
- package/dist/connectors/jira/index.js.map +1 -0
- package/dist/connectors/jira/jql.d.ts +4 -0
- package/dist/connectors/jira/jql.js +67 -0
- package/dist/connectors/jira/jql.js.map +1 -0
- package/dist/connectors/jira/tools.d.ts +3 -0
- package/dist/connectors/jira/tools.js +464 -0
- package/dist/connectors/jira/tools.js.map +1 -0
- package/dist/connectors/jira/vendor.d.ts +3 -0
- package/dist/connectors/jira/vendor.js +100 -0
- package/dist/connectors/jira/vendor.js.map +1 -0
- package/dist/connectors/microsoft/client.d.ts +66 -0
- package/dist/connectors/microsoft/client.js +452 -0
- package/dist/connectors/microsoft/client.js.map +1 -0
- package/dist/connectors/microsoft/provider.json +118 -0
- package/dist/connectors/netsuite/connector.json +317 -0
- package/dist/connectors/netsuite/index.d.ts +8 -0
- package/dist/connectors/netsuite/index.js +7 -0
- package/dist/connectors/netsuite/index.js.map +1 -0
- package/dist/connectors/netsuite/tools.d.ts +24 -0
- package/dist/connectors/netsuite/tools.js +447 -0
- package/dist/connectors/netsuite/tools.js.map +1 -0
- package/dist/connectors/netsuite/vendor.d.ts +26 -0
- package/dist/connectors/netsuite/vendor.js +247 -0
- package/dist/connectors/netsuite/vendor.js.map +1 -0
- package/dist/connectors/odata/index.d.ts +33 -0
- package/dist/connectors/odata/index.js +460 -0
- package/dist/connectors/odata/index.js.map +1 -0
- package/dist/connectors/okta/connector.json +194 -0
- package/dist/connectors/okta/index.d.ts +8 -0
- package/dist/connectors/okta/index.js +7 -0
- package/dist/connectors/okta/index.js.map +1 -0
- package/dist/connectors/okta/tools.d.ts +6 -0
- package/dist/connectors/okta/tools.js +429 -0
- package/dist/connectors/okta/tools.js.map +1 -0
- package/dist/connectors/okta/vendor.d.ts +14 -0
- package/dist/connectors/okta/vendor.js +204 -0
- package/dist/connectors/okta/vendor.js.map +1 -0
- package/dist/connectors/outlook-calendar/connector.json +136 -0
- package/dist/connectors/outlook-calendar/index.d.ts +2 -0
- package/dist/connectors/outlook-calendar/index.js +4 -0
- package/dist/connectors/outlook-calendar/index.js.map +1 -0
- package/dist/connectors/outlook-calendar/tools.d.ts +65 -0
- package/dist/connectors/outlook-calendar/tools.js +398 -0
- package/dist/connectors/outlook-calendar/tools.js.map +1 -0
- package/dist/connectors/outlook-mail/connector.json +154 -0
- package/dist/connectors/outlook-mail/index.d.ts +2 -0
- package/dist/connectors/outlook-mail/index.js +4 -0
- package/dist/connectors/outlook-mail/index.js.map +1 -0
- package/dist/connectors/outlook-mail/tools.d.ts +8 -0
- package/dist/connectors/outlook-mail/tools.js +236 -0
- package/dist/connectors/outlook-mail/tools.js.map +1 -0
- package/dist/connectors/salesforce/connector.json +122 -0
- package/dist/connectors/salesforce/index.d.ts +8 -0
- package/dist/connectors/salesforce/index.js +7 -0
- package/dist/connectors/salesforce/index.js.map +1 -0
- package/dist/connectors/salesforce/soql.d.ts +3 -0
- package/dist/connectors/salesforce/soql.js +60 -0
- package/dist/connectors/salesforce/soql.js.map +1 -0
- package/dist/connectors/salesforce/tools.d.ts +9 -0
- package/dist/connectors/salesforce/tools.js +234 -0
- package/dist/connectors/salesforce/tools.js.map +1 -0
- package/dist/connectors/salesforce/vendor.d.ts +3 -0
- package/dist/connectors/salesforce/vendor.js +113 -0
- package/dist/connectors/salesforce/vendor.js.map +1 -0
- package/dist/connectors/sap-s4hana/connector.json +264 -0
- package/dist/connectors/sap-s4hana/index.d.ts +8 -0
- package/dist/connectors/sap-s4hana/index.js +7 -0
- package/dist/connectors/sap-s4hana/index.js.map +1 -0
- package/dist/connectors/sap-s4hana/tools.d.ts +4 -0
- package/dist/connectors/sap-s4hana/tools.js +761 -0
- package/dist/connectors/sap-s4hana/tools.js.map +1 -0
- package/dist/connectors/sap-s4hana/vendor.d.ts +5 -0
- package/dist/connectors/sap-s4hana/vendor.js +176 -0
- package/dist/connectors/sap-s4hana/vendor.js.map +1 -0
- package/dist/connectors/servicenow/connector.json +228 -0
- package/dist/connectors/servicenow/index.d.ts +8 -0
- package/dist/connectors/servicenow/index.js +7 -0
- package/dist/connectors/servicenow/index.js.map +1 -0
- package/dist/connectors/servicenow/tools.d.ts +4 -0
- package/dist/connectors/servicenow/tools.js +884 -0
- package/dist/connectors/servicenow/tools.js.map +1 -0
- package/dist/connectors/servicenow/vendor.d.ts +3 -0
- package/dist/connectors/servicenow/vendor.js +106 -0
- package/dist/connectors/servicenow/vendor.js.map +1 -0
- package/dist/connectors/sharepoint-files/connector.json +194 -0
- package/dist/connectors/sharepoint-files/excel.d.ts +16 -0
- package/dist/connectors/sharepoint-files/excel.js +300 -0
- package/dist/connectors/sharepoint-files/excel.js.map +1 -0
- package/dist/connectors/sharepoint-files/index.d.ts +8 -0
- package/dist/connectors/sharepoint-files/index.js +12 -0
- package/dist/connectors/sharepoint-files/index.js.map +1 -0
- package/dist/connectors/sharepoint-files/tools.d.ts +52 -0
- package/dist/connectors/sharepoint-files/tools.js +365 -0
- package/dist/connectors/sharepoint-files/tools.js.map +1 -0
- package/dist/connectors/sharepoint-files/vendor.d.ts +11 -0
- package/dist/connectors/sharepoint-files/vendor.js +167 -0
- package/dist/connectors/sharepoint-files/vendor.js.map +1 -0
- package/dist/connectors/slack/connector.json +148 -0
- package/dist/connectors/slack/index.d.ts +8 -0
- package/dist/connectors/slack/index.js +7 -0
- package/dist/connectors/slack/index.js.map +1 -0
- package/dist/connectors/slack/tools.d.ts +3 -0
- package/dist/connectors/slack/tools.js +355 -0
- package/dist/connectors/slack/tools.js.map +1 -0
- package/dist/connectors/slack/vendor.d.ts +17 -0
- package/dist/connectors/slack/vendor.js +189 -0
- package/dist/connectors/slack/vendor.js.map +1 -0
- package/dist/connectors/soap/index.d.ts +16 -0
- package/dist/connectors/soap/index.js +248 -0
- package/dist/connectors/soap/index.js.map +1 -0
- package/dist/connectors/soap/xml.d.ts +12 -0
- package/dist/connectors/soap/xml.js +126 -0
- package/dist/connectors/soap/xml.js.map +1 -0
- package/dist/connectors/sql/engines.d.ts +58 -0
- package/dist/connectors/sql/engines.js +292 -0
- package/dist/connectors/sql/engines.js.map +1 -0
- package/dist/connectors/sql/index.d.ts +16 -0
- package/dist/connectors/sql/index.js +214 -0
- package/dist/connectors/sql/index.js.map +1 -0
- package/dist/connectors/teams/connector.json +298 -0
- package/dist/connectors/teams/index.d.ts +2 -0
- package/dist/connectors/teams/index.js +5 -0
- package/dist/connectors/teams/index.js.map +1 -0
- package/dist/connectors/teams/tools.d.ts +7 -0
- package/dist/connectors/teams/tools.js +392 -0
- package/dist/connectors/teams/tools.js.map +1 -0
- package/dist/connectors/workday/connector.json +188 -0
- package/dist/connectors/workday/index.d.ts +8 -0
- package/dist/connectors/workday/index.js +7 -0
- package/dist/connectors/workday/index.js.map +1 -0
- package/dist/connectors/workday/tools.d.ts +33 -0
- package/dist/connectors/workday/tools.js +410 -0
- package/dist/connectors/workday/tools.js.map +1 -0
- package/dist/connectors/workday/vendor.d.ts +18 -0
- package/dist/connectors/workday/vendor.js +199 -0
- package/dist/connectors/workday/vendor.js.map +1 -0
- package/dist/packages/connector-kit/src/branding.d.ts +57 -0
- package/dist/packages/connector-kit/src/branding.js +102 -0
- package/dist/packages/connector-kit/src/branding.js.map +1 -0
- package/dist/packages/connector-kit/src/certificate.d.ts +19 -0
- package/dist/packages/connector-kit/src/certificate.js +84 -0
- package/dist/packages/connector-kit/src/certificate.js.map +1 -0
- package/dist/packages/connector-kit/src/common.d.ts +36 -0
- package/dist/packages/connector-kit/src/common.js +110 -0
- package/dist/packages/connector-kit/src/common.js.map +1 -0
- package/dist/packages/connector-kit/src/connector.d.ts +1356 -0
- package/dist/packages/connector-kit/src/connector.js +1073 -0
- package/dist/packages/connector-kit/src/connector.js.map +1 -0
- package/dist/packages/connector-kit/src/fetch.d.ts +6 -0
- package/dist/packages/connector-kit/src/fetch.js +44 -0
- package/dist/packages/connector-kit/src/fetch.js.map +1 -0
- package/dist/packages/connector-kit/src/index.d.ts +5 -0
- package/dist/packages/connector-kit/src/index.js +6 -0
- package/dist/packages/connector-kit/src/index.js.map +1 -0
- package/dist/packages/connector-kit/src/oauth.d.ts +15 -0
- package/dist/packages/connector-kit/src/oauth.js +98 -0
- package/dist/packages/connector-kit/src/oauth.js.map +1 -0
- package/dist/packages/connector-kit/src/types.d.ts +87 -0
- package/dist/packages/connector-kit/src/types.js +20 -0
- package/dist/packages/connector-kit/src/types.js.map +1 -0
- package/dist/packages/server/migrations/0001_tables.sql +268 -0
- package/dist/packages/server/migrations/0002_organizations.sql +72 -0
- package/dist/packages/server/migrations/0003_drop_unused.sql +3 -0
- package/dist/packages/server/migrations/0004_trigger_runners.sql +15 -0
- package/dist/packages/server/migrations/0005_run_runner.sql +3 -0
- package/dist/packages/server/migrations/0006_approvals.sql +36 -0
- package/dist/packages/server/migrations/0007_app_events.sql +110 -0
- package/dist/packages/server/migrations/rollback/to-legacy.sql +90 -0
- package/dist/packages/server/src/api.d.ts +3730 -0
- package/dist/packages/server/src/api.js +820 -0
- package/dist/packages/server/src/api.js.map +1 -0
- package/dist/packages/server/src/app.d.ts +23 -0
- package/dist/packages/server/src/app.js +467 -0
- package/dist/packages/server/src/app.js.map +1 -0
- package/dist/packages/server/src/builtin.d.ts +5 -0
- package/dist/packages/server/src/builtin.js +42 -0
- package/dist/packages/server/src/builtin.js.map +1 -0
- package/dist/packages/server/src/consent.d.ts +27 -0
- package/dist/packages/server/src/consent.js +36 -0
- package/dist/packages/server/src/consent.js.map +1 -0
- package/dist/packages/server/src/events/admin.d.ts +156 -0
- package/dist/packages/server/src/events/admin.js +255 -0
- package/dist/packages/server/src/events/admin.js.map +1 -0
- package/dist/packages/server/src/events/deliver.d.ts +43 -0
- package/dist/packages/server/src/events/deliver.js +129 -0
- package/dist/packages/server/src/events/deliver.js.map +1 -0
- package/dist/packages/server/src/events/runtime.d.ts +28 -0
- package/dist/packages/server/src/events/runtime.js +400 -0
- package/dist/packages/server/src/events/runtime.js.map +1 -0
- package/dist/packages/server/src/events/store.d.ts +172 -0
- package/dist/packages/server/src/events/store.js +275 -0
- package/dist/packages/server/src/events/store.js.map +1 -0
- package/dist/packages/server/src/index.d.ts +40 -0
- package/dist/packages/server/src/index.js +186 -0
- package/dist/packages/server/src/index.js.map +1 -0
- package/dist/packages/server/src/migrate.d.ts +11 -0
- package/dist/packages/server/src/migrate.js +134 -0
- package/dist/packages/server/src/migrate.js.map +1 -0
- package/dist/packages/server/src/openapi.d.ts +4 -0
- package/dist/packages/server/src/openapi.js +101 -0
- package/dist/packages/server/src/openapi.js.map +1 -0
- package/dist/packages/server/src/queue.d.ts +10 -0
- package/dist/packages/server/src/queue.js +45 -0
- package/dist/packages/server/src/queue.js.map +1 -0
- package/dist/packages/server/src/secrets.d.ts +19 -0
- package/dist/packages/server/src/secrets.js +76 -0
- package/dist/packages/server/src/secrets.js.map +1 -0
- package/dist/packages/server/src/server.d.ts +1 -0
- package/dist/packages/server/src/server.js +82 -0
- package/dist/packages/server/src/server.js.map +1 -0
- package/dist/packages/server/src/service.d.ts +767 -0
- package/dist/packages/server/src/service.js +924 -0
- package/dist/packages/server/src/service.js.map +1 -0
- package/dist/packages/server/src/store.d.ts +157 -0
- package/dist/packages/server/src/store.js +415 -0
- package/dist/packages/server/src/store.js.map +1 -0
- package/dist/packages/server/src/teams/activity.d.ts +123 -0
- package/dist/packages/server/src/teams/activity.js +188 -0
- package/dist/packages/server/src/teams/activity.js.map +1 -0
- package/dist/packages/server/src/teams/admin.d.ts +335 -0
- package/dist/packages/server/src/teams/admin.js +699 -0
- package/dist/packages/server/src/teams/admin.js.map +1 -0
- package/dist/packages/server/src/teams/approval.d.ts +57 -0
- package/dist/packages/server/src/teams/approval.js +118 -0
- package/dist/packages/server/src/teams/approval.js.map +1 -0
- package/dist/packages/server/src/teams/bot.d.ts +25 -0
- package/dist/packages/server/src/teams/bot.js +124 -0
- package/dist/packages/server/src/teams/bot.js.map +1 -0
- package/dist/packages/server/src/teams/claude.d.ts +46 -0
- package/dist/packages/server/src/teams/claude.js +165 -0
- package/dist/packages/server/src/teams/claude.js.map +1 -0
- package/dist/packages/server/src/teams/jwt.d.ts +17 -0
- package/dist/packages/server/src/teams/jwt.js +121 -0
- package/dist/packages/server/src/teams/jwt.js.map +1 -0
- package/dist/packages/server/src/teams/package.d.ts +79 -0
- package/dist/packages/server/src/teams/package.js +319 -0
- package/dist/packages/server/src/teams/package.js.map +1 -0
- package/dist/packages/server/src/teams/provision.d.ts +84 -0
- package/dist/packages/server/src/teams/provision.js +505 -0
- package/dist/packages/server/src/teams/provision.js.map +1 -0
- package/dist/packages/server/src/teams/runner.d.ts +80 -0
- package/dist/packages/server/src/teams/runner.js +187 -0
- package/dist/packages/server/src/teams/runner.js.map +1 -0
- package/dist/packages/server/src/teams/runtime.d.ts +91 -0
- package/dist/packages/server/src/teams/runtime.js +679 -0
- package/dist/packages/server/src/teams/runtime.js.map +1 -0
- package/dist/packages/server/src/teams/store.d.ts +233 -0
- package/dist/packages/server/src/teams/store.js +507 -0
- package/dist/packages/server/src/teams/store.js.map +1 -0
- package/package.json +68 -4
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type CredentialKey } from "../secrets.js";
|
|
3
|
+
import { type Fetch } from "../../../connector-kit/src/types.js";
|
|
4
|
+
import { type ClaudeFactory, type SessionState } from "./claude.js";
|
|
5
|
+
import type { RunRow, TeamsStore, TriggerRow } from "./store.js";
|
|
6
|
+
export declare const CLAUDE_RUNNER = "claude-managed-agents";
|
|
7
|
+
export type RunnerContext = {
|
|
8
|
+
teams: Pick<TeamsStore, "claudeKey">;
|
|
9
|
+
key: CredentialKey;
|
|
10
|
+
publicUrl: string | null;
|
|
11
|
+
};
|
|
12
|
+
export type RunnerTrigger = Pick<TriggerRow, "agentId" | "runner" | "settings" | "managedAgentId" | "environmentId" | "vaultIds">;
|
|
13
|
+
export type RunInput = {
|
|
14
|
+
org: string;
|
|
15
|
+
agentId: string;
|
|
16
|
+
runId: string;
|
|
17
|
+
botId: string;
|
|
18
|
+
requestedBy: string;
|
|
19
|
+
text: string;
|
|
20
|
+
replyToken: string;
|
|
21
|
+
budgetCents: number;
|
|
22
|
+
trigger: TriggerRow;
|
|
23
|
+
secret: string | null;
|
|
24
|
+
};
|
|
25
|
+
export type EventRunInput = {
|
|
26
|
+
org: string;
|
|
27
|
+
agentId: string;
|
|
28
|
+
runId: string;
|
|
29
|
+
text: string;
|
|
30
|
+
budgetCents: number;
|
|
31
|
+
trigger: RunnerTrigger;
|
|
32
|
+
secret: string | null;
|
|
33
|
+
event: {
|
|
34
|
+
app: string;
|
|
35
|
+
type: string;
|
|
36
|
+
deliveryId: string;
|
|
37
|
+
data: Record<string, unknown>;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export type RunnerRun = Pick<RunRow, "sessionId" | "replyCount"> & {
|
|
41
|
+
awaitsReply?: boolean;
|
|
42
|
+
};
|
|
43
|
+
export type RunCounts = {
|
|
44
|
+
active: number;
|
|
45
|
+
lastHour: number;
|
|
46
|
+
spentToday: number;
|
|
47
|
+
};
|
|
48
|
+
export type Caps = Pick<TriggerRow, "budgetCents" | "maxRunsPerHour" | "maxCentsPerDay" | "maxConcurrent">;
|
|
49
|
+
/** The cap one more run would pass, or null: runs in the last hour, spending in 24 hours
|
|
50
|
+
* (what was spent plus every live run's budget), runs at once. */
|
|
51
|
+
export declare function capReached(counts: RunCounts, caps: Caps): "hour" | "day" | "concurrent" | null;
|
|
52
|
+
export interface TriggerRunner {
|
|
53
|
+
id: string;
|
|
54
|
+
settings: z.ZodType<Record<string, unknown>>;
|
|
55
|
+
unready(org: string): Promise<string | null>;
|
|
56
|
+
verify(trigger: RunnerTrigger, org: string, secret: string | null, when: "save" | "answer"): Promise<void>;
|
|
57
|
+
start(input: RunInput): Promise<string>;
|
|
58
|
+
startEvent?(input: EventRunInput): Promise<string>;
|
|
59
|
+
continue(sessionId: string, input: RunInput): Promise<void>;
|
|
60
|
+
state(run: RunnerRun, org: string): Promise<SessionState | {
|
|
61
|
+
gone: string;
|
|
62
|
+
}>;
|
|
63
|
+
stop(sessionId: string, org: string): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
export type RunnerFactory = (ctx: RunnerContext) => TriggerRunner;
|
|
66
|
+
export declare const triggerAad: (org: string, agentId: string) => string;
|
|
67
|
+
/** The trigger's signing secret, opened, or null when it has none. */
|
|
68
|
+
export declare function openTriggerSecret(key: CredentialKey, org: string, trigger: TriggerRow): string | null;
|
|
69
|
+
/** Claude Managed Agents with the organization's own Claude key (providers row anthropic). Its
|
|
70
|
+
* settings are the trigger's managedAgentId, environmentId and vaultIds. */
|
|
71
|
+
export declare const claudeManagedAgents: (claude?: ClaudeFactory) => RunnerFactory;
|
|
72
|
+
export declare const SIGNATURE_HEADER = "x-agent-connect-signature";
|
|
73
|
+
/** `t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>">`; receivers reject an old `t`. */
|
|
74
|
+
export declare function signature(secret: string, body: string, t?: number): string;
|
|
75
|
+
/** A signed POST of the message and its context to the trigger's `url`, for any agent
|
|
76
|
+
* framework. The receiver answers through MCP teams_reply with the reply token and this
|
|
77
|
+
* agent's own key, as a Claude agent does. It reports no cost; the trigger's caps still
|
|
78
|
+
* apply. A run is answered once a reply arrives, and stopped after the turn timeout. An app
|
|
79
|
+
* event is posted as `type: "event"` with its data and needs no reply: 2xx answers it. */
|
|
80
|
+
export declare const signedWebhook: (fetchImpl?: Fetch) => RunnerFactory;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { createHmac } from "node:crypto";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { brand } from "../../../connector-kit/src/branding.js";
|
|
4
|
+
import { credentialAad } from "../secrets.js";
|
|
5
|
+
import { InvalidInput } from "../service.js";
|
|
6
|
+
import { ConnectError } from "../../../connector-kit/src/types.js";
|
|
7
|
+
import { agentMcpUrl, claudeClient, verifyTrigger, } from "./claude.js";
|
|
8
|
+
// What answers a Teams message, or an app's event, once the core decided it should be answered
|
|
9
|
+
// (who may ask, reply mode, the caps, the reply token and teams_reply stay in teams/runtime.ts;
|
|
10
|
+
// matching, limits and caps for events in events/runtime.ts, whatever the runner).
|
|
11
|
+
export const CLAUDE_RUNNER = "claude-managed-agents";
|
|
12
|
+
/** The cap one more run would pass, or null: runs in the last hour, spending in 24 hours
|
|
13
|
+
* (what was spent plus every live run's budget), runs at once. */
|
|
14
|
+
export function capReached(counts, caps) {
|
|
15
|
+
if (counts.lastHour >= caps.maxRunsPerHour)
|
|
16
|
+
return "hour";
|
|
17
|
+
if (counts.spentToday + caps.budgetCents * (counts.active + 1) > caps.maxCentsPerDay)
|
|
18
|
+
return "day";
|
|
19
|
+
if (counts.active >= caps.maxConcurrent)
|
|
20
|
+
return "concurrent";
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
export const triggerAad = (org, agentId) => credentialAad(org, `teams-trigger:${agentId}`);
|
|
24
|
+
/** The trigger's signing secret, opened, or null when it has none. */
|
|
25
|
+
export function openTriggerSecret(key, org, trigger) {
|
|
26
|
+
if (!trigger.secret || !trigger.secretKeyId)
|
|
27
|
+
return null;
|
|
28
|
+
return String(key.open({ ciphertext: trigger.secret, keyId: trigger.secretKeyId }, triggerAad(org, trigger.agentId)).secret);
|
|
29
|
+
}
|
|
30
|
+
/** Claude Managed Agents with the organization's own Claude key (providers row anthropic). Its
|
|
31
|
+
* settings are the trigger's managedAgentId, environmentId and vaultIds. */
|
|
32
|
+
export const claudeManagedAgents = (claude = claudeClient) => (ctx) => {
|
|
33
|
+
async function claudeFor(org) {
|
|
34
|
+
const row = await ctx.teams.claudeKey(org);
|
|
35
|
+
if (!row)
|
|
36
|
+
return null;
|
|
37
|
+
const { api_key } = ctx.key.open({ ciphertext: row.credential, keyId: row.credentialKeyId }, credentialAad(org, "provider:anthropic"));
|
|
38
|
+
return claude(api_key);
|
|
39
|
+
}
|
|
40
|
+
async function need(org) {
|
|
41
|
+
const c = await claudeFor(org);
|
|
42
|
+
if (!c)
|
|
43
|
+
throw new ConnectError("Set your organization's Claude API key first");
|
|
44
|
+
return c;
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
id: CLAUDE_RUNNER,
|
|
48
|
+
settings: z.strictObject({}),
|
|
49
|
+
async unready(org) {
|
|
50
|
+
return (await ctx.teams.claudeKey(org)) ? null : "organization has no Claude API key";
|
|
51
|
+
},
|
|
52
|
+
async verify(trigger, org, _secret, when) {
|
|
53
|
+
if (!trigger.managedAgentId || !trigger.environmentId)
|
|
54
|
+
throw new InvalidInput("Choose the Claude agent and environment");
|
|
55
|
+
if (!ctx.publicUrl)
|
|
56
|
+
throw new ConnectError("This deployment has no public address");
|
|
57
|
+
const c = await need(org);
|
|
58
|
+
await verifyTrigger(c, ctx.publicUrl, trigger.agentId, {
|
|
59
|
+
managedAgentId: trigger.managedAgentId,
|
|
60
|
+
vaultIds: trigger.vaultIds,
|
|
61
|
+
});
|
|
62
|
+
if (when === "save" && !(await c.environmentExists(trigger.environmentId)))
|
|
63
|
+
throw new ConnectError("Claude has no environment with that id under your organization's key");
|
|
64
|
+
},
|
|
65
|
+
async start(input) {
|
|
66
|
+
return (await need(input.org)).createSession({
|
|
67
|
+
agentId: input.trigger.managedAgentId,
|
|
68
|
+
environmentId: input.trigger.environmentId,
|
|
69
|
+
vaultIds: input.trigger.vaultIds,
|
|
70
|
+
budgetCents: input.budgetCents,
|
|
71
|
+
metadata: {
|
|
72
|
+
source: `${brand().resourcePrefix}-teams`,
|
|
73
|
+
agent: input.agentId,
|
|
74
|
+
bot: input.botId,
|
|
75
|
+
run: input.runId,
|
|
76
|
+
requested_by: input.requestedBy,
|
|
77
|
+
},
|
|
78
|
+
text: input.text,
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
async startEvent(input) {
|
|
82
|
+
return (await need(input.org)).createSession({
|
|
83
|
+
agentId: input.trigger.managedAgentId,
|
|
84
|
+
environmentId: input.trigger.environmentId,
|
|
85
|
+
vaultIds: input.trigger.vaultIds,
|
|
86
|
+
budgetCents: input.budgetCents,
|
|
87
|
+
metadata: {
|
|
88
|
+
source: `${brand().resourcePrefix}-events`,
|
|
89
|
+
agent: input.agentId,
|
|
90
|
+
run: input.runId,
|
|
91
|
+
app: input.event.app,
|
|
92
|
+
event: input.event.type,
|
|
93
|
+
},
|
|
94
|
+
text: input.text,
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
async continue(sessionId, input) {
|
|
98
|
+
await (await need(input.org)).sendMessage(sessionId, input.text, input.budgetCents);
|
|
99
|
+
},
|
|
100
|
+
async state(run, org) {
|
|
101
|
+
const c = await claudeFor(org);
|
|
102
|
+
if (!c)
|
|
103
|
+
return { gone: "Claude API key removed" };
|
|
104
|
+
return (await c.session(run.sessionId)) ?? { gone: "The Claude session is gone" };
|
|
105
|
+
},
|
|
106
|
+
// Without the key there is nothing left to stop it with.
|
|
107
|
+
async stop(sessionId, org) {
|
|
108
|
+
await (await claudeFor(org))?.interrupt(sessionId);
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
export const SIGNATURE_HEADER = "x-agent-connect-signature";
|
|
113
|
+
/** `t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>">`; receivers reject an old `t`. */
|
|
114
|
+
export function signature(secret, body, t = Math.floor(Date.now() / 1000)) {
|
|
115
|
+
return `t=${t},v1=${createHmac("sha256", secret).update(`${t}.${body}`).digest("hex")}`;
|
|
116
|
+
}
|
|
117
|
+
/** A signed POST of the message and its context to the trigger's `url`, for any agent
|
|
118
|
+
* framework. The receiver answers through MCP teams_reply with the reply token and this
|
|
119
|
+
* agent's own key, as a Claude agent does. It reports no cost; the trigger's caps still
|
|
120
|
+
* apply. A run is answered once a reply arrives, and stopped after the turn timeout. An app
|
|
121
|
+
* event is posted as `type: "event"` with its data and needs no reply: 2xx answers it. */
|
|
122
|
+
export const signedWebhook = (fetchImpl = fetch) => (ctx) => {
|
|
123
|
+
async function post(trigger, secret, payload) {
|
|
124
|
+
if (!secret)
|
|
125
|
+
throw new InvalidInput("Give the webhook a signing secret");
|
|
126
|
+
const body = JSON.stringify(payload);
|
|
127
|
+
const res = await fetchImpl(String(trigger.settings.url), {
|
|
128
|
+
method: "POST",
|
|
129
|
+
headers: {
|
|
130
|
+
"content-type": "application/json",
|
|
131
|
+
[SIGNATURE_HEADER]: signature(secret, body),
|
|
132
|
+
},
|
|
133
|
+
body,
|
|
134
|
+
redirect: "error",
|
|
135
|
+
signal: AbortSignal.timeout(10_000),
|
|
136
|
+
});
|
|
137
|
+
if (!res.ok)
|
|
138
|
+
throw new ConnectError(`The webhook answered ${res.status}`);
|
|
139
|
+
}
|
|
140
|
+
const mcpUrl = (agentId) => ctx.publicUrl ? agentMcpUrl(ctx.publicUrl, agentId) : null;
|
|
141
|
+
const message = (input) => ({
|
|
142
|
+
type: "message",
|
|
143
|
+
run: input.runId,
|
|
144
|
+
agent: input.agentId,
|
|
145
|
+
bot: input.botId,
|
|
146
|
+
requestedBy: input.requestedBy,
|
|
147
|
+
text: input.text,
|
|
148
|
+
replyToken: input.replyToken,
|
|
149
|
+
mcpUrl: mcpUrl(input.agentId),
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
id: "webhook",
|
|
153
|
+
settings: z.strictObject({ url: z.url({ protocol: /^https$/ }) }),
|
|
154
|
+
unready: async () => null,
|
|
155
|
+
async verify(trigger, _org, secret, when) {
|
|
156
|
+
if (when === "save")
|
|
157
|
+
await post(trigger, secret, { type: "ping", agent: trigger.agentId });
|
|
158
|
+
},
|
|
159
|
+
async start(input) {
|
|
160
|
+
await post(input.trigger, input.secret, message(input));
|
|
161
|
+
return `webhook:${input.runId}`;
|
|
162
|
+
},
|
|
163
|
+
async startEvent(input) {
|
|
164
|
+
await post(input.trigger, input.secret, {
|
|
165
|
+
type: "event",
|
|
166
|
+
run: input.runId,
|
|
167
|
+
agent: input.agentId,
|
|
168
|
+
app: input.event.app,
|
|
169
|
+
event: input.event.type,
|
|
170
|
+
deliveryId: input.event.deliveryId,
|
|
171
|
+
data: input.event.data,
|
|
172
|
+
text: input.text,
|
|
173
|
+
mcpUrl: mcpUrl(input.agentId),
|
|
174
|
+
});
|
|
175
|
+
return `webhook:${input.runId}`;
|
|
176
|
+
},
|
|
177
|
+
async continue(_sessionId, input) {
|
|
178
|
+
await post(input.trigger, input.secret, message(input));
|
|
179
|
+
},
|
|
180
|
+
async state(run) {
|
|
181
|
+
const answered = run.awaitsReply === false || run.replyCount > 0;
|
|
182
|
+
return { status: answered ? "idle" : "running", costCents: 0, atBudget: false };
|
|
183
|
+
},
|
|
184
|
+
async stop() { },
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../packages/server/src/teams/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type Connector } from "../../../connector-kit/src/connector.js";
|
|
2
|
+
import { type CredentialKey } from "../secrets.js";
|
|
3
|
+
import type { Store } from "../store.js";
|
|
4
|
+
import { type VendorResponse } from "../../../connector-kit/src/types.js";
|
|
5
|
+
import { type ThreadMessage } from "./activity.js";
|
|
6
|
+
import { type ApprovalFact, type ApprovalRow } from "./approval.js";
|
|
7
|
+
import { type BotClient, type BotCredential } from "./bot.js";
|
|
8
|
+
import { type TriggerRunner } from "./runner.js";
|
|
9
|
+
import { type BotAuth } from "./jwt.js";
|
|
10
|
+
import type { BotRow, ConversationRow, RunRow, TeamsStore } from "./store.js";
|
|
11
|
+
/** The body as text, or null once it passes `max` bytes (read no further). */
|
|
12
|
+
export declare function readCapped(req: Request, max?: number): Promise<string | null>;
|
|
13
|
+
/** The body as sent (a signature covers these bytes), or null once it passes `max`. */
|
|
14
|
+
export declare function readCappedBytes(req: Request, max: number): Promise<Buffer | null>;
|
|
15
|
+
export declare const botAad: (org: string, botId: string) => string;
|
|
16
|
+
/** The bot's sign-in: its app id, tenant, certificate and private key. */
|
|
17
|
+
export declare function botCredential(key: CredentialKey, bot: BotRow): BotCredential;
|
|
18
|
+
export type TeamsRuntimeDeps = {
|
|
19
|
+
store: Store;
|
|
20
|
+
teams: TeamsStore;
|
|
21
|
+
key: CredentialKey;
|
|
22
|
+
auth: BotAuth;
|
|
23
|
+
bots: BotClient;
|
|
24
|
+
runners: Map<string, TriggerRunner>;
|
|
25
|
+
connector: Connector | null;
|
|
26
|
+
publicUrl: string | null;
|
|
27
|
+
};
|
|
28
|
+
export declare function createTeamsRuntime(deps: TeamsRuntimeDeps): {
|
|
29
|
+
inbound: (botAppId: string, req: Request) => Promise<Response>;
|
|
30
|
+
kick: () => void;
|
|
31
|
+
watch: () => Promise<void>;
|
|
32
|
+
/** Drains the queue now and then (events from a worker that stopped) and watches sessions
|
|
33
|
+
* every few seconds. */
|
|
34
|
+
start(): void;
|
|
35
|
+
/** Stops claiming events and waits for the one in hand, so a rollout neither strands it
|
|
36
|
+
* in 'processing' nor answers it twice. */
|
|
37
|
+
stop(): Promise<void>;
|
|
38
|
+
/** What an agent's Teams tools reach: only its own bot. */
|
|
39
|
+
access(bot: BotRow): TeamsAccess;
|
|
40
|
+
/** Settles the queue (tests). */
|
|
41
|
+
idle: () => Promise<void>;
|
|
42
|
+
};
|
|
43
|
+
export type TeamsRuntime = ReturnType<typeof createTeamsRuntime>;
|
|
44
|
+
export type GraphMessage = {
|
|
45
|
+
id?: string;
|
|
46
|
+
createdDateTime?: string;
|
|
47
|
+
messageType?: string;
|
|
48
|
+
from?: {
|
|
49
|
+
user?: {
|
|
50
|
+
displayName?: string;
|
|
51
|
+
id?: string;
|
|
52
|
+
userIdentityType?: string;
|
|
53
|
+
};
|
|
54
|
+
application?: {
|
|
55
|
+
displayName?: string;
|
|
56
|
+
id?: string;
|
|
57
|
+
};
|
|
58
|
+
} | null;
|
|
59
|
+
body?: {
|
|
60
|
+
content?: string;
|
|
61
|
+
contentType?: string;
|
|
62
|
+
};
|
|
63
|
+
replyToId?: string | null;
|
|
64
|
+
};
|
|
65
|
+
export declare function simplify(list: GraphMessage[]): ThreadMessage[];
|
|
66
|
+
export type TeamsAccess = {
|
|
67
|
+
places(): Promise<ConversationRow[]>;
|
|
68
|
+
graph(path: string): Promise<VendorResponse>;
|
|
69
|
+
listChannels(team: ConversationRow): Promise<VendorResponse>;
|
|
70
|
+
post(serviceUrl: string, conversation: string, text: string, replyTo?: string): Promise<VendorResponse>;
|
|
71
|
+
newThread(team: ConversationRow, channelId: string, text: string): Promise<VendorResponse>;
|
|
72
|
+
postCard(serviceUrl: string, conversation: string, card: Record<string, unknown>): Promise<VendorResponse>;
|
|
73
|
+
newThreadCard(team: ConversationRow, channelId: string, card: Record<string, unknown>): Promise<VendorResponse>;
|
|
74
|
+
createApproval(input: {
|
|
75
|
+
tokenHash: string;
|
|
76
|
+
conversationId: string;
|
|
77
|
+
serviceUrl: string;
|
|
78
|
+
approverAadId: string;
|
|
79
|
+
approverName: string;
|
|
80
|
+
title: string;
|
|
81
|
+
body: string;
|
|
82
|
+
facts: ApprovalFact[];
|
|
83
|
+
days: number;
|
|
84
|
+
}): Promise<ApprovalRow>;
|
|
85
|
+
approvalPosted(id: string, threadId: string, activityId: string): Promise<void>;
|
|
86
|
+
discardApproval(id: string): Promise<void>;
|
|
87
|
+
approval(tokenHash: string): Promise<ApprovalRow | null>;
|
|
88
|
+
runForReply(tokenHash: string): Promise<RunRow | null>;
|
|
89
|
+
claimReply(runId: string): Promise<boolean>;
|
|
90
|
+
releaseReply(runId: string): Promise<void>;
|
|
91
|
+
};
|