managed-deepagents 0.10.0-dev.18 → 0.10.0-dev.19

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 (144) hide show
  1. package/README.md +23 -4
  2. package/dist/browser.d.ts +37 -0
  3. package/dist/browser.d.ts.map +1 -0
  4. package/dist/browser.js +31 -0
  5. package/dist/browser.js.map +1 -0
  6. package/dist/channels/assistant-text.d.ts +1 -1
  7. package/dist/channels/assistant-text.js +1 -1
  8. package/dist/channels/binding.d.ts.map +1 -1
  9. package/dist/channels/binding.js +6 -2
  10. package/dist/channels/binding.js.map +1 -1
  11. package/dist/channels/delivery.d.ts +23 -8
  12. package/dist/channels/delivery.d.ts.map +1 -1
  13. package/dist/channels/delivery.js +181 -18
  14. package/dist/channels/delivery.js.map +1 -1
  15. package/dist/channels/github/app-setup.d.ts +32 -0
  16. package/dist/channels/github/app-setup.d.ts.map +1 -0
  17. package/dist/channels/github/app-setup.js +146 -0
  18. package/dist/channels/github/app-setup.js.map +1 -0
  19. package/dist/channels/github/index.d.ts.map +1 -1
  20. package/dist/channels/github/index.js +9 -23
  21. package/dist/channels/github/index.js.map +1 -1
  22. package/dist/channels/http/index.d.ts +6 -0
  23. package/dist/channels/http/index.d.ts.map +1 -1
  24. package/dist/channels/http/index.js +24 -9
  25. package/dist/channels/http/index.js.map +1 -1
  26. package/dist/channels/linear/app-setup.d.ts +29 -0
  27. package/dist/channels/linear/app-setup.d.ts.map +1 -0
  28. package/dist/channels/linear/app-setup.js +102 -0
  29. package/dist/channels/linear/app-setup.js.map +1 -0
  30. package/dist/channels/linear/index.d.ts.map +1 -1
  31. package/dist/channels/linear/index.js +11 -55
  32. package/dist/channels/linear/index.js.map +1 -1
  33. package/dist/channels/runtime.d.ts +4 -1
  34. package/dist/channels/runtime.d.ts.map +1 -1
  35. package/dist/channels/runtime.js +19 -10
  36. package/dist/channels/runtime.js.map +1 -1
  37. package/dist/channels/schedule-delivery.d.ts +1 -12
  38. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  39. package/dist/channels/schedule-delivery.js +5 -61
  40. package/dist/channels/schedule-delivery.js.map +1 -1
  41. package/dist/channels/slack/index.d.ts.map +1 -1
  42. package/dist/channels/slack/index.js +3 -0
  43. package/dist/channels/slack/index.js.map +1 -1
  44. package/dist/channels/trigger/client.d.ts.map +1 -1
  45. package/dist/channels/trigger/client.js +3 -1
  46. package/dist/channels/trigger/client.js.map +1 -1
  47. package/dist/channels/trigger/conversation.d.ts +11 -0
  48. package/dist/channels/trigger/conversation.d.ts.map +1 -0
  49. package/dist/channels/trigger/conversation.js +72 -0
  50. package/dist/channels/trigger/conversation.js.map +1 -0
  51. package/dist/channels/trigger/http.d.ts +9 -1
  52. package/dist/channels/trigger/http.d.ts.map +1 -1
  53. package/dist/channels/trigger/http.js +28 -12
  54. package/dist/channels/trigger/http.js.map +1 -1
  55. package/dist/channels/trigger/ingress.d.ts +32 -0
  56. package/dist/channels/trigger/ingress.d.ts.map +1 -1
  57. package/dist/channels/trigger/ingress.js +89 -6
  58. package/dist/channels/trigger/ingress.js.map +1 -1
  59. package/dist/channels/trigger/transport.d.ts +10 -0
  60. package/dist/channels/trigger/transport.d.ts.map +1 -1
  61. package/dist/channels/trigger/transport.js +25 -9
  62. package/dist/channels/trigger/transport.js.map +1 -1
  63. package/dist/channels/trigger/types.d.ts +10 -0
  64. package/dist/channels/trigger/types.d.ts.map +1 -1
  65. package/dist/channels/trigger/types.js.map +1 -1
  66. package/dist/channels/types.d.ts +24 -1
  67. package/dist/channels/types.d.ts.map +1 -1
  68. package/dist/channels/types.js.map +1 -1
  69. package/dist/define-deep-agent.d.ts +2 -2
  70. package/dist/define-deep-agent.d.ts.map +1 -1
  71. package/dist/define-deep-agent.js +53 -8
  72. package/dist/define-deep-agent.js.map +1 -1
  73. package/dist/index.d.ts +3 -1
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +1 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/managed-composition.d.ts +3 -0
  78. package/dist/managed-composition.d.ts.map +1 -1
  79. package/dist/managed-composition.js +21 -0
  80. package/dist/managed-composition.js.map +1 -1
  81. package/dist/runtime/async-subagents.d.ts +27 -0
  82. package/dist/runtime/async-subagents.d.ts.map +1 -0
  83. package/dist/runtime/async-subagents.js +139 -0
  84. package/dist/runtime/async-subagents.js.map +1 -0
  85. package/dist/runtime/auth.d.ts.map +1 -1
  86. package/dist/runtime/auth.js +37 -2
  87. package/dist/runtime/auth.js.map +1 -1
  88. package/dist/runtime/backend.d.ts +7 -0
  89. package/dist/runtime/backend.d.ts.map +1 -1
  90. package/dist/runtime/backend.js +32 -7
  91. package/dist/runtime/backend.js.map +1 -1
  92. package/dist/runtime/browser-facade.d.ts +10 -0
  93. package/dist/runtime/browser-facade.d.ts.map +1 -0
  94. package/dist/runtime/browser-facade.js +23 -0
  95. package/dist/runtime/browser-facade.js.map +1 -0
  96. package/dist/runtime/browser-langsmith.d.ts +108 -0
  97. package/dist/runtime/browser-langsmith.d.ts.map +1 -0
  98. package/dist/runtime/browser-langsmith.js +379 -0
  99. package/dist/runtime/browser-langsmith.js.map +1 -0
  100. package/dist/runtime/browser-selection.d.ts +10 -0
  101. package/dist/runtime/browser-selection.d.ts.map +1 -0
  102. package/dist/runtime/browser-selection.js +21 -0
  103. package/dist/runtime/browser-selection.js.map +1 -0
  104. package/dist/runtime/browser.d.ts +125 -0
  105. package/dist/runtime/browser.d.ts.map +1 -0
  106. package/dist/runtime/browser.js +606 -0
  107. package/dist/runtime/browser.js.map +1 -0
  108. package/dist/runtime/index.d.ts +38 -1
  109. package/dist/runtime/index.d.ts.map +1 -1
  110. package/dist/runtime/index.js +47 -16
  111. package/dist/runtime/index.js.map +1 -1
  112. package/dist/runtime/managed-thread.d.ts +1 -0
  113. package/dist/runtime/managed-thread.d.ts.map +1 -1
  114. package/dist/runtime/managed-thread.js +1 -1
  115. package/dist/runtime/managed-thread.js.map +1 -1
  116. package/dist/runtime/parent-run.d.ts +33 -0
  117. package/dist/runtime/parent-run.d.ts.map +1 -0
  118. package/dist/runtime/parent-run.js +114 -0
  119. package/dist/runtime/parent-run.js.map +1 -0
  120. package/dist/runtime/run-input.d.ts +4 -1
  121. package/dist/runtime/run-input.d.ts.map +1 -1
  122. package/dist/runtime/run-input.js +30 -7
  123. package/dist/runtime/run-input.js.map +1 -1
  124. package/dist/runtime/sandbox-manager.d.ts +14 -1
  125. package/dist/runtime/sandbox-manager.d.ts.map +1 -1
  126. package/dist/runtime/sandbox-manager.js +33 -8
  127. package/dist/runtime/sandbox-manager.js.map +1 -1
  128. package/dist/runtime/schedule-auth.d.ts +62 -0
  129. package/dist/runtime/schedule-auth.d.ts.map +1 -1
  130. package/dist/runtime/schedule-auth.js +125 -6
  131. package/dist/runtime/schedule-auth.js.map +1 -1
  132. package/dist/runtime/static-entry.d.ts.map +1 -1
  133. package/dist/runtime/static-entry.js +1 -0
  134. package/dist/runtime/static-entry.js.map +1 -1
  135. package/dist/runtime/thread-record.d.ts +9 -2
  136. package/dist/runtime/thread-record.d.ts.map +1 -1
  137. package/dist/runtime/thread-record.js +13 -5
  138. package/dist/runtime/thread-record.js.map +1 -1
  139. package/dist/runtime/types.d.ts +7 -0
  140. package/dist/runtime/types.d.ts.map +1 -1
  141. package/dist/types.d.ts +19 -2
  142. package/dist/types.d.ts.map +1 -1
  143. package/dist/types.js.map +1 -1
  144. package/package.json +22 -8
