managed-deepagents 0.5.4-dev.9 → 0.6.0

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 (83) hide show
  1. package/README.md +62 -14
  2. package/dist/channels/manifest.d.ts +2 -0
  3. package/dist/channels/manifest.d.ts.map +1 -1
  4. package/dist/channels/response-format.d.ts +5 -0
  5. package/dist/channels/response-format.d.ts.map +1 -0
  6. package/dist/channels/response-format.js +41 -0
  7. package/dist/channels/response-format.js.map +1 -0
  8. package/dist/channels/slack/index.d.ts +32 -71
  9. package/dist/channels/slack/index.d.ts.map +1 -1
  10. package/dist/channels/slack/index.js +73 -114
  11. package/dist/channels/slack/index.js.map +1 -1
  12. package/dist/channels/trigger/client.d.ts +30 -0
  13. package/dist/channels/trigger/client.d.ts.map +1 -0
  14. package/dist/channels/trigger/client.js +118 -0
  15. package/dist/channels/trigger/client.js.map +1 -0
  16. package/dist/channels/trigger/http.d.ts +36 -0
  17. package/dist/channels/trigger/http.d.ts.map +1 -0
  18. package/dist/channels/trigger/http.js +186 -0
  19. package/dist/channels/trigger/http.js.map +1 -0
  20. package/dist/channels/trigger/types.d.ts +108 -0
  21. package/dist/channels/trigger/types.d.ts.map +1 -0
  22. package/dist/channels/trigger/types.js +45 -0
  23. package/dist/channels/trigger/types.js.map +1 -0
  24. package/dist/channels/trigger/uuid.d.ts +3 -0
  25. package/dist/channels/trigger/uuid.d.ts.map +1 -0
  26. package/dist/channels/trigger/uuid.js +22 -0
  27. package/dist/channels/trigger/uuid.js.map +1 -0
  28. package/dist/index.d.ts +3 -2
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/ingress/index.d.ts +31 -0
  31. package/dist/ingress/index.d.ts.map +1 -1
  32. package/dist/ingress/index.js +69 -1
  33. package/dist/ingress/index.js.map +1 -1
  34. package/dist/namespaces.d.ts +8 -6
  35. package/dist/namespaces.d.ts.map +1 -1
  36. package/dist/namespaces.js +1 -1
  37. package/dist/namespaces.js.map +1 -1
  38. package/dist/runtime/auth.d.ts +3 -0
  39. package/dist/runtime/auth.d.ts.map +1 -1
  40. package/dist/runtime/auth.js +20 -10
  41. package/dist/runtime/auth.js.map +1 -1
  42. package/dist/runtime/backend.d.ts +0 -1
  43. package/dist/runtime/backend.d.ts.map +1 -1
  44. package/dist/runtime/backend.js +39 -8
  45. package/dist/runtime/backend.js.map +1 -1
  46. package/dist/runtime/channel.d.ts +5 -4
  47. package/dist/runtime/channel.d.ts.map +1 -1
  48. package/dist/runtime/channel.js.map +1 -1
  49. package/dist/runtime/identity-http.d.ts +3 -3
  50. package/dist/runtime/identity-http.d.ts.map +1 -1
  51. package/dist/runtime/identity-http.js +70 -22
  52. package/dist/runtime/identity-http.js.map +1 -1
  53. package/dist/runtime/index.d.ts +22 -8
  54. package/dist/runtime/index.d.ts.map +1 -1
  55. package/dist/runtime/index.js +3 -2
  56. package/dist/runtime/index.js.map +1 -1
  57. package/dist/runtime/log.d.ts +45 -0
  58. package/dist/runtime/log.d.ts.map +1 -0
  59. package/dist/runtime/log.js +75 -0
  60. package/dist/runtime/log.js.map +1 -0
  61. package/dist/runtime/sandbox-manager.d.ts +41 -45
  62. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  63. package/dist/runtime/sandbox-manager.js +143 -135
  64. package/dist/runtime/sandbox-manager.js.map +1 -1
  65. package/dist/runtime/sandbox-names.d.ts +9 -0
  66. package/dist/runtime/sandbox-names.d.ts.map +1 -0
  67. package/dist/runtime/sandbox-names.js +9 -0
  68. package/dist/runtime/sandbox-names.js.map +1 -0
  69. package/dist/runtime/types.d.ts +0 -5
  70. package/dist/runtime/types.d.ts.map +1 -1
  71. package/dist/sandbox.d.ts +61 -15
  72. package/dist/sandbox.d.ts.map +1 -1
  73. package/dist/sandbox.js +25 -7
  74. package/dist/sandbox.js.map +1 -1
  75. package/package.json +19 -18
  76. package/dist/runtime/sandbox-stream-retry.d.ts +0 -18
  77. package/dist/runtime/sandbox-stream-retry.d.ts.map +0 -1
  78. package/dist/runtime/sandbox-stream-retry.js +0 -90
  79. package/dist/runtime/sandbox-stream-retry.js.map +0 -1
  80. package/dist/runtime/setup-script.d.ts +0 -18
  81. package/dist/runtime/setup-script.d.ts.map +0 -1
  82. package/dist/runtime/setup-script.js +0 -49
  83. package/dist/runtime/setup-script.js.map +0 -1
