managed-deepagents 0.5.4-dev.8 → 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 +79 -20
  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
package/README.md CHANGED
@@ -45,26 +45,35 @@ per-platform optional dependencies, so install only downloads the binary for you
45
45
  OS and CPU architecture. This npm-installed CLI scaffolds and compiles TypeScript
46
46
  projects only and vendors the TypeScript runtime bundled with this package.
47
47
 
48
- To start a new project, run `mda init` and follow the guided setup:
48
+ To start a new project, run `mda init`. In a terminal, the CLI asks you to name
49
+ the agent:
49
50
 
50
51
  ```bash
51
52
  mda init
52
53
  ```
53
54
 
54
- After scaffolding, choose a coding agent to continue building or choose
55
- **View raw prompt** to copy the setup instructions. The CLI supports Deep Agents
56
- Code, Claude Code, Codex, Cursor, Droid, Gemini CLI, opencode, and Pi. If Deep
57
- Agents Code is not installed, selecting it offers the official install command;
58
- on native Windows, use WSL. Coding agents open in the new project directory.
55
+ Run `mda init -i` to initialize your agent interactively and optionally hand it
56
+ off to a coding agent to build:
57
+
58
+ ```bash
59
+ mda init -i
60
+ ```
61
+
62
+ Choose a coding agent to continue in the new project, or select **View raw
63
+ prompt** to copy the setup instructions.
64
+
65
+ For coding agents and other headless use, pass the project name:
66
+
67
+ ```bash
68
+ mda init my-agent
69
+ ```
59
70
 
60
71
  `mda init` can shape the project up front — `--instructions "..."` (or
61
72
  `--instructions-file <path>`) writes the system prompt, `--model <spec>` picks
62
- the model, `--memory agent` opts into deployment-shared durable memory, and
63
- `--no-sandbox` leaves out the sandbox. Every new project includes an
73
+ the model, `--memory agent` opts into deployment-shared durable memory,
74
+ `--no-sandbox` leaves out the sandbox, and `-c slack` (also `--channel` /
75
+ `--channels`) writes `channels/slack.ts`. Every new project includes an
64
76
  `identity.ts` that explicitly selects `auth.langsmithApiKey()` authentication.
65
- Managed Deep Agent evals are Harbor tasks under `evals/tasks/`. Optionally create
66
- a minimal source task under `evals/scaffold/` with `mda evals init <name>`, then
67
- package the managed agent and scaffolded tasks with `mda evals compile`.
68
77
 
69
78
  `mda init my-agent --gateway` runs the agent on
