managed-deepagents 0.10.0-dev.3 → 0.10.0-dev.5

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 (89) hide show
  1. package/README.md +104 -6
  2. package/dist/channels/github/index.d.ts +1 -8
  3. package/dist/channels/github/index.d.ts.map +1 -1
  4. package/dist/channels/github/index.js +4 -50
  5. package/dist/channels/github/index.js.map +1 -1
  6. package/dist/channels/http/http.d.ts.map +1 -1
  7. package/dist/channels/http/http.js +162 -17
  8. package/dist/channels/http/http.js.map +1 -1
  9. package/dist/channels/http/ingress.d.ts +16 -0
  10. package/dist/channels/http/ingress.d.ts.map +1 -1
  11. package/dist/channels/http/ingress.js +30 -5
  12. package/dist/channels/http/ingress.js.map +1 -1
  13. package/dist/channels/http/reply.d.ts +20 -0
  14. package/dist/channels/http/reply.d.ts.map +1 -0
  15. package/dist/channels/http/reply.js +116 -0
  16. package/dist/channels/http/reply.js.map +1 -0
  17. package/dist/channels/http/studio.d.ts +13 -0
  18. package/dist/channels/http/studio.d.ts.map +1 -0
  19. package/dist/channels/http/studio.js +80 -0
  20. package/dist/channels/http/studio.js.map +1 -0
  21. package/dist/channels/http/types.d.ts +32 -2
  22. package/dist/channels/http/types.d.ts.map +1 -1
  23. package/dist/channels/linear/connections.d.ts +11 -0
  24. package/dist/channels/linear/connections.d.ts.map +1 -0
  25. package/dist/channels/linear/connections.js +14 -0
  26. package/dist/channels/linear/connections.js.map +1 -0
  27. package/dist/channels/linear/graphql.d.ts +69 -0
  28. package/dist/channels/linear/graphql.d.ts.map +1 -0
  29. package/dist/channels/linear/graphql.js +169 -0
  30. package/dist/channels/linear/graphql.js.map +1 -0
  31. package/dist/channels/linear/index.d.ts +9 -0
  32. package/dist/channels/linear/index.d.ts.map +1 -0
  33. package/dist/channels/linear/index.js +466 -0
  34. package/dist/channels/linear/index.js.map +1 -0
  35. package/dist/channels/linear/schema.d.ts +1035 -0
  36. package/dist/channels/linear/schema.d.ts.map +1 -0
  37. package/dist/channels/linear/schema.js +216 -0
  38. package/dist/channels/linear/schema.js.map +1 -0
  39. package/dist/channels/linear/types.d.ts +112 -0
  40. package/dist/channels/linear/types.d.ts.map +1 -0
  41. package/dist/channels/linear/types.js +2 -0
  42. package/dist/channels/linear/types.js.map +1 -0
  43. package/dist/channels/reserved-connections.d.ts +2 -2
  44. package/dist/channels/reserved-connections.d.ts.map +1 -1
  45. package/dist/channels/reserved-connections.js +26 -9
  46. package/dist/channels/reserved-connections.js.map +1 -1
  47. package/dist/channels/source-providers.js +1 -1
  48. package/dist/channels/source-providers.js.map +1 -1
  49. package/dist/connections.d.ts +14 -3
  50. package/dist/connections.d.ts.map +1 -1
  51. package/dist/connections.js +32 -9
  52. package/dist/connections.js.map +1 -1
  53. package/dist/credential-gate.d.ts.map +1 -1
  54. package/dist/credential-gate.js +8 -6
  55. package/dist/credential-gate.js.map +1 -1
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +1 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/ingress/runs.d.ts +5 -0
  61. package/dist/ingress/runs.d.ts.map +1 -1
  62. package/dist/ingress/runs.js +33 -1
  63. package/dist/ingress/runs.js.map +1 -1
  64. package/dist/namespaces.d.ts +15 -0
  65. package/dist/namespaces.d.ts.map +1 -1
  66. package/dist/namespaces.js +2 -0
  67. package/dist/namespaces.js.map +1 -1
  68. package/dist/runtime/auth.d.ts +2 -0
  69. package/dist/runtime/auth.d.ts.map +1 -1
  70. package/dist/runtime/auth.js +138 -22
  71. package/dist/runtime/auth.js.map +1 -1
  72. package/dist/runtime/channel-icon.d.ts +22 -0
  73. package/dist/runtime/channel-icon.d.ts.map +1 -0
  74. package/dist/runtime/channel-icon.js +70 -0
  75. package/dist/runtime/channel-icon.js.map +1 -0
  76. package/dist/runtime/channel.d.ts +6 -0
  77. package/dist/runtime/channel.d.ts.map +1 -1
  78. package/dist/runtime/channel.js.map +1 -1
  79. package/dist/runtime/identity-http.d.ts +2 -0
  80. package/dist/runtime/identity-http.d.ts.map +1 -1
  81. package/dist/runtime/identity-http.js +35 -0
  82. package/dist/runtime/identity-http.js.map +1 -1
  83. package/dist/runtime/index.d.ts.map +1 -1
  84. package/dist/runtime/index.js +2 -0
  85. package/dist/runtime/index.js.map +1 -1
  86. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  87. package/dist/runtime/schedule-auth.js +19 -2
  88. package/dist/runtime/schedule-auth.js.map +1 -1
  89. package/package.json +7 -7