@@ -0,0 +1,146 @@
1
+ import { handledEventKeys } from "../http/provider.js";
2
+ /**
3
+ * The App permission each event needs: read to receive it, write to also
4
+ * reply where it happened.
5
+ */
6
+ const EVENT_PERMISSIONS = {
7
+ "issue_comment.created": { permission: "issues", level: "write" },
8
+ "issue_comment.edited": { permission: "issues", level: "write" },
9
+ "issues.edited": { permission: "issues", level: "write" },
10
+ "issues.labeled": { permission: "issues", level: "write" },
11
+ "issues.opened": { permission: "issues", level: "write" },
12
+ "issues.reopened": { permission: "issues", level: "write" },
13
+ "pull_request.closed": { permission: "pull_requests", level: "write" },
14
+ "pull_request.converted_to_draft": {
15
+ permission: "pull_requests",
16
+ level: "write",
17
+ },
18
+ "pull_request.edited": { permission: "pull_requests", level: "write" },
19
+ "pull_request.labeled": { permission: "pull_requests", level: "write" },
20
+ "pull_request.opened": { permission: "pull_requests", level: "write" },
21
+ "pull_request.ready_for_review": {
22
+ permission: "pull_requests",
23
+ level: "write",
24
+ },
25
+ "pull_request.reopened": { permission: "pull_requests", level: "write" },
26
+ "pull_request.synchronize": { permission: "pull_requests", level: "write" },
27
+ "pull_request_review.dismissed": {
28
+ permission: "pull_requests",
29
+ level: "write",
30
+ },
31
+ "pull_request_review.edited": {
32
+ permission: "pull_requests",
33
+ level: "write",
34
+ },
35
+ "pull_request_review.submitted": {
36
+ permission: "pull_requests",
37
+ level: "write",
38
+ },
39
+ "pull_request_review_comment.created": {
40
+ permission: "pull_requests",
41
+ level: "write",
42
+ },
43
+ "pull_request_review_comment.edited": {
44
+ permission: "pull_requests",
45
+ level: "write",
46
+ },
47
+ "check_run.completed": { permission: "checks", level: "read" },
48
+ "check_suite.completed": { permission: "checks", level: "read" },
49
+ push: { permission: "contents", level: "read" },
50
+ status: { permission: "statuses", level: "read" },
51
+ "workflow_run.completed": { permission: "actions", level: "read" },
52
+ };
53
+ const MAX_PERMISSIONS = 50;
54
+ /** Keeps the App manifest and the deploy report readable. */
55
+ const MAX_REPOSITORIES = 500;
56
+ const PERMISSION_NAME = /^[a-z][a-z_]{0,63}$/;
57
+ const GITHUB_LOGIN = /^(?!-)(?!.*--)[A-Za-z0-9-]{1,39}(?<!-)$/;
58
+ const REPOSITORY_NAME = /^[A-Za-z0-9._-]{1,100}$/;
59
+ /**
60
+ * The App the channel's handlers and `app` options need. The CLI reads it
61
+ * from the channel's manifest instead of working it out; the Python runtime
62
+ * mirrors these rules in `github_app_setup.py`.
63
+ */
64
+ export function githubAppSetup(handlers, app) {
65
+ const events = handledEventKeys(handlers).filter(isSupportedEventKey);
66
+ // A misspelled option would silently widen what the agent's token reaches.
67
+ const unknown = Object.keys(app ?? {}).filter((key) => key !== "permissions" && key !== "repositories");
68
+ if (unknown.length)
69
+ throw new TypeError(`unknown GitHub app option ${unknown.join(", ")}; use permissions or repositories`);
70
+ const repositories = repositoryAllowlist(app?.repositories);
71
+ return {
72
+ events,
73
+ webhookEvents: [...new Set(events.map((key) => key.split(".")[0]))].sort(),
74
+ permissions: appPermissions(events, app?.permissions ?? {}),
75
+ ...(repositories && { repositories }),
76
+ };
77
+ }
78
+ function isSupportedEventKey(key) {
79
+ return Object.hasOwn(EVENT_PERMISSIONS, key);
80
+ }
81
+ /**
82
+ * Every App gets `metadata: read`; each handled event raises its permission
83
+ * to the level it needs, and `app.permissions` can raise it further.
84
+ */
85
+ function appPermissions(events, extra) {
86
+ checkPermissions(extra);
87
+ const permissions = new Map([
88
+ ["metadata", { name: "metadata", level: "read", events: [] }],
89
+ ]);
90
+ for (const key of events) {
91
+ const { permission, level } = EVENT_PERMISSIONS[key];
92
+ const current = permissions.get(permission);
93
+ if (!current || (current.level === "read" && level === "write"))
94
+ permissions.set(permission, { name: permission, level, events: [key] });
95
+ else if (current.level === level)
96
+ current.events.push(key);
97
+ }
98
+ for (const [name, level] of Object.entries(extra)) {
99
+ const current = permissions.get(name);
100
+ if (!current || (current.level === "read" && level === "write"))
101
+ permissions.set(name, { name, level, events: [] });
102
+ }
103
+ return [...permissions.values()].sort((a, b) => a.name.localeCompare(b.name));
104
+ }
105
+ /** JavaScript callers can pass anything, so check what types promise. */
106
+ function checkPermissions(permissions) {
107
+ const names = Object.keys(permissions).sort();
108
+ if (names.length > MAX_PERMISSIONS)
109
+ throw new TypeError(`GitHub app.permissions must list at most ${MAX_PERMISSIONS} permissions`);
110
+ for (const name of names) {
111
+ if (!PERMISSION_NAME.test(name))
112
+ throw new TypeError(`GitHub app.permissions has an invalid permission name '${name}'; use GitHub's names, such as contents`);
113
+ if (permissions[name] !== "read" && permissions[name] !== "write")
114
+ throw new TypeError(`GitHub app.permissions.${name} must be read or write`);
115
+ }
116
+ }
117
+ /**
118
+ * The repositories the channel is limited to, lowercased since GitHub names
119
+ * are case-insensitive. One installation covers them, so they share an owner.
120
+ */
121
+ export function repositoryAllowlist(repositories) {
122
+ if (repositories === undefined)
123
+ return undefined;
124
+ // An empty list could mean "none" or "all"; neither should be silent.
125
+ if (repositories.length === 0)
126
+ throw new TypeError("GitHub app.repositories must list at least one repository; omit it to allow every repository");
127
+ const valid = new Set();
128
+ for (const entry of repositories) {
129
+ const repository = entry.trim();
130
+ const [owner = "", name = "", ...rest] = repository.split("/");
131
+ if (rest.length > 0 ||
132
+ !GITHUB_LOGIN.test(owner) ||
133
+ !REPOSITORY_NAME.test(name) ||
134
+ name === "." ||
135
+ name === "..")
136
+ throw new TypeError(`GitHub app.repositories entry '${repository}' must be owner/name`);
137
+ valid.add(repository.toLowerCase());
138
+ }
139
+ if (valid.size > MAX_REPOSITORIES)
140
+ throw new TypeError(`GitHub app.repositories must list at most ${MAX_REPOSITORIES} repositories`);
141
+ const owners = [...new Set([...valid].map((r) => r.split("/")[0]))].sort();
142
+ if (owners.length > 1)
143
+ throw new TypeError(`GitHub app.repositories must all belong to one owner, because one installation covers them (found: ${owners.join(", ")})`);
144
+ return [...valid].sort();
145
+ }
146
+ //# sourceMappingURL=app-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-setup.js","sourceRoot":"","sources":["../../../src/channels/github/app-setup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/github/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,kBAAkB,CAAC;AAiC1B,OAAO,KAAK,EAEV,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAWpB,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,WAAW,CA0D7E;AAmDD,qDAAqD;AACrD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/github/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EAKjB,MAAM,kBAAkB,CAAC;AA+B1B,OAAO,KAAK,EACV,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAWpB,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,WAAW,CA+C7E;AA2CD,qDAAqD;AACrD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -1,11 +1,12 @@
1
- import { channelThreadId, httpChannel, } from "../http/index.js";
2
- import { channelName, checkEventKeys, definedFields, eventSnapshot, handledEventKeys, readDeploymentSecret, resetDeploymentSecrets, resolveEndpoints, runEventHandler, eventThread, finishEvents, receiveEvents, verifyHmacSha256, } from "../http/provider.js";
1
+ import { channelThreadId, httpChannel, withAgentConnections, } from "../http/index.js";
2
+ import { channelName, checkEventKeys, eventSnapshot, readDeploymentSecret, resetDeploymentSecrets, resolveEndpoints, runEventHandler, eventThread, finishEvents, receiveEvents, verifyHmacSha256, } from "../http/provider.js";
3
3
  import { isEndpointCallback } from "../http/endpoint.js";