70
79
  [LangSmith Gateway](https://docs.langchain.com/langsmith/gateway) — a model
@@ -72,6 +81,40 @@ LangSmith hosts, billed to your workspace's Gateway Credits, authenticated with
72
81
  a LangSmith API key instead of a model provider key of your own. It is mutually
73
82
  exclusive with `--model`, which names a provider you hold the key for.
74
83
 
84
+ ## Evaluate
85
+
86
+ Managed Deep Agent evals run in Harbor. Install `uv` and Docker before running
87
+ them.
88
+
89
+ 1. From the project root, initialize the eval workspace:
90
+
91
+ ```bash
92
+ mda evals init -i
93
+ ```
94
+
95
+ 2. Follow the coding-agent prompt to author tasks directly under
96
+ `evals/<task>/`. The CLI creates the user-owned `evals/harbor-job.json` once
97
+ and preserves later edits. `.mda/evals/` is generated.
98
+ A task may include an authored `evals/<task>/identity.json` fixture. It
99
+ requires a non-empty `user.id`; `user.kind`, `user.email`, and top-level
100
+ `groups`, `claims`, and `source.provider` are optional. Keep it with the
101
+ task, not in generated `.mda/evals/`.
102
+ 3. Export `LANGSMITH_API_KEY`, `LANGSMITH_WORKSPACE_ID` when your credentials
103
+ require it, and the model or tool credential variables used by the agent.
104
+ 4. From the same project root, run the pinned Harbor 0.21.0 command included at
105
+ the end of the coding-agent prompt. The command loads `MDAJobPlugin` and
106
+ `LangSmithPlugin`. It uses POSIX syntax on macOS/Linux and PowerShell on
107
+ native Windows.
108
+ 5. From the same project root, inspect results:
109
+
110
+ ```bash
111
+ uv run --python 3.12 --with 'harbor[langsmith]==0.21.0' harbor view .mda/evals/jobs
112
+ ```
113
+
114
+ `MDAJobPlugin` compiles a fresh eval artifact at every Harbor job start.
115
+ This POC keeps MDA's custom Harbor adapter; migration to Harbor's built-in
116
+ LangGraph agent is deferred.
117
+
75
118
  ## Define an Agent
76
119
 
77
120
  Create an `agent.ts` that exports a named `agent` definition:
@@ -173,14 +216,30 @@ out:
173
216
  import { defineSandbox } from "managed-deepagents";
174
217
 
175
218
  export const sandbox = defineSandbox({
176
- scope: "thread",
177
219
  idleTtlSeconds: 600,
178
220
  });
179
221
  ```
180
222
 
181
- If `sandbox/setup.sh` exists, MDA embeds it and runs it once when the sandbox is
182
- first provisioned. MDA owns sandbox naming, image/snapshot selection, reuse, and
183
- lifecycle.
223
+ If `sandbox/setup.sh` exists, `mda deploy` / `mda dev` bake it into a recipe
224
+ snapshot once; thread sandboxes clone that snapshot and do not re-run setup.
225
+ MDA owns sandbox naming, image/snapshot selection, reuse, and lifecycle.
226
+
227
+ Private published images can declare registry credentials by environment
228
+ variable name; MDA creates or updates the deployment-owned Host registry:
229
+
230
+ ```ts
231
+ export const sandbox = defineSandbox({
232
+ dockerImage: "ghcr.io/acme/agent-base:1",
233
+ registry: {
234
+ url: "ghcr.io",
235
+ username: "octocat",
236
+ passwordEnv: "GHCR_TOKEN",
237
+ },
238
+ });
239
+ ```
240
+
241
+ Put `GHCR_TOKEN` in the project `.env` or process environment. Its value is
242
+ used only to reconcile the registry and never enters the build or snapshot.
184
243
 
185
244
  ## MCP Connectors
186
245
 
@@ -270,11 +329,11 @@ to skip the prompt in scripts. Agent memory and thread history are not
270
329
  recoverable afterwards.
271
330
 
272
331
  Sandboxes are matched by name: the runtime names each one
273
- `{deployment}--{digest}`, which also lets a restarted deployment re-adopt its
274
- existing sandbox instead of stranding it. The digest covers the sandbox scope
275
- plus how it was provisioned, so editing `setup.sh` or switching snapshots gives
276
- the next run a fresh sandbox instead of one built from the previous recipe.
277
- Sandboxes created before this behavior existed are unnamed and are left to
332
+ `{deployment}--{digest}` of the thread id, which also lets a restarted
333
+ deployment re-adopt its existing sandbox instead of stranding it. Recipe changes
334
+ (`setup.sh` or bake base) produce a new deploy-time snapshot; live threads keep
335
+ their boxes until reclaim. Sandboxes created before this behavior existed are
336
+ unnamed and are left to
278
337
  LangSmith's idle-stop and retention window.
279
338
 
280
339
  Before deploying, make sure your model provider key such as `OPENAI_API_KEY`
@@ -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"}
@@ -0,0 +1,5 @@
1
+ import { createMiddleware } from "langchain";
2
+ export declare const CHANNEL_RESPONSE_FORMAT_MIDDLEWARE_NAME = "mda-channel-response-format";
3
+ export declare const SLACK_MRKDWN_INSTRUCTIONS = "Your final response will be posted to Slack. Format it using Slack mrkdwn.";
4
+ export declare function createChannelResponseFormatMiddleware(): ReturnType<typeof createMiddleware>;
5
+ //# sourceMappingURL=response-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-format.d.ts","sourceRoot":"","sources":["../../src/channels/response-format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAOhE,eAAO,MAAM,uCAAuC,gCACrB,CAAC;AAEhC,eAAO,MAAM,yBAAyB,+EACwC,CAAC;AAkC/E,wBAAgB,qCAAqC,IAAI,UAAU,CACjE,OAAO,gBAAgB,CACxB,CAWA"}
@@ -0,0 +1,41 @@
1
+ import { SystemMessage } from "@langchain/core/messages";
2
+ import { createMiddleware } from "langchain";
3
+ import { resolveRuntimeConfigurable, } from "../runtime/identity-runtime.js";
4
+ export const CHANNEL_RESPONSE_FORMAT_MIDDLEWARE_NAME = "mda-channel-response-format";
5
+ export const SLACK_MRKDWN_INSTRUCTIONS = "Your final response will be posted to Slack. Format it using Slack mrkdwn.";
6
+ function sourceProvider(request) {
7
+ const configurable = resolveRuntimeConfigurable(request.runtime);
8
+ const user = configurable?.langgraph_auth_user;
9
+ return user && typeof user === "object"
10
+ ? user.mda_source_provider
11
+ : undefined;
12
+ }
13
+ function systemMessageBlocks(request) {
14
+ const existing = request.systemMessage?.content ?? request.systemPrompt;
15
+ if (typeof existing === "string") {
16
+ return existing.trim() ? [{ type: "text", text: existing }] : [];
17
+ }
18
+ return Array.isArray(existing) ? existing : [];
19
+ }
20
+ function appendSlackMrkdwnInstructions(request) {
21
+ return {
22
+ ...request,
23
+ systemMessage: new SystemMessage({
24
+ content: [
25
+ ...systemMessageBlocks(request),
26
+ { type: "text", text: SLACK_MRKDWN_INSTRUCTIONS },
27
+ ],
28
+ }),
29
+ };
30
+ }
31
+ export function createChannelResponseFormatMiddleware() {
32
+ return createMiddleware({
33
+ name: CHANNEL_RESPONSE_FORMAT_MIDDLEWARE_NAME,
34
+ async wrapModelCall(request, handler) {
35
+ return handler(sourceProvider(request) === "slack"
36
+ ? appendSlackMrkdwnInstructions(request)
37
+ : request);
38
+ },
39
+ });
40
+ }
41
+ //# sourceMappingURL=response-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-format.js","sourceRoot":"","sources":["../../src/channels/response-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,WAAW,CAAC;AAEhE,OAAO,EACL,0BAA0B,GAE3B,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,uCAAuC,GAClD,6BAA6B,CAAC;AAEhC,MAAM,CAAC,MAAM,yBAAyB,GACpC,4EAA4E,CAAC;AAI/E,SAAS,cAAc,CAAC,OAAqB;IAC3C,MAAM,YAAY,GAAG,0BAA0B,CAC7C,OAAO,CAAC,OAAuC,CAChD,CAAC;IACF,MAAM,IAAI,GAAG,YAAY,EAAE,mBAAmB,CAAC;IAC/C,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QACrC,CAAC,CAAE,IAA0C,CAAC,mBAAmB;QACjE,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqB;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IACxE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAqB;IAC1D,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EAAE,IAAI,aAAa,CAAC;YAC/B,OAAO,EAAE;gBACP,GAAG,mBAAmB,CAAC,OAAO,CAAC;gBAC/B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE;aAClD;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC;IAGnD,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE,uCAAuC;QAC7C,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO;YAClC,OAAO,OAAO,CACZ,cAAc,CAAC,OAAO,CAAC,KAAK,OAAO;gBACjC,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,OAAO,CACZ,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,57 +1,41 @@
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
+ /** Your agent's name, used in mentions like `@support-agent`. */
7
+ name?: string;
8
+ /** A short description of what your agent does. */
9
+ description?: string;
10
+ icon?: string;
11
+ /** The Slack app background as a `#RRGGBB` hex color. */
12
+ backgroundColor?: string;
13
+ triggerOnAllMessages?: boolean;
14
+ allowBotTriggers?: boolean;
35
15
  }