@@ -38,9 +38,25 @@ export type HttpIngressStart = StartedIngressRun | {
38
38
  export declare function waitForHttpIngressThread(input: HttpIngressSource & {
39
39
  threadId: string;
40
40
  }): Promise<void>;
41
+ /**
42
+ * Cancel the thread's queued and running runs, keeping their progress.
43
+ * Returns how many it cancelled.
44
+ */
45
+ export declare function cancelHttpIngressRuns(input: {
46
+ userId: string;
47
+ sourceThreadKey: string;
48
+ sourceProvider: string;
49
+ threadId: string;
50
+ }): Promise<number>;
41
51
  export declare function startHttpIngressAgent(input: StartHttpIngressInput): Promise<HttpIngressStart>;
42
52
  export declare function observeHttpIngressAgent(input: HttpIngressSource & StartedIngressRun): Promise<StartedIngressRun & {
43
53
  replyContent: MessageContent | null;
54
+ /** The run stopped on interrupts, so the thread waits on a decision. */
55
+ paused?: {
56
+ assistantId?: string;
57
+ };
58
+ /** The run was cancelled, with nothing left to answer. */
59
+ cancelled?: true;
44
60
  }>;
45
61
  export {};
46
62
  //# sourceMappingURL=ingress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ingress.d.ts","sourceRoot":"","sources":["../../../src/channels/http/ingress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAS1D,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED,UAAU,qBAAsB,SAAQ,iBAAiB;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB;IACE,OAAO,EAAE,QAAQ,CAAC;IAClB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IAAE,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D,qEAAqE;AACrE,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,iBAAiB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAsE3B;AA8CD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,GAC3C,OAAO,CAAC,iBAAiB,GAAG;IAAE,YAAY,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE,CAAC,CA8CtE"}
1
+ {"version":3,"file":"ingress.d.ts","sourceRoot":"","sources":["../../../src/channels/http/ingress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD,OAAO,EASL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAS1D,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;CAC7C;AAED,UAAU,qBAAsB,SAAQ,iBAAiB;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB;IACE,OAAO,EAAE,QAAQ,CAAC;IAClB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IAAE,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/D,qEAAqE;AACrE,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,iBAAiB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CASlB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAsE3B;AA8CD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,GAC3C,OAAO,CACR,iBAAiB,GAAG;IAClB,YAAY,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,wEAAwE;IACxE,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,CACF,CA6DA"}
@@ -7,7 +7,7 @@ import { buildIngressRunContext } from "../../ingress/index.js";
7
7
  import { ChannelError } from "../errors.js";
8
8
  import { validateMessage } from "../runtime.js";
9
9
  import { createIngressLoopbackClient, hasLoopbackCredential, } from "../../ingress/loopback.js";
10
- import { DELIVERY_KEY_METADATA, ingressThreadState, lookupStatus, startIngressRun, waitForIdleThread, observeIngressRun, recordThreadDelivery, } from "../../ingress/runs.js";
10
+ import { DELIVERY_KEY_METADATA, cancelIngressRuns, ingressThreadState, lookupStatus, startIngressRun, waitForIdleThread, observeIngressRun, recordThreadDelivery, } from "../../ingress/runs.js";
11
11
  /** Wait until the thread's queued and running runs have finished. */
12
12
  export async function waitForHttpIngressThread(input) {
13
13
  const client = createIngressLoopbackClient({
@@ -17,6 +17,17 @@ export async function waitForHttpIngressThread(input) {
17
17
  });
18
18
  await waitForIdleThread(client, input.threadId);
19
19
  }
20
+ /**
21
+ * Cancel the thread's queued and running runs, keeping their progress.
22
+ * Returns how many it cancelled.
23
+ */
24
+ export async function cancelHttpIngressRuns(input) {
25
+ if (!hasLoopbackCredential()) {
26
+ throw new ChannelError("channel_run_failed", "managed loopback authentication is not configured");
27
+ }
28
+ const client = createIngressLoopbackClient(input);
29
+ return cancelIngressRuns(client, input.threadId);
30
+ }
20
31
  export async function startHttpIngressAgent(input) {
21
32
  if (!hasLoopbackCredential()) {
22
33
  throw new ChannelError("channel_run_failed", "managed loopback authentication is not configured");
@@ -137,9 +148,20 @@ export async function observeHttpIngressAgent(input) {
137
148
  return { replyContent: null, threadId: input.threadId, runId: input.runId };
138
149
  }
139
150
  const { values, status } = observed;
140
- if (status === "interrupted") {
141
- return { replyContent: null, threadId: input.threadId, runId: input.runId };
142
- }
151
+ // A cancelled run ends `interrupted` too; only pending interrupts pause.
152
+ const paused = async () => {
153
+ const { state, assistantId } = await ingressThreadState(client, input.threadId);
154
+ return {
155
+ replyContent: null,
156
+ threadId: input.threadId,
157
+ runId: input.runId,
158
+ ...(state === "paused"
159
+ ? { paused: assistantId === undefined ? {} : { assistantId } }
160
+ : status === "interrupted" && { cancelled: true }),
161
+ };
162
+ };
163
+ if (status === "interrupted")
164
+ return await paused();
143
165
  if (status !== "success") {
144
166
  throw new ChannelError("channel_run_failed", "channel run did not complete successfully");
145
167
  }
@@ -150,7 +172,10 @@ export async function observeHttpIngressAgent(input) {
150
172
  const interrupted = interrupts &&
151
173
  typeof interrupts === "object" &&
152
174
  Object.keys(interrupts).length > 0;
153
- const content = interrupted ? null : extractAssistantContent(state);
175
+ // A run that stops on `interrupt()` can still end `success`.
176
+ if (interrupted)
177
+ return await paused();
178
+ const content = extractAssistantContent(state);
154
179
  if (content === null)
155
180
  return { replyContent: null, threadId: input.threadId, runId: input.runId };
156
181
  const reply = { type: "content", content };
@@ -1 +1 @@
1
- {"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../../src/channels/http/ingress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../../src/channels/http/ingress.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EACL,YAAY,GAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AA6C/B,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAA+C;IAE/C,MAAM,MAAM,GAAG,2BAA2B,CAAC;QACzC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ;KAC/D,CAAC,CAAC;IACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAK3C;IACC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,YAAY,CACpB,oBAAoB,EACpB,mDAAmD,CACpD,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAA4B;IAE5B,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,YAAY,CACpB,oBAAoB,EACpB,mDAAmD,CACpD,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,2BAA2B,CAAC;QACzC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ;KAC/D,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,kBAAkB,CACrD,MAAM,EACN,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,WAAW,CAClB,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI;QAClD,QAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE;KACzD,CAAC;IACF,6DAA6D;IAC7D,IAAI,KAAK,KAAK,QAAQ;QACpB,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC;SAClD,CAAC;IACJ,MAAM,QAAQ,GAAG,KAAK,CAAC,iBAAiB,IAAI,SAAS,CAAC;IACtD,kEAAkE;IAClE,MAAM,gBAAgB,GAAG,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,UAAU,CAAC;IAC7E,IAAI,KAAK,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC9E,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,gBAAgB,CAAC;QAC9D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,MAAM,QAAQ,GACZ,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC7C,IAAI,OAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE;YACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,GAAG,QAAQ;YACX,iBAAiB,EAAE,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpE,GAAG,sBAAsB,CAAC;gBACxB,gEAAgE;gBAChE,eAAe;gBACf,OAAO,EACL,KAAK,CAAC,KAAK,KAAK,SAAS;oBACvB,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC;wBACE,GAAG,KAAK,CAAC,OAAO;wBAChB,KAAK,EAAE;4BACL,IAAI,EAAE,SAAS;4BACf,QAAQ,EAAE,QAAQ,CAAC,QAAuB;yBAC3C;qBACF;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;aAC3C,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6DAA6D;QAC7D,IAAI,QAAQ,KAAK,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG;YACtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,sBAAsB,CACnC,MAAsD,EACtD,KAA4B;IAE5B,IAAI,KAAK,CAAC,iBAAiB,KAAK,UAAU,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAC3E,OAAO;IACT,IAAI,CAAC;QACH,MAAM,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yEAAyE;QACzE,MAAM,CAAC,IAAI,CACT,mDAAmD,IAAI,CAAC,SAAS,CAAC;YAChE,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC;SAC5B,CAAC,EAAE,CACL,CAAC;IACJ,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,SAAS,eAAe,CAAC,OAAuB;IAC9C,MAAM,OAAO,GACX,OAAO,OAAO,KAAK,QAAQ;QACzB,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC;QAC3B,CAAC,CAAC,IAAI,YAAY,CAAC;YACf,aAAa,EAAE,OAAkC;SAClD,CAAC,CAAC;IACT,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO,CAAC,OAAoB;gBACrC,iBAAiB,EAAE,OAAO,CAAC,iBAA8B;aAC1D;SACF;QACD,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAA4C;IAU5C,MAAM,MAAM,GAAG,2BAA2B,CAAC;QACzC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ;KAC/D,CAAC,CAAC;IACH,IAAI,QAAuD,CAAC;IAC5D,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG;YAAE,MAAM,KAAK,CAAC;QAC7C,MAAM,CAAC,IAAI,CACT,4BAA4B,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAC3E,CAAC;QACF,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IACpC,yEAAyE;IACzE,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,kBAAkB,CACrD,MAAM,EACN,KAAK,CAAC,QAAQ,CACf,CAAC;QACF,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,CAAC,KAAK,KAAK,QAAQ;gBACpB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE;gBAC9D,CAAC,CAAC,MAAM,KAAK,aAAa,IAAI,EAAE,SAAS,EAAE,IAAa,EAAE,CAAC;SAC9D,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,MAAM,MAAM,EAAE,CAAC;IACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,YAAY,CACpB,oBAAoB,EACpB,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GACT,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5D,CAAC,CAAE,MAAkC;QACrC,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,WAAW,GACf,UAAU;QACV,OAAO,UAAU,KAAK,QAAQ;QAC9B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,6DAA6D;IAC7D,IAAI,WAAW;QAAE,OAAO,MAAM,MAAM,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,IAAI;QAClB,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9E,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,CAAC;IACpD,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,OAAO;QAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ import type { JsonValue } from "../types.js";
3
+ /**
4
+ * Where the thread's latest channel delivery came from, kept in its state.
5
+ * Private (the leading `_`), so it's never part of a run's input or output.
6
+ */
7
+ export declare const CHANNEL_REPLY_STATE_KEY = "_mda_channel_reply";
8
+ /**
9
+ * Remember a channel delivery's target in the thread's state, and post the
10
+ * answer to it when the agent finishes. A run that stops on `interrupt()` or
11
+ * is cancelled doesn't finish, so it posts nothing; the run that resumes it
12
+ * carries no delivery, so it answers the remembered target.
13
+ */
14
+ export declare function createChannelReplyMiddleware(): import("langchain").AgentMiddleware<z.ZodObject<{
15
+ _mda_channel_reply: z.ZodOptional<z.ZodObject<{
16
+ name: z.ZodString;
17
+ target: z.ZodCustom<JsonValue, JsonValue>;
18
+ }, z.core.$strip>>;
19
+ }, z.core.$strip>, undefined, unknown, readonly (import("@langchain/core/tools").ServerTool | import("@langchain/core/tools").ClientTool)[], readonly []>;
20
+ //# sourceMappingURL=reply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../src/channels/http/reply.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C;;;GAGG;AACH,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAqD5D;;;;;GAKG;AACH,wBAAgB,4BAA4B;;;;;0JAyC3C"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * An HTTP channel run posts its own answer.
3
+ *
4
+ * The run does it, not the process that received the delivery, so a restart
5
+ * of that process doesn't lose the answer, and a run LangSmith Studio resumes
6
+ * after a decision answers the conversation the paused run came from.
7
+ */
8
+ import { getConfig } from "@langchain/langgraph";
9
+ import { createMiddleware } from "langchain";
10
+ import { z } from "zod";
11
+ import { extractAssistantContent } from "../assistant-text.js";
12
+ import { resolveChannelBinding } from "../binding.js";
13
+ import { isJsonValue } from "../message-schema.js";
14
+ import { messagingTransportForName } from "../messaging-registry.js";
15
+ import { isTrustedScheduleDeliveryRun } from "../schedule-delivery.js";
16
+ import { CHANNEL_THREAD_METADATA, configurableFromRuntime, resolveAmbientConfigurable, } from "../../runtime/identity-runtime.js";
17
+ import { logger } from "../../runtime/log.js";
18
+ /**
19
+ * Where the thread's latest channel delivery came from, kept in its state.
20
+ * Private (the leading `_`), so it's never part of a run's input or output.
21
+ */
22
+ export const CHANNEL_REPLY_STATE_KEY = "_mda_channel_reply";
23
+ const replyTargetSchema = z.object({
24
+ name: z.string().min(1),
25
+ target: z.custom((value) => isJsonValue(value)),
26
+ });
27
+ /**
28
+ * The run's verified HTTP channel delivery: one the channel's ingress started
29
+ * for that conversation (the binding matches the run's authenticated source),
30
+ * never one a caller put in the run's context.
31
+ */
32
+ function deliveredTarget(runtime) {
33
+ const configurable = configurableFromRuntime(runtime) ??
34
+ resolveAmbientConfigurable();
35
+ const binding = resolveChannelBinding(undefined, configurable);
36
+ // Only HTTP channels deliver directly; others answer on their own.
37
+ if (!binding || binding.transport !== "direct")
38
+ return undefined;
39
+ return { name: binding.name, target: binding.target };
40
+ }
41
+ /**
42
+ * Whether the run is on a channel's thread. Only managed ingress marks one;
43
+ * the runtime's auth strips the marker from every other thread and run, so a
44
+ * caller can't point its own thread's stored target at someone else's
45
+ * conversation. Channel threads take runs only from their channel and resumes
46
+ * from LangSmith Studio.
47
+ */
48
+ function onChannelThread() {
49
+ try {
50
+ const metadata = getConfig().metadata;
51
+ return metadata?.[CHANNEL_THREAD_METADATA] === "true";
52
+ }
53
+ catch {
54
+ // Outside a runnable context.
55
+ return false;
56
+ }
57
+ }
58
+ function storedTarget(state) {
59
+ if (!onChannelThread())
60
+ return undefined;
61
+ const value = state && typeof state === "object" && !Array.isArray(state)
62
+ ? state[CHANNEL_REPLY_STATE_KEY]
63
+ : undefined;
64
+ const parsed = replyTargetSchema.safeParse(value);
65
+ return parsed.success ? parsed.data : undefined;
66
+ }
67
+ /**
68
+ * Remember a channel delivery's target in the thread's state, and post the
69
+ * answer to it when the agent finishes. A run that stops on `interrupt()` or
70
+ * is cancelled doesn't finish, so it posts nothing; the run that resumes it
71
+ * carries no delivery, so it answers the remembered target.
72
+ */
73
+ export function createChannelReplyMiddleware() {
74
+ return createMiddleware({
75
+ name: "mda-channel-reply",
76
+ stateSchema: z.object({
77
+ [CHANNEL_REPLY_STATE_KEY]: replyTargetSchema.optional(),
78
+ }),
79
+ beforeAgent(_state, runtime) {
80
+ const delivered = deliveredTarget(runtime);
81
+ return delivered ? { [CHANNEL_REPLY_STATE_KEY]: delivered } : undefined;
82
+ },
83
+ async afterAgent(state, runtime) {
84
+ const configurable = configurableFromRuntime(runtime) ??
85
+ resolveAmbientConfigurable();
86
+ // Scheduled runs post through schedule delivery.
87
+ if (isTrustedScheduleDeliveryRun(configurable))
88
+ return undefined;
89
+ const reply = deliveredTarget(runtime) ?? storedTarget(state);
90
+ if (!reply)
91
+ return undefined;
92
+ const content = extractAssistantContent({
93
+ messages: state.messages,
94
+ });
95
+ if (content === null)
96
+ return undefined;
97
+ const transport = messagingTransportForName(reply.name);
98
+ if (!transport) {
99
+ logger.warn(`channel reply skipped: no channel ${JSON.stringify(logger.logIdentifier(reply.name))}`);
100
+ return undefined;
101
+ }
102
+ try {
103
+ await transport.post({
104
+ message: { type: "content", content },
105
+ target: reply.target,
106
+ });
107
+ }
108
+ catch (error) {
109
+ // The answer stays in the thread; the run itself succeeded.
110
+ logger.error(`channel reply failed (${logger.safeErrorLabel(error)})`);
111
+ }
112
+ return undefined;
113
+ },
114
+ });
115
+ }
116
+ //# sourceMappingURL=reply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply.js","sourceRoot":"","sources":["../../../src/channels/http/reply.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAE5D,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAY,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;CAC3D,CAAC,CAAC;AAIH;;;;GAIG;AACH,SAAS,eAAe,CAAC,OAAgB;IACvC,MAAM,YAAY,GAChB,uBAAuB,CAAC,OAA4B,CAAC;QACrD,0BAA0B,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC/D,mEAAmE;IACnE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,QAEhB,CAAC;QACd,OAAO,QAAQ,EAAE,CAAC,uBAAuB,CAAC,KAAK,MAAM,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,eAAe,EAAE;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,KAAK,GACT,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzD,CAAC,CAAE,KAAiC,CAAC,uBAAuB,CAAC;QAC7D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,CAAC,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,QAAQ,EAAE;SACxD,CAAC;QACF,WAAW,CAAC,MAAM,EAAE,OAAO;YACzB,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO;YAC7B,MAAM,YAAY,GAChB,uBAAuB,CAAC,OAA4B,CAAC;gBACrD,0BAA0B,EAAE,CAAC;YAC/B,iDAAiD;YACjD,IAAI,4BAA4B,CAAC,YAAY,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjE,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAC7B,MAAM,OAAO,GAAG,uBAAuB,CAAC;gBACtC,QAAQ,EAAG,KAAgC,CAAC,QAAQ;aACrD,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAC;YACvC,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CACT,qCAAqC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CACxF,CAAC;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;oBACrC,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4DAA4D;gBAC5D,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { HttpChannelRunInfo } from "./types.js";
2
+ /**
3
+ * The thread in the deployment's Studio, or the deployment's page when the
4
+ * deployment's name or the thread's assistant is unknown. The LangSmith UI is
5
+ * the one `mda deploy` recorded for the deployment's environment
6
+ * (`MDA_LANGSMITH_URL`); without it there is nothing to link to.
7
+ *
8
+ * A platform that serves its own Studio for the deployment, such as the local
9
+ * stack, names it in `MDA_STUDIO_URL`; the link then opens that Studio on the
10
+ * thread.
11
+ */
12
+ export declare function studioUrl(run: HttpChannelRunInfo | undefined, env?: NodeJS.ProcessEnv): string | undefined;
13
+ //# sourceMappingURL=studio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../../src/channels/http/studio.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AASrD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,GAAG,oBAAc,GAChB,MAAM,GAAG,SAAS,CA8BpB"}
@@ -0,0 +1,80 @@
1
+ /** Links from channel notices into the deployment's LangSmith Studio. */
2
+ import { v5 as uuidv5 } from "uuid";
3
+ import { DEPLOYMENT_ID_ENV } from "../../connections.js";
4
+ import { managedDeploymentName } from "../../runtime/sandbox-manager.js";
5
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6
+ const DEPLOYMENT_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
7
+ const GRAPH_ID_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/;
8
+ /** The namespace the Agent Server derives a graph's default assistant from. */
9
+ const GRAPH_NAMESPACE = "6ba7b821-9dad-11d1-80b4-00c04fd430c8";
10
+ /**
11
+ * The thread in the deployment's Studio, or the deployment's page when the
12
+ * deployment's name or the thread's assistant is unknown. The LangSmith UI is
13
+ * the one `mda deploy` recorded for the deployment's environment
14
+ * (`MDA_LANGSMITH_URL`); without it there is nothing to link to.
15
+ *
16
+ * A platform that serves its own Studio for the deployment, such as the local
17
+ * stack, names it in `MDA_STUDIO_URL`; the link then opens that Studio on the
18
+ * thread.
19
+ */
20
+ export function studioUrl(run, env = process.env) {
21
+ const threadId = run?.threadId;
22
+ const thread = threadId && UUID_PATTERN.test(threadId) ? threadId : undefined;
23
+ const standalone = parseHttpUrl(env.MDA_STUDIO_URL);
24
+ if (standalone) {
25
+ if (thread) {
26
+ standalone.searchParams.set("threadId", thread);
27
+ standalone.searchParams.set("mode", "chat");
28
+ }
29
+ return standalone.href;
30
+ }
31
+ const workspace = env.LANGSMITH_TENANT_ID?.trim() ?? "";
32
+ const deployment = env[DEPLOYMENT_ID_ENV]?.trim() ?? "";
33
+ if (!UUID_PATTERN.test(workspace) || !UUID_PATTERN.test(deployment))
34
+ return undefined;
35
+ const origin = parseHttpUrl(env.MDA_LANGSMITH_URL)?.origin;
36
+ if (!origin)
37
+ return undefined;
38
+ const name = managedDeploymentName(env);
39
+ const assistantId = assistantUuid(run?.assistantId);
40
+ if (!name || !DEPLOYMENT_NAME_PATTERN.test(name) || !thread || !assistantId)
41
+ return `${origin}/o/${workspace}/host/deployments/${deployment}`;
42
+ const query = new URLSearchParams({
43
+ organizationId: workspace,
44
+ render: "interact",
45
+ hostProjectId: deployment,
46
+ assistantId,
47
+ mode: "chat",
48
+ threadId: thread,
49
+ });
50
+ return `${origin}/o/${workspace}/a/${encodeURIComponent(name)}/studio/thread?${query}`;
51
+ }
52
+ /**
53
+ * Studio opens an assistant by its ID. Channels start runs by graph ID, whose
54
+ * default assistant the Agent Server derives from it.
55
+ */
56
+ function assistantUuid(assistant) {
57
+ if (!assistant)
58
+ return undefined;
59
+ if (UUID_PATTERN.test(assistant))
60
+ return assistant;
61
+ return GRAPH_ID_PATTERN.test(assistant)
62
+ ? uuidv5(assistant, GRAPH_NAMESPACE)
63
+ : undefined;
64
+ }
65
+ function parseHttpUrl(value) {
66
+ if (!value?.trim())
67
+ return undefined;
68
+ try {
69
+ const url = new URL(value.trim());
70
+ return (url.protocol === "https:" || url.protocol === "http:") &&
71
+ !url.username &&
72
+ !url.password
73
+ ? url
74
+ : undefined;
75
+ }
76
+ catch {
77
+ return undefined;
78
+ }
79
+ }
80
+ //# sourceMappingURL=studio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio.js","sourceRoot":"","sources":["../../../src/channels/http/studio.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,16 @@ export type HttpChannelParseResult = {
28
28
  } | {
29
29
  type: "ignore";
30
30
  response?: Response;
31
+ } | {
32
+ /**
33
+ * Stop the work on the message's thread: MDA cancels its queued and
34
+ * running runs, keeping their progress, then calls `onCancelled`. The
35
+ * message needs no `content`.
36
+ */
37
+ type: "cancel";
38
+ message: HttpChannelInboundMessage;
39
+ rawEvent?: JsonValue;
40
+ response?: Response;
31
41
  };
32
42
  /** MDA adds the verified reply target to the validated message. */
33
43
  export type HttpChannelPostInput = ChannelMessage & {
@@ -63,10 +73,25 @@ export interface HttpChannelAdapter {
63
73
  */
64
74
  input?(message: HttpChannelInboundMessage, rawEvent: JsonValue | undefined): ChannelRunResult | null | undefined | Promise<ChannelRunResult | null | undefined>;
65
75
  /**
66
- * The message's thread waits on a decision, so MDA started no run; tell the
67
- * sender where to make it. Failures are logged.
76
+ * The thread waits on a decision: its run just stopped on interrupts, or a
77
+ * message arrived while it waits, so MDA started no run. Tell the sender
78
+ * where to make it (Studio resumes interrupts). Failures are logged.
68
79
  */
69
80
  onPaused?(target: JsonValue, run: HttpChannelRunInfo): Promise<void>;
81
+ /**
82
+ * A verified message reached its thread, before MDA starts or queues
83
+ * anything for it, and whatever it then does. For providers that
84
+ * expect a prompt acknowledgement. Runs in the background; failures are
85
+ * logged.
86
+ */
87
+ onDelivered?(target: JsonValue, run: HttpChannelRunInfo): Promise<void>;
88
+ /**
89
+ * MDA cancelled the thread's runs for a `cancel` result; `cancelled` says
90
+ * how many were active. Runs in the background; failures are logged.
91
+ */
92
+ onCancelled?(target: JsonValue, run: HttpChannelRunInfo & {
93
+ cancelled: number;
94
+ }): Promise<void>;
70
95
  }
71
96
  /** The thread a notice is about, for links into LangSmith Studio. */
72
97
  export interface HttpChannelRunInfo {
@@ -75,6 +100,11 @@ export interface HttpChannelRunInfo {
75
100
  assistantId?: string;
76
101
  /** The provider event of the delivery the notice is about, when parsed. */
77
102
  rawEvent?: JsonValue;
103
+ /**
104
+ * For `onPaused`: the delivery's own run just stopped on interrupts, rather
105
+ * than the message arriving while the thread already waited.
106
+ */
107
+ stopped?: true;
78
108
  }
79
109
  export interface HttpChannelRequest {
80
110
  request: Request;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/http/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,MAAM,EAAE,SAAS,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,yBAAyB,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE5C,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAClD,MAAM,EAAE,SAAS,CAAC;IAClB,gFAAgF;IAChF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,iEAAiE;IACjE,KAAK,CACH,OAAO,EAAE,kBAAkB,GAC1B,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/D,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;OAIG;IACH,KAAK,CAAC,CACJ,OAAO,EAAE,yBAAyB,EAClC,QAAQ,EAAE,SAAS,GAAG,SAAS,GAE7B,gBAAgB,GAChB,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/http/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Reserved agent connection for the deployment's Linear app: reading it
3
+ * returns the app's access token, which Agent Auth renews.
4
+ */
5
+ export declare const LINEAR_TOKEN_SLUG = "mda/linear-token";
6
+ /**
7
+ * The deployment's Linear app connection, or one of the app values stored
8
+ * beside it (`webhook-secret`) when `suffix` is given.
9
+ */
10
+ export declare function linearAppConnectionSlug(deploymentId: string, suffix?: string): string;
11
+ //# sourceMappingURL=connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/connections.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,qBAAqB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAGR"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Reserved agent connection for the deployment's Linear app: reading it
3
+ * returns the app's access token, which Agent Auth renews.
4
+ */
5
+ export const LINEAR_TOKEN_SLUG = "mda/linear-token";
6
+ /**
7
+ * The deployment's Linear app connection, or one of the app values stored
8
+ * beside it (`webhook-secret`) when `suffix` is given.
9
+ */
10
+ export function linearAppConnectionSlug(deploymentId, suffix) {
11
+ const slug = `mda/linear-app/${deploymentId}`;
12
+ return suffix ? `${slug}/${suffix}` : slug;
13
+ }
14
+ //# sourceMappingURL=connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../../../src/channels/linear/connections.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAoB,EACpB,MAAe;IAEf,MAAM,IAAI,GAAG,kBAAkB,YAAY,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,69 @@
1
+ /** Linear refused a request for exceeding its rate limit. */
2
+ export declare class LinearRateLimitError extends Error {
3
+ constructor();
4
+ }
5
+ /** Forget the cached app token; for tests. */
6
+ export declare function resetLinearToken(): void;
7
+ /**
8
+ * Run a GraphQL operation as the app. `query` is a constant; everything that
9
+ * varies goes in `variables`. A rejected token is read again once. Returns
10
+ * the response's `data`.
11
+ */
12
+ export declare function linearRequest<T>(query: string, variables?: Record<string, unknown>): Promise<T>;
13
+ /** The Linear user the app acts as. */
14
+ export type LinearAppUser = {
15
+ id: string;
16
+ displayName: string;
17
+ };
18
+ /**
19
+ * The Linear user the app acts as, read once per process: its own comments
20
+ * and changes are ignored, and a comment mentioning its `displayName` starts
21
+ * an agent session.
22
+ */
23
+ export declare function linearAppUser(): Promise<LinearAppUser>;
24
+ /** Forget the cached app user; for tests. */
25
+ export declare function resetLinearAppUser(): void;
26
+ /**
27
+ * Comment on an issue as the app, threaded under `parentId` when given.
28
+ * Returns the comment's id and URL.
29
+ */
30
+ export declare function createLinearComment(input: {
31
+ issueId: string;
32
+ body: string;
33
+ parentId?: string;
34
+ }): Promise<{
35
+ id: string;
36
+ url?: string;
37
+ }>;
38
+ /** Whether a comment belongs to an agent session's thread. */
39
+ export declare function commentInAgentSession(commentId: string): Promise<boolean>;
40
+ /** What the app says in an agent session. */
41
+ export type LinearActivityContent = {
42
+ type: "thought" | "response" | "error" | "elicitation";
43
+ body: string;
44
+ } | {
45
+ type: "action";
46
+ action: string;
47
+ parameter: string;
48
+ result?: string;
49
+ };
50
+ /**
51
+ * Post an activity to an agent session as the app. `ephemeral` thoughts and
52
+ * actions are replaced by the next activity; a `select` signal offers
53
+ * options to choose from.
54
+ */
55
+ export declare function createLinearActivity(input: {
56
+ agentSessionId: string;
57
+ content: LinearActivityContent;
58
+ ephemeral?: boolean;
59
+ signal?: "select" | "auth";
60
+ signalMetadata?: Record<string, unknown>;
61
+ }): Promise<{
62
+ id: string;
63
+ }>;
64
+ /** Link an agent session to a page about it, such as its Studio thread. */
65
+ export declare function addLinearSessionUrl(agentSessionId: string, link: {
66
+ label: string;
67
+ url: string;
68
+ }): Promise<void>;
69
+ //# sourceMappingURL=graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/graphql.ts"],"names":[],"mappings":"AA0BA,6DAA6D;AAC7D,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,cAGC;CACF;AAgBD,8CAA8C;AAC9C,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAWD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACtC,OAAO,CAAC,CAAC,CAAC,CA0BZ;AAiBD,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAGhE;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAgBtD;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAMD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQxC;AAMD,8DAA8D;AAC9D,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,6CAA6C;AAC7C,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAM3E;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ1B;AAMD,2EAA2E;AAC3E,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CASf"}