4
4
  import { interruptedNotice, pendingDecision } from "../http/studio.js";
5
5
  import { withPausedNotice } from "../messaging-registry.js";
6
6
  import { logger } from "../../runtime/log.js";
7
7
  import { connections } from "../../connections.js";
8
8
  import { ConnectionsNotConfiguredError } from "../../agent-auth.js";
9
+ import { githubAppSetup } from "./app-setup.js";
9
10
  import { GITHUB_TOKEN_SLUG, githubAppConnectionSlug } from "./connections.js";
10
11
  import { ENDPOINT_EVENT_FIELDS, SUPPORTED_EVENT_KEYS, githubReceiptSchema, githubIdentifierSchema, githubEventSchema, } from "./schema.js";
11
12
  const EVENT_KEYS = new Set(SUPPORTED_EVENT_KEYS);
@@ -13,26 +14,16 @@ const EVENT_KEYS = new Set(SUPPORTED_EVENT_KEYS);
13
14
  export function githubChannel(options = {}) {
14
15
  const handlers = resolveEndpoints("GitHub", options.onEvent, ENDPOINT_EVENT_FIELDS);
15
16
  checkEventKeys("GitHub", handlers, EVENT_KEYS);
16
- // A misspelled option would silently widen what the agent's token reaches.
17
- const unknown = Object.keys(options.app ?? {}).filter((key) => key !== "permissions" && key !== "repositories");
18
- if (unknown.length)
19
- throw new TypeError(`unknown GitHub app option ${unknown.join(", ")}; use permissions or repositories`);
20
- // GitHub names are case-insensitive; deploy validates the rest.
21
- const repositories = options.app?.repositories?.map((repository) => repository.trim().toLowerCase());
22
- if (repositories?.length === 0)
23
- throw new TypeError("GitHub app.repositories must list at least one repository; omit it to allow every repository");
17
+ const appSetup = githubAppSetup(handlers, options.app);
24
18
  const channel = httpChannel({
25
19
  provider: "github",
26
20
  ...(options.multitaskStrategy && {
27
21
  multitaskStrategy: options.multitaskStrategy,
28
22
  }),
29
- providerConfig: {
30
- // Deploy subscribes the GitHub App to the handled events.
31
- events: handledEventKeys(handlers),
32
- ...(options.app && { app: appConfig(options.app) }),
33
- },
23
+ // mda deploy sets up the GitHub App from this.
24
+ providerConfig: appSetup,
34
25
  verify: verifyGitHubRequest,
35
- parse: (context) => parseGitHubRequest(context, handlers, channelName(channel), repositories),
26
+ parse: (context) => parseGitHubRequest(context, handlers, channelName(channel), appSetup.repositories),
36
27
  input: (message, rawEvent) => handlerInput(handlers, rawEvent, {
37
28
  id: message.threadId,
38
29
  channel: { name: channelName(channel) },
@@ -42,6 +33,8 @@ export function githubChannel(options = {}) {
42
33
  });
43
34
  // A run that stops on interrupts says so itself (../delivery.ts): the
44
35
  // handler accepted the event that started it.
36
+ // Deploy provides the App's token at this name.
37
+ withAgentConnections(channel, [GITHUB_TOKEN_SLUG]);
45
38
  return withPausedNotice(channel, postInterruptedNotice);
46
39
  }
47
40
  /**
@@ -61,13 +54,6 @@ async function notifyWaiting(handlers, target, delivery, name) {
61
54
  return;
62
55
  await postInterruptedNotice(target, delivery, "waiting");
63
56
  }
64
- /** The App options deploy reads, without unset fields. */
65
- function appConfig(app) {
66
- return definedFields({
67
- permissions: app.permissions && { ...app.permissions },
68
- repositories: app.repositories && [...app.repositories],
69
- });
70
- }
71
57
  /**
72
58
  * The App's webhook secret or bot ID: the `GH_*` env override when set,
73
59
  * otherwise the agent secret Agent Auth stored when `mda deploy` created the
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/github/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/github/index.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,10 @@ export type HttpChannel = Channel & {
6
6
  readonly kind: string;
7
7
  };
8
8
  export declare function httpChannel(adapter: HttpChannelAdapter): HttpChannel;
9
+ /**
10
+ * Declare the `mda/` agent connections a built-in channel's setup provides,
11
+ * such as `mda/github-token`, so deploy knows them. Internal:
12
+ * `channels.http()` provides none.
13
+ */
14
+ export declare function withAgentConnections<T extends HttpChannel>(channel: T, slugs: readonly string[]): T;
9
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,0BAA0B,CAAC;AAIlC,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAM9D,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAyCpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAEL,KAAK,OAAO,EAEb,MAAM,0BAA0B,CAAC;AAIlC,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAa9D,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA+CpE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,EACxD,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,CAAC,CAGH"}
@@ -6,6 +6,8 @@ import { requireNonblank } from "../../values.js";
6
6
  import { CHANNEL_REPLIES } from "../types.js";
7
7
  export { channelThreadId } from "./threads.js";
8
8
  const STRATEGIES = new Set(Object.values(MULTITASK_STRATEGIES));
9
+ /** Where a channel keeps the connections its setup provides, out of its public shape. */
10
+ const AGENT_CONNECTIONS = Symbol("mda.agentConnections");
9
11
  export function httpChannel(adapter) {
10
12
  const provider = requireNonblank(adapter.provider, "channels.http provider");
11
13
  if (adapter.multitaskStrategy !== undefined &&
@@ -27,15 +29,28 @@ export function httpChannel(adapter) {
27
29
  })),
28
30
  }));
