@cursor/july 0.1.97 → 0.1.99
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/AGENTS.md +1 -1
- package/dist/bin/agent-serve.js +6 -7
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +16 -0
- package/dist/channels/origin/origin-channel.d.ts +2 -0
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +37 -4
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +76 -55
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +1 -1
- package/dist/channels/slack/live-delivery.d.ts +1 -1
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +4 -2
- package/dist/channels/slack/progress-delivery.d.ts +28 -0
- package/dist/channels/slack/progress-delivery.d.ts.map +1 -0
- package/dist/channels/slack/progress-delivery.js +115 -0
- package/dist/channels/slack/types.d.ts +9 -1
- package/dist/channels/slack/types.d.ts.map +1 -1
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.B3rWNYE1.js → app.BplEAZ3S.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DpuI4i7Z.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.C1lhqJJR.js → VPLocalSearchBox.CHXyv4wP.js} +1 -1
- package/dist/docs/assets/chunks/{theme.B40_SXuv.js → theme.BTcsZmjQ.js} +2 -2
- package/dist/docs/assets/{reference_cli.md.RyZf5OTE.js → reference_cli.md.DfoeyvL0.js} +4 -4
- package/dist/docs/assets/{reference_cli.md.RyZf5OTE.lean.js → reference_cli.md.DfoeyvL0.lean.js} +1 -1
- package/dist/docs/assets/{reference_http-api.md.5zOAbV86.js → reference_http-api.md.BEJx9XVj.js} +1 -1
- package/dist/docs/assets/{reference_tools.md.B84gw9Ii.js → reference_tools.md.CvAHsdSp.js} +10 -2
- package/dist/docs/assets/{reference_tools.md.B84gw9Ii.lean.js → reference_tools.md.CvAHsdSp.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +4 -4
- package/dist/docs/concepts.html +4 -4
- package/dist/docs/deployment.html +4 -4
- package/dist/docs/design/runtime-abstraction.md +1757 -0
- package/dist/docs/evals.html +4 -4
- package/dist/docs/guides/agent-to-agent.html +4 -4
- package/dist/docs/guides/cloud-runtime.html +4 -4
- package/dist/docs/guides/convert-automation.html +4 -4
- package/dist/docs/guides/github.html +4 -4
- package/dist/docs/guides/human-in-the-loop.html +4 -4
- package/dist/docs/guides/mcp-oauth.html +4 -4
- package/dist/docs/guides/opentelemetry.html +4 -4
- package/dist/docs/guides/slack.html +4 -4
- package/dist/docs/guides/webhooks.html +4 -4
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +4 -4
- package/dist/docs/index.html +4 -4
- package/dist/docs/llms-full.txt +1789 -7
- package/dist/docs/llms.txt +1 -0
- package/dist/docs/quickstart.html +4 -4
- package/dist/docs/reference/agent-config.html +4 -4
- package/dist/docs/reference/artifacts.html +4 -4
- package/dist/docs/reference/channels.html +4 -4
- package/dist/docs/reference/cli.html +7 -7
- package/dist/docs/reference/cli.md +1 -7
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +6 -6
- package/dist/docs/reference/http-api.md +1 -0
- package/dist/docs/reference/instructions.html +4 -4
- package/dist/docs/reference/playground.html +4 -4
- package/dist/docs/reference/project-layout.html +4 -4
- package/dist/docs/reference/prompt.html +4 -4
- package/dist/docs/reference/schedules.html +4 -4
- package/dist/docs/reference/sessions.html +4 -4
- package/dist/docs/reference/skills.html +4 -4
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +14 -6
- package/dist/docs/reference/tools.md +25 -0
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +4 -4
- package/dist/docs/templates/agents-md.html +4 -4
- package/dist/docs/templates/code-wiki.html +4 -4
- package/dist/docs/templates/demo.html +4 -4
- package/dist/docs/templates/pr-autofixer.html +4 -4
- package/dist/docs/templates/security-help.html +4 -4
- package/dist/docs/templates/security-reviewer.html +4 -4
- package/dist/docs/templates/triage.html +4 -4
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/files-backends/cursor-hosted.d.ts +3 -2
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +3 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/internal/as-of.d.ts +19 -0
- package/dist/internal/as-of.d.ts.map +1 -0
- package/dist/internal/as-of.js +82 -0
- package/dist/internal/cli-deploy.d.ts +2 -1
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +100 -5
- package/dist/internal/cursor-event-relay.d.ts.map +1 -1
- package/dist/internal/cursor-event-relay.js +5 -6
- package/dist/internal/framework-file-storage.d.ts +10 -16
- package/dist/internal/framework-file-storage.d.ts.map +1 -1
- package/dist/internal/framework-file-storage.js +11 -40
- package/dist/internal/framework-storage-selection.d.ts +13 -11
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +37 -26
- package/dist/internal/hosted-admission-adapter.d.ts +28 -0
- package/dist/internal/hosted-admission-adapter.d.ts.map +1 -0
- package/dist/internal/hosted-admission-adapter.js +7 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +6 -1
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +1 -1
- package/dist/internal/hosted-delivery.d.ts +15 -1
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +47 -21
- package/dist/internal/hosted-execution-diag.d.ts +11 -0
- package/dist/internal/hosted-execution-diag.d.ts.map +1 -1
- package/dist/internal/hosted-execution-diag.js +39 -2
- package/dist/internal/http-channel.d.ts.map +1 -1
- package/dist/internal/http-channel.js +4 -1
- package/dist/internal/null-kv-storage.d.ts +48 -0
- package/dist/internal/null-kv-storage.d.ts.map +1 -0
- package/dist/internal/null-kv-storage.js +58 -0
- package/dist/internal/server.d.ts +3 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +82 -19
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +24 -4
- package/dist/internal/session-run-log.d.ts +120 -0
- package/dist/internal/session-run-log.d.ts.map +1 -0
- package/dist/internal/session-run-log.js +359 -0
- package/dist/internal/storage-coordinator.d.ts +6 -0
- package/dist/internal/storage-coordinator.d.ts.map +1 -1
- package/dist/internal/storage-coordinator.js +9 -1
- package/dist/internal/tool-policy.d.ts +20 -8
- package/dist/internal/tool-policy.d.ts.map +1 -1
- package/dist/internal/tool-policy.js +11 -0
- package/dist/playground/assets/index-D7rGZNjy.css +1 -0
- package/dist/playground/assets/index-jzNbJENa.js +69 -0
- package/dist/playground/index.html +2 -2
- package/dist/storage-protocol.d.ts +8 -0
- package/dist/storage-protocol.d.ts.map +1 -1
- package/dist/storage-protocol.js +8 -0
- package/dist/tools.d.ts +12 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/design/runtime-abstraction.md +1757 -0
- package/docs/reference/cli.md +1 -7
- package/docs/reference/http-api.md +1 -0
- package/docs/reference/tools.md +25 -0
- package/package.json +1 -1
- package/src/bin/agent-serve.ts +6 -7
- package/src/channels/github/github-channel.ts +17 -0
- package/src/channels/origin/origin-channel.ts +74 -10
- package/src/channels/slack/defaults.ts +91 -63
- package/src/channels/slack/dispatch.ts +2 -0
- package/src/channels/slack/live-delivery.ts +5 -3
- package/src/channels/slack/progress-delivery.ts +133 -0
- package/src/channels/slack/types.ts +9 -1
- package/src/files-backends/cursor-hosted.ts +3 -2
- package/src/index.ts +4 -0
- package/src/internal/as-of.ts +107 -0
- package/src/internal/cli-deploy.ts +128 -8
- package/src/internal/cursor-event-relay.ts +5 -6
- package/src/internal/framework-file-storage.ts +11 -45
- package/src/internal/framework-storage-selection.ts +41 -25
- package/src/internal/hosted-admission-adapter.ts +42 -0
- package/src/internal/hosted-delivery-protocol.ts +7 -2
- package/src/internal/hosted-delivery.ts +88 -36
- package/src/internal/hosted-execution-diag.ts +45 -0
- package/src/internal/http-channel.ts +8 -0
- package/src/internal/null-kv-storage.ts +74 -0
- package/src/internal/server.ts +100 -2
- package/src/internal/session-engine.ts +32 -1
- package/src/internal/session-run-log.ts +584 -0
- package/src/internal/storage-coordinator.ts +11 -1
- package/src/internal/tool-policy.ts +31 -9
- package/src/storage-protocol.ts +10 -0
- package/src/tools.ts +12 -2
- package/src/types.ts +25 -0
- package/dist/docs/assets/chunks/@localSearchIndexroot.BU9nHdnQ.js +0 -1
- package/dist/playground/assets/index-DrkI6y5O.js +0 -88
- package/dist/playground/assets/index-DzNGwm7q.css +0 -1
- /package/dist/docs/assets/{reference_http-api.md.5zOAbV86.lean.js → reference_http-api.md.BEJx9XVj.lean.js} +0 -0
package/AGENTS.md
CHANGED
|
@@ -52,7 +52,7 @@ which reads these files. Open them directly. There are no
|
|
|
52
52
|
|
|
53
53
|
Hosted-platform debug (stopped / slow start / health-fail, Datadog
|
|
54
54
|
`cursor.agent_serve.*`) is the monorepo skill
|
|
55
|
-
`.cursor/skills/debugging/debug-
|
|
55
|
+
`.cursor/skills/debugging/debug-agentsdk-deployment/SKILL.md` — it does
|
|
56
56
|
not ship with `@cursor/july`. Dual-pod alerts:
|
|
57
57
|
`docs/agent-serve/orphan-engines-runbook.md`.
|
|
58
58
|
|
package/dist/bin/agent-serve.js
CHANGED
|
@@ -37,6 +37,7 @@ import { cmdManifest } from "../internal/cli-manifest.js";
|
|
|
37
37
|
import { CLI_COMMAND_NAME as CLI, formatCliVersion, PACKAGE_NAME, packageVersion, } from "../internal/distribution.js";
|
|
38
38
|
import { loadAgentLocalEnv } from "../internal/local-env.js";
|
|
39
39
|
import { ENTER_RESTART_EXIT_CODE, isServeRestartWorker, runEnterRestartSupervisor, } from "../internal/serve-restart.js";
|
|
40
|
+
import { flushSessionRunFatal } from "../internal/session-run-log.js";
|
|
40
41
|
import { clearTerminal, stdoutPalette } from "../internal/terminal-style.js";
|
|
41
42
|
import { cmdUpdate, warnIfOutdated } from "../internal/update-check.js";
|
|
42
43
|
const HELP = `${CLI} — serve a filesystem-defined Cursor agent over channels
|
|
@@ -104,7 +105,7 @@ Usage:
|
|
|
104
105
|
${CLI} deploy [--dir <path>] [--slug <slug> | --all] [--team <id>] [--json]
|
|
105
106
|
[--no-wait] [--repo <url>] [--ref <ref>]
|
|
106
107
|
[--path <agentPath>] [--cursor-events-repo <owner/name>]...
|
|
107
|
-
[--allow-domain <domain>]...
|
|
108
|
+
[--allow-domain <domain>]...
|
|
108
109
|
${CLI} manifest [--dir <path>] [--json]
|
|
109
110
|
${CLI} deployments [--team <id>] [--json]
|
|
110
111
|
${CLI} deployment <slug> [--team <id>] [--json]
|
|
@@ -232,8 +233,6 @@ Commands:
|
|
|
232
233
|
(flags always win). When --dir is a multi-agent parent,
|
|
233
234
|
pick one interactively, or pass --slug / --all. First deploy
|
|
234
235
|
of a slug prints the alias token exactly once — save it.
|
|
235
|
-
--multi-tenant adds a release to an existing Cursor-managed
|
|
236
|
-
product (v2 only); it cannot create a new multi-tenant app.
|
|
237
236
|
deployments List the team's deployments (slug, status, generation, kind).
|
|
238
237
|
deployment Show one deployment in full (status, lastError, engine info).
|
|
239
238
|
stop Stop a deployment and wait until it reports stopped.
|
|
@@ -396,9 +395,6 @@ Options:
|
|
|
396
395
|
--allow-domain deploy: egress domain the engine pod may reach
|
|
397
396
|
(repeatable; unioned with hosting.egressDomains from the
|
|
398
397
|
agent manifest). Repo-backed deploys only.
|
|
399
|
-
--multi-tenant deploy: add a release to an existing Cursor-managed
|
|
400
|
-
(multi-tenant) product. architecture v2 only. Cannot
|
|
401
|
-
create a new multi-tenant application.
|
|
402
398
|
--from-argv secrets set: allow NAME=VALUE on argv (leaks into shell
|
|
403
399
|
history and agent-captured terminals). Default is names
|
|
404
400
|
only with a hidden prompt or piped stdin.
|
|
@@ -538,6 +534,7 @@ function main(argv) {
|
|
|
538
534
|
all: { type: "boolean", default: false },
|
|
539
535
|
"cursor-events-repo": { type: "string", multiple: true },
|
|
540
536
|
"allow-domain": { type: "string", multiple: true },
|
|
537
|
+
// Hidden Anysphere-only flag; omitted from help.
|
|
541
538
|
"multi-tenant": { type: "boolean", default: false },
|
|
542
539
|
"from-argv": { type: "boolean", default: false },
|
|
543
540
|
strict: { type: "boolean", default: false },
|
|
@@ -1447,7 +1444,9 @@ function installTransportErrorGuards() {
|
|
|
1447
1444
|
return;
|
|
1448
1445
|
}
|
|
1449
1446
|
process.stderr.write(`[agent-sdk] uncaughtException: ${(_a = error.stack) !== null && _a !== void 0 ? _a : error.message}\n`);
|
|
1450
|
-
|
|
1447
|
+
void flushSessionRunFatal(error).finally(() => {
|
|
1448
|
+
process.exit(1);
|
|
1449
|
+
});
|
|
1451
1450
|
});
|
|
1452
1451
|
}
|
|
1453
1452
|
installTransportErrorGuards();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/github/github-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"github-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/github/github-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { allowAll, defineChannel, localDevStrict, loopbackGitHubDev, POST, } fro
|
|
|
13
13
|
import { continuationSource, normalizeIdentity, } from "../../internal/continuation-identity.js";
|
|
14
14
|
import { isDeferredChannelSession } from "../../internal/deferred-channel-session.js";
|
|
15
15
|
import { isDevMode } from "../../internal/dev-mode.js";
|
|
16
|
+
import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-adapter.js";
|
|
16
17
|
import { bindLocalIngressSend } from "../../internal/local-ingress.js";
|
|
17
18
|
import { resolveCredentialValue } from "./auth.js";
|
|
18
19
|
import { buildGitHubBinding, } from "./binding.js";
|
|
@@ -523,6 +524,21 @@ export function githubChannel(options = {}) {
|
|
|
523
524
|
],
|
|
524
525
|
});
|
|
525
526
|
githubChannelOptionsByDefinition.set(definition, channelOptions);
|
|
527
|
+
attachHostedAdmissionAdapter(definition, {
|
|
528
|
+
kind: GITHUB_CHANNEL_KIND,
|
|
529
|
+
prepareArgs: withPropagatingGitHubBackgroundErrors,
|
|
530
|
+
dispatch: ({ eventType, payload, deliveryId, args }) => dispatchGitHubWebhook({
|
|
531
|
+
options: channelOptions,
|
|
532
|
+
eventName: eventType,
|
|
533
|
+
payload,
|
|
534
|
+
deliveryId,
|
|
535
|
+
args,
|
|
536
|
+
}),
|
|
537
|
+
getOutcome: (response) => {
|
|
538
|
+
const outcome = getGitHubDispatchOutcome(response);
|
|
539
|
+
return outcome === "skip" || outcome === "task" ? outcome : undefined;
|
|
540
|
+
},
|
|
541
|
+
});
|
|
526
542
|
if (cursorCredentials !== undefined) {
|
|
527
543
|
registerGithubCursorAccountRuntime(definition, {
|
|
528
544
|
options,
|
|
@@ -23,6 +23,8 @@ export declare function originIngressExtractPayload(envelope: OriginWebhookEnvel
|
|
|
23
23
|
export declare function defaultOriginTitle(ctx: Pick<OriginEventContext, "repository" | "pullRequestNumber">): string;
|
|
24
24
|
export declare function defaultOriginPullRequestMessage(ctx: Omit<OriginEventContext, "host" | "artifacts" | "origin">, pullRequest: OriginPullRequestEvent): string;
|
|
25
25
|
export declare function defaultOriginPullRequestDispatch(ctx: Omit<OriginEventContext, "host" | "artifacts" | "origin">, pullRequest: OriginPullRequestEvent): OriginTurnDispatch | null;
|
|
26
|
+
export type OriginDispatchOutcome = "skip" | "send" | "task";
|
|
27
|
+
export declare function getOriginDispatchOutcome(response: Response): OriginDispatchOutcome | undefined;
|
|
26
28
|
/**
|
|
27
29
|
* Core Origin webhook dispatch used by {@link originChannel} routes and by
|
|
28
30
|
* {@link handleAgentServeTrigger} fan-out. Signature verification is the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/origin-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"origin-channel.d.ts","sourceRoot":"","sources":["../../../src/channels/origin/origin-channel.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAEV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAaxB,OAAO,KAAK,EAEV,oBAAoB,EAGpB,kBAAkB,EAClB,sBAAsB,EAItB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAiFpB,mFAAmF;AACnF,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAGnD;AAqGD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,GACf,qBAAqB,GAAG,IAAI,CAG9B;AAuCD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,qBAAqB,CAAC;CACjC,GAAG;IACF,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,CAAC;IAC/D,WAAW,EAAE,sBAAsB,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,GAAG,IAAI,CAwDP;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,GAC7D,WAAW,CAeb;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,mBAAmB,CAAC,GAChE,MAAM,CAER;AAED,2EAA2E;AAC3E,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAST;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,mBAAmB,CAAC,GAChE,MAAM,CAER;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,EAC9D,WAAW,EAAE,sBAAsB,GAClC,MAAM,CAaR;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC,EAC9D,WAAW,EAAE,sBAAsB,GAClC,kBAAkB,GAAG,IAAI,CAK3B;AA4BD,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAe7D,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,GACjB,qBAAqB,GAAG,SAAS,CAEnC;AAgID;;;;GAIG;AACH;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,qBAAqB,CAAC;IAChC,IAAI,EAAE,kBAAkB,CAAC;CAC1B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgHpB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,0EAA0E;IAC1E,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwDpB;AAOD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,GACjB,oBAAoB,GAAG,SAAS,CAElC;AAED,wBAAgB,aAAa,CAC3B,OAAO,GAAE,oBAAyB,GACjC,iBAAiB,CAqFnB;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,QAAQ,EAAE,KAAK,CAAC;YACd,EAAE,EAAE,MAAM,CAAC;YACX,UAAU,EAAE;gBACV,IAAI,CAAC,EAAE;oBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;oBAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;iBAAE,CAAC;aACnE,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAC1C,mBAAmB,EAAE,CAgBvB"}
|
|
@@ -10,7 +10,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { allowAll, defineChannel, localDevStrict, loopbackOnly, POST, } from "../../channels.js";
|
|
12
12
|
import { continuationSource, normalizeIdentity, } from "../../internal/continuation-identity.js";
|
|
13
|
+
import { isDeferredChannelSession } from "../../internal/deferred-channel-session.js";
|
|
13
14
|
import { isDevMode } from "../../internal/dev-mode.js";
|
|
15
|
+
import { attachHostedAdmissionAdapter } from "../../internal/hosted-admission-adapter.js";
|
|
14
16
|
import { bindLocalIngressSend } from "../../internal/local-ingress.js";
|
|
15
17
|
import { buildOriginBinding } from "./binding.js";
|
|
16
18
|
import { parseCursorOriginRepoScope, registerOriginCursorAccountRuntime, } from "./cursor-account.js";
|
|
@@ -310,8 +312,16 @@ function enrichEventContext(input) {
|
|
|
310
312
|
app: input.options.app,
|
|
311
313
|
}) });
|
|
312
314
|
}
|
|
315
|
+
const dispatchOutcomeByResponse = new WeakMap();
|
|
316
|
+
function withDispatchOutcome(response, outcome) {
|
|
317
|
+
dispatchOutcomeByResponse.set(response, outcome);
|
|
318
|
+
return response;
|
|
319
|
+
}
|
|
320
|
+
export function getOriginDispatchOutcome(response) {
|
|
321
|
+
return dispatchOutcomeByResponse.get(response);
|
|
322
|
+
}
|
|
313
323
|
function skipped(reason, extra = {}) {
|
|
314
|
-
return Response.json(Object.assign({ ok: true, skipped: true, reason }, extra));
|
|
324
|
+
return withDispatchOutcome(Response.json(Object.assign({ ok: true, skipped: true, reason }, extra)), "skip");
|
|
315
325
|
}
|
|
316
326
|
function acknowledgeTask(args, dispatch, extra) {
|
|
317
327
|
args.waitUntil(new Promise((resolve, reject) => {
|
|
@@ -321,7 +331,7 @@ function acknowledgeTask(args, dispatch, extra) {
|
|
|
321
331
|
.then(() => resolve(), reject);
|
|
322
332
|
});
|
|
323
333
|
}));
|
|
324
|
-
return Response.json(Object.assign({ ok: true, dispatched: true, mode: "task" }, extra), { status: 202 });
|
|
334
|
+
return withDispatchOutcome(Response.json(Object.assign({ ok: true, dispatched: true, mode: "task" }, extra), { status: 202 }), "task");
|
|
325
335
|
}
|
|
326
336
|
function startTurn(input) {
|
|
327
337
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -330,12 +340,17 @@ function startTurn(input) {
|
|
|
330
340
|
const session = yield input.args.send(input.message, Object.assign(Object.assign(Object.assign({ auth: input.dispatch.auth }, (source === "engine"
|
|
331
341
|
? { continuationToken: originContinuationKey(input.ctx) }
|
|
332
342
|
: {})), { title: (_a = input.dispatch.title) !== null && _a !== void 0 ? _a : defaultOriginTitle(input.ctx) }), (input.cloud === undefined ? {} : { cloud: input.cloud })));
|
|
333
|
-
|
|
343
|
+
if (isDeferredChannelSession(session)) {
|
|
344
|
+
// Hosted admission captured the send; the control plane allocates the
|
|
345
|
+
// session after acknowledgement, so there is nothing to report yet.
|
|
346
|
+
return withDispatchOutcome(Response.json({ ok: true, dispatched: true, mode: "turn" }, { status: 202 }), "send");
|
|
347
|
+
}
|
|
348
|
+
return withDispatchOutcome(Response.json({
|
|
334
349
|
ok: true,
|
|
335
350
|
sessionId: session.id,
|
|
336
351
|
isNew: session.isNew,
|
|
337
352
|
continuationToken: session.continuationToken,
|
|
338
|
-
});
|
|
353
|
+
}), "send");
|
|
339
354
|
});
|
|
340
355
|
}
|
|
341
356
|
function resolveCloudOptions(cloud, ctx, pullRequest) {
|
|
@@ -595,6 +610,24 @@ export function originChannel(options = {}) {
|
|
|
595
610
|
],
|
|
596
611
|
});
|
|
597
612
|
originChannelOptionsByDefinition.set(definition, channelOptions);
|
|
613
|
+
attachHostedAdmissionAdapter(definition, {
|
|
614
|
+
kind: ORIGIN_CHANNEL_KIND,
|
|
615
|
+
dispatch: (_a) => __awaiter(this, [_a], void 0, function* ({ payload, args }) {
|
|
616
|
+
const envelope = parseOriginWebhookEnvelope(payload);
|
|
617
|
+
if (envelope === null) {
|
|
618
|
+
return Response.json({ ok: false, error: "invalid_origin_payload" }, { status: 400 });
|
|
619
|
+
}
|
|
620
|
+
return dispatchOriginWebhook({
|
|
621
|
+
options: channelOptions,
|
|
622
|
+
envelope,
|
|
623
|
+
args,
|
|
624
|
+
});
|
|
625
|
+
}),
|
|
626
|
+
getOutcome: (response) => {
|
|
627
|
+
const outcome = getOriginDispatchOutcome(response);
|
|
628
|
+
return outcome === "skip" || outcome === "task" ? outcome : undefined;
|
|
629
|
+
},
|
|
630
|
+
});
|
|
598
631
|
if (usesCursorAccount) {
|
|
599
632
|
registerOriginCursorAccountRuntime(definition, {
|
|
600
633
|
options: channelOptions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAuB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAehF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAuB,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAehF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,cAAc,CAEhB;AAED,qCAAqC;AACrC,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,GAAG,SAAS,GACpC,OAAO,CAET;AAED,6EAA6E;AAC7E,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAS7E;AA0BD,6EAA6E;AAC7E,wBAAgB,sBAAsB,CACpC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,EACnC,MAAM,CAAC,EAAE,iBAAiB,GACzB,mBAAmB,CAQrB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,EACnC,MAAM,CAAC,EAAE,iBAAiB,GACzB,mBAAmB,CAWrB;AAED,eAAO,MAAM,mBAAmB,EAAE,mBACR,CAAC;AAC3B,eAAO,MAAM,sBAAsB,EAAE,mBACX,CAAC;AAC3B,eAAO,MAAM,oBAAoB,EAAE,mBACL,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mEAAmE;IACnE,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,QAAQ,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,oBAAoB,CAAC,iBAAiB,CAAC,CAsczC"}
|
|
@@ -16,6 +16,7 @@ import { defaultSlackAuth } from "./auth.js";
|
|
|
16
16
|
import { SLACK_DEFAULT_LOADING_MESSAGES, SLACK_TYPING_MIN_GROWTH, SLACK_TYPING_MIN_INTERVAL_MS, } from "./constants.js";
|
|
17
17
|
import { createStreamDeliveryStrategy } from "./live-delivery.js";
|
|
18
18
|
import { defaultSlackLog } from "./log.js";
|
|
19
|
+
import { createProgressDelivery } from "./progress-delivery.js";
|
|
19
20
|
import { buildTaskChunkForResult, buildTaskChunksForCalls } from "./stream.js";
|
|
20
21
|
const SLACK_TURN_FAILURE_FALLBACK = "I hit an error while handling your request. Please try again or rephrase.";
|
|
21
22
|
const SLACK_TURN_FAILURE_MAX_CHARS = 400;
|
|
@@ -106,6 +107,8 @@ export function buildDefaultEvents(options = {}) {
|
|
|
106
107
|
const botToken = credentials === null || credentials === void 0 ? void 0 : credentials.botToken;
|
|
107
108
|
const getLog = (_b = options.getLog) !== null && _b !== void 0 ? _b : (() => defaultSlackLog);
|
|
108
109
|
const strategy = createStreamDeliveryStrategy({ botToken, getLog });
|
|
110
|
+
const progress = createProgressDelivery({ botToken, getLog });
|
|
111
|
+
const streamLive = (state) => streaming && !state.streamingUnavailable;
|
|
109
112
|
const clearWorkingStatus = (channelId, threadTs) => __awaiter(this, void 0, void 0, function* () {
|
|
110
113
|
const result = yield setThreadStatus({
|
|
111
114
|
botToken,
|
|
@@ -121,6 +124,51 @@ export function buildDefaultEvents(options = {}) {
|
|
|
121
124
|
});
|
|
122
125
|
}
|
|
123
126
|
});
|
|
127
|
+
const finishProgress = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
const log = getLog();
|
|
129
|
+
const state = args.channel.state;
|
|
130
|
+
if (state.channelId === null ||
|
|
131
|
+
state.threadTs === null ||
|
|
132
|
+
args.text === "") {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (yield progress.replace({ channel: args.channel, text: args.text })) {
|
|
136
|
+
log.info("reply delivered via progress update", {
|
|
137
|
+
channel: state.channelId,
|
|
138
|
+
thread_ts: state.threadTs,
|
|
139
|
+
session: args.sessionId,
|
|
140
|
+
chars: args.text.length,
|
|
141
|
+
});
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
yield progress.clear({ channel: args.channel });
|
|
145
|
+
try {
|
|
146
|
+
const posted = yield postMessage({
|
|
147
|
+
botToken,
|
|
148
|
+
channel: state.channelId,
|
|
149
|
+
text: args.text,
|
|
150
|
+
threadTs: state.threadTs,
|
|
151
|
+
});
|
|
152
|
+
state.lastPostedText = args.text;
|
|
153
|
+
state.lastBotMessageTs = posted.ts;
|
|
154
|
+
log.info("reply delivered via postMessage", {
|
|
155
|
+
channel: state.channelId,
|
|
156
|
+
thread_ts: state.threadTs,
|
|
157
|
+
message_ts: posted.ts,
|
|
158
|
+
session: args.sessionId,
|
|
159
|
+
chars: args.text.length,
|
|
160
|
+
});
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
log.error(`postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
165
|
+
channel: state.channelId,
|
|
166
|
+
thread_ts: state.threadTs,
|
|
167
|
+
session: args.sessionId,
|
|
168
|
+
});
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
124
172
|
/**
|
|
125
173
|
* Deliver assistant text to the bound Slack thread. Used by a stop-reason
|
|
126
174
|
* `message.completed` and by `turn.completed` when the last assistant
|
|
@@ -129,7 +177,6 @@ export function buildDefaultEvents(options = {}) {
|
|
|
129
177
|
*/
|
|
130
178
|
const deliverReplyText = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
131
179
|
var _a, _b;
|
|
132
|
-
const log = getLog();
|
|
133
180
|
const state = args.channel.state;
|
|
134
181
|
if (state.channelId === null ||
|
|
135
182
|
state.threadTs === null ||
|
|
@@ -141,8 +188,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
141
188
|
// pending. Treat a match as "already on Slack", not "already finalized".
|
|
142
189
|
const streamTs = state.streamTs;
|
|
143
190
|
if (streamTs !== null && streamTs !== "") {
|
|
144
|
-
|
|
145
|
-
if (canStream) {
|
|
191
|
+
if (streamLive(state)) {
|
|
146
192
|
yield strategy.finalize({
|
|
147
193
|
channel: args.channel,
|
|
148
194
|
channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
|
|
@@ -156,8 +202,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
156
202
|
}
|
|
157
203
|
return true;
|
|
158
204
|
}
|
|
159
|
-
|
|
160
|
-
if (canStream) {
|
|
205
|
+
if (streamLive(state)) {
|
|
161
206
|
const { delivered } = yield strategy.finalize({
|
|
162
207
|
channel: args.channel,
|
|
163
208
|
channelId: (_b = state.streamChannelId) !== null && _b !== void 0 ? _b : state.channelId,
|
|
@@ -168,43 +213,20 @@ export function buildDefaultEvents(options = {}) {
|
|
|
168
213
|
return true;
|
|
169
214
|
}
|
|
170
215
|
}
|
|
171
|
-
|
|
172
|
-
const posted = yield postMessage({
|
|
173
|
-
botToken,
|
|
174
|
-
channel: state.channelId,
|
|
175
|
-
text: args.text,
|
|
176
|
-
threadTs: state.threadTs,
|
|
177
|
-
});
|
|
178
|
-
state.lastPostedText = args.text;
|
|
179
|
-
state.lastBotMessageTs = posted.ts;
|
|
180
|
-
log.info("reply delivered via postMessage", {
|
|
181
|
-
channel: state.channelId,
|
|
182
|
-
thread_ts: state.threadTs,
|
|
183
|
-
message_ts: posted.ts,
|
|
184
|
-
session: args.sessionId,
|
|
185
|
-
chars: args.text.length,
|
|
186
|
-
});
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
log.error(`postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
191
|
-
channel: state.channelId,
|
|
192
|
-
thread_ts: state.threadTs,
|
|
193
|
-
session: args.sessionId,
|
|
194
|
-
});
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
216
|
+
return finishProgress(args);
|
|
197
217
|
});
|
|
198
218
|
return {
|
|
199
219
|
"turn.started"(event, channel) {
|
|
200
220
|
return __awaiter(this, void 0, void 0, function* () {
|
|
201
221
|
const log = getLog();
|
|
222
|
+
yield progress.clear({ channel });
|
|
202
223
|
channel.state.pendingToolCallMessage = null;
|
|
203
224
|
channel.state.lastReasoningTypingAtMs = null;
|
|
204
225
|
channel.state.lastReasoningTypingStatus = null;
|
|
205
226
|
channel.state.streamTs = null;
|
|
206
227
|
channel.state.streamChannelId = null;
|
|
207
228
|
channel.state.lastPostedText = null;
|
|
229
|
+
channel.state.streamBlockText = null;
|
|
208
230
|
// Keep lastBotMessageTs across turns — warm delta watermark.
|
|
209
231
|
channel.state.approvalMessageByCallId = {};
|
|
210
232
|
const state = channel.state;
|
|
@@ -229,7 +251,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
229
251
|
"message.appended"(event, channel) {
|
|
230
252
|
return __awaiter(this, void 0, void 0, function* () {
|
|
231
253
|
var _a;
|
|
232
|
-
if (!
|
|
254
|
+
if (!streamLive(channel.state)) {
|
|
233
255
|
return;
|
|
234
256
|
}
|
|
235
257
|
const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
|
|
@@ -292,8 +314,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
292
314
|
: truncateTypingStatus(`Running ${names.join(", ")}…`);
|
|
293
315
|
if (strategy.inlineToolSteps &&
|
|
294
316
|
thinkingSteps &&
|
|
295
|
-
|
|
296
|
-
channel.state.streamingUnavailable !== true) {
|
|
317
|
+
streamLive(channel.state)) {
|
|
297
318
|
const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
|
|
298
319
|
const threadTs = channel.state.threadTs;
|
|
299
320
|
if (channelId !== null && channelId !== "" && threadTs !== null) {
|
|
@@ -325,18 +346,23 @@ export function buildDefaultEvents(options = {}) {
|
|
|
325
346
|
threadTs: channel.state.threadTs,
|
|
326
347
|
status: statusText,
|
|
327
348
|
});
|
|
349
|
+
if (thinkingSteps &&
|
|
350
|
+
channel.state.streamingUnavailable === true &&
|
|
351
|
+
(channel.state.streamTs === null || channel.state.streamTs === "")) {
|
|
352
|
+
yield progress.upsert({ channel, text: statusText });
|
|
353
|
+
}
|
|
328
354
|
}
|
|
329
355
|
});
|
|
330
356
|
},
|
|
331
357
|
"action.result"(event, channel) {
|
|
332
358
|
return __awaiter(this, void 0, void 0, function* () {
|
|
333
359
|
var _a;
|
|
360
|
+
const streamTs = channel.state.streamTs;
|
|
334
361
|
if (!strategy.inlineToolSteps ||
|
|
335
362
|
!thinkingSteps ||
|
|
336
|
-
!
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
channel.state.streamTs === "") {
|
|
363
|
+
!streamLive(channel.state) ||
|
|
364
|
+
streamTs === null ||
|
|
365
|
+
streamTs === "") {
|
|
340
366
|
return;
|
|
341
367
|
}
|
|
342
368
|
const channelId = (_a = channel.state.streamChannelId) !== null && _a !== void 0 ? _a : channel.state.channelId;
|
|
@@ -351,7 +377,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
351
377
|
yield appendChatStream({
|
|
352
378
|
botToken,
|
|
353
379
|
channel: channelId,
|
|
354
|
-
ts:
|
|
380
|
+
ts: streamTs,
|
|
355
381
|
chunks: [chunk],
|
|
356
382
|
});
|
|
357
383
|
});
|
|
@@ -361,6 +387,9 @@ export function buildDefaultEvents(options = {}) {
|
|
|
361
387
|
var _a;
|
|
362
388
|
if (event.data.finishReason === "tool_call") {
|
|
363
389
|
channel.state.pendingToolCallMessage = (_a = firstNonEmptyLine(event.data.text)) !== null && _a !== void 0 ? _a : null;
|
|
390
|
+
// The harness restarts its cumulative text after a tool call, so the
|
|
391
|
+
// next block appends in full instead of diffing against this one.
|
|
392
|
+
channel.state.streamBlockText = null;
|
|
364
393
|
return;
|
|
365
394
|
}
|
|
366
395
|
channel.state.pendingToolCallMessage = null;
|
|
@@ -372,6 +401,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
372
401
|
// and clear typing.
|
|
373
402
|
if (event.data.text === "") {
|
|
374
403
|
yield strategy.finalizeEmpty({ channel });
|
|
404
|
+
yield progress.clear({ channel });
|
|
375
405
|
yield clearWorkingStatus(state.channelId, state.threadTs);
|
|
376
406
|
return;
|
|
377
407
|
}
|
|
@@ -410,6 +440,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
410
440
|
// Always close leftovers. deliverReplyText may fall through to
|
|
411
441
|
// postMessage when streaming is unavailable and leave streamTs open.
|
|
412
442
|
yield strategy.cleanupOrphan({ channel });
|
|
443
|
+
yield progress.clear({ channel });
|
|
413
444
|
// Always drop the assistant chip. message.completed already clears
|
|
414
445
|
// after a normal reply, but a tool-call-only finish (or a missed
|
|
415
446
|
// final assistant message) never hits that path — leaving
|
|
@@ -444,7 +475,7 @@ export function buildDefaultEvents(options = {}) {
|
|
|
444
475
|
}
|
|
445
476
|
const errorText = formatSlackTurnFailureMessage(event.data.message);
|
|
446
477
|
let delivered = false;
|
|
447
|
-
if (
|
|
478
|
+
if (streamLive(state)) {
|
|
448
479
|
({ delivered } = yield strategy.fail({
|
|
449
480
|
channel,
|
|
450
481
|
channelId: (_a = state.streamChannelId) !== null && _a !== void 0 ? _a : state.channelId,
|
|
@@ -453,21 +484,11 @@ export function buildDefaultEvents(options = {}) {
|
|
|
453
484
|
}));
|
|
454
485
|
}
|
|
455
486
|
if (!delivered) {
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
threadTs: state.threadTs,
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
catch (error) {
|
|
465
|
-
log.error(`turn.failed postMessage failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
466
|
-
channel: state.channelId,
|
|
467
|
-
thread_ts: state.threadTs,
|
|
468
|
-
session: event.sessionId,
|
|
469
|
-
});
|
|
470
|
-
}
|
|
487
|
+
yield finishProgress({
|
|
488
|
+
channel,
|
|
489
|
+
text: errorText,
|
|
490
|
+
sessionId: event.sessionId,
|
|
491
|
+
});
|
|
471
492
|
}
|
|
472
493
|
yield clearWorkingStatus(state.channelId, state.threadTs);
|
|
473
494
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/dispatch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,yCAAyC,CAAC;AAGjD,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,aAAa,EACd,MAAM,gBAAgB,CAAC;AAYxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAK7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU1D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAM1D,OAAO,KAAK,EAEV,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAEhB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAqDpB,uCAAuC;AACvC,wBAAgB,sBAAsB,CACpC,KAAK,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACrC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ function slackTurnMedia(args) {
|
|
|
56
56
|
}
|
|
57
57
|
/** Blank per-session adapter state. */
|
|
58
58
|
export function emptySlackChannelState(patch = {}) {
|
|
59
|
-
return Object.assign({ channelId: null, threadTs: null, teamId: null, triggeringUserId: null, pendingToolCallMessage: null, lastReasoningTypingAtMs: null, lastReasoningTypingStatus: null, streamTs: null, streamChannelId: null, lastPostedText: null, lastBotMessageTs: null, streamingUnavailable: false, approvalMessageByCallId: {} }, patch);
|
|
59
|
+
return Object.assign({ channelId: null, threadTs: null, teamId: null, triggeringUserId: null, pendingToolCallMessage: null, lastReasoningTypingAtMs: null, lastReasoningTypingStatus: null, streamTs: null, streamChannelId: null, lastPostedText: null, streamBlockText: null, lastBotMessageTs: null, streamingUnavailable: false, progressTs: null, approvalMessageByCallId: {} }, patch);
|
|
60
60
|
}
|
|
61
61
|
function triggeringMergeMessage(message) {
|
|
62
62
|
var _a, _b;
|
|
@@ -34,7 +34,7 @@ type StreamArgs = {
|
|
|
34
34
|
/**
|
|
35
35
|
* How the default handlers deliver an in-progress reply. Methods write live
|
|
36
36
|
* delivery state (`streamTs`, `streamChannelId`, `lastPostedText`,
|
|
37
|
-
* `streamingUnavailable`) on `channel.state` directly.
|
|
37
|
+
* `streamBlockText`, `streamingUnavailable`) on `channel.state` directly.
|
|
38
38
|
*/
|
|
39
39
|
export interface LiveDeliveryStrategy {
|
|
40
40
|
readonly inlineToolSteps: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/live-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAED,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,yEAAyE;IACzE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,CACV,IAAI,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,GAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB;;;OAGG;IACH,QAAQ,CACN,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAClC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CACF,IAAI,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GACvC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpC;AAmBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,gBAAgB,GACrB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"live-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/live-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAED,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,yEAAyE;IACzE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,CACV,IAAI,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,GAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB;;;OAGG;IACH,QAAQ,CACN,IAAI,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAClC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CACF,IAAI,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GACvC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpC;AAmBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,gBAAgB,GACrB,oBAAoB,CA4PtB"}
|
|
@@ -60,6 +60,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
60
60
|
channel.state.streamTs = started.ts;
|
|
61
61
|
channel.state.streamChannelId = started.channel;
|
|
62
62
|
channel.state.lastPostedText = hasMarkdown ? (markdown_text !== null && markdown_text !== void 0 ? markdown_text : "") : "";
|
|
63
|
+
channel.state.streamBlockText = channel.state.lastPostedText;
|
|
63
64
|
log.info("chat.startStream ok", {
|
|
64
65
|
channel: started.channel,
|
|
65
66
|
stream_ts: started.ts,
|
|
@@ -87,7 +88,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
87
88
|
return opened ? activeStreamTs(args.channel) : null;
|
|
88
89
|
});
|
|
89
90
|
const stopWithSuffix = (args) => __awaiter(this, void 0, void 0, function* () {
|
|
90
|
-
const appendText = computeStreamAppend(args.channel.state.
|
|
91
|
+
const appendText = computeStreamAppend(args.channel.state.streamBlockText, args.text);
|
|
91
92
|
const stopped = yield stopChatStream({
|
|
92
93
|
botToken,
|
|
93
94
|
channel: args.channelId,
|
|
@@ -129,7 +130,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
129
130
|
if (ts === null) {
|
|
130
131
|
return;
|
|
131
132
|
}
|
|
132
|
-
const appendText = computeStreamAppend(channel.state.
|
|
133
|
+
const appendText = computeStreamAppend(channel.state.streamBlockText, text);
|
|
133
134
|
if (appendText === "") {
|
|
134
135
|
return;
|
|
135
136
|
}
|
|
@@ -152,6 +153,7 @@ export function createStreamDeliveryStrategy(deps) {
|
|
|
152
153
|
return;
|
|
153
154
|
}
|
|
154
155
|
channel.state.lastPostedText = text;
|
|
156
|
+
channel.state.streamBlockText = text;
|
|
155
157
|
});
|
|
156
158
|
},
|
|
157
159
|
appendChunks(_a) {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mid-turn thread progress when `chat.startStream` is unavailable.
|
|
3
|
+
* One editable message; `setThreadStatus` stays on the caller.
|
|
4
|
+
*/
|
|
5
|
+
import type { ChannelEventContext } from "../../types.js";
|
|
6
|
+
import type { SlackLog } from "./log.js";
|
|
7
|
+
import type { SlackBotToken, SlackChannelState } from "./types.js";
|
|
8
|
+
type SlackChannel = ChannelEventContext<SlackChannelState>;
|
|
9
|
+
export interface ProgressDeliveryDeps {
|
|
10
|
+
botToken: SlackBotToken | undefined;
|
|
11
|
+
getLog: () => SlackLog;
|
|
12
|
+
}
|
|
13
|
+
export interface ProgressDelivery {
|
|
14
|
+
upsert(args: {
|
|
15
|
+
channel: SlackChannel;
|
|
16
|
+
text: string;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
replace(args: {
|
|
19
|
+
channel: SlackChannel;
|
|
20
|
+
text: string;
|
|
21
|
+
}): Promise<boolean>;
|
|
22
|
+
clear(args: {
|
|
23
|
+
channel: SlackChannel;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare function createProgressDelivery(deps: ProgressDeliveryDeps): ProgressDelivery;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=progress-delivery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/progress-delivery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAOD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,oBAAoB,GACzB,gBAAgB,CAsGlB"}
|