managed-deepagents 0.10.0-dev.5 → 0.10.0-dev.7
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 +69 -33
- package/dist/channels/github/connections.d.ts.map +1 -1
- package/dist/channels/github/connections.js +2 -2
- package/dist/channels/github/connections.js.map +1 -1
- package/dist/channels/github/index.d.ts +1 -1
- package/dist/channels/github/index.d.ts.map +1 -1
- package/dist/channels/github/index.js +42 -88
- package/dist/channels/github/index.js.map +1 -1
- package/dist/channels/github/schema.d.ts.map +1 -1
- package/dist/channels/github/schema.js +1 -3
- package/dist/channels/github/schema.js.map +1 -1
- package/dist/channels/github/types.d.ts +18 -8
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/http/http.d.ts.map +1 -1
- package/dist/channels/http/http.js +91 -94
- package/dist/channels/http/http.js.map +1 -1
- package/dist/channels/http/index.d.ts +1 -1
- package/dist/channels/http/index.d.ts.map +1 -1
- package/dist/channels/http/index.js +9 -0
- package/dist/channels/http/index.js.map +1 -1
- package/dist/channels/http/ingress.d.ts +26 -11
- package/dist/channels/http/ingress.d.ts.map +1 -1
- package/dist/channels/http/ingress.js +19 -29
- package/dist/channels/http/ingress.js.map +1 -1
- package/dist/channels/http/provider.d.ts +68 -0
- package/dist/channels/http/provider.d.ts.map +1 -0
- package/dist/channels/http/provider.js +149 -0
- package/dist/channels/http/provider.js.map +1 -0
- package/dist/channels/http/studio.d.ts +7 -5
- package/dist/channels/http/studio.d.ts.map +1 -1
- package/dist/channels/http/studio.js +12 -12
- package/dist/channels/http/studio.js.map +1 -1
- package/dist/channels/http/types.d.ts +25 -12
- package/dist/channels/http/types.d.ts.map +1 -1
- package/dist/channels/linear/connections.d.ts.map +1 -1
- package/dist/channels/linear/connections.js +2 -2
- package/dist/channels/linear/connections.js.map +1 -1
- package/dist/channels/linear/graphql.d.ts +5 -17
- package/dist/channels/linear/graphql.d.ts.map +1 -1
- package/dist/channels/linear/graphql.js +55 -57
- package/dist/channels/linear/graphql.js.map +1 -1
- package/dist/channels/linear/index.d.ts +1 -1
- package/dist/channels/linear/index.d.ts.map +1 -1
- package/dist/channels/linear/index.js +133 -139
- package/dist/channels/linear/index.js.map +1 -1
- package/dist/channels/linear/schema.d.ts +173 -144
- package/dist/channels/linear/schema.d.ts.map +1 -1
- package/dist/channels/linear/schema.js +45 -12
- package/dist/channels/linear/schema.js.map +1 -1
- package/dist/channels/linear/types.d.ts +21 -7
- package/dist/channels/linear/types.d.ts.map +1 -1
- package/dist/channels/message-schema.d.ts +2 -0
- package/dist/channels/message-schema.d.ts.map +1 -1
- package/dist/channels/message-schema.js +4 -0
- package/dist/channels/message-schema.js.map +1 -1
- package/dist/channels/run-input.d.ts +9 -1
- package/dist/channels/run-input.d.ts.map +1 -1
- package/dist/channels/run-input.js +23 -5
- package/dist/channels/run-input.js.map +1 -1
- package/dist/channels/trigger/client.js +7 -3
- package/dist/channels/trigger/client.js.map +1 -1
- package/dist/channels/trigger/http.d.ts.map +1 -1
- package/dist/channels/trigger/http.js +6 -3
- package/dist/channels/trigger/http.js.map +1 -1
- package/dist/channels/trigger/tracing-project.d.ts +16 -0
- package/dist/channels/trigger/tracing-project.d.ts.map +1 -0
- package/dist/channels/trigger/tracing-project.js +54 -0
- package/dist/channels/trigger/tracing-project.js.map +1 -0
- package/dist/channels/trigger/types.d.ts +6 -0
- package/dist/channels/trigger/types.d.ts.map +1 -1
- package/dist/channels/trigger/types.js.map +1 -1
- package/dist/connections.d.ts +6 -0
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +27 -0
- package/dist/connections.js.map +1 -1
- package/dist/connectors/mcp/index.d.ts.map +1 -1
- package/dist/connectors/mcp/index.js +52 -2
- package/dist/connectors/mcp/index.js.map +1 -1
- package/dist/credential-gate.d.ts.map +1 -1
- package/dist/credential-gate.js +13 -3
- package/dist/credential-gate.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ingress/runs.d.ts +2 -2
- package/dist/ingress/runs.d.ts.map +1 -1
- package/dist/ingress/runs.js +5 -5
- package/dist/ingress/runs.js.map +1 -1
- package/dist/runtime/schedule-auth.d.ts +1 -1
- package/dist/runtime/schedule-auth.d.ts.map +1 -1
- package/dist/runtime/schedule-auth.js +12 -4
- package/dist/runtime/schedule-auth.js.map +1 -1
- package/dist/runtime-schedules.js +6 -6
- package/dist/runtime-schedules.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../../src/channels/http/ingress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { JsonObject } from "../manifest.js";
|
|
2
|
+
import type { JsonValue } from "../types.js";
|
|
3
|
+
import type { ChannelRunResult } from "../run-input.js";
|
|
4
|
+
import type { HttpChannel } from "./index.js";
|
|
5
|
+
/** The channel's name in the project, or its provider before it has one. */
|
|
6
|
+
export declare function channelName(channel: HttpChannel): string;
|
|
7
|
+
/**
|
|
8
|
+
* Check a channel's `onEvent` keys. The types limit them, but a JavaScript
|
|
9
|
+
* caller or a cast gets no error, and a key nothing dispatches never runs.
|
|
10
|
+
*/
|
|
11
|
+
export declare function checkEventKeys(provider: string, handlers: object, supported: ReadonlySet<string>): void;
|
|
12
|
+
/** The events deploy subscribes the provider's webhook to: the handled ones. */
|
|
13
|
+
export declare function handledEventKeys(handlers: object): string[];
|
|
14
|
+
/**
|
|
15
|
+
* The connection `mda deploy` stores for the provider's app, or one of the
|
|
16
|
+
* values stored beside it, such as `webhook-secret`, when `suffix` is given.
|
|
17
|
+
*/
|
|
18
|
+
export declare function appConnectionSlug(provider: string, deploymentId: string, suffix?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* A frozen copy of a parsed event, kept as the delivery's raw event so a
|
|
21
|
+
* handler that changes its argument can't change what MDA keeps.
|
|
22
|
+
*/
|
|
23
|
+
export declare function eventSnapshot(event: unknown, provider: string): JsonValue;
|
|
24
|
+
/** App options for deploy, without unset fields. */
|
|
25
|
+
export declare function definedFields(fields: Record<string, JsonValue | undefined>): JsonObject;
|
|
26
|
+
/**
|
|
27
|
+
* Whether `signature`, a hex HMAC-SHA256 the caller checked the format of,
|
|
28
|
+
* signs `rawBody` with `secret`. Compared in constant time.
|
|
29
|
+
*/
|
|
30
|
+
export declare function verifyHmacSha256(secret: string, rawBody: Uint8Array, signature: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* A value read at most every `ttlMs(value)` milliseconds. Concurrent callers
|
|
33
|
+
* share the read in flight; a failed read is not kept, so the next call reads
|
|
34
|
+
* again.
|
|
35
|
+
*/
|
|
36
|
+
export declare class CachedRead<T> {
|
|
37
|
+
#private;
|
|
38
|
+
private readonly read;
|
|
39
|
+
private readonly ttlMs;
|
|
40
|
+
constructor(read: () => Promise<T>, ttlMs: (value: T) => number);
|
|
41
|
+
get(): Promise<T>;
|
|
42
|
+
/** Read again on the next call. */
|
|
43
|
+
reset(): void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A value `mda deploy` stored for the deployment, such as a webhook secret:
|
|
47
|
+
* the `env` override when set, otherwise the agent secret Agent Auth keeps at
|
|
48
|
+
* `slug(deploymentId)`. Only a missing connection reads as `undefined`, and is
|
|
49
|
+
* logged as `label`; credential store failures propagate.
|
|
50
|
+
*/
|
|
51
|
+
export declare function readDeploymentSecret(env: string, slug: (deploymentId: string) => string, label: string): Promise<string | undefined>;
|
|
52
|
+
/** Forget values read from Agent Auth; for tests. */
|
|
53
|
+
export declare function resetDeploymentSecrets(): void;
|
|
54
|
+
/** What an event's handler did: returned run input, skipped, or threw. */
|
|
55
|
+
export type EventHandlerOutcome = {
|
|
56
|
+
type: "input";
|
|
57
|
+
input: ChannelRunResult;
|
|
58
|
+
} | {
|
|
59
|
+
type: "skipped";
|
|
60
|
+
} | {
|
|
61
|
+
type: "failed";
|
|
62
|
+
};
|
|
63
|
+
/** Run an event's handler. A throw is logged, not raised. */
|
|
64
|
+
export declare function runEventHandler(provider: string, event: {
|
|
65
|
+
key: string;
|
|
66
|
+
deliveryId: string;
|
|
67
|
+
}, call: () => unknown): Promise<EventHandlerOutcome>;
|
|
68
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/channels/http/provider.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,IAAI,CAMN;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAGzE;AAED,oDAAoD;AACpD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,GAC5C,UAAU,CAIZ;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAIT;AAED;;;;GAIG;AACH,qBAAa,UAAU,CAAC,CAAC;;IAIrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFxB,YACmB,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,EAC1C;IAEJ,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAkBhB;IAED,mCAAmC;IACnC,KAAK,IAAI,IAAI,CAEZ;CACF;AAQD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,EACtC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB7B;AAED,qDAAqD;AACrD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,0EAA0E;AAC1E,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB,6DAA6D;AAC7D,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC1C,IAAI,EAAE,MAAM,OAAO,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAgB9B"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What webhook channels built on `httpChannel`, such as GitHub and Linear,
|
|
3
|
+
* share: their name, the events they subscribe to, the secrets they read from
|
|
4
|
+
* Agent Auth, signature checks, and running an event's handler.
|
|
5
|
+
*/
|
|
6
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
7
|
+
import { isJsonValue } from "../message-schema.js";
|
|
8
|
+
import { immutableCopy } from "../runtime.js";
|
|
9
|
+
import { logger } from "../../runtime/log.js";
|
|
10
|
+
import { ConnectionNotFoundError, DEPLOYMENT_ID_ENV, connections, } from "../../connections.js";
|
|
11
|
+
/** The channel's name in the project, or its provider before it has one. */
|
|
12
|
+
export function channelName(channel) {
|
|
13
|
+
return channel.name ?? channel.kind;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check a channel's `onEvent` keys. The types limit them, but a JavaScript
|
|
17
|
+
* caller or a cast gets no error, and a key nothing dispatches never runs.
|
|
18
|
+
*/
|
|
19
|
+
export function checkEventKeys(provider, handlers, supported) {
|
|
20
|
+
const unknown = Object.keys(handlers).filter((key) => !supported.has(key));
|
|
21
|
+
if (unknown.length)
|
|
22
|
+
throw new TypeError(`unsupported ${provider} event key ${unknown.sort().join(", ")}`);
|
|
23
|
+
}
|
|
24
|
+
/** The events deploy subscribes the provider's webhook to: the handled ones. */
|
|
25
|
+
export function handledEventKeys(handlers) {
|
|
26
|
+
return Object.entries(handlers)
|
|
27
|
+
.filter(([, handler]) => handler !== undefined)
|
|
28
|
+
.map(([key]) => key)
|
|
29
|
+
.sort();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The connection `mda deploy` stores for the provider's app, or one of the
|
|
33
|
+
* values stored beside it, such as `webhook-secret`, when `suffix` is given.
|
|
34
|
+
*/
|
|
35
|
+
export function appConnectionSlug(provider, deploymentId, suffix) {
|
|
36
|
+
const slug = `mda/${provider}-app/${deploymentId}`;
|
|
37
|
+
return suffix ? `${slug}/${suffix}` : slug;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A frozen copy of a parsed event, kept as the delivery's raw event so a
|
|
41
|
+
* handler that changes its argument can't change what MDA keeps.
|
|
42
|
+
*/
|
|
43
|
+
export function eventSnapshot(event, provider) {
|
|
44
|
+
if (!isJsonValue(event))
|
|
45
|
+
throw new TypeError(`invalid ${provider} event`);
|
|
46
|
+
return immutableCopy(event);
|
|
47
|
+
}
|
|
48
|
+
/** App options for deploy, without unset fields. */
|
|
49
|
+
export function definedFields(fields) {
|
|
50
|
+
return Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== undefined));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Whether `signature`, a hex HMAC-SHA256 the caller checked the format of,
|
|
54
|
+
* signs `rawBody` with `secret`. Compared in constant time.
|
|
55
|
+
*/
|
|
56
|
+
export function verifyHmacSha256(secret, rawBody, signature) {
|
|
57
|
+
const expected = createHmac("sha256", secret).update(rawBody).digest();
|
|
58
|
+
const given = Buffer.from(signature, "hex");
|
|
59
|
+
return given.length === expected.length && timingSafeEqual(expected, given);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A value read at most every `ttlMs(value)` milliseconds. Concurrent callers
|
|
63
|
+
* share the read in flight; a failed read is not kept, so the next call reads
|
|
64
|
+
* again.
|
|
65
|
+
*/
|
|
66
|
+
export class CachedRead {
|
|
67
|
+
read;
|
|
68
|
+
ttlMs;
|
|
69
|
+
#entry;
|
|
70
|
+
constructor(read, ttlMs) {
|
|
71
|
+
this.read = read;
|
|
72
|
+
this.ttlMs = ttlMs;
|
|
73
|
+
}
|
|
74
|
+
get() {
|
|
75
|
+
if (this.#entry && this.#entry.expiresAt > Date.now())
|
|
76
|
+
return this.#entry.value;
|
|
77
|
+
const entry = {
|
|
78
|
+
value: this.read().then((value) => {
|
|
79
|
+
entry.expiresAt = Date.now() + this.ttlMs(value);
|
|
80
|
+
return value;
|
|
81
|
+
}, (error) => {
|
|
82
|
+
if (this.#entry === entry)
|
|
83
|
+
this.#entry = undefined;
|
|
84
|
+
throw error;
|
|
85
|
+
}),
|
|
86
|
+
expiresAt: Number.POSITIVE_INFINITY,
|
|
87
|
+
};
|
|
88
|
+
this.#entry = entry;
|
|
89
|
+
return entry.value;
|
|
90
|
+
}
|
|
91
|
+
/** Read again on the next call. */
|
|
92
|
+
reset() {
|
|
93
|
+
this.#entry = undefined;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** How long a value read from Agent Auth is reused before it is read again. */
|
|
97
|
+
const SECRET_TTL_MS = 5 * 60_000;
|
|
98
|
+
/** How long a missing value is remembered, so unsigned traffic can't hammer Agent Auth. */
|
|
99
|
+
const MISSING_SECRET_TTL_MS = 60_000;
|
|
100
|
+
const deploymentSecrets = new Map();
|
|
101
|
+
/**
|
|
102
|
+
* A value `mda deploy` stored for the deployment, such as a webhook secret:
|
|
103
|
+
* the `env` override when set, otherwise the agent secret Agent Auth keeps at
|
|
104
|
+
* `slug(deploymentId)`. Only a missing connection reads as `undefined`, and is
|
|
105
|
+
* logged as `label`; credential store failures propagate.
|
|
106
|
+
*/
|
|
107
|
+
export function readDeploymentSecret(env, slug, label) {
|
|
108
|
+
const override = process.env[env]?.trim();
|
|
109
|
+
if (override)
|
|
110
|
+
return Promise.resolve(override);
|
|
111
|
+
const deploymentId = process.env[DEPLOYMENT_ID_ENV]?.trim();
|
|
112
|
+
if (!deploymentId)
|
|
113
|
+
return Promise.resolve(undefined);
|
|
114
|
+
const key = slug(deploymentId);
|
|
115
|
+
let cached = deploymentSecrets.get(key);
|
|
116
|
+
if (!cached) {
|
|
117
|
+
cached = new CachedRead(() => connections.resolveDeploymentSecret(key).catch((error) => {
|
|
118
|
+
if (!(error instanceof ConnectionNotFoundError))
|
|
119
|
+
throw error;
|
|
120
|
+
logger.error(`${label} is not stored in Agent Auth`);
|
|
121
|
+
return undefined;
|
|
122
|
+
}), (value) => (value === undefined ? MISSING_SECRET_TTL_MS : SECRET_TTL_MS));
|
|
123
|
+
deploymentSecrets.set(key, cached);
|
|
124
|
+
}
|
|
125
|
+
return cached.get();
|
|
126
|
+
}
|
|
127
|
+
/** Forget values read from Agent Auth; for tests. */
|
|
128
|
+
export function resetDeploymentSecrets() {
|
|
129
|
+
deploymentSecrets.clear();
|
|
130
|
+
}
|
|
131
|
+
/** Run an event's handler. A throw is logged, not raised. */
|
|
132
|
+
export async function runEventHandler(provider, event, call) {
|
|
133
|
+
const receipt = JSON.stringify({
|
|
134
|
+
event: logger.logIdentifier(event.key),
|
|
135
|
+
deliveryId: logger.logIdentifier(event.deliveryId),
|
|
136
|
+
});
|
|
137
|
+
try {
|
|
138
|
+
const input = (await call());
|
|
139
|
+
if (input === undefined || input === null)
|
|
140
|
+
return { type: "skipped" };
|
|
141
|
+
logger.info(`${provider} handler returned run input ${receipt}`);
|
|
142
|
+
return { type: "input", input };
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
logger.error(`${provider.toLowerCase()} callback failed ${receipt} (${logger.safeErrorLabel(error)})`);
|
|
146
|
+
return { type: "failed" };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/channels/http/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import type { HttpChannelRunInfo } from "./types.js";
|
|
1
|
+
import type { HttpChannelRunInfo, HttpInterruptedReason } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* The thread in the deployment's Studio, or the deployment's page when the
|
|
4
4
|
* deployment's name or the thread's assistant is unknown. The LangSmith UI is
|
|
5
5
|
* the one `mda deploy` recorded for the deployment's environment
|
|
6
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
7
|
*/
|
|
12
8
|
export declare function studioUrl(run: HttpChannelRunInfo | undefined, env?: NodeJS.ProcessEnv): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* What a channel tells the conversation when its thread waits on a decision,
|
|
11
|
+
* with a link to the thread in Studio, where the decision is made. `again`
|
|
12
|
+
* says how to continue once it is made, such as "comment again".
|
|
13
|
+
*/
|
|
14
|
+
export declare function interruptedNotice(reason: HttpInterruptedReason, run: HttpChannelRunInfo, again: string): string;
|
|
13
15
|
//# sourceMappingURL=studio.d.ts.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"studio.d.ts","sourceRoot":"","sources":["../../../src/channels/http/studio.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAS5E;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,GAAG,oBAAc,GAChB,MAAM,GAAG,SAAS,CAsBpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,kBAAkB,EACvB,KAAK,EAAE,MAAM,GACZ,MAAM,CAMR"}
|
|
@@ -12,22 +12,10 @@ const GRAPH_NAMESPACE = "6ba7b821-9dad-11d1-80b4-00c04fd430c8";
|
|
|
12
12
|
* deployment's name or the thread's assistant is unknown. The LangSmith UI is
|
|
13
13
|
* the one `mda deploy` recorded for the deployment's environment
|
|
14
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
15
|
*/
|
|
20
16
|
export function studioUrl(run, env = process.env) {
|
|
21
17
|
const threadId = run?.threadId;
|
|
22
18
|
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
19
|
const workspace = env.LANGSMITH_TENANT_ID?.trim() ?? "";
|
|
32
20
|
const deployment = env[DEPLOYMENT_ID_ENV]?.trim() ?? "";
|
|
33
21
|
if (!UUID_PATTERN.test(workspace) || !UUID_PATTERN.test(deployment))
|
|
@@ -49,6 +37,18 @@ export function studioUrl(run, env = process.env) {
|
|
|
49
37
|
});
|
|
50
38
|
return `${origin}/o/${workspace}/a/${encodeURIComponent(name)}/studio/thread?${query}`;
|
|
51
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* What a channel tells the conversation when its thread waits on a decision,
|
|
42
|
+
* with a link to the thread in Studio, where the decision is made. `again`
|
|
43
|
+
* says how to continue once it is made, such as "comment again".
|
|
44
|
+
*/
|
|
45
|
+
export function interruptedNotice(reason, run, again) {
|
|
46
|
+
const url = studioUrl(run);
|
|
47
|
+
const studio = url ? `[LangSmith Studio](${url})` : "LangSmith Studio";
|
|
48
|
+
return reason === "stopped"
|
|
49
|
+
? `I need a decision before I continue. Review the pending step in ${studio}.`
|
|
50
|
+
: `I'm waiting for a decision on an earlier step in this conversation, so I haven't read this yet. Review the pending step in ${studio}, then ${again}.`;
|
|
51
|
+
}
|
|
52
52
|
/**
|
|
53
53
|
* Studio opens an assistant by its ID. Channels start runs by graph ID, whose
|
|
54
54
|
* default assistant the Agent Server derives from it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../../../src/channels/http/studio.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,YAAY,GAChB,iEAAiE,CAAC;AACpE,MAAM,uBAAuB,GAAG,oCAAoC,CAAC;AACrE,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAC/D,+EAA+E;AAC/E,MAAM,eAAe,GAAG,sCAAsC,CAAC;AAE/D
|
|
1
|
+
{"version":3,"file":"studio.js","sourceRoot":"","sources":["../../../src/channels/http/studio.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,13 @@ export interface HttpChannelInboundMessage {
|
|
|
19
19
|
*/
|
|
20
20
|
deliveryKey?: string;
|
|
21
21
|
}
|
|
22
|
+
/** The thread a `cancel` result stops, and who to tell. */
|
|
23
|
+
export interface HttpChannelCancelMessage {
|
|
24
|
+
userId: string;
|
|
25
|
+
threadId: string;
|
|
26
|
+
/** Where to report the stop. */
|
|
27
|
+
target: JsonValue;
|
|
28
|
+
}
|
|
22
29
|
export type HttpChannelParseResult = {
|
|
23
30
|
type: "message";
|
|
24
31
|
message: HttpChannelInboundMessage;
|
|
@@ -31,11 +38,10 @@ export type HttpChannelParseResult = {
|
|
|
31
38
|
} | {
|
|
32
39
|
/**
|
|
33
40
|
* Stop the work on the message's thread: MDA cancels its queued and
|
|
34
|
-
* running runs, keeping their progress, then calls `onCancelled`.
|
|
35
|
-
* message needs no `content`.
|
|
41
|
+
* running runs, keeping their progress, then calls `onCancelled`.
|
|
36
42
|
*/
|
|
37
43
|
type: "cancel";
|
|
38
|
-
message:
|
|
44
|
+
message: HttpChannelCancelMessage;
|
|
39
45
|
rawEvent?: JsonValue;
|
|
40
46
|
response?: Response;
|
|
41
47
|
};
|
|
@@ -61,6 +67,11 @@ export interface HttpChannelAdapter {
|
|
|
61
67
|
* either way.
|
|
62
68
|
*/
|
|
63
69
|
multitaskStrategy?: MultitaskStrategy;
|
|
70
|
+
/**
|
|
71
|
+
* Why `onInterrupted` is called; by default only `"waiting"`. Add `"stopped"` to
|
|
72
|
+
* also hear when the run a delivery started stops on interrupts.
|
|
73
|
+
*/
|
|
74
|
+
interruptedReasons?: readonly HttpInterruptedReason[];
|
|
64
75
|
verify(context: HttpChannelRequest): boolean | Promise<boolean>;
|
|
65
76
|
/** Decode the verified request body in the provider's format. */
|
|
66
77
|
parse(context: HttpChannelRequest): HttpChannelParseResult | Promise<HttpChannelParseResult>;
|
|
@@ -73,11 +84,16 @@ export interface HttpChannelAdapter {
|
|
|
73
84
|
*/
|
|
74
85
|
input?(message: HttpChannelInboundMessage, rawEvent: JsonValue | undefined): ChannelRunResult | null | undefined | Promise<ChannelRunResult | null | undefined>;
|
|
75
86
|
/**
|
|
76
|
-
* The thread waits on a decision
|
|
77
|
-
*
|
|
78
|
-
*
|
|
87
|
+
* The thread waits on a decision. Tell the sender where to make it (Studio
|
|
88
|
+
* resumes interrupts). Failures are logged. `reason` says why:
|
|
89
|
+
*
|
|
90
|
+
* - `"waiting"`: a message arrived while the thread waits, so MDA started
|
|
91
|
+
* no run.
|
|
92
|
+
* - `"stopped"`: the run this delivery started just stopped on interrupts.
|
|
93
|
+
*
|
|
94
|
+
* It is called only for the reasons in `interruptedReasons`.
|
|
79
95
|
*/
|
|
80
|
-
|
|
96
|
+
onInterrupted?(target: JsonValue, run: HttpChannelRunInfo, reason: HttpInterruptedReason): Promise<void>;
|
|
81
97
|
/**
|
|
82
98
|
* A verified message reached its thread, before MDA starts or queues
|
|
83
99
|
* anything for it, and whatever it then does. For providers that
|
|
@@ -100,12 +116,9 @@ export interface HttpChannelRunInfo {
|
|
|
100
116
|
assistantId?: string;
|
|
101
117
|
/** The provider event of the delivery the notice is about, when parsed. */
|
|
102
118
|
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;
|
|
108
119
|
}
|
|
120
|
+
/** Why `onInterrupted` is called; see {@link HttpChannelAdapter.onInterrupted}. */
|
|
121
|
+
export type HttpInterruptedReason = "waiting" | "stopped";
|
|
109
122
|
export interface HttpChannelRequest {
|
|
110
123
|
request: Request;
|
|
111
124
|
rawBody: Uint8Array;
|
|
@@ -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,GACvC;IACE
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/http/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/connections.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/connections.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,qBAAqB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { appConnectionSlug } from "../http/provider.js";
|
|
1
2
|
/**
|
|
2
3
|
* Reserved agent connection for the deployment's Linear app: reading it
|
|
3
4
|
* returns the app's access token, which Agent Auth renews.
|
|
@@ -8,7 +9,6 @@ export const LINEAR_TOKEN_SLUG = "mda/linear-token";
|
|
|
8
9
|
* beside it (`webhook-secret`) when `suffix` is given.
|
|
9
10
|
*/
|
|
10
11
|
export function linearAppConnectionSlug(deploymentId, suffix) {
|
|
11
|
-
|
|
12
|
-
return suffix ? `${slug}/${suffix}` : slug;
|
|
12
|
+
return appConnectionSlug("linear", deploymentId, suffix);
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=connections.js.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../../src/channels/linear/connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAoB,EACpB,MAAe;IAEf,OAAO,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
/** Linear refused a request for exceeding its rate limit. */
|
|
2
3
|
export declare class LinearRateLimitError extends Error {
|
|
3
4
|
constructor();
|
|
@@ -7,19 +8,14 @@ export declare function resetLinearToken(): void;
|
|
|
7
8
|
/**
|
|
8
9
|
* Run a GraphQL operation as the app. `query` is a constant; everything that
|
|
9
10
|
* varies goes in `variables`. A rejected token is read again once. Returns
|
|
10
|
-
* the response's `data`.
|
|
11
|
+
* the response's `data`, checked against `schema`.
|
|
11
12
|
*/
|
|
12
|
-
export declare function linearRequest<T>(query: string, variables
|
|
13
|
+
export declare function linearRequest<T>(query: string, variables: Record<string, unknown>, schema: z.ZodType<T>): Promise<T>;
|
|
13
14
|
/** The Linear user the app acts as. */
|
|
14
15
|
export type LinearAppUser = {
|
|
15
16
|
id: string;
|
|
16
17
|
displayName: string;
|
|
17
18
|
};
|
|
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
19
|
export declare function linearAppUser(): Promise<LinearAppUser>;
|
|
24
20
|
/** Forget the cached app user; for tests. */
|
|
25
21
|
export declare function resetLinearAppUser(): void;
|
|
@@ -41,23 +37,15 @@ export declare function commentInAgentSession(commentId: string): Promise<boolea
|
|
|
41
37
|
export type LinearActivityContent = {
|
|
42
38
|
type: "thought" | "response" | "error" | "elicitation";
|
|
43
39
|
body: string;
|
|
44
|
-
} | {
|
|
45
|
-
type: "action";
|
|
46
|
-
action: string;
|
|
47
|
-
parameter: string;
|
|
48
|
-
result?: string;
|
|
49
40
|
};
|
|
50
41
|
/**
|
|
51
|
-
* Post an activity to an agent session as the app. `ephemeral`
|
|
52
|
-
*
|
|
53
|
-
* options to choose from.
|
|
42
|
+
* Post an activity to an agent session as the app. An `ephemeral` thought is
|
|
43
|
+
* replaced by the next activity.
|
|
54
44
|
*/
|
|
55
45
|
export declare function createLinearActivity(input: {
|
|
56
46
|
agentSessionId: string;
|
|
57
47
|
content: LinearActivityContent;
|
|
58
48
|
ephemeral?: boolean;
|
|
59
|
-
signal?: "select" | "auth";
|
|
60
|
-
signalMetadata?: Record<string, unknown>;
|
|
61
49
|
}): Promise<{
|
|
62
50
|
id: string;
|
|
63
51
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/graphql.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiCxB,6DAA6D;AAC7D,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,cAGC;CACF;AAQD,8CAA8C;AAC9C,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAWD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAoBD,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAahE,wBAAgB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAEtD;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAYD;;;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,CAKxC;AAWD,8DAA8D;AAC9D,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,6CAA6C;AAC7C,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,CAAC;IACvD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAYF;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAS1B;AASD,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,CAMf"}
|