29
31
  }
30
- hide(channel, "requirements", (name) => ({
31
- name,
32
- provider,
33
- eventsPath: `/channels/${name}/events`,
34
- autoReply: post !== undefined && adapter.reply !== "none",
35
- requiredPermissions: [],
36
- requiredEnv: [],
37
- providerConfig: immutableCopy(adapter.providerConfig ?? {}),
38
- }));
32
+ hide(channel, "requirements", (name) => {
33
+ const agentConnections = channel[AGENT_CONNECTIONS];
34
+ return {
35
+ name,
36
+ provider,
37
+ eventsPath: `/channels/${name}/events`,
38
+ autoReply: post !== undefined && adapter.reply !== "none",
39
+ requiredPermissions: [],
40
+ requiredEnv: [],
41
+ ...(agentConnections && { agentConnections: [...agentConnections] }),
42
+ providerConfig: immutableCopy(adapter.providerConfig ?? {}),
43
+ };
44
+ });
45
+ return channel;
46
+ }
47
+ /**
48
+ * Declare the `mda/` agent connections a built-in channel's setup provides,
49
+ * such as `mda/github-token`, so deploy knows them. Internal:
50
+ * `channels.http()` provides none.
51
+ */
52
+ export function withAgentConnections(channel, slugs) {
53
+ hide(channel, AGENT_CONNECTIONS, [...slugs]);
39
54
  return channel;
40
55
  }
