managed-deepagents 0.5.4-dev.16 → 0.5.4-dev.17

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.
Files changed (44) hide show
  1. package/dist/channels/manifest.d.ts +2 -0
  2. package/dist/channels/manifest.d.ts.map +1 -1
  3. package/dist/channels/slack/index.d.ts +25 -71
  4. package/dist/channels/slack/index.d.ts.map +1 -1
  5. package/dist/channels/slack/index.js +47 -115
  6. package/dist/channels/slack/index.js.map +1 -1
  7. package/dist/channels/trigger/client.d.ts +30 -0
  8. package/dist/channels/trigger/client.d.ts.map +1 -0
  9. package/dist/channels/trigger/client.js +118 -0
  10. package/dist/channels/trigger/client.js.map +1 -0
  11. package/dist/channels/trigger/http.d.ts +24 -0
  12. package/dist/channels/trigger/http.d.ts.map +1 -0
  13. package/dist/channels/trigger/http.js +138 -0
  14. package/dist/channels/trigger/http.js.map +1 -0
  15. package/dist/channels/trigger/types.d.ts +46 -0
  16. package/dist/channels/trigger/types.d.ts.map +1 -0
  17. package/dist/channels/trigger/types.js +28 -0
  18. package/dist/channels/trigger/types.js.map +1 -0
  19. package/dist/channels/trigger/uuid.d.ts +3 -0
  20. package/dist/channels/trigger/uuid.d.ts.map +1 -0
  21. package/dist/channels/trigger/uuid.js +22 -0
  22. package/dist/channels/trigger/uuid.js.map +1 -0
  23. package/dist/index.d.ts +2 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/ingress/index.d.ts +20 -0
  26. package/dist/ingress/index.d.ts.map +1 -1
  27. package/dist/ingress/index.js +44 -1
  28. package/dist/ingress/index.js.map +1 -1
  29. package/dist/namespaces.d.ts +8 -6
  30. package/dist/namespaces.d.ts.map +1 -1
  31. package/dist/namespaces.js +1 -1
  32. package/dist/namespaces.js.map +1 -1
  33. package/dist/runtime/auth.d.ts +3 -0
  34. package/dist/runtime/auth.d.ts.map +1 -1
  35. package/dist/runtime/auth.js +20 -10
  36. package/dist/runtime/auth.js.map +1 -1
  37. package/dist/runtime/channel.d.ts +5 -4
  38. package/dist/runtime/channel.d.ts.map +1 -1
  39. package/dist/runtime/channel.js.map +1 -1
  40. package/dist/runtime/identity-http.d.ts +3 -3
  41. package/dist/runtime/identity-http.d.ts.map +1 -1
  42. package/dist/runtime/identity-http.js +53 -12
  43. package/dist/runtime/identity-http.js.map +1 -1
  44. package/package.json +8 -7
@@ -20,6 +20,8 @@ export interface ChannelManifest {
20
20
  name: string;
21
21
  /** Adapter key used by the runtime registry. */
22
22
  provider: string;
23
+ /** Optional provider-neutral ingress transport discriminator. */
24
+ readonly transport?: "trigger_server";
23
25
  /** Whether the managed runner should auto-reply after invoke. */
24
26
  autoReply: boolean;
25
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/channels/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gEAAgE;IAChE,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,sEAAsE;IACtE,cAAc,EAAE,UAAU,CAAC;CAC5B"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/channels/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gEAAgE;IAChE,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,sEAAsE;IACtE,cAAc,EAAE,UAAU,CAAC;CAC5B"}
@@ -1,57 +1,34 @@
1
- /**
2
- * `channels.slack` — Slack Events ingress, messaging, and deploy requirements.
3
- *
4
- * Files under `channels/` export a named `channel` created with
5
- * `channels.slack(...)`.
6
- *
7
- * Event Subscriptions and OAuth scopes are configured on the developer's Slack
8
- * app (api.slack.com/apps). This authoring surface only covers MDA runtime
9
- * behavior that the Slack app manifest cannot express.
10
- */
1
+ /** Trigger Server-backed Slack channel authoring surface. */
11
2
  import type { ChannelManifest } from "../manifest.js";