@@ -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,36 @@
1
+ import { type ObservedIngressRun, type StartedIngressRun } from "../../ingress/index.js";
2
+ import { type TriggerClientLike } from "./client.js";
3
+ import { type TriggerChannelResume } from "./types.js";
4
+ export { TRIGGER_SERVICE_KEY_HEADER } from "./types.js";
5
+ export declare const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
6
+ type StartAgent = (input: {
7
+ threadId: string;
8
+ assistantId: string;
9
+ messages: Record<string, unknown>[];
10
+ sourceProvider: string;
11
+ sourceThreadKey: string;
12
+ }) => Promise<StartedIngressRun>;
13
+ type ObserveAgent = (input: {
14
+ threadId: string;
15
+ runId: string;
16
+ }) => Promise<ObservedIngressRun>;
17
+ type ResumeAgent = (input: {
18
+ threadId: string;
19
+ assistantId: string;
20
+ resume: TriggerChannelResume;
21
+ sourceProvider: string;
22
+ sourceThreadKey: string;
23
+ }) => Promise<StartedIngressRun>;
24
+ export interface TriggerChannelHttpOptions {
25
+ sourceProvider: string;
26
+ assistantId?: string;
27
+ rawBody?: string | Uint8Array;
28
+ schedule?: (work: () => Promise<void>) => void;
29
+ startAgent?: StartAgent;
30
+ resumeAgent?: ResumeAgent;
31
+ observeAgent?: ObserveAgent;
32
+ triggerClient?: TriggerClientLike;
33
+ }
34
+ /** Validate one Trigger message, start its run, and enqueue observation. */
35
+ export declare function handleTriggerChannelEventRequest(request: Request, options: TriggerChannelHttpOptions): Promise<Response>;
36
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"AAMA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,oBAAoB,EAG1B,MAAM,YAAY,CAAC;AAEpB,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;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,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,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,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,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,4EAA4E;AAC5E,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,QAAQ,CAAC,CAgGnB"}
@@ -0,0 +1,186 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { v5 as uuidv5 } from "uuid";
3
+ import { extractAssistantText } from "../assistant-text.js";
4
+ import { logger } from "../../runtime/log.js";
5
+ import { observeIngressAgent, resumeIngressAgent, scheduleIngressWork, startIngressAgent, } from "../../ingress/index.js";
6
+ import { createTriggerClient, LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV, TriggerClientError, } from "./client.js";
7
+ import { parseTriggerChannelEvent, TRIGGER_SERVICE_KEY_HEADER, } from "./types.js";
8
+ export { TRIGGER_SERVICE_KEY_HEADER } from "./types.js";
9
+ export const ASSISTANT_ID_ENV = "MDA_ASSISTANT_ID";
10
+ /** Validate one Trigger message, start its run, and enqueue observation. */
11
+ export async function handleTriggerChannelEventRequest(request, options) {
12
+ if (!request.headers.get(TRIGGER_SERVICE_KEY_HEADER)?.trim()) {
13
+ return Response.json({ error: "unauthorized" }, { status: 401 });
14
+ }
15
+ let event;
16
+ try {
17
+ const raw = await requestBody(request, options.rawBody);
18
+ event = parseTriggerChannelEvent(JSON.parse(raw));
19
+ }
20
+ catch {
21
+ logger.warn("invalid channel event");
22
+ return Response.json({ error: "invalid channel event" }, { status: 400 });
23
+ }
24
+ logger.info(`Trigger channel incoming event (type=${event.type}, event_id=${logger.logIdentifier(event.event_id)}, delivery_id=${logger.logIdentifier(event.delivery_id)}, channel_id=${logger.logIdentifier(event.channel_id)})`);
25
+ let client = options.triggerClient;
26
+ if (!client) {
27
+ try {
28
+ client = createTriggerClient({
29
+ userId: request.headers.get("x-user-id") ?? undefined,
30
+ });
31
+ if (!client) {
32
+ logger.error(`channel transport is not configured (${LANGSMITH_MDA_TRIGGER_SERVER_URL_ENV} and LANGSMITH_API_KEY are required)`);
33
+ }
34
+ }
35
+ catch (error) {
36
+ logger.error(`channel transport is not configured (${logger.safeErrorLabel(error)})`);
37
+ client = undefined;
38
+ }
39
+ }
40
+ if (!client) {
41
+ return Response.json({ error: "channel transport is not configured" }, { status: 500 });
42
+ }
43
+ const assistantId = resolveAssistantId(options.assistantId);
44
+ if (!assistantId) {
45
+ logger.error(`${ASSISTANT_ID_ENV} is not configured`);
46
+ return Response.json({ error: "channel runtime is not configured" }, { status: 500 });
47
+ }
48
+ let started;
49
+ try {
50
+ const common = {
51
+ threadId: triggerThreadId(event.source_thread_key),
52
+ assistantId,
53
+ sourceProvider: options.sourceProvider,
54
+ sourceThreadKey: event.source_thread_key,
55
+ };
56
+ started =
57
+ event.type === "message"
58
+ ? await (options.startAgent ?? startIngressAgent)({
59
+ ...common,
60
+ messages: event.input.messages,
61
+ })
62
+ : await (options.resumeAgent ?? resumeIngressAgent)({
63
+ ...common,
64
+ resume: event.interaction.resume,
65
+ });
66
+ }
67
+ catch (error) {
68
+ logger.error(`channel run could not be started (${logger.safeErrorLabel(error)})`);
69
+ return Response.json({ error: "channel run could not be started" }, { status: 500 });
70
+ }
71
+ scheduleIngressWork(() => observeAcceptedRun({
72
+ event,
73
+ started,
74
+ client,
75
+ observeAgent: options.observeAgent,
76
+ }), {
77
+ label: "Trigger channel run observation",
78
+ schedule: options.schedule,
79
+ });
80
+ return Response.json({ status: "accepted", delivery_id: event.delivery_id }, { status: 202 });
81
+ }
82
+ async function observeAcceptedRun(input) {
83
+ const { event, started, client } = input;
84
+ const lifecycle = (type, interrupts) => {
85
+ logger.info(`Trigger channel outgoing event (type=${type}, delivery_id=${logger.logIdentifier(event.delivery_id)}, channel_id=${logger.logIdentifier(event.channel_id)}, run_id=${logger.logIdentifier(started.runId)})`);
86
+ return bestEffort(client.postRuntimeEvent(event.channel_id, runtimeEvent(type, event, started, interrupts)));
87
+ };
88
+ await lifecycle("run.started");
89
+ let observed;
90
+ try {
91
+ observed = await (input.observeAgent ?? observeIngressAgent)({
92
+ threadId: started.threadId,
93
+ runId: started.runId,
94
+ });
95
+ }
96
+ catch {
97
+ await lifecycle("run.failed");
98
+ return;
99
+ }
100
+ if (isInterruptedRun(observed)) {
101
+ await lifecycle("run.interrupted", interruptEntries(observed.values).filter((entry) => isRecord(entry) &&
102
+ typeof entry.id === "string" &&
103
+ entry.id.trim().length > 0 &&
104
+ "value" in entry));
105
+ return;
106
+ }
107
+ if (observed.status !== "success") {
108
+ await lifecycle("run.failed");
109
+ return;
110
+ }
111
+ const text = extractAssistantText(isRecord(observed.values) ? observed.values : {});
112
+ if (text) {
113
+ logger.info(`Trigger channel outgoing action (type=post, delivery_id=${logger.logIdentifier(event.delivery_id)}, channel_id=${logger.logIdentifier(event.channel_id)}, run_id=${logger.logIdentifier(started.runId)})`);
114
+ const action = await bestEffort(client.postAction(event.channel_id, {
115
+ type: "post",
116
+ action_id: randomUUID(),
117
+ address: event.address,
118
+ source_thread_key: event.source_thread_key,
119
+ message: { text },
120
+ }));
121
+ if (action === undefined) {
122
+ await lifecycle("run.failed");
123
+ return;
124
+ }
125
+ }
126
+ await lifecycle("run.completed");
127
+ }
128
+ function runtimeEvent(type, event, started, interrupts) {
129
+ return {
130
+ id: randomUUID(),
131
+ type,
132
+ delivery_id: event.delivery_id,
133
+ source_thread_key: event.source_thread_key,
134
+ address: event.address,
135
+ run_thread_id: started.threadId,
136
+ run_id: started.runId,
137
+ ...(interrupts?.length ? { interrupts } : {}),
138
+ };
139
+ }
140
+ function triggerThreadId(sourceThreadKey) {
141
+ return uuidv5(sourceThreadKey, uuidv5.URL);
142
+ }
143
+ function resolveAssistantId(override) {
144
+ return override?.trim() || process.env[ASSISTANT_ID_ENV]?.trim() || undefined;
145
+ }
146
+ async function requestBody(request, rawBody) {
147
+ if (typeof rawBody === "string")
148
+ return rawBody;
149
+ const bytes = rawBody ?? new Uint8Array(await request.arrayBuffer());
150
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
151
+ }
152
+ async function bestEffort(promise) {
153
+ try {
154
+ return await promise;
155
+ }
156
+ catch (error) {
157
+ if (error instanceof TriggerClientError) {
158
+ logger.warn(`Trigger Server ${error.operation} callback failed${error.status === undefined ? "" : ` (HTTP ${error.status})`}`);
159
+ }
160
+ else {
161
+ logger.warn("Trigger Server callback failed");
162
+ }
163
+ return undefined;
164
+ }
165
+ }
166
+ function isRecord(value) {
167
+ return typeof value === "object" && value !== null && !Array.isArray(value);
168
+ }
169
+ function isInterruptedRun(observed) {
170
+ // Agent Server can report status "success" after join while values still
171
+ // carry `__interrupt__`. Trust either signal.
172
+ return observed.status === "interrupted" || hasInterrupt(observed.values);
173
+ }
174
+ function hasInterrupt(values) {
175
+ return interruptEntries(values).length > 0;
176
+ }
177
+ /** `__interrupt__` arrives as a flat list, or keyed by task id. */
178
+ function interruptEntries(values) {
179
+ if (!isRecord(values))
180
+ return [];
181
+ const raw = values.__interrupt__;
182
+ if (Array.isArray(raw))
183
+ return raw;
184
+ return isRecord(raw) ? Object.values(raw).flat() : [];
185
+ }
186
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/channels/trigger/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { z } from "zod";
2
+ export declare const TRIGGER_SERVICE_KEY_HEADER = "x-service-key";
3
+ /** Provider-owned address fields are opaque to MDA. */
4
+ declare const opaqueObject: z.ZodRecord<z.ZodString, z.ZodUnknown>;
5
+ declare const messageEventSchema: z.ZodObject<{
6
+ version: z.ZodLiteral<"1">;
7
+ event_id: z.ZodString;
8
+ delivery_id: z.ZodString;
9
+ created_at: z.ZodString;
10
+ channel_id: z.ZodString;
11
+ source_thread_key: z.ZodString;
12
+ address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
13
+ type: z.ZodLiteral<"message">;
14
+ input: z.ZodObject<{
15
+ messages: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
16
+ }, z.core.$strip>;
17
+ }, z.core.$strip>;
18
+ declare const interruptResumeEventSchema: z.ZodObject<{
19
+ version: z.ZodLiteral<"1">;
20
+ event_id: z.ZodString;
21
+ delivery_id: z.ZodString;
22
+ created_at: z.ZodString;
23
+ channel_id: z.ZodString;
24
+ source_thread_key: z.ZodString;
25
+ address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
26
+ type: z.ZodLiteral<"interrupt_resume">;
27
+ interaction: z.ZodObject<{
28
+ type: z.ZodLiteral<"interrupt_resume">;
29
+ resume: z.ZodRecord<z.ZodString, z.ZodUnknown>;
30
+ }, z.core.$strip>;
31
+ }, z.core.$strip>;
32
+ declare const eventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
33
+ version: z.ZodLiteral<"1">;
34
+ event_id: z.ZodString;
35
+ delivery_id: z.ZodString;
36
+ created_at: z.ZodString;
37
+ channel_id: z.ZodString;
38
+ source_thread_key: z.ZodString;
39
+ address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
40
+ type: z.ZodLiteral<"message">;
41
+ input: z.ZodObject<{
42
+ messages: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
43
+ }, z.core.$strip>;
44
+ }, z.core.$strip>, z.ZodObject<{
45
+ version: z.ZodLiteral<"1">;
46
+ event_id: z.ZodString;
47
+ delivery_id: z.ZodString;
48
+ created_at: z.ZodString;
49
+ channel_id: z.ZodString;
50
+ source_thread_key: z.ZodString;
51
+ address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
52
+ type: z.ZodLiteral<"interrupt_resume">;
53
+ interaction: z.ZodObject<{
54
+ type: z.ZodLiteral<"interrupt_resume">;
55
+ resume: z.ZodRecord<z.ZodString, z.ZodUnknown>;
56
+ }, z.core.$strip>;
57
+ }, z.core.$strip>], "type">;
58
+ export type TriggerChannelAddress = z.infer<typeof opaqueObject>;
59
+ export type TriggerChannelMessageInput = z.infer<typeof messageEventSchema.shape.input>;
60
+ export type TriggerChannelMessageEvent = z.infer<typeof messageEventSchema>;
61
+ export type TriggerChannelInterruptResumeEvent = z.infer<typeof interruptResumeEventSchema>;
62
+ /** Keyed LangGraph resume: `{ [interruptId]: value }`. Values are opaque (`interrupt()` results or HITL `{ decisions }`). */
63
+ export type TriggerChannelResume = TriggerChannelInterruptResumeEvent["interaction"]["resume"];
64
+ export type TriggerChannelEvent = z.infer<typeof eventSchema>;
65
+ export interface TriggerChannelActionRequest {
66
+ type: "post";
67
+ action_id: string;
68
+ address: TriggerChannelAddress;
69
+ source_thread_key: string;
70
+ message: {
71
+ text: string;
72
+ };
73
+ }
74
+ export interface TriggerChannelActionResponse {
75
+ id: string;
76
+ }
77
+ export type TriggerChannelRuntimeEventType = "run.started" | "run.completed" | "run.interrupted" | "run.failed";
78
+ /**
79
+ * One pending LangGraph interrupt, forwarded verbatim on `run.interrupted`.
80
+ *
81
+ * `id` is the resume key the Trigger Server sends back in
82
+ * `interaction.resume`; `value` is opaque to MDA.
83
+ */
84
+ export interface TriggerChannelInterrupt {
85
+ id: string;
86
+ value: unknown;
87
+ }
88
+ export interface TriggerChannelRuntimeEventRequest {
89
+ id: string;
90
+ type: TriggerChannelRuntimeEventType;
91
+ delivery_id: string;
92
+ source_thread_key: string;
93
+ address: TriggerChannelAddress;
94
+ run_thread_id: string;
95
+ run_id: string;
96
+ /**
97
+ * Present on `run.interrupted`. The Trigger Server cannot read the
98
+ * deployment's threads, so pending interrupts travel on the event itself.
99
+ */
100
+ interrupts?: TriggerChannelInterrupt[];
101
+ }
102
+ export interface TriggerChannelRuntimeEventResponse {
103
+ status: string;
104
+ }
105
+ /** Validate the envelope while retaining all original opaque object identities. */
106
+ export declare function parseTriggerChannelEvent(value: unknown): TriggerChannelEvent;
107
+ export {};
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,0BAA0B,kBAAkB,CAAC;AAK1D,uDAAuD;AACvD,QAAA,MAAM,YAAY,wCAAoC,CAAC;AAevD,QAAA,MAAM,kBAAkB;;;;;;;;;;;;iBAKtB,CAAC;AACH,QAAA,MAAM,0BAA0B;;;;;;;;;;;;;iBAM9B,CAAC;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;2BAGf,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACjE,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CACtC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC5E,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACtD,OAAO,0BAA0B,CAClC,CAAC;AACF,6HAA6H;AAC7H,MAAM,MAAM,oBAAoB,GAC9B,kCAAkC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAE9D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,8BAA8B,GACtC,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,YAAY,CAAC;AAEjB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,8BAA8B,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAG5E"}
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { normalizeUuid } from "./uuid.js";
3
+ export const TRIGGER_SERVICE_KEY_HEADER = "x-service-key";
4
+ const nonblankString = z.string().refine((value) => value.trim().length > 0, {
5
+ message: "must be nonblank",
6
+ });
7
+ /** Provider-owned address fields are opaque to MDA. */
8
+ const opaqueObject = z.record(z.string(), z.unknown());
9
+ const channelId = z
10
+ .string()
11
+ .refine((value) => normalizeUuid(value) !== undefined, {
12
+ message: "Invalid UUID",
13
+ });
14
+ const channelEventBase = z.object({
15
+ version: z.literal("1"),
16
+ event_id: nonblankString,
17
+ delivery_id: nonblankString,
18
+ created_at: nonblankString,
19
+ channel_id: channelId,
20
+ source_thread_key: nonblankString,
21
+ address: opaqueObject,
22
+ });
23
+ const messageEventSchema = channelEventBase.extend({
24
+ type: z.literal("message"),
25
+ input: z.object({
26
+ messages: z.array(opaqueObject),
27
+ }),
28
+ });
29
+ const interruptResumeEventSchema = channelEventBase.extend({
30
+ type: z.literal("interrupt_resume"),
31
+ interaction: z.object({
32
+ type: z.literal("interrupt_resume"),
33
+ resume: opaqueObject,
34
+ }),
35
+ });
36
+ const eventSchema = z.discriminatedUnion("type", [
37
+ messageEventSchema,
38
+ interruptResumeEventSchema,
39
+ ]);
40
+ /** Validate the envelope while retaining all original opaque object identities. */
41
+ export function parseTriggerChannelEvent(value) {
42
+ eventSchema.parse(value);
43
+ return value;
44
+ }
45
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/channels/trigger/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,eAAe,CAAC;AAE1D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3E,OAAO,EAAE,kBAAkB;CAC5B,CAAC,CAAC;AACH,uDAAuD;AACvD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACvD,MAAM,SAAS,GAAG,CAAC;KAChB,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;IACrD,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AACL,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,cAAc;IAC1B,UAAU,EAAE,SAAS;IACrB,iBAAiB,EAAE,cAAc;IACjC,OAAO,EAAE,YAAY;CACtB,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;KAChC,CAAC;CACH,CAAC,CAAC;AACH,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACnC,MAAM,EAAE,YAAY;KACrB,CAAC;CACH,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/C,kBAAkB;IAClB,0BAA0B;CAC3B,CAAC,CAAC;AA+DH,mFAAmF;AACnF,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,KAA4B,CAAC;AACtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Match Python's `uuid.UUID(string)` spellings and return canonical text. */
2
+ export declare function normalizeUuid(value: unknown): string | undefined;
3
+ //# sourceMappingURL=uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/uuid.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAmBhE"}
@@ -0,0 +1,22 @@
1
+ /** Match Python's `uuid.UUID(string)` spellings and return canonical text. */
2
+ export function normalizeUuid(value) {
3
+ if (typeof value !== "string")
4
+ return undefined;
5
+ const compact = value
6
+ .replaceAll("urn:", "")
7
+ .replaceAll("uuid:", "")
8
+ .replace(/^[{}]+/, "")
9
+ .replace(/[{}]+$/, "")
10
+ .replaceAll("-", "");
11
+ if (!/^[0-9a-fA-F]{32}$/.test(compact))
12
+ return undefined;
13
+ const hex = compact.toLowerCase();
14
+ return [
15
+ hex.slice(0, 8),
16
+ hex.slice(8, 12),
17
+ hex.slice(12, 16),
18
+ hex.slice(16, 20),
19
+ hex.slice(20),
20
+ ].join("-");
21
+ }
22
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../../src/channels/trigger/uuid.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhD,MAAM,OAAO,GAAG,KAAK;SAClB,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;SACtB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAEzD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;KACd,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC"}
package/dist/index.d.ts CHANGED
@@ -39,7 +39,8 @@ export type { ScheduleConfig, ScheduleDefinition, ScheduleDeliveryTarget, Schedu
39
39
  export type { ClaimMapping, CredentialScope, HttpIngress, IdentityAuth, IdentityConfig, IdentityDefinition, IdentityOptions, LangSmithApiKeyIngress, RuntimeIdentity, ValidatedTokenIngress, ValidatedTokenProvider, } from "./identity/index.js";
40
40
  export type { MemoryConfig, MemoryDefinition, MemoryOptions, MemoryScope, MemoryScopeInput, MemorySliceInput, MemorySliceKind, ResolvedMemorySlice, } from "./memory/index.js";
41
41
  export type { HttpMcpServerConfig, McpServersConfig, McpServersDefinition, McpToolSelectionConfig, RemoteMcpServerBaseConfig, RemoteMcpServerConfig, SseMcpServerConfig, } from "./connectors/mcp/index.js";
42
- export type { ChannelManifest, RequiredSlackChannelConfig, SlackChannel, SlackChannelConfig, SlackChannelFilters, SlackChannelTrigger, SlackConversationPolicy, SlackMentionBehavior, } from "./channels/slack/index.js";
43
- export type { SandboxDefinition, SandboxOptions, SandboxScope, } from "./sandbox.js";
42
+ export type { ChannelManifest } from "./channels/manifest.js";
43
+ export type { RequiredTriggerSlackChannelConfig, SlackChannel, SlackChannelConfig, } from "./channels/slack/index.js";
44
+ export type { SandboxDefinition, SandboxOptions } from "./sandbox.js";
44
45
  export type { ManagedDeepAgentRuntime, ManagedRuntimeExtras, } from "./runtime/managed-tools.js";
45
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,GAAG,EAAE,OAAO,YAAY,CAAC;CAC1B;AAED,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,UAExB,CAAC;AAEF,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,eAAe,EACf,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,GAAG,EAAE,OAAO,YAAY,CAAC;CAC1B;AAED,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,UAExB,CAAC;AAEF,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EACV,iCAAiC,EACjC,YAAY,EACZ,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtE,YAAY,EACV,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC"}
@@ -6,6 +6,7 @@
6
6
  * trusted loopback invoke with source-provider stamps, and source-thread
7
7
  * existence probes.
8
8
  */
9
+ import type { TriggerChannelResume } from "../channels/trigger/types.js";
9
10
  import { type ChannelBinding } from "../channels/binding.js";
10
11
  /** Inputs for the source-thread involvement probe (after identity remap). */
11
12
  export interface SourceThreadExistsInput {
@@ -26,6 +27,15 @@ export interface InvokeIngressAgentResult {
26
27
  runId?: string;
27
28
  threadId: string;
28
29
  }
30
+ export interface StartedIngressRun {
31
+ threadId: string;
32
+ runId: string;
33
+ }
34
+ export type IngressRunStatus = "error" | "success" | "timeout" | "interrupted";
35
+ export interface ObservedIngressRun {
36
+ values: unknown;
37
+ status: IngressRunStatus;
38
+ }
29
39
  /**
30
40
  * Schedule background work after the provider ACK. Defaults to fire-and-forget
31
41
  * with error logging; tests pass an inline runner.
@@ -47,6 +57,27 @@ export declare function ingressSourceThreadExists(input: SourceThreadExistsInput
47
57
  * Only this path may set `x-mda-source-provider` / `x-mda-source-thread-id`.
48
58
  */
49
59
  export declare function invokeIngressAgent(input: InvokeIngressAgentInput): Promise<InvokeIngressAgentResult>;
60
+ /** Create a Trigger-addressed thread and enqueue its run. */
61
+ export declare function startIngressAgent(input: {
62
+ threadId: string;
63
+ assistantId: string;
64
+ messages: Record<string, unknown>[];
65
+ sourceProvider: string;
66
+ sourceThreadKey: string;
67
+ }): Promise<StartedIngressRun>;
68
+ /** Resume a Trigger-addressed thread with a keyed interrupt response. */
69
+ export declare function resumeIngressAgent(input: {
70
+ threadId: string;
71
+ assistantId: string;
72
+ resume: TriggerChannelResume;
73
+ sourceProvider: string;
74
+ sourceThreadKey: string;
75
+ }): Promise<StartedIngressRun>;
76
+ /** Join an accepted Trigger run and read its terminal status. */
77
+ export declare function observeIngressAgent(input: {
78
+ threadId: string;
79
+ runId: string;
80
+ }): Promise<ObservedIngressRun>;
50
81
  /** Deterministic LangGraph thread id from a provider source-thread key. */
51
82
  export declare function stableThreadId(sourceThreadKey: string): string;
52
83
  //# sourceMappingURL=index.d.ts.map