41
56
  function hide(target, key, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EACL,aAAa,GAGd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkB9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,UAAU,GAAyB,IAAI,GAAG,CAC9C,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CACpC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAC7E,IACE,OAAO,CAAC,iBAAiB,KAAK,SAAS;QACvC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAE1C,MAAM,IAAI,SAAS,CACjB,0EAA0E,CAC3E,CAAC;IACJ,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAiB,CAAC;IAElD,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAyB,EAAE,EAAE,CACpD,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAChC,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,GAA4B,EAAE,CAAC,CAAC;YACzD,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CACvC,IAAI,CACF,aAAa,CAAC;gBACZ,GAAG,OAAO;gBACV,MAAM;gBACN,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;aAClD,CAAC,CACH;SACJ,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,IAAY,EAAmB,EAAE,CAAC,CAAC;QAChE,IAAI;QACJ,QAAQ;QACR,UAAU,EAAE,aAAa,IAAI,SAAS;QACtC,SAAS,EAAE,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;QACzD,mBAAmB,EAAE,EAAE;QACvB,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;KAC5D,CAAC,CAAC,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,IAAI,CAAC,MAAc,EAAE,GAAoB,EAAE,KAAc;IAChE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/http/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { LinearAppOptions } from "./types.js";
2
+ /** What `mda deploy` needs to set up the Linear app. */
3
+ export type LinearAppSetup = {
4
+ /** The handled event keys, such as `Issue.create`. */
5
+ events: string[];
6
+ /** Whether the app answers agent sessions. */
7
+ sessions: boolean;
8
+ /** The webhook resource types the app subscribes to. */
9
+ webhookResourceTypes: string[];
10
+ /** The OAuth scopes the install asks for. */
11
+ scopes: string[];
12
+ /** The most the install may be granted. */
13
+ allowedScopes: string[];
14
+ /** How the app looks; deploy names it after the agent when unset. */
15
+ app?: {
16
+ name?: string;
17
+ description?: string;
18
+ icon?: string;
19
+ };
20
+ };
21
+ /**
22
+ * The app the channel's handlers and options need. The CLI reads it from the
23
+ * channel's manifest instead of working it out; the Python runtime mirrors
24
+ * these rules in `linear_app_setup.py`.
25
+ */
26
+ export declare function linearAppSetup(handlers: object, app: LinearAppOptions | undefined, options: {
27
+ sessions: boolean;
28
+ }): LinearAppSetup;
29
+ //# sourceMappingURL=app-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-setup.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/app-setup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AAqCnE,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG;IAC3B,sDAAsD;IACtD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qEAAqE;IACrE,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,gBAAgB,GAAG,SAAS,EACjC,OAAO,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC7B,cAAc,CAkChB"}
@@ -0,0 +1,102 @@
1
+ import { validateChannelIconPath } from "../../runtime/channel-icon.js";
2
+ import { definedFields, handledEventKeys } from "../http/provider.js";
3
+ /** The webhook resource type that delivers each event. */
4
+ const EVENT_RESOURCE_TYPES = {
5
+ "Issue.create": "Issue",
6
+ "Issue.update": "Issue",
7
+ "Comment.create": "Comment",
8
+ "AgentSessionEvent.created": "AgentSessionEvent",
9
+ "AgentSessionEvent.prompted": "AgentSessionEvent",
10
+ };
11
+ const SESSION_EVENTS = [
12
+ "AgentSessionEvent.created",
13
+ "AgentSessionEvent.prompted",
14
+ ];
15
+ /** A revoked install, so the runtime can say why events stopped. */
16
+ const ALWAYS_SUBSCRIBED = ["OAuthAuthorization"];
17
+ /** Reading the workspace, and writing comments and agent activities. */
18
+ const BASE_SCOPES = ["read", "write"];
19
+ /** Mentioning the app and delegating issues to it, which open agent sessions. */
20
+ const SESSION_SCOPES = ["app:mentionable", "app:assignable"];
21
+ /**
22
+ * Scopes Linear can grant along with `write` without being asked. Agent Auth
23
+ * refuses a grant beyond the allowed scopes, so they are allowed.
24
+ */
25
+ const IMPLIED_SCOPES = [
26
+ "customer:read",
27
+ "customer:write",
28
+ "initiative:read",
29
+ "initiative:write",
30
+ ];
31
+ const APP_OPTIONS = ["name", "description", "icon", "teams"];
32
+ const MAX_TEAMS = 100;
33
+ const TEAM_KEY = /^[A-Za-z0-9]{1,16}$/;
34
+ /**
35
+ * The app the channel's handlers and options need. The CLI reads it from the
36
+ * channel's manifest instead of working it out; the Python runtime mirrors
37
+ * these rules in `linear_app_setup.py`.
38
+ */
39
+ export function linearAppSetup(handlers, app, options) {
40
+ checkAppOptions(app);
41
+ const events = [
42
+ ...new Set([
43
+ ...handledEventKeys(handlers),
44
+ ...(options.sessions ? SESSION_EVENTS : []),
45
+ ]),
46
+ ]
47
+ .filter(isLinearEventKey)
48
+ .sort();
49
+ // A session event handler answers sessions even with `sessions: false`.
50
+ const sessions = events.some((key) => SESSION_EVENTS.includes(key));
51
+ const scopes = sessions ? [...BASE_SCOPES, ...SESSION_SCOPES] : BASE_SCOPES;
52
+ return {
53
+ events,
54
+ sessions,
55
+ webhookResourceTypes: [
56
+ ...new Set([
57
+ ...ALWAYS_SUBSCRIBED,
58
+ ...events.map((key) => EVENT_RESOURCE_TYPES[key]),
59
+ // A change to the app's team access changes which sessions reach it.
60
+ ...(sessions ? ["PermissionChange"] : []),
61
+ ]),
62
+ ].sort(),
63
+ scopes,
64
+ allowedScopes: [...scopes, ...IMPLIED_SCOPES],
65
+ ...(app && {
66
+ app: definedFields({
67
+ name: app.name?.trim(),
68
+ description: app.description?.trim(),
69
+ icon: app.icon && validateChannelIconPath(app.icon, "Linear app.icon"),
70
+ }),
71
+ }),
72
+ };
73
+ }
74
+ function isLinearEventKey(key) {
75
+ return Object.hasOwn(EVENT_RESOURCE_TYPES, key);
76
+ }
77
+ /** Check the app options against Linear's rules before deploy sends them. */
78
+ function checkAppOptions(app) {
79
+ if (!app)
80
+ return;
81
+ // A misspelled option would silently widen what starts runs.
82
+ const unknown = Object.keys(app).filter((key) => !APP_OPTIONS.includes(key));
83
+ if (unknown.length)
84
+ throw new TypeError(`unknown Linear app option ${unknown.join(", ")}; use ${APP_OPTIONS.join(", ")}`);
85
+ const name = app.name?.trim();
86
+ if (name !== undefined &&
87
+ (name.length < 2 || name.length > 80 || /linear|https?:\/\//i.test(name)))
88
+ throw new TypeError('Linear app.name must be 2-80 characters, without "Linear" or a URL');
89
+ const description = app.description?.trim();
90
+ if (description !== undefined && (!description || description.length > 1000))
91
+ throw new TypeError("Linear app.description must be 1-1000 characters");
92
+ if (app.teams === undefined)
93
+ return;
94
+ if (app.teams.length === 0)
95
+ throw new TypeError("Linear app.teams must list team keys; omit it to allow every team");
96
+ if (app.teams.length > MAX_TEAMS)
97
+ throw new TypeError(`Linear app.teams must list at most ${MAX_TEAMS} teams`);
98
+ for (const team of app.teams)
99
+ if (!TEAM_KEY.test(team.trim()))
100
+ throw new TypeError(`Linear app.teams has an invalid team key '${team.trim()}'; use keys such as ENG`);
101
+ }
102
+ //# sourceMappingURL=app-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-setup.js","sourceRoot":"","sources":["../../../src/channels/linear/app-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGtE,0DAA0D;AAC1D,MAAM,oBAAoB,GAAG;IAC3B,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,OAAO;IACvB,gBAAgB,EAAE,SAAS;IAC3B,2BAA2B,EAAE,mBAAmB;IAChD,4BAA4B,EAAE,mBAAmB;CACA,CAAC;AAEpD,MAAM,cAAc,GAAqB;IACvC,2BAA2B;IAC3B,4BAA4B;CAC7B,CAAC;AAEF,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACjD,wEAAwE;AACxE,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtC,iFAAiF;AACjF,MAAM,cAAc,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AAC7D;;;GAGG;AACH,MAAM,cAAc,GAAG;IACrB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;CACnB,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7D,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAkBvC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB,EAChB,GAAiC,EACjC,OAA8B;IAE9B,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG;QACb,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAC7B,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC;KACH;SACE,MAAM,CAAC,gBAAgB,CAAC;SACxB,IAAI,EAAE,CAAC;IACV,wEAAwE;IACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC5E,OAAO;QACL,MAAM;QACN,QAAQ;QACR,oBAAoB,EAAE;YACpB,GAAG,IAAI,GAAG,CAAC;gBACT,GAAG,iBAAiB;gBACpB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACjD,qEAAqE;gBACrE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC;SACH,CAAC,IAAI,EAAE;QACR,MAAM;QACN,aAAa,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC;QAC7C,GAAG,CAAC,GAAG,IAAI;YACT,GAAG,EAAE,aAAa,CAAC;gBACjB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE;gBACtB,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE;gBACpC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC;aACvE,CAAC;SACH,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,6EAA6E;AAC7E,SAAS,eAAe,CAAC,GAAiC;IACxD,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,6DAA6D;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,MAAM;QAChB,MAAM,IAAI,SAAS,CACjB,6BAA6B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;IACJ,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9B,IACE,IAAI,KAAK,SAAS;QAClB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzE,MAAM,IAAI,SAAS,CACjB,oEAAoE,CACrE,CAAC;IACJ,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;QAC1E,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC1E,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO;IACpC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACxB,MAAM,IAAI,SAAS,CACjB,mEAAmE,CACpE,CAAC;IACJ,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;QAC9B,MAAM,IAAI,SAAS,CACjB,sCAAsC,SAAS,QAAQ,CACxD,CAAC;IACJ,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,SAAS,CACjB,6CAA6C,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAClF,CAAC;AACR,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAOjB,MAAM,kBAAkB,CAAC;AA2C1B,OAAO,KAAK,EAEV,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAIpB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AA+BpD,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,WAAW,CA2E7E;AA+CD,mDAAmD;AACnD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/linear/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,WAAW,EAOjB,MAAM,kBAAkB,CAAC;AA0C1B,OAAO,KAAK,EACV,oBAAoB,EAIrB,MAAM,YAAY,CAAC;AAIpB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAwBpD,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,WAAW,CAsD7E;AAgBD,mDAAmD;AACnD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
@@ -1,13 +1,14 @@
1
1
  import { z } from "zod";
2
- import { channelThreadId, httpChannel, } from "../http/index.js";
3
- import { channelName, checkEventKeys, definedFields, eventSnapshot, handledEventKeys, readDeploymentSecret, resetDeploymentSecrets, resolveEndpoints, runEventHandler, eventThread, finishEvents, verifyHmacSha256, } from "../http/provider.js";
2
+ import { channelThreadId, httpChannel, withAgentConnections, } from "../http/index.js";
3
+ import { channelName, checkEventKeys, eventSnapshot, readDeploymentSecret, resetDeploymentSecrets, resolveEndpoints, runEventHandler, eventThread, finishEvents, verifyHmacSha256, } from "../http/provider.js";
4
4
  import { isEndpointCallback } from "../http/endpoint.js";
5
5
  import { interruptedNotice, pendingDecision, studioUrl, } from "../http/studio.js";
6
6
  import { withPausedNotice } from "../messaging-registry.js";
7
7
  import { requireTextContent } from "../runtime.js";
8
8
  import { logger } from "../../runtime/log.js";
9
9
  import { validateChannelIconPath } from "../../runtime/channel-icon.js";
10
- import { linearAppConnectionSlug } from "./connections.js";
10
+ import { linearAppSetup } from "./app-setup.js";
11
+ import { LINEAR_TOKEN_SLUG, linearAppConnectionSlug } from "./connections.js";
11
12
  import { addLinearSessionUrl, commentInAgentSession, createLinearActivity, createLinearComment, linearAppUser, } from "./graphql.js";
12
13
  import { LINEAR_ENDPOINT_EVENT_FIELDS, SUPPORTED_EVENT_KEYS, linearEventSchema, linearReceiptSchema, } from "./schema.js";
13
14
  import { isRecord, nonblankString } from "../../values.js";
@@ -17,12 +18,6 @@ const SESSION_KEYS = new Set([
17
18
  "AgentSessionEvent.created",
18
19
  "AgentSessionEvent.prompted",
19
20
  ]);
20
- const APP_OPTION_KEYS = new Set([
21
- "name",
22
- "description",
23
- "icon",
24
- "teams",
25
- ]);
26
21
  /** Whether a delivery's `type.action` is an event key the channel supports. */
27
22
  function isLinearEventKey(key) {
28
23
  return EVENT_KEYS.has(key);
@@ -33,19 +28,13 @@ const timestampSchema = z.looseObject({ webhookTimestamp: z.number() });
33
28
  export function linearChannel(options = {}) {
34
29
  const handlers = resolveEndpoints("Linear", options.onEvent, LINEAR_ENDPOINT_EVENT_FIELDS);
35
30
  checkEventKeys("Linear", handlers, EVENT_KEYS);
36
- // A misspelled option would silently widen what starts runs.
37
- const unknown = Object.keys(options.app ?? {}).filter((key) => !APP_OPTION_KEYS.has(key));
38
- if (unknown.length)
39
- throw new TypeError(`unknown Linear app option ${unknown.join(", ")}; use ${[...APP_OPTION_KEYS].join(", ")}`);
40
- if (options.app)
41
- validateAppDisplay(options.app);
31
+ const sessions = options.sessions ?? true;
32
+ const appSetup = linearAppSetup(handlers, options.app, { sessions });
42
33
  const teams = options.app?.teams?.map((team) => team.trim().toLowerCase());
43
- if (teams?.length === 0 || teams?.some((team) => !team))
44
- throw new TypeError("Linear app.teams must list team keys; omit it to allow every team");
45
34
  const filters = {
46
35
  teams,
47
36
  ignoreBots: options.ignoreBots ?? true,
48
- sessions: options.sessions ?? true,
37
+ sessions,
49
38
  };
50
39
  const channel = httpChannel({
51
40
  provider: "linear",
@@ -53,19 +42,8 @@ export function linearChannel(options = {}) {
53
42
  multitaskStrategy: options.multitaskStrategy,
54
43
  }),
55
44
  ...(options.reply && { reply: options.reply }),
56
- providerConfig: {
57
- // Deploy subscribes the app's webhook to the handled events.
58
- events: handledEvents(handlers, filters.sessions),
59
- ...(options.app && {
60
- app: definedFields({
61
- name: options.app.name?.trim(),
62
- description: options.app.description?.trim(),
63
- icon: options.app.icon &&
64
- validateChannelIconPath(options.app.icon, "Linear app.icon"),
65
- teams: options.app.teams && [...options.app.teams],
66
- }),
67
- }),
68
- },
45
+ // mda deploy sets up the Linear app from this.
46
+ providerConfig: appSetup,
69
47
  verify: verifyLinearRequest,
70
48
  parse: (context) => parseLinearRequest(context, handlers, channelName(channel), filters),
71
49
  input: (message, rawEvent) => handlerInput(handlers, rawEvent, {
@@ -79,6 +57,8 @@ export function linearChannel(options = {}) {
79
57
  });
80
58
  // A run that stops on interrupts says so itself (../delivery.ts).
81
59
  withPausedNotice(channel, notifyInterrupted);
60
+ // Deploy provides the app's token at this name.
61
+ withAgentConnections(channel, [LINEAR_TOKEN_SLUG]);
82
62
  // Served at /channels/{name}/icon; deploy points the app's icon at it.
83
63
  const icon = options.app?.icon;
84
64
  return icon === undefined
@@ -87,30 +67,6 @@ export function linearChannel(options = {}) {
87
67
  icon: validateChannelIconPath(icon, "Linear app.icon"),
88
68
  });
89
69
  }
90
- /** The events deploy subscribes the app's webhook to. */
91
- function handledEvents(handlers, sessions) {
92
- return [
93
- ...new Set([
94
- ...handledEventKeys(handlers),
95
- ...(sessions ? SESSION_KEYS : []),
96
- ]),
97
- ].sort();
98
- }
99
- /** Check how the app looks against Linear's rules, before deploy sends it. */
100
- function validateAppDisplay({ name, description, icon }) {
101
- if (name !== undefined) {
102
- const trimmed = name.trim();
103
- if (trimmed.length < 2 ||
104
- trimmed.length > 80 ||
105
- /linear|https?:\/\//i.test(trimmed))
106
- throw new TypeError('Linear app.name must be 2-80 characters, without "Linear" or a URL');
107
- }
108
- if (description !== undefined &&
109
- (!description.trim() || description.trim().length > 1000))
110
- throw new TypeError("Linear app.description must be 1-1000 characters");
111
- if (icon !== undefined)
112
- validateChannelIconPath(icon, "Linear app.icon");
113
- }
114
70
  /**
115
71
  * The app's webhook signing secret: `LINEAR_WEBHOOK_SECRET` when set,
116
72
  * otherwise the agent secret stored at