12
3
  import { type Channel } from "../../runtime/channel.js";
13
4
  export type { ChannelManifest } from "../manifest.js";
14
- /** Env vars deploy must ensure for Slack Events + auto-reply. */
15
- export declare const SLACK_CHANNEL_REQUIRED_ENV: readonly ["SLACK_SIGNING_SECRET", "SLACK_BOT_TOKEN"];
16
- /**
17
- * Event kinds the runtime can normalize.
18
- * Which events Slack delivers is configured on the BYO Slack app
19
- * (Event Subscriptions); MDA accepts any of these when they arrive.
20
- */
21
- export type SlackChannelTrigger = "app_mention" | "direct_message" | "thread_reply";
22
- export type SlackMentionBehavior = "strip" | "preserve";
23
- export type SlackConversationMapping = "thread" | "conversation" | "message";
24
- export interface SlackChannelFilters {
25
- includeConversations?: readonly string[];
26
- excludeConversations?: readonly string[];
27
- /** Fully-qualified mapped actor IDs such as `slack:T123:U456`. */
28
- includeUsers?: readonly string[];
29
- excludeUsers?: readonly string[];
30
- /**
31
- * Slack Connect shared conversations. Phase 1 rejects `true`.
32
- * @default false
33
- */
34
- allowSharedConversations?: boolean;
5
+ export interface SlackChannelConfig {
6
+ name: string;
7
+ description?: string;
8
+ triggerOnAllMessages?: boolean;
9
+ allowBotTriggers?: boolean;
35
10
  }
36
- export interface SlackConversationPolicy {
37
- /** @default "thread" */
38
- appMention?: SlackConversationMapping;
39
- /** @default "conversation" */
40
- directMessage?: SlackConversationMapping;
11
+ export interface TriggerSlackAppConfig {
12
+ name: string;
13
+ description: string;
41
14
  }
42
- /**
43
- * MDA-side Slack channel options. Bot events and OAuth scopes belong on the
44
- * Slack app (Event Subscriptions / OAuth & Permissions), not here.
45
- */
46
- export interface SlackChannelConfig {
47
- /** @default true */
48
- autoReply?: boolean;
49
- /** @default "strip" */
50
- mentionBehavior?: SlackMentionBehavior;
51
- filters?: SlackChannelFilters;
52
- conversation?: SlackConversationPolicy;
15
+ export interface RequiredTriggerSlackChannelConfig {
16
+ app: TriggerSlackAppConfig;
17
+ triggerOnAllMessages: boolean;
18
+ allowBotTriggers: boolean;
53
19
  }
54
- /** Normalized config with defaults applied. */
20
+ /** Branded Trigger-backed Slack declaration. */
21
+ export type SlackChannel = Channel & RequiredTriggerSlackChannelConfig & {
22
+ kind: "slack";
23
+ transport: "trigger_server";
24
+ };
25
+ /** Declare a Slack channel whose ingress and callbacks use Trigger Server. */
26
+ export declare function slackChannel(config: SlackChannelConfig): SlackChannel;
27
+ /** Build deploy/runtime requirements for a file-derived channel instance. */
28
+ export declare function toSlackRequirements(name: string, definition: RequiredTriggerSlackChannelConfig | SlackChannel): ChannelManifest;
29
+ export type SlackChannelTrigger = "app_mention" | "direct_message" | "thread_reply";
30
+ export type SlackMentionBehavior = "strip" | "preserve";
31
+ export type SlackConversationMapping = "thread" | "conversation" | "message";
55
32
  export interface RequiredSlackChannelConfig {
56
33
  autoReply: boolean;
57
34
  mentionBehavior: SlackMentionBehavior;
@@ -67,29 +44,6 @@ export interface RequiredSlackChannelConfig {
67
44
  directMessage: SlackConversationMapping;
68
45
  };
69
46
  }
70
- /** Branded Slack channel declaration. */
71
- export type SlackChannel = Channel & RequiredSlackChannelConfig & {
72
- kind: "slack";
73
- };
74
- /**
75
- * Recommended bot token scopes for a BYO Slack app that handles Phase 1
76
- * events (`app_mention`, DMs, and channel/group thread replies). Configure
77
- * these under OAuth & Permissions on api.slack.com/apps — MDA does not
78
- * provision the app.
79
- */
80
- export declare const RECOMMENDED_SLACK_SCOPES: readonly ["app_mentions:read", "channels:history", "chat:write", "groups:history", "im:history"];
81
- /**
82
- * Declare a managed Slack channel. Files under `channels/*.ts` export a named
83
- * `channel` created with `channels.slack(...)`.
84
- *
85
- * Subscribe to bot events and add OAuth scopes on your Slack app at
86
- * api.slack.com/apps.
87
- */
88
- export declare function slackChannel(config?: SlackChannelConfig): SlackChannel;
89
- /** Recommended Slack OAuth scopes for a BYO app handling Phase 1 events. */
90
- export declare function requiredSlackScopes(): string[];
91
- /** Build deploy/runtime requirements for a file-derived channel name. */
92
- export declare function toSlackRequirements(name: string, definition: RequiredSlackChannelConfig | SlackChannel): ChannelManifest;
93
47
  export { decodeSlackEscaping, normalizeSlackEvent, verifySlackRequest, } from "./normalize.js";
94
48
  export type { NormalizeSlackEventInput, NormalizeSlackEventResult, SlackInstallationContext, SlackSignatureHeaders, } from "./normalize.js";
95
49
  export { createSlackWebApiTransport, setSlackAssistantStatus, DEFAULT_ASSISTANT_STATUS, DEFAULT_LOADING_MESSAGES, SLACK_API_BASE_ENV, } from "./transport.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"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"}
@@ -1,143 +1,75 @@
1
- /**
2
- * `channels.slack` — Slack Events ingress, messaging, and deploy requirements.
3
- *
4
- * Files under `channels/` export a named `channel` created with
5
- * `channels.slack(...)`.
6
- *
7
- * Event Subscriptions and OAuth scopes are configured on the developer's Slack
8
- * app (api.slack.com/apps). This authoring surface only covers MDA runtime
9
- * behavior that the Slack app manifest cannot express.
10
- */
1
+ /** Trigger Server-backed Slack channel authoring surface. */
11
2
  import { z } from "zod";
3
+ import { handleTriggerChannelEventRequest } from "../trigger/http.js";
12
4
  import { CHANNEL_BRAND, } from "../../runtime/channel.js";
13
- import { handleSlackEventsRequest } from "./http.js";
14
- import { createSlackWebApiTransport } from "./transport.js";
15
- /** Env vars deploy must ensure for Slack Events + auto-reply. */
16
- export const SLACK_CHANNEL_REQUIRED_ENV = [
17
- "SLACK_SIGNING_SECRET",
18
- "SLACK_BOT_TOKEN",
19
- ];
20
- /**
21
- * Recommended bot token scopes for a BYO Slack app that handles Phase 1
22
- * events (`app_mention`, DMs, and channel/group thread replies). Configure
23
- * these under OAuth & Permissions on api.slack.com/apps — MDA does not
24
- * provision the app.
25
- */
26
- export const RECOMMENDED_SLACK_SCOPES = [
27
- "app_mentions:read",
28
- "channels:history",
29
- "chat:write",
30
- "groups:history",
31
- "im:history",
32
- ];
33
- /** Slack IDs and mapped actor IDs, e.g. `C123` or `slack:T123:U456`. */
34
- const identifiers = z
35
- .array(z
36
- .string("must be a list of non-empty strings")
37
- .refine((entry) => entry.trim().length > 0, "must be a list of non-empty strings"))
38
- .optional();
39
- const conversationMapping = z.enum(["thread", "conversation", "message"], {
40
- error: 'must be "thread", "conversation", or "message"',
41
- });
42
5
  const slackChannelConfig = z
43
6
  .object({
44
- autoReply: z.boolean().default(true),
45
- mentionBehavior: z
46
- .enum(["strip", "preserve"], { error: 'must be "strip" or "preserve"' })
47
- .default("strip"),
48
- filters: z
49
- .object({
50
- includeConversations: identifiers,
51
- excludeConversations: identifiers,
52
- includeUsers: identifiers,
53
- excludeUsers: identifiers,
54
- allowSharedConversations: z
55
- .literal(false, { error: "is not supported in Phase 1" })
56
- .default(false),
7
+ name: z
8
+ .string()
9
+ .min(1)
10
+ .refine((value) => [...value].length <= 35, {
11
+ message: "Must contain at most 35 characters",
57
12
  })
58
- .prefault({}),
59
- conversation: z
60
- .object({
61
- appMention: conversationMapping.default("thread"),
62
- directMessage: conversationMapping.default("conversation"),
13
+ .regex(/^[a-zA-Z0-9_.\- ]+$/, {
14
+ message: "Must contain only letters, numbers, spaces, underscores, dashes, and periods",
63
15
  })
64
- .prefault({}),
16
+ .refine((value) => !value.startsWith(" ") &&
17
+ !value.startsWith("-") &&
18
+ !value.endsWith(" ") &&
19
+ !value.endsWith("-"), { message: "Must not start or end with a space or dash" }),
20
+ description: z
21
+ .string()
22
+ .refine((value) => [...value].length <= 139, {
23
+ message: "Must contain at most 139 characters",
24
+ })
25
+ .default(""),
26
+ triggerOnAllMessages: z.boolean().default(false),
27
+ allowBotTriggers: z.boolean().default(false),
65
28
  })
66
- .strict()
67
- .prefault({});
29
+ .strict();
68
30
  function hide(target, key, value) {
69
31
  Object.defineProperty(target, key, { value, enumerable: false });
70
32
  }
71
- /**
72
- * Declare a managed Slack channel. Files under `channels/*.ts` export a named
73
- * `channel` created with `channels.slack(...)`.
74
- *
75
- * Subscribe to bot events and add OAuth scopes on your Slack app at
76
- * api.slack.com/apps.
77
- */
33
+ /** Declare a Slack channel whose ingress and callbacks use Trigger Server. */
78
34
  export function slackChannel(config) {
79
- const raw = (config ?? {});
80
- if ("on" in raw) {
81
- throw new Error("channels.slack(...) no longer accepts `on`. Subscribe to bot events " +
82
- "under Event Subscriptions on your Slack app (api.slack.com/apps).");
83
- }
84
- const validate = slackChannelConfig["~standard"].validate;
85
- const result = validate(config ?? {});
86
- if (result instanceof Promise) {
87
- throw new TypeError("channels.slack(...) needs a schema that validates synchronously");
88
- }
89
- if (result.issues) {
90
- const message = result.issues
35
+ const result = slackChannelConfig.safeParse(config);
36
+ if (!result.success) {
37
+ const message = result.error.issues
91
38
  .map((issue) => {
92
- const path = (issue.path ?? [])
93
- .map((segment) => String(typeof segment === "object" && segment && "key" in segment
94
- ? segment.key
95
- : segment))
96
- .join(".");
97
- return path.length > 0 ? `${path}: ${issue.message}` : issue.message;
39
+ const path = issue.path.join(".");
40
+ return path ? `${path}: ${issue.message}` : issue.message;
98
41
  })
99
42
  .join("; ");
100
43
  throw new Error(`channels.slack(...) ${message}`);
101
44
  }
102
- const args = result.value;
103
- const self = { kind: "slack", ...args };
45
+ const { name, description, ...options } = result.data;
46
+ const self = {
47
+ kind: "slack",
48
+ transport: "trigger_server",
49
+ app: { name, description },
50
+ ...options,
51
+ };
104
52
  hide(self, CHANNEL_BRAND, true);
105
- hide(self, "events", (ctx) => handleSlackEventsRequest(ctx.request, {
106
- name: ctx.name,
107
- config: {
108
- autoReply: self.autoReply,
109
- mentionBehavior: self.mentionBehavior,
110
- filters: self.filters,
111
- conversation: self.conversation,
112
- },
113
- rawBody: ctx.rawBody,
114
- }));
115
- hide(self, "messaging", (env) => {
116
- const token = env.SLACK_BOT_TOKEN;
117
- if (!token)
118
- return undefined;
119
- return createSlackWebApiTransport({ botToken: token });
120
- });
53
+ hide(self, "events", (ctx) => handleTriggerChannelEventRequest(ctx.request, { rawBody: ctx.rawBody }));
121
54
  hide(self, "requirements", (name) => toSlackRequirements(name, self));
122
55
  return self;
123
56
  }
124
- /** Recommended Slack OAuth scopes for a BYO app handling Phase 1 events. */
125
- export function requiredSlackScopes() {
126
- return [...RECOMMENDED_SLACK_SCOPES];
127
- }
128
- /** Build deploy/runtime requirements for a file-derived channel name. */
57
+ /** Build deploy/runtime requirements for a file-derived channel instance. */
129
58
  export function toSlackRequirements(name, definition) {
130
- const config = definition;
131
59
  return {
132
60
  name,
133
61
  provider: "slack",
134
- autoReply: config.autoReply,
135
- requiredPermissions: requiredSlackScopes(),
136
- requiredEnv: [...SLACK_CHANNEL_REQUIRED_ENV],
62
+ transport: "trigger_server",
63
+ autoReply: true,
64
+ requiredPermissions: [],
65
+ requiredEnv: [],
137
66
  providerConfig: {
138
- mentionBehavior: config.mentionBehavior,
139
- filters: config.filters,
140
- conversation: config.conversation,
67
+ app: {
68
+ name: definition.app.name,
69
+ description: definition.app.description,
70
+ },
71
+ triggerOnAllMessages: definition.triggerOnAllMessages,
72
+ allowBotTriggers: definition.allowBotTriggers,
141
73
  },
142
74
  };
143
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/slack/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { TriggerChannelActionRequest, TriggerChannelActionResponse, TriggerChannelRuntimeEventRequest, TriggerChannelRuntimeEventResponse } from "./types.js";
2
+ export declare const LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV = "LANGSMITH_MDA_TRIGGER_SERVER_URL";
3
+ export declare const TRIGGER_HTTP_TIMEOUT_MS = 30000;
4
+ type TriggerClientOperation = "actions" | "events";
5
+ export interface TriggerClientLike {
6
+ postAction(channelId: string, body: TriggerChannelActionRequest): Promise<TriggerChannelActionResponse>;
7
+ postRuntimeEvent(channelId: string, body: TriggerChannelRuntimeEventRequest): Promise<TriggerChannelRuntimeEventResponse>;
8
+ }
9
+ export interface TriggerClientOptions {
10
+ userId?: string;
11
+ env?: NodeJS.ProcessEnv;
12
+ fetch?: typeof fetch;
13
+ timeoutMs?: number;
14
+ }
15
+ /** Fixed-message callback error safe for logs and diagnostics. */
16
+ export declare class TriggerClientError extends Error {
17
+ readonly operation: TriggerClientOperation;
18
+ readonly status?: number | undefined;
19
+ constructor(operation: TriggerClientOperation, status?: number | undefined);
20
+ }
21
+ /** Minimal Trigger Server client authenticated by the hosted server key. */
22
+ export declare class TriggerClient implements TriggerClientLike {
23
+ #private;
24
+ constructor(options?: TriggerClientOptions);
25
+ postAction(channelId: string, body: TriggerChannelActionRequest): Promise<TriggerChannelActionResponse>;
26
+ postRuntimeEvent(channelId: string, body: TriggerChannelRuntimeEventRequest): Promise<TriggerChannelRuntimeEventResponse>;
27
+ }
28
+ export declare function createTriggerClient(options?: TriggerClientOptions): TriggerClient | undefined;
29
+ export {};
30
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,oCAAoC,qCACb,CAAC;AACrC,eAAO,MAAM,uBAAuB,QAA2B,CAAC;AAEhE,KAAK,sBAAsB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACzC,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,SAAS,EAAE,sBAAsB;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAF1B,YACW,SAAS,EAAE,sBAAsB,EACjC,MAAM,CAAC,EAAE,MAAM,YAAA,EAQzB;CACF;AAED,4EAA4E;AAC5E,qBAAa,aAAc,YAAW,iBAAiB;;IAOrD,YAAY,OAAO,GAAE,oBAAyB,EAW7C;IAEK,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAMvC;IAEK,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,kCAAkC,CAAC,CAM7C;CAoCF;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,GAAG,SAAS,CAM3B"}
@@ -0,0 +1,118 @@
1
+ import { fetchWithTimeout, PROVIDER_HTTP_TIMEOUT_MS, } from "../../runtime/http.js";
2
+ import { normalizeUuid } from "./uuid.js";
3
+ export const LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV = "LANGSMITH_MDA_TRIGGER_SERVER_URL";
4
+ export const TRIGGER_HTTP_TIMEOUT_MS = PROVIDER_HTTP_TIMEOUT_MS;
5
+ /** Fixed-message callback error safe for logs and diagnostics. */
6
+ export class TriggerClientError extends Error {
7
+ operation;
8
+ status;
9
+ constructor(operation, status) {
10
+ super(`Trigger Server ${operation} request failed${status === undefined ? "" : ` with status ${status}`}`);
11
+ this.operation = operation;
12
+ this.status = status;
13
+ this.name = "TriggerClientError";
14
+ }
15
+ }
16
+ /** Minimal Trigger Server client authenticated by the hosted server key. */
17
+ export class TriggerClient {
18
+ #apiBase;
19
+ #apiKey;
20
+ #userId;
21
+ #fetch;
22
+ #timeoutMs;
23
+ constructor(options = {}) {
24
+ const env = options.env ?? process.env;
25
+ this.#apiBase = triggerServerApiBase(configuredTriggerServerUrl(env));
26
+ const apiKey = env.LANGSMITH_API_KEY?.trim();
27
+ if (!apiKey) {
28
+ throw new Error("LANGSMITH_API_KEY is required for Trigger Server calls");
29
+ }
30
+ this.#apiKey = apiKey;
31
+ this.#userId = normalizeUuid(options.userId);
32
+ this.#fetch = options.fetch ?? fetch;
33
+ this.#timeoutMs = options.timeoutMs ?? TRIGGER_HTTP_TIMEOUT_MS;
34
+ }
35
+ async postAction(channelId, body) {
36
+ const response = await this.#post("actions", channelId, body);
37
+ if (!isRecord(response) || !nonblank(response.id)) {
38
+ throw new TriggerClientError("actions");
39
+ }
40
+ return { id: response.id };
41
+ }
42
+ async postRuntimeEvent(channelId, body) {
43
+ const response = await this.#post("events", channelId, body);
44
+ if (!isRecord(response) || typeof response.status !== "string") {
45
+ throw new TriggerClientError("events");
46
+ }
47
+ return { status: response.status };
48
+ }
49
+ async #post(operation, channelId, body) {
50
+ let response;
51
+ try {
52
+ response = await fetchWithTimeout(`${this.#apiBase}/channels/${encodeURIComponent(channelId)}/${operation}`, {
53
+ method: "POST",
54
+ redirect: "error",
55
+ headers: {
56
+ "content-type": "application/json",
57
+ "x-api-key": this.#apiKey,
58
+ ...(this.#userId ? { "x-user-id": this.#userId } : {}),
59
+ },
60
+ body: JSON.stringify(body),
61
+ }, this.#timeoutMs, this.#fetch);
62
+ }
63
+ catch {
64
+ throw new TriggerClientError(operation);
65
+ }
66
+ if (!response.ok) {
67
+ throw new TriggerClientError(operation, response.status);
68
+ }
69
+ try {
70
+ return await response.json();
71
+ }
72
+ catch {
73
+ throw new TriggerClientError(operation);
74
+ }
75
+ }
76
+ }
77
+ export function createTriggerClient(options = {}) {
78
+ const env = options.env ?? process.env;
79
+ if (!configuredTriggerServerUrl(env) || !env.LANGSMITH_API_KEY?.trim()) {
80
+ return undefined;
81
+ }
82
+ return new TriggerClient(options);
83
+ }
84
+ function configuredTriggerServerUrl(env) {
85
+ return env[LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV]?.trim() || undefined;
86
+ }
87
+ function triggerServerApiBase(raw) {
88
+ if (!raw) {
89
+ throw new Error(`${LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV} is required`);
90
+ }
91
+ if (!/^https:\/\/[^/\\?#]+(?:\/|\/v1\/?)?$/i.test(raw)) {
92
+ throw new Error("Trigger Server URL must be an HTTPS API base");
93
+ }
94
+ let url;
95
+ try {
96
+ url = new URL(raw);
97
+ }
98
+ catch {
99
+ throw new Error("Trigger Server URL must be an HTTPS API base");
100
+ }
101
+ if (url.protocol !== "https:" ||
102
+ !url.hostname ||
103
+ url.username ||
104
+ url.password ||
105
+ !["/", "/v1", "/v1/"].includes(url.pathname) ||
106
+ url.search ||
107
+ url.hash) {
108
+ throw new Error("Trigger Server URL must be an HTTPS API base");
109
+ }
110
+ return `${url.origin}/v1`;
111
+ }
112
+ function isRecord(value) {
113
+ return typeof value === "object" && value !== null && !Array.isArray(value);
114
+ }
115
+ function nonblank(value) {
116
+ return typeof value === "string" && value.trim().length > 0;
117
+ }
118
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/channels/trigger/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type ObservedIngressRun, type StartedIngressRun } from "../../ingress/index.js";
2
+ import { type TriggerClientLike } from "./client.js";
3
+ export { TRIGGER_SERVICE_KEY_HEADER } from "./types.js";
4
+ export declare const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
5
+ type StartAgent = (input: {
6
+ threadId: string;
7
+ assistantId: string;
8
+ messages: Record<string, unknown>[];
9
+ }) => Promise<StartedIngressRun>;
10
+ type ObserveAgent = (input: {
11
+ threadId: string;
12
+ runId: string;
13
+ }) => Promise<ObservedIngressRun>;
14
+ export interface TriggerChannelHttpOptions {
15
+ assistantId?: string;
16
+ rawBody?: string | Uint8Array;
17
+ schedule?: (work: () => Promise<void>) => void;
18
+ startAgent?: StartAgent;
19
+ observeAgent?: ObserveAgent;
20
+ triggerClient?: TriggerClientLike;
21
+ }
22
+ /** Validate one Trigger message, start its run, and enqueue observation. */
23
+ export declare function handleTriggerChannelEventRequest(request: Request, options?: TriggerChannelHttpOptions): Promise<Response>;
24
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACrC,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,4EAA4E;AAC5E,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,QAAQ,CAAC,CAsEnB"}