managed-deepagents 0.4.0-dev.68 → 0.4.0-dev.69
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/README.md +1 -1
- package/dist/channels/assistant-text.d.ts +7 -0
- package/dist/channels/assistant-text.d.ts.map +1 -0
- package/dist/channels/assistant-text.js +28 -0
- package/dist/channels/assistant-text.js.map +1 -0
- package/dist/channels/binding.d.ts +34 -0
- package/dist/channels/binding.d.ts.map +1 -0
- package/dist/channels/binding.js +67 -0
- package/dist/channels/binding.js.map +1 -0
- package/dist/channels/errors.d.ts +11 -0
- package/dist/channels/errors.d.ts.map +1 -0
- package/dist/channels/errors.js +25 -0
- package/dist/channels/errors.js.map +1 -0
- package/dist/channels/index.d.ts +19 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +14 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/runtime.d.ts +40 -0
- package/dist/channels/runtime.d.ts.map +1 -0
- package/dist/channels/runtime.js +76 -0
- package/dist/channels/runtime.js.map +1 -0
- package/dist/channels/schedule-delivery.d.ts +67 -0
- package/dist/channels/schedule-delivery.d.ts.map +1 -0
- package/dist/channels/schedule-delivery.js +193 -0
- package/dist/channels/schedule-delivery.js.map +1 -0
- package/dist/channels/slack/define.d.ts +87 -0
- package/dist/channels/slack/define.d.ts.map +1 -0
- package/dist/channels/slack/define.js +141 -0
- package/dist/channels/slack/define.js.map +1 -0
- package/dist/channels/slack/http.d.ts +86 -0
- package/dist/channels/slack/http.d.ts.map +1 -0
- package/dist/channels/slack/http.js +441 -0
- package/dist/channels/slack/http.js.map +1 -0
- package/dist/channels/slack/index.d.ts +18 -0
- package/dist/channels/slack/index.d.ts.map +1 -0
- package/dist/channels/slack/index.js +13 -0
- package/dist/channels/slack/index.js.map +1 -0
- package/dist/channels/slack/normalize.d.ts +62 -0
- package/dist/channels/slack/normalize.d.ts.map +1 -0
- package/dist/channels/slack/normalize.js +320 -0
- package/dist/channels/slack/normalize.js.map +1 -0
- package/dist/channels/slack/source-thread.d.ts +34 -0
- package/dist/channels/slack/source-thread.d.ts.map +1 -0
- package/dist/channels/slack/source-thread.js +92 -0
- package/dist/channels/slack/source-thread.js.map +1 -0
- package/dist/channels/slack/transport.d.ts +48 -0
- package/dist/channels/slack/transport.d.ts.map +1 -0
- package/dist/channels/slack/transport.js +178 -0
- package/dist/channels/slack/transport.js.map +1 -0
- package/dist/channels/store.d.ts +51 -0
- package/dist/channels/store.d.ts.map +1 -0
- package/dist/channels/store.js +76 -0
- package/dist/channels/store.js.map +1 -0
- package/dist/channels/types.d.ts +116 -0
- package/dist/channels/types.d.ts.map +1 -0
- package/dist/channels/types.js +24 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/identity/links.d.ts +62 -0
- package/dist/identity/links.d.ts.map +1 -0
- package/dist/identity/links.js +176 -0
- package/dist/identity/links.js.map +1 -0
- package/dist/identity/slack-connect-http.d.ts +21 -0
- package/dist/identity/slack-connect-http.d.ts.map +1 -0
- package/dist/identity/slack-connect-http.js +129 -0
- package/dist/identity/slack-connect-http.js.map +1 -0
- package/dist/identity/slack-oauth.d.ts +60 -0
- package/dist/identity/slack-oauth.d.ts.map +1 -0
- package/dist/identity/slack-oauth.js +193 -0
- package/dist/identity/slack-oauth.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/auth.d.ts +40 -0
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +123 -9
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/cors.d.ts +28 -0
- package/dist/runtime/cors.d.ts.map +1 -0
- package/dist/runtime/cors.js +92 -0
- package/dist/runtime/cors.js.map +1 -0
- package/dist/runtime/identity-http.d.ts +6 -0
- package/dist/runtime/identity-http.d.ts.map +1 -1
- package/dist/runtime/identity-http.js +90 -2
- package/dist/runtime/identity-http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +41 -1
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +142 -2
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts +2 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +75 -191
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/langsmith-connector.d.ts.map +1 -1
- package/dist/runtime/langsmith-connector.js +4 -3
- package/dist/runtime/langsmith-connector.js.map +1 -1
- package/dist/runtime/managed-tools.d.ts +6 -0
- package/dist/runtime/managed-tools.d.ts.map +1 -1
- package/dist/runtime/managed-tools.js +10 -0
- package/dist/runtime/managed-tools.js.map +1 -1
- package/dist/runtime/memory/context-io.d.ts +5 -0
- package/dist/runtime/memory/context-io.d.ts.map +1 -0
- package/dist/runtime/memory/context-io.js +28 -0
- package/dist/runtime/memory/context-io.js.map +1 -0
- package/dist/runtime/memory/index.d.ts +8 -0
- package/dist/runtime/memory/index.d.ts.map +1 -0
- package/dist/runtime/memory/index.js +6 -0
- package/dist/runtime/memory/index.js.map +1 -0
- package/dist/runtime/memory/mounts.d.ts +38 -0
- package/dist/runtime/memory/mounts.d.ts.map +1 -0
- package/dist/runtime/memory/mounts.js +185 -0
- package/dist/runtime/memory/mounts.js.map +1 -0
- package/dist/runtime/memory/paths.d.ts +10 -0
- package/dist/runtime/memory/paths.d.ts.map +1 -0
- package/dist/runtime/memory/paths.js +50 -0
- package/dist/runtime/memory/paths.js.map +1 -0
- package/dist/runtime/memory/seed.d.ts +30 -0
- package/dist/runtime/memory/seed.d.ts.map +1 -0
- package/dist/runtime/memory/seed.js +185 -0
- package/dist/runtime/memory/seed.js.map +1 -0
- package/dist/runtime/memory/user-repo.d.ts +19 -0
- package/dist/runtime/memory/user-repo.d.ts.map +1 -0
- package/dist/runtime/memory/user-repo.js +57 -0
- package/dist/runtime/memory/user-repo.js.map +1 -0
- package/dist/runtime/types.d.ts +11 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schedules.d.ts +6 -3
- package/dist/schedules.d.ts.map +1 -1
- package/dist/schedules.js +22 -0
- package/dist/schedules.js.map +1 -1
- package/dist/types.d.ts +4 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +16 -7
package/README.md
CHANGED
|
@@ -71,7 +71,7 @@ export const agent = defineDeepAgent({
|
|
|
71
71
|
|
|
72
72
|
`defineDeepAgent` accepts the [`createDeepAgent`](https://reference.langchain.com/javascript/deepagents/agent/createDeepAgent) configuration surface minus the managed keys: `backend`, `store`, `checkpointer`, `memory`, `skills`, and `systemPrompt`. Those are provided by the managed runtime when your agent is deployed. Write the system prompt in `instructions.md` next to `agent.ts`; the CLI embeds it at deploy time.
|
|
73
73
|
|
|
74
|
-
On deploy, Context Hub stores
|
|
74
|
+
On deploy, Context Hub stores harness files (`instructions.md`, `skills/**`) plus a shared agent memory template and optional `org-memory/**` in the deployment Hub repo. When identity scopes memory to an actor or tenant, the runtime opens a **dedicated Hub repo per caller** (lazy-created) and mounts it at `/memories/user/`; shared `agent` memory still remounts a path in the deployment repo. Hot memory (`/memories/user/AGENTS.md`) is injected every turn. Optional org facts mount read-only at `/memories/org/`. Deploy never overwrites existing memories.
|
|
75
75
|
|
|
76
76
|
## Project Shape
|
|
77
77
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assistant-text.d.ts","sourceRoot":"","sources":["../../src/channels/assistant-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAS1E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the last assistant/AI message text from a run or agent state.
|
|
3
|
+
*/
|
|
4
|
+
import { coerceMessageLikeToMessage } from "@langchain/core/messages";
|
|
5
|
+
import { BaseMessage } from "langchain";
|
|
6
|
+
export function extractAssistantText(input) {
|
|
7
|
+
const messages = Array.isArray(input.messages) ? input.messages : [];
|
|
8
|
+
for (let i = messages.length - 1; i >= 0; i -= 1) {
|
|
9
|
+
const message = asBaseMessage(messages[i]);
|
|
10
|
+
if (!message || message.type !== "ai")
|
|
11
|
+
continue;
|
|
12
|
+
const text = message.text.trim();
|
|
13
|
+
if (text)
|
|
14
|
+
return text;
|
|
15
|
+
}
|
|
16
|
+
return "";
|
|
17
|
+
}
|
|
18
|
+
function asBaseMessage(message) {
|
|
19
|
+
if (message instanceof BaseMessage)
|
|
20
|
+
return message;
|
|
21
|
+
try {
|
|
22
|
+
return coerceMessageLikeToMessage(message);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=assistant-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assistant-text.js","sourceRoot":"","sources":["../../src/channels/assistant-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,UAAU,oBAAoB,CAAC,KAA6B;IAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,SAAS;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB;IACrC,IAAI,OAAO,YAAY,WAAW;QAAE,OAAO,OAAO,CAAC;IACnD,IAAI,CAAC;QACH,OAAO,0BAA0B,CAC/B,OAA2D,CAC5D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel binding carried on channel-originated runs.
|
|
3
|
+
*
|
|
4
|
+
* The Events handler stamps a serializable binding into run `configurable`.
|
|
5
|
+
* The runtime seam rebuilds `runtime.channel` only when the trusted auth user
|
|
6
|
+
* source provider matches — clients cannot invent a channel surface.
|
|
7
|
+
*/
|
|
8
|
+
import { wasFinalPosted } from "./runtime.js";
|
|
9
|
+
import type { ChannelTransport } from "./runtime.js";
|
|
10
|
+
import type { ChannelAddress, ChannelEvent, ChannelProvider, RuntimeChannel } from "./types.js";
|
|
11
|
+
/** Env var holding the Slack bot token for Phase 1 single-workspace installs. */
|
|
12
|
+
export declare const SLACK_BOT_TOKEN_ENV = "SLACK_BOT_TOKEN";
|
|
13
|
+
/** Configurable key stamped by the managed channel runner (never client-trusted alone). */
|
|
14
|
+
export declare const CHANNEL_BINDING_KEY = "mda_channel_binding";
|
|
15
|
+
export interface ChannelBinding {
|
|
16
|
+
name: string;
|
|
17
|
+
provider: ChannelProvider;
|
|
18
|
+
event: ChannelEvent;
|
|
19
|
+
address: ChannelAddress;
|
|
20
|
+
autoReply: boolean;
|
|
21
|
+
deliveryId: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function markFinalPosted(deliveryId: string): void;
|
|
24
|
+
export declare function clearFinalPosted(deliveryId: string): void;
|
|
25
|
+
export declare function wasDeliveryFinalPosted(deliveryId: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Rebuild `runtime.channel` from a trusted configurable bag.
|
|
28
|
+
*
|
|
29
|
+
* Returns `undefined` unless the auth user source provider matches the binding
|
|
30
|
+
* and a transport can be constructed.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveRuntimeChannel(configurable: Record<string, unknown> | undefined, transportFactory?: (provider: ChannelProvider) => ChannelTransport | undefined): RuntimeChannel | undefined;
|
|
33
|
+
export { wasFinalPosted };
|
|
34
|
+
//# sourceMappingURL=binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/channels/binding.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAwB,cAAc,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAErD,2FAA2F;AAC3F,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAKzD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAElE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjD,gBAAgB,GAAE,CAChB,QAAQ,EAAE,eAAe,KACtB,gBAAgB,GAAG,SAA4B,GACnD,cAAc,GAAG,SAAS,CA+B5B;AAWD,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel binding carried on channel-originated runs.
|
|
3
|
+
*
|
|
4
|
+
* The Events handler stamps a serializable binding into run `configurable`.
|
|
5
|
+
* The runtime seam rebuilds `runtime.channel` only when the trusted auth user
|
|
6
|
+
* source provider matches — clients cannot invent a channel surface.
|
|
7
|
+
*/
|
|
8
|
+
import { createRuntimeChannel, wasFinalPosted } from "./runtime.js";
|
|
9
|
+
import { createSlackWebApiTransport } from "./slack/transport.js";
|
|
10
|
+
/** Env var holding the Slack bot token for Phase 1 single-workspace installs. */
|
|
11
|
+
export const SLACK_BOT_TOKEN_ENV = "SLACK_BOT_TOKEN";
|
|
12
|
+
/** Configurable key stamped by the managed channel runner (never client-trusted alone). */
|
|
13
|
+
export const CHANNEL_BINDING_KEY = "mda_channel_binding";
|
|
14
|
+
/** Process-local final-post flags keyed by delivery id (survives binding rebuild). */
|
|
15
|
+
const finalPostedByDelivery = new Map();
|
|
16
|
+
export function markFinalPosted(deliveryId) {
|
|
17
|
+
finalPostedByDelivery.set(deliveryId, true);
|
|
18
|
+
}
|
|
19
|
+
export function clearFinalPosted(deliveryId) {
|
|
20
|
+
finalPostedByDelivery.delete(deliveryId);
|
|
21
|
+
}
|
|
22
|
+
export function wasDeliveryFinalPosted(deliveryId) {
|
|
23
|
+
return finalPostedByDelivery.get(deliveryId) === true;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Rebuild `runtime.channel` from a trusted configurable bag.
|
|
27
|
+
*
|
|
28
|
+
* Returns `undefined` unless the auth user source provider matches the binding
|
|
29
|
+
* and a transport can be constructed.
|
|
30
|
+
*/
|
|
31
|
+
export function resolveRuntimeChannel(configurable, transportFactory = defaultTransport) {
|
|
32
|
+
if (!configurable)
|
|
33
|
+
return undefined;
|
|
34
|
+
const user = configurable.langgraph_auth_user;
|
|
35
|
+
const sourceProvider = user?.mda_source_provider;
|
|
36
|
+
const binding = configurable[CHANNEL_BINDING_KEY];
|
|
37
|
+
if (!binding ||
|
|
38
|
+
typeof binding !== "object" ||
|
|
39
|
+
typeof binding.name !== "string" ||
|
|
40
|
+
typeof binding.provider !== "string" ||
|
|
41
|
+
typeof binding.deliveryId !== "string" ||
|
|
42
|
+
sourceProvider !== binding.provider) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const transport = transportFactory(binding.provider);
|
|
46
|
+
if (!transport)
|
|
47
|
+
return undefined;
|
|
48
|
+
const deliveryId = binding.deliveryId;
|
|
49
|
+
return createRuntimeChannel({
|
|
50
|
+
name: binding.name,
|
|
51
|
+
provider: binding.provider,
|
|
52
|
+
event: binding.event,
|
|
53
|
+
address: binding.address,
|
|
54
|
+
transport,
|
|
55
|
+
onFinalPosted: () => markFinalPosted(deliveryId),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function defaultTransport(provider) {
|
|
59
|
+
if (provider !== "slack")
|
|
60
|
+
return undefined;
|
|
61
|
+
const token = process.env[SLACK_BOT_TOKEN_ENV];
|
|
62
|
+
if (!token)
|
|
63
|
+
return undefined;
|
|
64
|
+
return createSlackWebApiTransport({ botToken: token });
|
|
65
|
+
}
|
|
66
|
+
export { wasFinalPosted };
|
|
67
|
+
//# sourceMappingURL=binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/channels/binding.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE,iFAAiF;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAErD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,sFAAsF;AACtF,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAWzD,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAiD,EACjD,mBAEoC,gBAAgB;IAEpD,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,IAAI,GAAG,YAAY,CAAC,mBAEb,CAAC;IACd,MAAM,cAAc,GAAG,IAAI,EAAE,mBAAmB,CAAC;IACjD,MAAM,OAAO,GAAG,YAAY,CAAC,mBAAmB,CAEnC,CAAC;IACd,IACE,CAAC,OAAO;QACR,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QAChC,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;QACpC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;QACtC,cAAc,KAAK,OAAO,CAAC,QAAQ,EACnC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,OAAO,oBAAoB,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS;QACT,aAAa,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC;KACjD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CACvB,QAAyB;IAEzB,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,0BAA0B,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared channel error codes and a typed error class.
|
|
3
|
+
*/
|
|
4
|
+
import type { ChannelErrorCode } from "./types.js";
|
|
5
|
+
export declare const CHANNEL_ERROR_CODES: readonly ChannelErrorCode[];
|
|
6
|
+
/** Typed channel failure with a stable machine-readable code. */
|
|
7
|
+
export declare class ChannelError extends Error {
|
|
8
|
+
readonly code: ChannelErrorCode;
|
|
9
|
+
constructor(code: ChannelErrorCode, message: string);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/channels/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAWjD,CAAC;AAEX,iEAAiE;AACjE,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBAEpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAKpD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared channel error codes and a typed error class.
|
|
3
|
+
*/
|
|
4
|
+
export const CHANNEL_ERROR_CODES = [
|
|
5
|
+
"channel_invalid_signature",
|
|
6
|
+
"channel_replay_rejected",
|
|
7
|
+
"channel_installation_not_found",
|
|
8
|
+
"channel_event_filtered",
|
|
9
|
+
"channel_identity_unresolvable",
|
|
10
|
+
"channel_destination_forbidden",
|
|
11
|
+
"channel_invocation_rate_limited",
|
|
12
|
+
"channel_run_failed",
|
|
13
|
+
"channel_provider_rate_limited",
|
|
14
|
+
"channel_provider_rejected",
|
|
15
|
+
];
|
|
16
|
+
/** Typed channel failure with a stable machine-readable code. */
|
|
17
|
+
export class ChannelError extends Error {
|
|
18
|
+
code;
|
|
19
|
+
constructor(code, message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "ChannelError";
|
|
22
|
+
this.code = code;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/channels/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,2BAA2B;IAC3B,yBAAyB;IACzB,gCAAgC;IAChC,wBAAwB;IACxB,+BAA+B;IAC/B,+BAA+B;IAC/B,iCAAiC;IACjC,oBAAoB;IACpB,+BAA+B;IAC/B,2BAA2B;CACnB,CAAC;AAEX,iEAAiE;AACjE,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAmB;IAEhC,YAAY,IAAsB,EAAE,OAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel-neutral contracts shared by every provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Import provider integrations from their own entrypoints, e.g.
|
|
5
|
+
* `managed-deepagents/channels/slack`.
|
|
6
|
+
*/
|
|
7
|
+
export type { ChannelAddress, ChannelAttachmentRef, ChannelCapabilities, ChannelDestination, ChannelErrorCode, ChannelEvent, ChannelInboundMessage, ChannelMessage, ChannelMessageUpdate, ChannelNativePayload, ChannelProvider, JsonValue, PostedChannelMessage, RuntimeChannel, } from "./types.js";
|
|
8
|
+
export { normalizeChannelDestination } from "./types.js";
|
|
9
|
+
export { CHANNEL_ERROR_CODES, ChannelError } from "./errors.js";
|
|
10
|
+
export { createRuntimeChannel, wasFinalPosted } from "./runtime.js";
|
|
11
|
+
export type { ChannelTransport, CreateRuntimeChannelOptions, } from "./runtime.js";
|
|
12
|
+
export { CHANNEL_BINDING_KEY, SLACK_BOT_TOKEN_ENV, clearFinalPosted, markFinalPosted, resolveRuntimeChannel, wasDeliveryFinalPosted, } from "./binding.js";
|
|
13
|
+
export type { ChannelBinding } from "./binding.js";
|
|
14
|
+
export { InMemoryChannelStore } from "./store.js";
|
|
15
|
+
export type { DeliveryRecord, DeliveryStatus } from "./store.js";
|
|
16
|
+
export { extractAssistantText } from "./assistant-text.js";
|
|
17
|
+
export { addressFromDeliverTo, createScheduleDeliveryMiddleware, deliverScheduleResult, isTrustedScheduleDeliveryRun, readScheduleDeliverTo, setScheduleMetadataForTests, } from "./schedule-delivery.js";
|
|
18
|
+
export type { DeliverScheduleResultInput, NormalizedScheduleDeliverTo, } from "./schedule-delivery.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACpE,YAAY,EACV,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,gCAAgC,EAChC,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel-neutral contracts shared by every provider adapter.
|
|
3
|
+
*
|
|
4
|
+
* Import provider integrations from their own entrypoints, e.g.
|
|
5
|
+
* `managed-deepagents/channels/slack`.
|
|
6
|
+
*/
|
|
7
|
+
export { normalizeChannelDestination } from "./types.js";
|
|
8
|
+
export { CHANNEL_ERROR_CODES, ChannelError } from "./errors.js";
|
|
9
|
+
export { createRuntimeChannel, wasFinalPosted } from "./runtime.js";
|
|
10
|
+
export { CHANNEL_BINDING_KEY, SLACK_BOT_TOKEN_ENV, clearFinalPosted, markFinalPosted, resolveRuntimeChannel, wasDeliveryFinalPosted, } from "./binding.js";
|
|
11
|
+
export { InMemoryChannelStore } from "./store.js";
|
|
12
|
+
export { extractAssistantText } from "./assistant-text.js";
|
|
13
|
+
export { addressFromDeliverTo, createScheduleDeliveryMiddleware, deliverScheduleResult, isTrustedScheduleDeliveryRun, readScheduleDeliverTo, setScheduleMetadataForTests, } from "./schedule-delivery.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAMpE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,gCAAgC,EAChC,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Construct the optional `runtime.channel` surface for channel-originated runs.
|
|
3
|
+
*/
|
|
4
|
+
import type { ChannelAddress, ChannelCapabilities, ChannelEvent, ChannelMessage, ChannelMessageUpdate, ChannelProvider, PostedChannelMessage, RuntimeChannel } from "./types.js";
|
|
5
|
+
export interface ChannelTransport {
|
|
6
|
+
post(input: {
|
|
7
|
+
text: string;
|
|
8
|
+
conversationId: string;
|
|
9
|
+
threadId?: string;
|
|
10
|
+
native?: ChannelMessage["native"];
|
|
11
|
+
}): Promise<PostedChannelMessage>;
|
|
12
|
+
update?(input: {
|
|
13
|
+
id: string;
|
|
14
|
+
text?: string;
|
|
15
|
+
native?: ChannelMessageUpdate["native"];
|
|
16
|
+
}): Promise<PostedChannelMessage>;
|
|
17
|
+
}
|
|
18
|
+
export interface CreateRuntimeChannelOptions {
|
|
19
|
+
name: string;
|
|
20
|
+
provider: ChannelProvider;
|
|
21
|
+
event: ChannelEvent;
|
|
22
|
+
address: ChannelAddress;
|
|
23
|
+
capabilities?: Partial<ChannelCapabilities>;
|
|
24
|
+
transport: ChannelTransport;
|
|
25
|
+
/**
|
|
26
|
+
* When `post(..., { final: true })` is called, auto-reply should be suppressed.
|
|
27
|
+
* The managed runner reads this flag after the agent completes.
|
|
28
|
+
*/
|
|
29
|
+
onFinalPosted?: () => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build a `RuntimeChannel` bound to a managed transport.
|
|
33
|
+
*
|
|
34
|
+
* Credentials never appear on the returned object.
|
|
35
|
+
* Phase 1 only permits `current_thread` destinations.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createRuntimeChannel(options: CreateRuntimeChannelOptions): RuntimeChannel;
|
|
38
|
+
/** True when an explicit `post(..., { final: true })` already delivered the reply. */
|
|
39
|
+
export declare function wasFinalPosted(channel: RuntimeChannel): boolean;
|
|
40
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/channels/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,KAAK,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;KACnC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,CAAC,CAAC,KAAK,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KACzC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5C,SAAS,EAAE,gBAAgB,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAMD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,cAAc,CA4DhB;AAiBD,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAI/D"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Construct the optional `runtime.channel` surface for channel-originated runs.
|
|
3
|
+
*/
|
|
4
|
+
import { ChannelError } from "./errors.js";
|
|
5
|
+
import { normalizeChannelDestination } from "./types.js";
|
|
6
|
+
const DEFAULT_CAPABILITIES = {
|
|
7
|
+
update: true,
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Build a `RuntimeChannel` bound to a managed transport.
|
|
11
|
+
*
|
|
12
|
+
* Credentials never appear on the returned object.
|
|
13
|
+
* Phase 1 only permits `current_thread` destinations.
|
|
14
|
+
*/
|
|
15
|
+
export function createRuntimeChannel(options) {
|
|
16
|
+
const capabilities = {
|
|
17
|
+
...DEFAULT_CAPABILITIES,
|
|
18
|
+
...options.capabilities,
|
|
19
|
+
};
|
|
20
|
+
let finalPosted = false;
|
|
21
|
+
const channel = {
|
|
22
|
+
name: options.name,
|
|
23
|
+
provider: options.provider,
|
|
24
|
+
event: options.event,
|
|
25
|
+
address: options.address,
|
|
26
|
+
capabilities,
|
|
27
|
+
async post(message, postOptions) {
|
|
28
|
+
validateMessage(message, options.provider);
|
|
29
|
+
const destination = normalizeChannelDestination(message.to ?? { type: "current_thread" });
|
|
30
|
+
if (destination.type !== "current_thread") {
|
|
31
|
+
throw new ChannelError("channel_destination_forbidden", "explicit channel destinations require a deploy-time outbound grant");
|
|
32
|
+
}
|
|
33
|
+
const posted = await options.transport.post({
|
|
34
|
+
text: message.text,
|
|
35
|
+
conversationId: options.address.conversationId,
|
|
36
|
+
threadId: options.address.threadId,
|
|
37
|
+
native: message.native,
|
|
38
|
+
});
|
|
39
|
+
if (postOptions?.final) {
|
|
40
|
+
finalPosted = true;
|
|
41
|
+
options.onFinalPosted?.();
|
|
42
|
+
}
|
|
43
|
+
return posted;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
if (capabilities.update && options.transport.update) {
|
|
47
|
+
channel.update = async (id, message) => {
|
|
48
|
+
if (message.native && message.native.provider !== options.provider) {
|
|
49
|
+
throw new ChannelError("channel_provider_rejected", `native payload provider "${message.native.provider}" does not match channel provider "${options.provider}"`);
|
|
50
|
+
}
|
|
51
|
+
return options.transport.update({
|
|
52
|
+
id,
|
|
53
|
+
text: message.text,
|
|
54
|
+
native: message.native,
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
Object.defineProperty(channel, "finalPosted", {
|
|
59
|
+
get: () => finalPosted,
|
|
60
|
+
enumerable: false,
|
|
61
|
+
});
|
|
62
|
+
return channel;
|
|
63
|
+
}
|
|
64
|
+
function validateMessage(message, provider) {
|
|
65
|
+
if (typeof message.text !== "string" || message.text.trim().length === 0) {
|
|
66
|
+
throw new Error("channel.post requires non-empty text");
|
|
67
|
+
}
|
|
68
|
+
if (message.native && message.native.provider !== provider) {
|
|
69
|
+
throw new ChannelError("channel_provider_rejected", `native payload provider "${message.native.provider}" does not match channel provider "${provider}"`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** True when an explicit `post(..., { final: true })` already delivered the reply. */
|
|
73
|
+
export function wasFinalPosted(channel) {
|
|
74
|
+
return Boolean(channel.finalPosted);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/channels/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule `deliverTo` auto-post after a cron-triggered agent run.
|
|
3
|
+
*
|
|
4
|
+
* Reads `configurable.mda_schedule.deliver_to` (compiled from defineSchedule)
|
|
5
|
+
* and posts the final assistant text to Slack when configured.
|
|
6
|
+
*
|
|
7
|
+
* Delivery only runs for managed cron invocations: compiled crons stamp both
|
|
8
|
+
* `metadata.mda_managed` / `metadata.mda_schedule` and
|
|
9
|
+
* `configurable.mda_schedule.name`. Ordinary HTTP invokes cannot forge that
|
|
10
|
+
* pair (and `mda_schedule` is a reserved configurable key).
|
|
11
|
+
*/
|
|
12
|
+
import type { ManagedMiddleware } from "../runtime/managed-middleware.js";
|
|
13
|
+
import type { ChannelAddress } from "./types.js";
|
|
14
|
+
/** Override LangGraph run metadata resolution. Test-only. */
|
|
15
|
+
export declare function setScheduleMetadataForTests(loader?: () => {
|
|
16
|
+
mda_managed?: unknown;
|
|
17
|
+
mda_schedule?: unknown;
|
|
18
|
+
} | undefined): void;
|
|
19
|
+
/** Normalized schedule delivery target (camelCase). */
|
|
20
|
+
export interface NormalizedScheduleDeliverTo {
|
|
21
|
+
channel: string;
|
|
22
|
+
to: {
|
|
23
|
+
type: "provider_conversation";
|
|
24
|
+
conversationId: string;
|
|
25
|
+
} | {
|
|
26
|
+
type: "provider_thread";
|
|
27
|
+
conversationId: string;
|
|
28
|
+
threadId: string;
|
|
29
|
+
};
|
|
30
|
+
autoPost: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Read and normalize `configurable.mda_schedule.deliver_to` from a cron run.
|
|
34
|
+
* Accepts camelCase (TS compile) and snake_case (Python compile) shapes.
|
|
35
|
+
*/
|
|
36
|
+
export declare function readScheduleDeliverTo(configurable: Record<string, unknown> | undefined): NormalizedScheduleDeliverTo | undefined;
|
|
37
|
+
/** Map a deliverTo destination onto a runtime channel address. */
|
|
38
|
+
export declare function addressFromDeliverTo(to: NormalizedScheduleDeliverTo["to"]): ChannelAddress;
|
|
39
|
+
export interface DeliverScheduleResultInput {
|
|
40
|
+
deliverTo: NormalizedScheduleDeliverTo;
|
|
41
|
+
replyText: string;
|
|
42
|
+
/** Override bot token (tests). */
|
|
43
|
+
botToken?: string;
|
|
44
|
+
/** Override post implementation (tests). */
|
|
45
|
+
post?: (input: {
|
|
46
|
+
text: string;
|
|
47
|
+
conversationId: string;
|
|
48
|
+
threadId?: string;
|
|
49
|
+
}) => Promise<unknown>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Post schedule result text to the configured channel. Soft-fails (logs) on
|
|
53
|
+
* missing token / provider errors so cron runs are not marked failed.
|
|
54
|
+
*/
|
|
55
|
+
export declare function deliverScheduleResult(input: DeliverScheduleResultInput): Promise<"posted" | "skipped" | "failed">;
|
|
56
|
+
/**
|
|
57
|
+
* True when this run is a managed cron fire (not a caller-forged HTTP invoke).
|
|
58
|
+
*/
|
|
59
|
+
export declare function isTrustedScheduleDeliveryRun(configurable: Record<string, unknown> | undefined): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Always-on middleware that auto-posts schedule results when `deliver_to` is set
|
|
62
|
+
* on a trusted managed cron run.
|
|
63
|
+
*/
|
|
64
|
+
export declare function createScheduleDeliveryMiddleware(options?: {
|
|
65
|
+
deliver?: typeof deliverScheduleResult;
|
|
66
|
+
}): ManagedMiddleware;
|
|
67
|
+
//# sourceMappingURL=schedule-delivery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-delivery.d.ts","sourceRoot":"","sources":["../../src/channels/schedule-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAK1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,6DAA6D;AAC7D,wBAAgB,2BAA2B,CACzC,MAAM,CAAC,EAAE,MAAM;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAC3E,IAAI,CAEN;AAED,uDAAuD;AACvD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EACE;QAAE,IAAI,EAAE,uBAAuB,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GACzD;QAAE,IAAI,EAAE,iBAAiB,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAChD,2BAA2B,GAAG,SAAS,CAoDzC;AAED,kEAAkE;AAClE,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,2BAA2B,CAAC,IAAI,CAAC,GACpC,cAAc,CAKhB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,2BAA2B,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAgD1C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAChD,OAAO,CAcT;AAmBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE;IACzD,OAAO,CAAC,EAAE,OAAO,qBAAqB,CAAC;CACxC,GAAG,iBAAiB,CA6BpB"}
|