managed-deepagents 0.9.6-dev.15 → 0.9.6-dev.16
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 +57 -953
- package/dist/agent-auth.d.ts +1 -1
- package/dist/agent-auth.d.ts.map +1 -1
- package/dist/agent-auth.js +12 -36
- package/dist/agent-auth.js.map +1 -1
- package/dist/channels/assistant-text.d.ts +0 -24
- package/dist/channels/assistant-text.d.ts.map +1 -1
- package/dist/channels/assistant-text.js +1 -65
- package/dist/channels/assistant-text.js.map +1 -1
- package/dist/channels/binding.d.ts +1 -20
- package/dist/channels/binding.d.ts.map +1 -1
- package/dist/channels/binding.js +10 -39
- package/dist/channels/binding.js.map +1 -1
- package/dist/channels/http/http.d.ts.map +1 -1
- package/dist/channels/http/http.js +65 -386
- package/dist/channels/http/http.js.map +1 -1
- package/dist/channels/http/index.d.ts +1 -2
- package/dist/channels/http/index.d.ts.map +1 -1
- package/dist/channels/http/index.js +10 -14
- package/dist/channels/http/index.js.map +1 -1
- package/dist/channels/http/ingress.d.ts +5 -65
- package/dist/channels/http/ingress.d.ts.map +1 -1
- package/dist/channels/http/ingress.js +33 -149
- package/dist/channels/http/ingress.js.map +1 -1
- package/dist/channels/http/types.d.ts +2 -143
- package/dist/channels/http/types.d.ts.map +1 -1
- package/dist/channels/message-schema.d.ts +0 -2
- package/dist/channels/message-schema.d.ts.map +1 -1
- package/dist/channels/message-schema.js +0 -4
- package/dist/channels/message-schema.js.map +1 -1
- package/dist/channels/messaging-registry.d.ts +0 -16
- package/dist/channels/messaging-registry.d.ts.map +1 -1
- package/dist/channels/messaging-registry.js +0 -29
- package/dist/channels/messaging-registry.js.map +1 -1
- package/dist/channels/runtime.d.ts +1 -1
- package/dist/channels/runtime.d.ts.map +1 -1
- package/dist/channels/runtime.js +1 -1
- package/dist/channels/runtime.js.map +1 -1
- package/dist/channels/schedule-delivery.d.ts +1 -1
- package/dist/channels/schedule-delivery.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.js +23 -12
- package/dist/channels/schedule-delivery.js.map +1 -1
- package/dist/channels/slack/api.d.ts +0 -2
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +0 -6
- package/dist/channels/slack/api.js.map +1 -1
- package/dist/channels/slack/files.d.ts.map +1 -1
- package/dist/channels/slack/files.js +3 -2
- package/dist/channels/slack/files.js.map +1 -1
- package/dist/channels/slack/index.d.ts +2 -76
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +6 -177
- package/dist/channels/slack/index.js.map +1 -1
- package/dist/channels/slack/message-content.d.ts.map +1 -1
- package/dist/channels/slack/message-content.js +28 -23
- package/dist/channels/slack/message-content.js.map +1 -1
- package/dist/channels/source-providers.js +1 -1
- package/dist/channels/source-providers.js.map +1 -1
- package/dist/channels/trigger/client.d.ts.map +1 -1
- package/dist/channels/trigger/client.js +12 -6
- package/dist/channels/trigger/client.js.map +1 -1
- package/dist/channels/trigger/http.d.ts +3 -114
- package/dist/channels/trigger/http.d.ts.map +1 -1
- package/dist/channels/trigger/http.js +82 -314
- package/dist/channels/trigger/http.js.map +1 -1
- package/dist/channels/trigger/identity-context.d.ts +1 -1
- package/dist/channels/trigger/identity-context.d.ts.map +1 -1
- package/dist/channels/trigger/identity-context.js +3 -5
- package/dist/channels/trigger/identity-context.js.map +1 -1
- package/dist/channels/trigger/ingress.d.ts +1 -38
- package/dist/channels/trigger/ingress.d.ts.map +1 -1
- package/dist/channels/trigger/ingress.js +24 -49
- package/dist/channels/trigger/ingress.js.map +1 -1
- package/dist/channels/trigger/types.d.ts +3 -82
- package/dist/channels/trigger/types.d.ts.map +1 -1
- package/dist/channels/trigger/types.js +0 -36
- package/dist/channels/trigger/types.js.map +1 -1
- package/dist/channels/types.d.ts +3 -19
- package/dist/channels/types.d.ts.map +1 -1
- package/dist/channels/types.js +0 -2
- package/dist/channels/types.js.map +1 -1
- package/dist/concurrency/batch-processor.d.ts +51 -0
- package/dist/concurrency/batch-processor.d.ts.map +1 -0
- package/dist/concurrency/batch-processor.js +99 -0
- package/dist/concurrency/batch-processor.js.map +1 -0
- package/dist/connections.d.ts +1 -42
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +14 -127
- package/dist/connections.js.map +1 -1
- package/dist/credential-gate.d.ts +0 -2
- package/dist/credential-gate.d.ts.map +1 -1
- package/dist/credential-gate.js +3 -37
- package/dist/credential-gate.js.map +1 -1
- package/dist/define-deep-agent.d.ts.map +1 -1
- package/dist/define-deep-agent.js +0 -6
- package/dist/define-deep-agent.js.map +1 -1
- package/dist/identity/loopback.d.ts +7 -2
- package/dist/identity/loopback.d.ts.map +1 -1
- package/dist/identity/loopback.js +15 -4
- package/dist/identity/loopback.js.map +1 -1
- package/dist/identity/slack/links.js +3 -2
- package/dist/identity/slack/links.js.map +1 -1
- package/dist/index.d.ts +4 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/ingress/index.d.ts +8 -0
- package/dist/ingress/index.d.ts.map +1 -1
- package/dist/ingress/index.js +32 -2
- package/dist/ingress/index.js.map +1 -1
- package/dist/ingress/loopback.js +4 -3
- package/dist/ingress/loopback.js.map +1 -1
- package/dist/ingress/runs.d.ts +1 -74
- package/dist/ingress/runs.d.ts.map +1 -1
- package/dist/ingress/runs.js +16 -176
- package/dist/ingress/runs.js.map +1 -1
- package/dist/managed-composition.d.ts.map +1 -1
- package/dist/managed-composition.js +13 -8
- package/dist/managed-composition.js.map +1 -1
- package/dist/memory/instructions-middleware.d.ts.map +1 -1
- package/dist/memory/instructions-middleware.js +6 -5
- package/dist/memory/instructions-middleware.js.map +1 -1
- package/dist/namespaces.d.ts +21 -21
- package/dist/namespaces.d.ts.map +1 -1
- package/dist/namespaces.js +29 -4
- package/dist/namespaces.js.map +1 -1
- package/dist/resilience/retry.d.ts +21 -0
- package/dist/resilience/retry.d.ts.map +1 -0
- package/dist/resilience/retry.js +40 -0
- package/dist/resilience/retry.js.map +1 -0
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +21 -151
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/channel.d.ts +0 -6
- package/dist/runtime/channel.d.ts.map +1 -1
- package/dist/runtime/channel.js.map +1 -1
- package/dist/runtime/graph-build-timing.d.ts +30 -0
- package/dist/runtime/graph-build-timing.d.ts.map +1 -0
- package/dist/runtime/graph-build-timing.js +50 -0
- package/dist/runtime/graph-build-timing.js.map +1 -0
- package/dist/runtime/http.d.ts +15 -0
- package/dist/runtime/http.d.ts.map +1 -1
- package/dist/runtime/http.js +37 -0
- package/dist/runtime/http.js.map +1 -1
- package/dist/runtime/identity-http.d.ts +0 -2
- package/dist/runtime/identity-http.d.ts.map +1 -1
- package/dist/runtime/identity-http.js +16 -40
- package/dist/runtime/identity-http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +0 -10
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +0 -22
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +47 -46
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/langsmith-env.d.ts +19 -0
- package/dist/runtime/langsmith-env.d.ts.map +1 -0
- package/dist/runtime/langsmith-env.js +38 -0
- package/dist/runtime/langsmith-env.js.map +1 -0
- package/dist/runtime/log.d.ts +8 -14
- package/dist/runtime/log.d.ts.map +1 -1
- package/dist/runtime/log.js +16 -7
- package/dist/runtime/log.js.map +1 -1
- package/dist/runtime/managed-middleware.d.ts.map +1 -1
- package/dist/runtime/managed-middleware.js +1 -14
- package/dist/runtime/managed-middleware.js.map +1 -1
- package/dist/runtime/managed-tools.d.ts +10 -10
- package/dist/runtime/managed-tools.d.ts.map +1 -1
- package/dist/runtime/managed-tools.js +24 -24
- package/dist/runtime/managed-tools.js.map +1 -1
- package/dist/runtime/memory/mounts.d.ts +82 -11
- package/dist/runtime/memory/mounts.d.ts.map +1 -1
- package/dist/runtime/memory/mounts.js +173 -34
- package/dist/runtime/memory/mounts.js.map +1 -1
- package/dist/runtime/memory/policy.d.ts.map +1 -1
- package/dist/runtime/memory/policy.js +3 -1
- package/dist/runtime/memory/policy.js.map +1 -1
- package/dist/runtime/run-input.d.ts +0 -10
- package/dist/runtime/run-input.d.ts.map +1 -1
- package/dist/runtime/run-input.js +19 -47
- package/dist/runtime/run-input.js.map +1 -1
- package/dist/runtime/sandbox-manager.d.ts +1 -1
- package/dist/runtime/sandbox-manager.d.ts.map +1 -1
- package/dist/runtime/sandbox-manager.js +10 -15
- package/dist/runtime/sandbox-manager.js.map +1 -1
- package/dist/runtime/schedule-auth.d.ts +0 -17
- package/dist/runtime/schedule-auth.d.ts.map +1 -1
- package/dist/runtime/schedule-auth.js +3 -40
- package/dist/runtime/schedule-auth.js.map +1 -1
- package/dist/runtime/selected-skills-backend.d.ts +3 -3
- package/dist/runtime/selected-skills-backend.d.ts.map +1 -1
- package/dist/runtime/selected-skills-backend.js +5 -5
- package/dist/runtime/selected-skills-backend.js.map +1 -1
- package/dist/runtime/types.d.ts +1 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime-schedules.d.ts +0 -13
- package/dist/runtime-schedules.d.ts.map +1 -1
- package/dist/runtime-schedules.js +22 -86
- package/dist/runtime-schedules.js.map +1 -1
- package/dist/sandbox.d.ts +6 -0
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +7 -3
- package/dist/sandbox.js.map +1 -1
- package/dist/schedule-channel.d.ts +2 -5
- package/dist/schedule-channel.d.ts.map +1 -1
- package/dist/schedule-channel.js +12 -13
- package/dist/schedule-channel.js.map +1 -1
- package/dist/telemetry/lifecycle.d.ts +26 -0
- package/dist/telemetry/lifecycle.d.ts.map +1 -0
- package/dist/telemetry/lifecycle.js +49 -0
- package/dist/telemetry/lifecycle.js.map +1 -0
- package/dist/telemetry/metadata.d.ts.map +1 -1
- package/dist/telemetry/metadata.js +4 -4
- package/dist/telemetry/metadata.js.map +1 -1
- package/dist/telemetry/otel/context.d.ts +57 -0
- package/dist/telemetry/otel/context.d.ts.map +1 -0
- package/dist/telemetry/otel/context.js +122 -0
- package/dist/telemetry/otel/context.js.map +1 -0
- package/dist/telemetry/otel/exporter.d.ts +53 -0
- package/dist/telemetry/otel/exporter.d.ts.map +1 -0
- package/dist/telemetry/otel/exporter.js +190 -0
- package/dist/telemetry/otel/exporter.js.map +1 -0
- package/dist/telemetry/otel/index.d.ts +6 -0
- package/dist/telemetry/otel/index.d.ts.map +1 -0
- package/dist/telemetry/otel/index.js +3 -0
- package/dist/telemetry/otel/index.js.map +1 -0
- package/dist/telemetry/otel/otlp.d.ts +44 -0
- package/dist/telemetry/otel/otlp.d.ts.map +1 -0
- package/dist/telemetry/otel/otlp.js +7 -0
- package/dist/telemetry/otel/otlp.js.map +1 -0
- package/dist/telemetry/otel/truncate.d.ts +10 -0
- package/dist/telemetry/otel/truncate.d.ts.map +1 -0
- package/dist/telemetry/otel/truncate.js +39 -0
- package/dist/telemetry/otel/truncate.js.map +1 -0
- package/dist/telemetry/run-listener.d.ts +1 -1
- package/dist/telemetry/run-listener.d.ts.map +1 -1
- package/dist/telemetry/run-listener.js +32 -2
- package/dist/telemetry/run-listener.js.map +1 -1
- package/dist/telemetry/transport/posthog.d.ts +13 -1
- package/dist/telemetry/transport/posthog.d.ts.map +1 -1
- package/dist/telemetry/transport/posthog.js +68 -30
- package/dist/telemetry/transport/posthog.js.map +1 -1
- package/package.json +11 -11
- package/dist/channels/actor.d.ts +0 -43
- package/dist/channels/actor.d.ts.map +0 -1
- package/dist/channels/actor.js +0 -2
- package/dist/channels/actor.js.map +0 -1
- package/dist/channels/delivery.d.ts +0 -21
- package/dist/channels/delivery.d.ts.map +0 -1
- package/dist/channels/delivery.js +0 -196
- package/dist/channels/delivery.js.map +0 -1
- package/dist/channels/github/connections.d.ts +0 -11
- package/dist/channels/github/connections.d.ts.map +0 -1
- package/dist/channels/github/connections.js +0 -14
- package/dist/channels/github/connections.js.map +0 -1
- package/dist/channels/github/index.d.ts +0 -8
- package/dist/channels/github/index.d.ts.map +0 -1
- package/dist/channels/github/index.js +0 -274
- package/dist/channels/github/index.js.map +0 -1
- package/dist/channels/github/mentions.d.ts +0 -12
- package/dist/channels/github/mentions.d.ts.map +0 -1
- package/dist/channels/github/mentions.js +0 -185
- package/dist/channels/github/mentions.js.map +0 -1
- package/dist/channels/github/schema.d.ts +0 -4165
- package/dist/channels/github/schema.d.ts.map +0 -1
- package/dist/channels/github/schema.js +0 -221
- package/dist/channels/github/schema.js.map +0 -1
- package/dist/channels/github/types.d.ts +0 -163
- package/dist/channels/github/types.d.ts.map +0 -1
- package/dist/channels/github/types.js +0 -2
- package/dist/channels/github/types.js.map +0 -1
- package/dist/channels/http/endpoint.d.ts +0 -95
- package/dist/channels/http/endpoint.d.ts.map +0 -1
- package/dist/channels/http/endpoint.js +0 -276
- package/dist/channels/http/endpoint.js.map +0 -1
- package/dist/channels/http/provider.d.ts +0 -119
- package/dist/channels/http/provider.d.ts.map +0 -1
- package/dist/channels/http/provider.js +0 -227
- package/dist/channels/http/provider.js.map +0 -1
- package/dist/channels/http/studio.d.ts +0 -24
- package/dist/channels/http/studio.d.ts.map +0 -1
- package/dist/channels/http/studio.js +0 -95
- package/dist/channels/http/studio.js.map +0 -1
- package/dist/channels/http/threads.d.ts +0 -7
- package/dist/channels/http/threads.d.ts.map +0 -1
- package/dist/channels/http/threads.js +0 -10
- package/dist/channels/http/threads.js.map +0 -1
- package/dist/channels/linear/connections.d.ts +0 -11
- package/dist/channels/linear/connections.d.ts.map +0 -1
- package/dist/channels/linear/connections.js +0 -14
- package/dist/channels/linear/connections.js.map +0 -1
- package/dist/channels/linear/graphql.d.ts +0 -57
- package/dist/channels/linear/graphql.d.ts.map +0 -1
- package/dist/channels/linear/graphql.js +0 -167
- package/dist/channels/linear/graphql.js.map +0 -1
- package/dist/channels/linear/index.d.ts +0 -9
- package/dist/channels/linear/index.d.ts.map +0 -1
- package/dist/channels/linear/index.js +0 -489
- package/dist/channels/linear/index.js.map +0 -1
- package/dist/channels/linear/schema.d.ts +0 -1050
- package/dist/channels/linear/schema.d.ts.map +0 -1
- package/dist/channels/linear/schema.js +0 -255
- package/dist/channels/linear/schema.js.map +0 -1
- package/dist/channels/linear/types.d.ts +0 -162
- package/dist/channels/linear/types.d.ts.map +0 -1
- package/dist/channels/linear/types.js +0 -2
- package/dist/channels/linear/types.js.map +0 -1
- package/dist/channels/reserved-connections.d.ts +0 -12
- package/dist/channels/reserved-connections.d.ts.map +0 -1
- package/dist/channels/reserved-connections.js +0 -55
- package/dist/channels/reserved-connections.js.map +0 -1
- package/dist/channels/run-input.d.ts +0 -71
- package/dist/channels/run-input.d.ts.map +0 -1
- package/dist/channels/run-input.js +0 -155
- package/dist/channels/run-input.js.map +0 -1
- package/dist/channels/slack/connections.d.ts +0 -6
- package/dist/channels/slack/connections.d.ts.map +0 -1
- package/dist/channels/slack/connections.js +0 -6
- package/dist/channels/slack/connections.js.map +0 -1
- package/dist/channels/slack/events.d.ts +0 -272
- package/dist/channels/slack/events.d.ts.map +0 -1
- package/dist/channels/slack/events.js +0 -235
- package/dist/channels/slack/events.js.map +0 -1
- package/dist/channels/slack/status.d.ts +0 -76
- package/dist/channels/slack/status.d.ts.map +0 -1
- package/dist/channels/slack/status.js +0 -427
- package/dist/channels/slack/status.js.map +0 -1
- package/dist/runtime/channel-icon.d.ts +0 -22
- package/dist/runtime/channel-icon.d.ts.map +0 -1
- package/dist/runtime/channel-icon.js +0 -70
- package/dist/runtime/channel-icon.js.map +0 -1
- package/dist/runtime/managed-thread.d.ts +0 -60
- package/dist/runtime/managed-thread.d.ts.map +0 -1
- package/dist/runtime/managed-thread.js +0 -76
- package/dist/runtime/managed-thread.js.map +0 -1
- package/dist/runtime/thread-record.d.ts +0 -81
- package/dist/runtime/thread-record.d.ts.map +0 -1
- package/dist/runtime/thread-record.js +0 -205
- package/dist/runtime/thread-record.js.map +0 -1
- package/dist/values.d.ts +0 -15
- package/dist/values.d.ts.map +0 -1
- package/dist/values.js +0 -31
- package/dist/values.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../../../src/channels/github/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,8 +0,0 @@
|
|
|
1
|
-
import { type HttpChannel } from "../http/index.js";
|
|
2
|
-
import type { GitHubChannelOptions } from "./types.js";
|
|
3
|
-
export type { GitHubAppOptions, GitHubChannelOptions, GitHubChannelThread, GitHubEvent, GitHubEventCallback, GitHubEventResult, PayloadFor, SupportedEventKey, } from "./types.js";
|
|
4
|
-
/** Adapt verified GitHub events into HTTP channel messages or skips. */
|
|
5
|
-
export declare function githubChannel(options?: GitHubChannelOptions): HttpChannel;
|
|
6
|
-
/** Forget values read from Agent Auth; for tests. */
|
|
7
|
-
export declare function resetGitHubAppValues(): void;
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,274 +0,0 @@
|
|
|
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";
|
|
3
|
-
import { isEndpointCallback } from "../http/endpoint.js";
|
|
4
|
-
import { interruptedNotice, pendingDecision } from "../http/studio.js";
|
|
5
|
-
import { withPausedNotice } from "../messaging-registry.js";
|
|
6
|
-
import { logger } from "../../runtime/log.js";
|
|
7
|
-
import { connections } from "../../connections.js";
|
|
8
|
-
import { ConnectionsNotConfiguredError } from "../../agent-auth.js";
|
|
9
|
-
import { GITHUB_TOKEN_SLUG, githubAppConnectionSlug } from "./connections.js";
|
|
10
|
-
import { ENDPOINT_EVENT_FIELDS, SUPPORTED_EVENT_KEYS, githubReceiptSchema, githubIdentifierSchema, githubEventSchema, } from "./schema.js";
|
|
11
|
-
const EVENT_KEYS = new Set(SUPPORTED_EVENT_KEYS);
|
|
12
|
-
/** Adapt verified GitHub events into HTTP channel messages or skips. */
|
|
13
|
-
export function githubChannel(options = {}) {
|
|
14
|
-
const handlers = resolveEndpoints("GitHub", options.onEvent, ENDPOINT_EVENT_FIELDS);
|
|
15
|
-
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");
|
|
24
|
-
const channel = httpChannel({
|
|
25
|
-
provider: "github",
|
|
26
|
-
...(options.multitaskStrategy && {
|
|
27
|
-
multitaskStrategy: options.multitaskStrategy,
|
|
28
|
-
}),
|
|
29
|
-
providerConfig: {
|
|
30
|
-
// Deploy subscribes the GitHub App to the handled events.
|
|
31
|
-
events: handledEventKeys(handlers),
|
|
32
|
-
...(options.app && { app: appConfig(options.app) }),
|
|
33
|
-
},
|
|
34
|
-
verify: verifyGitHubRequest,
|
|
35
|
-
parse: (context) => parseGitHubRequest(context, handlers, channelName(channel), repositories),
|
|
36
|
-
input: (message, rawEvent) => handlerInput(handlers, rawEvent, {
|
|
37
|
-
id: message.threadId,
|
|
38
|
-
channel: { name: channelName(channel) },
|
|
39
|
-
}),
|
|
40
|
-
onReceived: receiveEvents(options.onReceived, githubEvent, () => channelName(channel)),
|
|
41
|
-
onFinish: finishEvents((target, delivery) => notifyWaiting(handlers, target, delivery, channelName(channel)), options.onFinish, githubEvent, (delivery) => eventThread(delivery, channelName(channel))),
|
|
42
|
-
});
|
|
43
|
-
// A run that stops on interrupts says so itself (../delivery.ts): the
|
|
44
|
-
// handler accepted the event that started it.
|
|
45
|
-
return withPausedNotice(channel, postInterruptedNotice);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Tell the issue or pull request that a new event found its thread waiting
|
|
49
|
-
* on a decision. Only for an event its handler would act on, so the handler's
|
|
50
|
-
* filters, such as trusted senders or mentions, decide who gets a notice. The
|
|
51
|
-
* handler knows it is only asked, so it can skip side effects.
|
|
52
|
-
*/
|
|
53
|
-
async function notifyWaiting(handlers, target, delivery, name) {
|
|
54
|
-
if (pendingDecision(delivery) !== "waiting")
|
|
55
|
-
return;
|
|
56
|
-
if ((await handlerInput(handlers, delivery.rawEvent, {
|
|
57
|
-
id: delivery.threadId,
|
|
58
|
-
channel: { name },
|
|
59
|
-
interrupted: true,
|
|
60
|
-
})) === undefined)
|
|
61
|
-
return;
|
|
62
|
-
await postInterruptedNotice(target, delivery, "waiting");
|
|
63
|
-
}
|
|
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
|
-
/**
|
|
72
|
-
* The App's webhook secret or bot ID: the `GH_*` env override when set,
|
|
73
|
-
* otherwise the agent secret Agent Auth stored when `mda deploy` created the
|
|
74
|
-
* App, at `mda/github-app/{deployment}/{suffix}`. Only a missing connection
|
|
75
|
-
* reads as `undefined`; credential store failures propagate.
|
|
76
|
-
*/
|
|
77
|
-
function gitHubAppValue(envKey, suffix) {
|
|
78
|
-
return readDeploymentSecret(envKey, (deploymentId) => githubAppConnectionSlug(deploymentId, suffix), `GitHub App ${suffix}`);
|
|
79
|
-
}
|
|
80
|
-
/** Forget values read from Agent Auth; for tests. */
|
|
81
|
-
export function resetGitHubAppValues() {
|
|
82
|
-
resetDeploymentSecrets();
|
|
83
|
-
}
|
|
84
|
-
/** GitHub's delivery ID for a log line, or `unknown` when it is not one. */
|
|
85
|
-
function deliveryLabel(deliveryId) {
|
|
86
|
-
return deliveryId && /^[0-9a-fA-F-]{1,64}$/.test(deliveryId)
|
|
87
|
-
? deliveryId
|
|
88
|
-
: "unknown";
|
|
89
|
-
}
|
|
90
|
-
async function verifyGitHubRequest({ request, rawBody, }) {
|
|
91
|
-
// GitHub pings a new App before Agent Auth has its webhook secret, and a
|
|
92
|
-
// ping starts nothing, so it needs no secret. Reading it here would also
|
|
93
|
-
// remember the secret as missing and reject the first real events.
|
|
94
|
-
if (request.headers.get("x-github-event") === "ping")
|
|
95
|
-
return true;
|
|
96
|
-
// Reject unsigned deliveries before reading the secret from Agent Auth.
|
|
97
|
-
const signature = request.headers.get("x-hub-signature-256") ?? "";
|
|
98
|
-
if (!/^sha256=[a-fA-F0-9]{64}$/.test(signature))
|
|
99
|
-
return false;
|
|
100
|
-
let secret;
|
|
101
|
-
try {
|
|
102
|
-
secret = await gitHubAppValue("GH_WEBHOOK_SECRET", "webhook-secret");
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
if (error instanceof ConnectionsNotConfiguredError) {
|
|
106
|
-
// The message names only the missing setting, so it is safe to log.
|
|
107
|
-
logger.error(`GitHub delivery ${deliveryLabel(request.headers.get("x-github-delivery"))} ` +
|
|
108
|
-
`cannot be verified: ${error.message}`);
|
|
109
|
-
}
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
if (!secret)
|
|
113
|
-
return false;
|
|
114
|
-
return verifyHmacSha256(secret, rawBody, signature.slice(7));
|
|
115
|
-
}
|
|
116
|
-
async function parseGitHubRequest({ request }, handlers, channelName, repositories) {
|
|
117
|
-
const envelope = githubReceiptSchema.parse({
|
|
118
|
-
event: request.headers.get("x-github-event"),
|
|
119
|
-
deliveryId: request.headers.get("x-github-delivery"),
|
|
120
|
-
payload: await request.json(),
|
|
121
|
-
});
|
|
122
|
-
const { event, deliveryId, payload } = envelope;
|
|
123
|
-
logReceipt(envelope);
|
|
124
|
-
const response = Response.json({ status: "received" }, { status: event === "ping" ? 200 : 202 });
|
|
125
|
-
// Events nothing handles stop here, before run creation.
|
|
126
|
-
// Events without an action, such as `push`, are keyed by their name.
|
|
127
|
-
const key = (payload.action === undefined ? event : `${event}.${payload.action}`);
|
|
128
|
-
if (!Object.hasOwn(handlers, key) || handlers[key] === undefined)
|
|
129
|
-
return { type: "ignore", response };
|
|
130
|
-
const parsedEvent = githubEventSchema.parse({ key, payload, deliveryId });
|
|
131
|
-
// Events from repositories the channel is not limited to start nothing.
|
|
132
|
-
if (repositories &&
|
|
133
|
-
!repositories.includes(parsedEvent.repository.fullName.toLowerCase()))
|
|
134
|
-
return { type: "ignore", response };
|
|
135
|
-
// Ignore the App's own activity to avoid triggering ourselves.
|
|
136
|
-
const configuredBotId = (await gitHubAppValue("GH_APP_BOT_ID", "bot-id")) ?? "";
|
|
137
|
-
if (!/^[1-9][0-9]*$/.test(configuredBotId))
|
|
138
|
-
throw new TypeError("GitHub App bot ID is unavailable; run `mda deploy` to store it or set GH_APP_BOT_ID");
|
|
139
|
-
const botId = githubIdentifierSchema.parse(Number(configuredBotId));
|
|
140
|
-
if (parsedEvent.sender.id === botId)
|
|
141
|
-
return { type: "ignore", response };
|
|
142
|
-
// Preserve the original event even if a callback modifies its argument.
|
|
143
|
-
const snapshot = eventSnapshot(parsedEvent, "GitHub");
|
|
144
|
-
// One thread per issue or pull request, so the agent keeps the
|
|
145
|
-
// conversation. Other events get their own thread, keyed by the delivery so
|
|
146
|
-
// a redelivery still finds the run it started.
|
|
147
|
-
const number = conversationNumber(parsedEvent);
|
|
148
|
-
const threadId = channelThreadId(channelName, number === undefined
|
|
149
|
-
? `delivery/${deliveryId}`
|
|
150
|
-
: `${parsedEvent.repository.id}/${number}`);
|
|
151
|
-
const target = number === undefined
|
|
152
|
-
? null
|
|
153
|
-
: { repository: parsedEvent.repository.fullName, number };
|
|
154
|
-
// What the run starts with is decided once MDA knows the thread takes a
|
|
155
|
-
// new turn.
|
|
156
|
-
return {
|
|
157
|
-
type: "message",
|
|
158
|
-
message: {
|
|
159
|
-
threadId,
|
|
160
|
-
userId: senderUserId(parsedEvent.sender),
|
|
161
|
-
target,
|
|
162
|
-
deliveryKey: deliveryId,
|
|
163
|
-
// An endpoint may take longer to answer than GitHub waits.
|
|
164
|
-
...(isEndpointCallback(handlers[key]) && { background: true }),
|
|
165
|
-
},
|
|
166
|
-
rawEvent: snapshot,
|
|
167
|
-
response,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Who the run acts for. GitHub signs each delivery, so its sender is verified:
|
|
172
|
-
* a person acts as `github:<id>`, by the numeric ID that outlives login
|
|
173
|
-
* renames, and gets their own user memory where the agent allows it. Bots and
|
|
174
|
-
* organizations run as the channel.
|
|
175
|
-
*/
|
|
176
|
-
function senderUserId(sender) {
|
|
177
|
-
return sender.type === "User" ? `github:${sender.id}` : "mda:channel";
|
|
178
|
-
}
|
|
179
|
-
/** What the event's handler starts a run with; `undefined` when it skips or fails. */
|
|
180
|
-
async function handlerInput(handlers, rawEvent, thread) {
|
|
181
|
-
const event = githubEvent(rawEvent);
|
|
182
|
-
const handler = event && Object.hasOwn(handlers, event.key)
|
|
183
|
-
? handlers[event.key]
|
|
184
|
-
: undefined;
|
|
185
|
-
if (!event || !handler)
|
|
186
|
-
return undefined;
|
|
187
|
-
const outcome = await runEventHandler("GitHub", event, () => handler(event, thread));
|
|
188
|
-
return outcome.type === "input" ? outcome.input : undefined;
|
|
189
|
-
}
|
|
190
|
-
/** The parsed event a delivery carries, as handlers may change it. */
|
|
191
|
-
function githubEvent(rawEvent) {
|
|
192
|
-
if (!rawEvent || typeof rawEvent !== "object" || Array.isArray(rawEvent))
|
|
193
|
-
return undefined;
|
|
194
|
-
const event = structuredClone(rawEvent);
|
|
195
|
-
return EVENT_KEYS.has(event.key) ? event : undefined;
|
|
196
|
-
}
|
|
197
|
-
/** The issue or pull request an event is about, if any. */
|
|
198
|
-
function conversationNumber(event) {
|
|
199
|
-
const payload = event.payload;
|
|
200
|
-
for (const subject of ["issue", "pull_request"]) {
|
|
201
|
-
const number = payload[subject]
|
|
202
|
-
?.number;
|
|
203
|
-
if (isIssueNumber(number))
|
|
204
|
-
return number;
|
|
205
|
-
}
|
|
206
|
-
// A CI run belongs to a pull request only when it ran for exactly one.
|
|
207
|
-
for (const run of ["workflow_run", "check_run", "check_suite"]) {
|
|
208
|
-
const pullRequests = payload[run]?.pull_requests;
|
|
209
|
-
if (Array.isArray(pullRequests) && pullRequests.length === 1) {
|
|
210
|
-
const number = pullRequests[0]?.number;
|
|
211
|
-
if (isIssueNumber(number))
|
|
212
|
-
return number;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return undefined;
|
|
216
|
-
}
|
|
217
|
-
function isIssueNumber(value) {
|
|
218
|
-
return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
|
|
219
|
-
}
|
|
220
|
-
const REPOSITORY_PATTERN = /^[A-Za-z0-9-]+\/[A-Za-z0-9._-]+$/;
|
|
221
|
-
const GITHUB_API_TIMEOUT_MS = 10_000;
|
|
222
|
-
/**
|
|
223
|
-
* The thread waits on an interrupt, so tell the issue or pull request where
|
|
224
|
-
* to continue it. Posts as the App; the notice is fixed text.
|
|
225
|
-
*/
|
|
226
|
-
async function postInterruptedNotice(target, delivery, outcome) {
|
|
227
|
-
if (!isGitHubTarget(target))
|
|
228
|
-
return;
|
|
229
|
-
const [owner, name] = target.repository.split("/");
|
|
230
|
-
const token = await connections.resolveDeploymentSecret(GITHUB_TOKEN_SLUG);
|
|
231
|
-
const response = await fetch(`https://api.github.com/repos/${encodeURIComponent(owner)}/${encodeURIComponent(name)}/issues/${target.number}/comments`, {
|
|
232
|
-
method: "POST",
|
|
233
|
-
headers: {
|
|
234
|
-
Accept: "application/vnd.github+json",
|
|
235
|
-
Authorization: `Bearer ${token}`,
|
|
236
|
-
"Content-Type": "application/json",
|
|
237
|
-
"X-GitHub-Api-Version": "2022-11-28",
|
|
238
|
-
},
|
|
239
|
-
body: JSON.stringify({
|
|
240
|
-
body: interruptedNotice(outcome, delivery, "comment again"),
|
|
241
|
-
}),
|
|
242
|
-
signal: AbortSignal.timeout(GITHUB_API_TIMEOUT_MS),
|
|
243
|
-
});
|
|
244
|
-
if (!response.ok)
|
|
245
|
-
throw new Error(`GitHub refused the interrupted notice (HTTP ${response.status})`);
|
|
246
|
-
}
|
|
247
|
-
function isGitHubTarget(value) {
|
|
248
|
-
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
249
|
-
return false;
|
|
250
|
-
const { repository, number } = value;
|
|
251
|
-
return (typeof repository === "string" &&
|
|
252
|
-
REPOSITORY_PATTERN.test(repository) &&
|
|
253
|
-
isIssueNumber(number));
|
|
254
|
-
}
|
|
255
|
-
function logReceipt({ event, deliveryId, payload, }) {
|
|
256
|
-
const receipt = {
|
|
257
|
-
event: logger.logIdentifier(event),
|
|
258
|
-
deliveryId: logger.logIdentifier(deliveryId),
|
|
259
|
-
};
|
|
260
|
-
if (payload.action !== undefined)
|
|
261
|
-
receipt.action = logger.logIdentifier(payload.action);
|
|
262
|
-
for (const [key, field] of [
|
|
263
|
-
["repository", "id"],
|
|
264
|
-
["issue", "number"],
|
|
265
|
-
["pull_request", "number"],
|
|
266
|
-
]) {
|
|
267
|
-
const id = payload[key]?.[field];
|
|
268
|
-
if (typeof id === "number")
|
|
269
|
-
receipt[key] = id;
|
|
270
|
-
}
|
|
271
|
-
logger.info(`github receipt ${JSON.stringify(receipt)}`);
|
|
272
|
-
return receipt;
|
|
273
|
-
}
|
|
274
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/channels/github/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/** The handles an event's text mentions: GitHub sends no event for a mention. */
|
|
2
|
-
import type { z } from "zod";
|
|
3
|
-
import type { githubDispatchSchema } from "./schema.js";
|
|
4
|
-
type DispatchEvent = z.output<typeof githubDispatchSchema>;
|
|
5
|
-
/**
|
|
6
|
-
* The handles, such as `@octocat`, the text the event wrote mentions:
|
|
7
|
-
* lowercased, each once, in order. As on GitHub, code, quotes and HTML
|
|
8
|
-
* comments mention no one. An edit lists only the handles it added.
|
|
9
|
-
*/
|
|
10
|
-
export declare function eventMentions(event: DispatchEvent): string[];
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=mentions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/channels/github/mentions.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,KAAK,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAyD3D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE,CA0B5D"}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
// A login (letters, digits, hyphens, at most 39 characters) or an
|
|
2
|
-
// organization's team, as GitHub links them. Not part of an email address,
|
|
3
|
-
// a longer word or a path, and without trailing punctuation.
|
|
4
|
-
const MENTION = /(?<![A-Za-z0-9_`@/.-])@([A-Za-z0-9][A-Za-z0-9-]{0,38}(?:\/[A-Za-z0-9_-](?:[A-Za-z0-9_.-]{0,98}[A-Za-z0-9_-])?)?)(?![A-Za-z0-9_-])/g;
|
|
5
|
-
/** A fence opens or closes a code block on a line of its own. */
|
|
6
|
-
const FENCE = /^ {0,3}(`{3,}|~{3,})/;
|
|
7
|
-
const PARAGRAPH_BREAK = /\n[ \t]*\n/;
|
|
8
|
-
const BACKTICKS = /`+/g;
|
|
9
|
-
/** Where an HTML block may start: the beginning of a line, after up to 3 spaces. */
|
|
10
|
-
const LINE_START = /(?:^|\n) {0,3}$/;
|
|
11
|
-
const MAX_MENTIONS = 50;
|
|
12
|
-
const QUOTE = /^ {0,3}>/;
|
|
13
|
-
const issue = (payload) => ({
|
|
14
|
-
title: payload.issue.title,
|
|
15
|
-
body: payload.issue.body,
|
|
16
|
-
});
|
|
17
|
-
const pullRequest = (payload) => ({
|
|
18
|
-
title: payload.pull_request.title,
|
|
19
|
-
body: payload.pull_request.body,
|
|
20
|
-
});
|
|
21
|
-
const comment = (payload) => ({
|
|
22
|
-
body: payload.comment.body,
|
|
23
|
-
});
|
|
24
|
-
const review = (payload) => ({
|
|
25
|
-
body: payload.review.body,
|
|
26
|
-
});
|
|
27
|
-
/**
|
|
28
|
-
* The text each event writes. Other actions, such as a push to a pull
|
|
29
|
-
* request or a label, write none, so they mention no one.
|
|
30
|
-
*/
|
|
31
|
-
const TEXTS = {
|
|
32
|
-
"issues.opened": issue,
|
|
33
|
-
"issues.edited": issue,
|
|
34
|
-
"pull_request.opened": pullRequest,
|
|
35
|
-
"pull_request.edited": pullRequest,
|
|
36
|
-
"issue_comment.created": comment,
|
|
37
|
-
"issue_comment.edited": comment,
|
|
38
|
-
"pull_request_review.submitted": review,
|
|
39
|
-
"pull_request_review.edited": review,
|
|
40
|
-
"pull_request_review_comment.created": comment,
|
|
41
|
-
"pull_request_review_comment.edited": comment,
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* The handles, such as `@octocat`, the text the event wrote mentions:
|
|
45
|
-
* lowercased, each once, in order. As on GitHub, code, quotes and HTML
|
|
46
|
-
* comments mention no one. An edit lists only the handles it added.
|
|
47
|
-
*/
|
|
48
|
-
export function eventMentions(event) {
|
|
49
|
-
// A key's function takes that key's payload; TypeScript can't pair them.
|
|
50
|
-
const texts = TEXTS[event.key];
|
|
51
|
-
if (!texts)
|
|
52
|
-
return [];
|
|
53
|
-
const text = texts(event.payload);
|
|
54
|
-
const mentions = handles(text);
|
|
55
|
-
if (!event.key.endsWith(".edited"))
|
|
56
|
-
return mentions;
|
|
57
|
-
const changes = event.payload.changes;
|
|
58
|
-
const changed = changes && typeof changes === "object"
|
|
59
|
-
? changes
|
|
60
|
-
: {};
|
|
61
|
-
if (!Object.hasOwn(changed, "title") && !Object.hasOwn(changed, "body"))
|
|
62
|
-
return [];
|
|
63
|
-
const before = { ...text };
|
|
64
|
-
for (const field of ["title", "body"]) {
|
|
65
|
-
const previous = changed[field];
|
|
66
|
-
if (previous && typeof previous === "object" && field in text) {
|
|
67
|
-
const from = previous.from;
|
|
68
|
-
before[field] = typeof from === "string" ? from : null;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
const known = new Set(handles(before));
|
|
72
|
-
return mentions.filter((handle) => !known.has(handle));
|
|
73
|
-
}
|
|
74
|
-
function handles(text) {
|
|
75
|
-
const parts = [text.title, text.body].filter((part) => typeof part === "string");
|
|
76
|
-
const mentions = [];
|
|
77
|
-
for (const match of prose(parts.join("\n\n")).matchAll(MENTION)) {
|
|
78
|
-
const handle = `@${match[1].toLowerCase()}`;
|
|
79
|
-
if (mentions.includes(handle))
|
|
80
|
-
continue;
|
|
81
|
-
mentions.push(handle);
|
|
82
|
-
if (mentions.length === MAX_MENTIONS)
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
return mentions;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* The text GitHub renders as prose: without code, quotes and HTML comments.
|
|
89
|
-
* Fences and quotes are read by line, as Markdown does; a fence that is never
|
|
90
|
-
* closed runs to the end, as on GitHub.
|
|
91
|
-
*/
|
|
92
|
-
function prose(text) {
|
|
93
|
-
const lines = [];
|
|
94
|
-
let fence = "";
|
|
95
|
-
let quoted = false;
|
|
96
|
-
for (const line of text.split("\n")) {
|
|
97
|
-
const marker = FENCE.exec(line);
|
|
98
|
-
const rest = marker ? line.slice(marker[0].length) : "";
|
|
99
|
-
if (fence) {
|
|
100
|
-
if (marker &&
|
|
101
|
-
marker[1][0] === fence[0] &&
|
|
102
|
-
marker[1].length >= fence.length &&
|
|
103
|
-
!rest.trim())
|
|
104
|
-
fence = "";
|
|
105
|
-
lines.push("");
|
|
106
|
-
}
|
|
107
|
-
else if (
|
|
108
|
-
// A backtick fence's info string can't hold a backtick.
|
|
109
|
-
marker &&
|
|
110
|
-
!(marker[1].startsWith("`") && rest.includes("`"))) {
|
|
111
|
-
fence = marker[1];
|
|
112
|
-
quoted = false;
|
|
113
|
-
lines.push("");
|
|
114
|
-
}
|
|
115
|
-
else if (QUOTE.test(line)) {
|
|
116
|
-
quoted = true;
|
|
117
|
-
lines.push("");
|
|
118
|
-
}
|
|
119
|
-
else if (!line.trim()) {
|
|
120
|
-
quoted = false;
|
|
121
|
-
lines.push(line);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
// A line right after a quote continues it.
|
|
125
|
-
lines.push(quoted ? "" : line);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return withoutComments(lines.join("\n").split(PARAGRAPH_BREAK).map(withoutSpans).join("\n\n"));
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* A paragraph without its code spans. A span opens with a run of backticks
|
|
132
|
-
* and closes with the next run of the same length; a run that nothing
|
|
133
|
-
* closes is just backticks.
|
|
134
|
-
*/
|
|
135
|
-
function withoutSpans(paragraph) {
|
|
136
|
-
const runs = [...paragraph.matchAll(BACKTICKS)].map((match) => [match.index, match.index + match[0].length]);
|
|
137
|
-
const closers = new Map();
|
|
138
|
-
runs.forEach(([start, end], index) => {
|
|
139
|
-
const waiting = closers.get(end - start) ?? [];
|
|
140
|
-
waiting.push(index);
|
|
141
|
-
closers.set(end - start, waiting);
|
|
142
|
-
});
|
|
143
|
-
// How far each length's queue has been read.
|
|
144
|
-
const read = new Map();
|
|
145
|
-
const kept = [];
|
|
146
|
-
let cursor = 0;
|
|
147
|
-
let index = 0;
|
|
148
|
-
while (index < runs.length) {
|
|
149
|
-
const [start, end] = runs[index];
|
|
150
|
-
const waiting = closers.get(end - start);
|
|
151
|
-
let next = read.get(end - start) ?? 0;
|
|
152
|
-
while (next < waiting.length && waiting[next] <= index)
|
|
153
|
-
next += 1;
|
|
154
|
-
read.set(end - start, next);
|
|
155
|
-
if (next === waiting.length) {
|
|
156
|
-
index += 1;
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
const closer = waiting[next];
|
|
160
|
-
read.set(end - start, next + 1);
|
|
161
|
-
kept.push(`${paragraph.slice(cursor, start)} `);
|
|
162
|
-
cursor = runs[closer][1];
|
|
163
|
-
index = closer + 1;
|
|
164
|
-
}
|
|
165
|
-
kept.push(paragraph.slice(cursor));
|
|
166
|
-
return kept.join("");
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* The text without HTML comments. One never closed runs to the end when it
|
|
170
|
-
* starts a line, as an HTML block does; elsewhere it is just text.
|
|
171
|
-
*/
|
|
172
|
-
function withoutComments(text) {
|
|
173
|
-
const kept = [];
|
|
174
|
-
let cursor = 0;
|
|
175
|
-
for (let start = text.indexOf("<!--", cursor); start !== -1; start = text.indexOf("<!--", cursor)) {
|
|
176
|
-
const end = text.indexOf("-->", start + 4);
|
|
177
|
-
if (end === -1 && !LINE_START.test(text.slice(0, start)))
|
|
178
|
-
break;
|
|
179
|
-
kept.push(`${text.slice(cursor, start)} `);
|
|
180
|
-
cursor = end === -1 ? text.length : end + 3;
|
|
181
|
-
}
|
|
182
|
-
kept.push(text.slice(cursor));
|
|
183
|
-
return kept.join("");
|
|
184
|
-
}
|
|
185
|
-
//# sourceMappingURL=mentions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../../src/channels/github/mentions.ts"],"names":[],"mappings":"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"}
|