36
- export interface SlackConversationPolicy {
37
- /** @default "thread" */
38
- appMention?: SlackConversationMapping;
39
- /** @default "conversation" */
40
- directMessage?: SlackConversationMapping;
16
+ export interface TriggerSlackAppConfig {
17
+ name?: string;
18
+ description?: string;
19
+ icon?: string;
20
+ backgroundColor?: string;
41
21
  }
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;
22
+ export interface RequiredTriggerSlackChannelConfig {
23
+ app: TriggerSlackAppConfig;
24
+ triggerOnAllMessages: boolean;
25
+ allowBotTriggers: boolean;
53
26
  }
54
- /** Normalized config with defaults applied. */
27
+ /** Branded Trigger-backed Slack declaration. */
28
+ export type SlackChannel = Channel & RequiredTriggerSlackChannelConfig & {
29
+ kind: "slack";
30
+ transport: "trigger_server";
31
+ };
32
+ /** Declare a Slack channel whose ingress and callbacks use Trigger Server. */
33
+ export declare function slackChannel(config?: SlackChannelConfig): SlackChannel;
34
+ /** Build deploy/runtime requirements for a file-derived channel instance. */
35
+ export declare function toSlackRequirements(name: string, definition: RequiredTriggerSlackChannelConfig | SlackChannel): ChannelManifest;
36
+ export type SlackChannelTrigger = "app_mention" | "direct_message" | "thread_reply";
37
+ export type SlackMentionBehavior = "strip" | "preserve";
38
+ export type SlackConversationMapping = "thread" | "conversation" | "message";
55
39
  export interface RequiredSlackChannelConfig {
56
40
  autoReply: boolean;
57
41
  mentionBehavior: SlackMentionBehavior;
@@ -67,29 +51,6 @@ export interface RequiredSlackChannelConfig {
67
51
  directMessage: SlackConversationMapping;
68
52
  };
69
53
  }
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
54
  export { decodeSlackEscaping, normalizeSlackEvent, verifySlackRequest, } from "./normalize.js";
94
55
  export type { NormalizeSlackEventInput, NormalizeSlackEventResult, SlackInstallationContext, SlackSignatureHeaders, } from "./normalize.js";
95
56
  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,102 @@
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
+ .optional(),
21
+ description: z
22
+ .string()
23
+ .refine((value) => [...value].length <= 139, {
24
+ message: "Must contain at most 139 characters",
25
+ })
26
+ .optional(),
27
+ icon: z.string().min(1).optional(),
28
+ backgroundColor: z
29
+ .string()
30
+ .regex(/^#[0-9a-fA-F]{6}$/, {
31
+ message: "Must be a #RRGGBB hex color",
32
+ })
33
+ .transform((value) => value.toLowerCase())
34
+ .optional(),
35
+ triggerOnAllMessages: z.boolean().default(false),
36
+ allowBotTriggers: z.boolean().default(false),
65
37
  })
66
- .strict()
67
- .prefault({});
38
+ .strict();
68
39
  function hide(target, key, value) {
69
40
  Object.defineProperty(target, key, { value, enumerable: false });
70
41
  }
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
- */
78
- 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
42
+ /** Declare a Slack channel whose ingress and callbacks use Trigger Server. */
43
+ export function slackChannel(config = {}) {
44
+ const result = slackChannelConfig.safeParse(config);
45
+ if (!result.success) {
46
+ const message = result.error.issues
91
47
  .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;
48
+ const path = issue.path.join(".");
49
+ return path ? `${path}: ${issue.message}` : issue.message;
98
50
  })
99
51
  .join("; ");
100
52
  throw new Error(`channels.slack(...) ${message}`);
101
53
  }
102
- const args = result.value;
103
- const self = { kind: "slack", ...args };
104
- 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,
54
+ const { name, description, icon, backgroundColor, ...options } = result.data;
55
+ const self = {
56
+ kind: "slack",
57
+ transport: "trigger_server",
58
+ app: {
59
+ ...(name === undefined ? {} : { name }),
60
+ ...(description === undefined ? {} : { description }),
61
+ ...(icon === undefined ? {} : { icon }),
62
+ ...(backgroundColor === undefined ? {} : { backgroundColor }),
112
63
  },
64
+ ...options,
65
+ };
66
+ hide(self, CHANNEL_BRAND, true);
67
+ hide(self, "events", (ctx) => handleTriggerChannelEventRequest(ctx.request, {
113
68
  rawBody: ctx.rawBody,
69
+ sourceProvider: "slack",
114
70
  }));
115
- hide(self, "messaging", (env) => {
116
- const token = env.SLACK_BOT_TOKEN;
117
- if (!token)
118
- return undefined;
119
- return createSlackWebApiTransport({ botToken: token });
120
- });
121
71
  hide(self, "requirements", (name) => toSlackRequirements(name, self));
122
72
  return self;
123
73
  }
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. */
74
+ /** Build deploy/runtime requirements for a file-derived channel instance. */
129
75
  export function toSlackRequirements(name, definition) {
130
- const config = definition;
131
76
  return {
132
77
  name,
133
78
  provider: "slack",
134
- autoReply: config.autoReply,
135
- requiredPermissions: requiredSlackScopes(),
136
- requiredEnv: [...SLACK_CHANNEL_REQUIRED_ENV],
79
+ transport: "trigger_server",
80
+ autoReply: true,
81
+ requiredPermissions: [],
82
+ requiredEnv: [],
137
83
  providerConfig: {
138
- mentionBehavior: config.mentionBehavior,
139
- filters: config.filters,
140
- conversation: config.conversation,
84
+ app: {
85
+ ...(definition.app.name === undefined
86
+ ? {}
87
+ : { name: definition.app.name }),
88
+ ...(definition.app.description === undefined
89
+ ? {}
90
+ : { description: definition.app.description }),
91
+ ...(definition.app.icon === undefined
92
+ ? {}
93
+ : { icon: definition.app.icon }),
94
+ ...(definition.app.backgroundColor === undefined
95
+ ? {}
96
+ : { backgroundColor: definition.app.backgroundColor }),
97
+ },
98
+ triggerOnAllMessages: definition.triggerOnAllMessages,
99
+ allowBotTriggers: definition.allowBotTriggers,
141
100
  },
142
101
  };
143
102
  }
@@ -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