@cursor/july 0.1.94 → 0.1.96
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 +3 -4
- package/dist/channels/deployments/types.d.ts +1 -1
- package/dist/channels/deployments/types.d.ts.map +1 -1
- package/dist/channels/deployments/types.js +1 -0
- package/dist/channels/github/github-channel.d.ts.map +1 -1
- package/dist/channels/github/github-channel.js +14 -2
- package/dist/channels/github/types.d.ts +18 -3
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/origin/api.d.ts +59 -13
- package/dist/channels/origin/api.d.ts.map +1 -1
- package/dist/channels/origin/api.js +168 -27
- package/dist/channels/origin/binding.d.ts +2 -2
- package/dist/channels/origin/checks.d.ts +6 -6
- package/dist/channels/origin/checks.js +6 -6
- package/dist/channels/origin/cursor-account.d.ts +5 -3
- package/dist/channels/origin/cursor-account.d.ts.map +1 -1
- package/dist/channels/origin/cursor-account.js +5 -3
- package/dist/channels/origin/origin-channel.d.ts.map +1 -1
- package/dist/channels/origin/origin-channel.js +11 -3
- package/dist/channels/origin/origin-webhook.d.ts +11 -1
- package/dist/channels/origin/origin-webhook.d.ts.map +1 -1
- package/dist/channels/origin/origin-webhook.js +23 -3
- package/dist/channels/origin/types.d.ts +8 -0
- package/dist/channels/origin/types.d.ts.map +1 -1
- package/dist/channels/slack/api.d.ts +9 -0
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +36 -5
- package/dist/channels/slack/defaults.d.ts.map +1 -1
- package/dist/channels/slack/defaults.js +17 -46
- package/dist/channels/slack/dispatch.d.ts +7 -1
- package/dist/channels/slack/dispatch.d.ts.map +1 -1
- package/dist/channels/slack/dispatch.js +47 -23
- package/dist/channels/slack/inbound.d.ts +8 -0
- package/dist/channels/slack/inbound.d.ts.map +1 -1
- package/dist/channels/slack/inbound.js +32 -0
- package/dist/channels/slack/live-delivery.d.ts +26 -29
- package/dist/channels/slack/live-delivery.d.ts.map +1 -1
- package/dist/channels/slack/live-delivery.js +172 -73
- package/dist/channels/slack/manifest.d.ts.map +1 -1
- package/dist/channels/slack/manifest.js +5 -1
- package/dist/channels/slack/nudge-carrier.d.ts +2 -0
- package/dist/channels/slack/nudge-carrier.d.ts.map +1 -1
- package/dist/channels/slack/nudge-carrier.js +48 -1
- package/dist/channels/slack/pr-ref.d.ts +7 -1
- package/dist/channels/slack/pr-ref.d.ts.map +1 -1
- package/dist/channels/slack/pr-ref.js +42 -23
- package/dist/channels/slack/slack-channel.d.ts.map +1 -1
- package/dist/channels/slack/slack-channel.js +2 -2
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +4 -4
- package/dist/docs/assets/{app.CFDEas4I.js → app.jXleCmOc.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.DFoGuETX.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.B1IIYpYS.js → VPLocalSearchBox.8LhyglIT.js} +1 -1
- package/dist/docs/assets/chunks/{theme.Ct4NSiLm.js → theme.9ged-pr2.js} +2 -2
- package/dist/docs/assets/index.md.CI93Ltlb.js +5 -0
- package/dist/docs/assets/{index.md.DRakGHFe.lean.js → index.md.CI93Ltlb.lean.js} +1 -1
- package/dist/docs/assets/{reference_cli.md.Cw6_ICYG.js → reference_cli.md.CCnG-nJx.js} +4 -2
- package/dist/docs/assets/{reference_cli.md.Cw6_ICYG.lean.js → reference_cli.md.CCnG-nJx.lean.js} +1 -1
- package/dist/docs/assets/{reference_skills.md.8son6Hjm.js → reference_skills.md.BFW9retM.js} +3 -3
- package/dist/docs/assets/{templates_agentic-owners.md.DqtPdm6f.js → templates_agentic-owners.md.BZSH4N9z.js} +1 -1
- package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.js +2 -0
- package/dist/docs/assets/templates_code-wiki.md.CDYZIBFN.lean.js +1 -0
- package/dist/docs/assets/{templates_demo.md.DhFcWN6j.js → templates_demo.md.BeQX9V3H.js} +1 -1
- package/dist/docs/assets/{templates_pr-autofixer.md.DU7dQpor.js → templates_pr-autofixer.md.x5zl6-GT.js} +2 -2
- package/dist/docs/assets/{templates_pr-autofixer.md.DU7dQpor.lean.js → templates_pr-autofixer.md.x5zl6-GT.lean.js} +1 -1
- package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.js +4 -0
- package/dist/docs/assets/templates_security-help.md.C3Ny_Qr2.lean.js +1 -0
- package/dist/docs/assets/{templates_security-reviewer.md.CTa7u_l1.js → templates_security-reviewer.md.lshxbCLK.js} +2 -2
- package/dist/docs/assets/{templates_security-reviewer.md.CTa7u_l1.lean.js → templates_security-reviewer.md.lshxbCLK.lean.js} +1 -1
- package/dist/docs/assets/{templates_triage.md.CVlpctKS.js → templates_triage.md.Co4UNzkZ.js} +3 -3
- package/dist/docs/assets/{templates_triage.md.CVlpctKS.lean.js → templates_triage.md.Co4UNzkZ.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/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 +6 -6
- package/dist/docs/index.md +5 -1
- package/dist/docs/llms-full.txt +189 -26
- package/dist/docs/llms.txt +2 -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 +8 -6
- package/dist/docs/reference/cli.md +4 -1
- package/dist/docs/reference/connections.html +4 -4
- package/dist/docs/reference/hooks.html +4 -4
- package/dist/docs/reference/http-api.html +4 -4
- 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 +7 -7
- package/dist/docs/reference/subagents.html +4 -4
- package/dist/docs/reference/tools.html +4 -4
- package/dist/docs/scaffolding-agents.html +4 -4
- package/dist/docs/storage.html +4 -4
- package/dist/docs/templates/agentic-owners.html +7 -7
- package/dist/docs/templates/agentic-owners.md +1 -1
- package/dist/docs/templates/code-wiki.html +28 -0
- package/dist/docs/templates/code-wiki.md +91 -0
- package/dist/docs/templates/demo.html +6 -6
- package/dist/docs/templates/demo.md +3 -2
- package/dist/docs/templates/pr-autofixer.html +6 -6
- package/dist/docs/templates/pr-autofixer.md +7 -13
- package/dist/docs/templates/security-help.html +30 -0
- package/dist/docs/templates/security-help.md +65 -0
- package/dist/docs/templates/security-reviewer.html +6 -6
- package/dist/docs/templates/security-reviewer.md +1 -2
- package/dist/docs/templates/triage.html +7 -7
- package/dist/docs/templates/triage.md +2 -6
- package/dist/docs/troubleshooting.html +4 -4
- package/dist/files-backends/cursor-hosted.d.ts +26 -0
- package/dist/files-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/files-backends/cursor-hosted.js +32 -4
- package/dist/files.d.ts +2 -0
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +5 -0
- package/dist/internal/advertise-tools.d.ts +2 -0
- package/dist/internal/advertise-tools.d.ts.map +1 -1
- package/dist/internal/advertise-tools.js +15 -1
- package/dist/internal/bounded.d.ts +7 -0
- package/dist/internal/bounded.d.ts.map +1 -0
- package/dist/internal/bounded.js +32 -0
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +142 -7
- package/dist/internal/conversation-mirror.d.ts +85 -0
- package/dist/internal/conversation-mirror.d.ts.map +1 -0
- package/dist/internal/conversation-mirror.js +312 -0
- package/dist/internal/cursor/backend-client.d.ts.map +1 -1
- package/dist/internal/cursor/backend-client.js +22 -48
- package/dist/internal/cursor/session-token.d.ts +45 -0
- package/dist/internal/cursor/session-token.d.ts.map +1 -0
- package/dist/internal/cursor/session-token.js +99 -0
- package/dist/internal/cursor-agent-template.d.ts +1 -1
- package/dist/internal/cursor-agent-template.d.ts.map +1 -1
- package/dist/internal/cursor-agent-template.js +1 -0
- package/dist/internal/deferred-channel-session.d.ts +20 -0
- package/dist/internal/deferred-channel-session.d.ts.map +1 -0
- package/dist/internal/deferred-channel-session.js +62 -0
- package/dist/internal/deploy-client.d.ts +13 -1
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +11 -1
- package/dist/internal/deploy-manifest.d.ts.map +1 -1
- package/dist/internal/deploy-manifest.js +11 -5
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +22 -2
- package/dist/internal/framework-file-storage.d.ts +61 -0
- package/dist/internal/framework-file-storage.d.ts.map +1 -0
- package/dist/internal/framework-file-storage.js +204 -0
- package/dist/internal/framework-storage-selection.d.ts +38 -16
- package/dist/internal/framework-storage-selection.d.ts.map +1 -1
- package/dist/internal/framework-storage-selection.js +78 -17
- package/dist/internal/hosted-admission-context.d.ts +20 -0
- package/dist/internal/hosted-admission-context.d.ts.map +1 -0
- package/dist/internal/hosted-admission-context.js +31 -0
- package/dist/internal/hosted-delivery-protocol.d.ts +5 -0
- package/dist/internal/hosted-delivery-protocol.d.ts.map +1 -1
- package/dist/internal/hosted-delivery-protocol.js +33 -1
- package/dist/internal/hosted-delivery.d.ts +11 -2
- package/dist/internal/hosted-delivery.d.ts.map +1 -1
- package/dist/internal/hosted-delivery.js +79 -35
- package/dist/internal/hosted-managed-automation.d.ts +30 -0
- package/dist/internal/hosted-managed-automation.d.ts.map +1 -0
- package/dist/internal/hosted-managed-automation.js +58 -0
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +2 -0
- package/dist/internal/install-cursor-skills.d.ts.map +1 -1
- package/dist/internal/install-cursor-skills.js +1 -3
- package/dist/internal/managed-delivery.d.ts +80 -0
- package/dist/internal/managed-delivery.d.ts.map +1 -0
- package/dist/internal/managed-delivery.js +86 -0
- package/dist/internal/review-comments.d.ts.map +1 -1
- package/dist/internal/review-comments.js +10 -98
- package/dist/internal/runtime-dispatch-runner.d.ts +5 -1
- package/dist/internal/runtime-dispatch-runner.d.ts.map +1 -1
- package/dist/internal/runtime-dispatch-runner.js +7 -0
- package/dist/internal/scm/pr-url.d.ts +14 -0
- package/dist/internal/scm/pr-url.d.ts.map +1 -0
- package/dist/internal/scm/pr-url.js +65 -0
- package/dist/internal/sdk-runner.d.ts +25 -0
- package/dist/internal/sdk-runner.d.ts.map +1 -1
- package/dist/internal/sdk-runner.js +70 -0
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +11 -2
- package/dist/internal/session-engine.d.ts +13 -0
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +71 -3
- package/dist/internal/steering.d.ts +15 -0
- package/dist/internal/steering.d.ts.map +1 -0
- package/dist/internal/steering.js +18 -0
- package/dist/playground/assets/index-B1DDvBeC.css +1 -0
- package/dist/playground/assets/{index-B3JCyigB.js → index-Cx9CclK_.js} +47 -47
- package/dist/playground/index.html +2 -2
- package/dist/storage-backends/cursor-hosted.d.ts +8 -0
- package/dist/storage-backends/cursor-hosted.d.ts.map +1 -1
- package/dist/storage-backends/cursor-hosted.js +4 -3
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +5 -1
- package/docs/reference/cli.md +4 -1
- package/docs/templates/agentic-owners.md +1 -1
- package/docs/templates/code-wiki.md +96 -0
- package/docs/templates/demo.md +3 -2
- package/docs/templates/pr-autofixer.md +7 -13
- package/docs/templates/security-help.md +70 -0
- package/docs/templates/security-reviewer.md +1 -2
- package/docs/templates/triage.md +2 -6
- package/package.json +2 -2
- package/skills/ab/SKILL.md +13 -97
- package/skills/create-agent/SKILL.md +123 -223
- package/skills/debug/SKILL.md +34 -68
- package/skills/evals/SKILL.md +55 -180
- package/skills/framework-map/SKILL.md +83 -145
- package/skills/github/SKILL.md +53 -111
- package/skills/hillclimb/SKILL.md +40 -163
- package/skills/mcp-auth/SKILL.md +48 -107
- package/skills/otel/SKILL.md +22 -68
- package/skills/setup-slack/SKILL.md +77 -208
- package/src/channels/deployments/types.ts +1 -0
- package/src/channels/github/github-channel.ts +23 -8
- package/src/channels/github/types.ts +19 -2
- package/src/channels/origin/api.ts +242 -30
- package/src/channels/origin/binding.ts +2 -2
- package/src/channels/origin/checks.ts +6 -6
- package/src/channels/origin/cursor-account.ts +5 -3
- package/src/channels/origin/origin-channel.ts +13 -1
- package/src/channels/origin/origin-webhook.ts +27 -3
- package/src/channels/origin/types.ts +8 -0
- package/src/channels/slack/api.ts +41 -5
- package/src/channels/slack/defaults.ts +15 -49
- package/src/channels/slack/dispatch.ts +56 -22
- package/src/channels/slack/inbound.ts +43 -0
- package/src/channels/slack/live-delivery.ts +235 -114
- package/src/channels/slack/manifest.ts +5 -1
- package/src/channels/slack/nudge-carrier.ts +48 -1
- package/src/channels/slack/pr-ref.ts +56 -25
- package/src/channels/slack/slack-channel.ts +2 -0
- package/src/files-backends/cursor-hosted.ts +41 -2
- package/src/files.ts +11 -0
- package/src/internal/advertise-tools.ts +18 -2
- package/src/internal/bounded.ts +28 -0
- package/src/internal/cli-deploy.ts +183 -7
- package/src/internal/conversation-mirror.ts +406 -0
- package/src/internal/cursor/backend-client.ts +34 -58
- package/src/internal/cursor/session-token.ts +115 -0
- package/src/internal/cursor-agent-template.ts +1 -0
- package/src/internal/deferred-channel-session.ts +61 -0
- package/src/internal/deploy-client.ts +24 -1
- package/src/internal/deploy-manifest.ts +10 -5
- package/src/internal/discovery.ts +25 -2
- package/src/internal/framework-file-storage.ts +222 -0
- package/src/internal/framework-storage-selection.ts +101 -19
- package/src/internal/hosted-admission-context.ts +37 -0
- package/src/internal/hosted-delivery-protocol.ts +44 -1
- package/src/internal/hosted-delivery.ts +105 -40
- package/src/internal/hosted-managed-automation.ts +72 -0
- package/src/internal/init-project.ts +2 -0
- package/src/internal/install-cursor-skills.ts +1 -4
- package/src/internal/managed-delivery.ts +125 -0
- package/src/internal/review-comments.ts +10 -113
- package/src/internal/runtime-dispatch-runner.ts +10 -0
- package/src/internal/scm/pr-url.ts +95 -0
- package/src/internal/sdk-runner.ts +103 -0
- package/src/internal/server.ts +12 -0
- package/src/internal/session-engine.ts +76 -4
- package/src/internal/steering.ts +17 -0
- package/src/storage-backends/cursor-hosted.ts +10 -1
- package/src/types.ts +2 -1
- package/templates/agentic-owners/README.md +1 -1
- package/templates/agentic-owners/agent/agent.ts +0 -10
- package/templates/agentic-owners/agent/channels/github.ts +5 -14
- package/templates/agentic-owners/agent/lib/config.ts +0 -8
- package/templates/agentic-owners/agent/lib/review.ts +2 -15
- package/templates/agentic-owners/agent/tools/record_review.ts +2 -4
- package/templates/code-wiki/README.md +34 -0
- package/templates/code-wiki/agent/agent.ts +8 -0
- package/templates/code-wiki/agent/channels/github.ts +144 -0
- package/templates/code-wiki/agent/instructions.md +39 -0
- package/templates/code-wiki/agent/lib/repos.ts +5 -0
- package/templates/code-wiki/agent/lib/wiki.ts +22 -0
- package/templates/code-wiki/agent/tools/apply_wiki.ts +219 -0
- package/templates/code-wiki/evals/evals.config.ts +5 -0
- package/templates/code-wiki/evals/wiki.eval.ts +132 -0
- package/templates/code-wiki/init.json +25 -0
- package/templates/code-wiki/package.json +18 -0
- package/templates/code-wiki/tsconfig.json +12 -0
- package/templates/demo/agent/agent.ts +0 -10
- package/templates/pr-autofixer/README.md +0 -2
- package/templates/pr-autofixer/agent/agent.ts +0 -11
- package/templates/pr-autofixer/agent/channels/slack.ts +0 -7
- package/templates/pr-autofixer/agent/lib/pr-state.ts +5 -17
- package/templates/pr-autofixer/agent/lib/repos.ts +0 -1
- package/templates/security-help/README.md +2 -2
- package/templates/security-help/agent/agent.ts +1 -2
- package/templates/security-help/agent/channels/slack.ts +0 -3
- package/templates/security-help/agent/instructions.md +9 -10
- package/templates/security-help/agent/skills/access-request.md +1 -1
- package/templates/security-help/agent/skills/faq.md +31 -0
- package/templates/security-help/agent/skills/security-playbooks.md +1 -1
- package/templates/security-help/package.json +1 -2
- package/templates/security-reviewer/agent/agent.ts +0 -10
- package/templates/triage/agent/agent.ts +0 -10
- package/templates/triage/agent/channels/queue.ts +1 -1
- package/templates/triage/agent/channels/webhook.ts +1 -3
- package/dist/docs/assets/chunks/@localSearchIndexroot.DU3U2Ij2.js +0 -1
- package/dist/docs/assets/index.md.DRakGHFe.js +0 -5
- package/dist/internal/deployment-scm-event-stream.d.ts +0 -116
- package/dist/internal/deployment-scm-event-stream.d.ts.map +0 -1
- package/dist/internal/deployment-scm-event-stream.js +0 -474
- package/dist/playground/assets/index-D9N7-q97.css +0 -1
- package/src/internal/deployment-scm-event-stream.ts +0 -593
- package/templates/security-help/agent/knowledge/faq/approvals.md +0 -5
- package/templates/security-help/agent/knowledge/faq/channels.md +0 -6
- package/templates/security-help/agent/knowledge/faq/phishing.md +0 -10
- package/templates/security-help/agent/skills/security-first-pass.md +0 -15
- /package/dist/docs/assets/{reference_skills.md.8son6Hjm.lean.js → reference_skills.md.BFW9retM.lean.js} +0 -0
- /package/dist/docs/assets/{templates_agentic-owners.md.DqtPdm6f.lean.js → templates_agentic-owners.md.BZSH4N9z.lean.js} +0 -0
- /package/dist/docs/assets/{templates_demo.md.DhFcWN6j.lean.js → templates_demo.md.BeQX9V3H.lean.js} +0 -0
|
@@ -166,7 +166,7 @@ export function buildDefaultEvents(
|
|
|
166
166
|
status: "",
|
|
167
167
|
});
|
|
168
168
|
if (!result.ok) {
|
|
169
|
-
getLog().warn("
|
|
169
|
+
getLog().warn("slack setStatus not-ok", {
|
|
170
170
|
error: result.error,
|
|
171
171
|
channel: channelId,
|
|
172
172
|
thread_ts: threadTs,
|
|
@@ -205,42 +205,22 @@ export function buildDefaultEvents(
|
|
|
205
205
|
status: "Working…",
|
|
206
206
|
loadingMessages,
|
|
207
207
|
});
|
|
208
|
-
|
|
209
|
-
// Retry streaming each turn unless a prior call proved the feature
|
|
210
|
-
// unsupported for this workspace/app. Thinking stays on setStatus
|
|
211
|
-
// (Cursor-account proxy pins agent username/icon on that method).
|
|
212
|
-
if (!streaming || state.streamingUnavailable === true) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
await strategy.start({
|
|
217
|
-
channel,
|
|
218
|
-
channelId: state.channelId,
|
|
219
|
-
threadTs: state.threadTs,
|
|
220
|
-
sessionId: event.sessionId,
|
|
221
|
-
});
|
|
222
208
|
},
|
|
223
209
|
|
|
224
210
|
async "message.appended"(event, channel) {
|
|
225
211
|
if (!streaming || channel.state.streamingUnavailable === true) {
|
|
226
212
|
return;
|
|
227
213
|
}
|
|
228
|
-
const streamTs = channel.state.streamTs;
|
|
229
214
|
const channelId =
|
|
230
215
|
channel.state.streamChannelId ?? channel.state.channelId;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
streamTs === "" ||
|
|
234
|
-
channelId === null ||
|
|
235
|
-
channelId === ""
|
|
236
|
-
) {
|
|
216
|
+
const threadTs = channel.state.threadTs;
|
|
217
|
+
if (channelId === null || channelId === "" || threadTs === null) {
|
|
237
218
|
return;
|
|
238
219
|
}
|
|
239
220
|
|
|
240
221
|
await strategy.append({
|
|
241
222
|
channel,
|
|
242
223
|
channelId,
|
|
243
|
-
streamTs,
|
|
244
224
|
text: event.data.text,
|
|
245
225
|
sessionId: event.sessionId,
|
|
246
226
|
});
|
|
@@ -298,24 +278,23 @@ export function buildDefaultEvents(
|
|
|
298
278
|
strategy.inlineToolSteps &&
|
|
299
279
|
thinkingSteps &&
|
|
300
280
|
streaming &&
|
|
301
|
-
channel.state.streamingUnavailable !== true
|
|
302
|
-
channel.state.streamTs !== null &&
|
|
303
|
-
channel.state.streamTs !== ""
|
|
281
|
+
channel.state.streamingUnavailable !== true
|
|
304
282
|
) {
|
|
305
283
|
const channelId =
|
|
306
284
|
channel.state.streamChannelId ?? channel.state.channelId;
|
|
307
|
-
|
|
285
|
+
const threadTs = channel.state.threadTs;
|
|
286
|
+
if (channelId !== null && channelId !== "" && threadTs !== null) {
|
|
308
287
|
const chunks = buildTaskChunksForCalls(
|
|
309
288
|
event.data.calls,
|
|
310
289
|
"in_progress"
|
|
311
290
|
);
|
|
312
|
-
const
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
ts: channel.state.streamTs,
|
|
291
|
+
const streamed = await strategy.appendChunks({
|
|
292
|
+
channel,
|
|
293
|
+
channelId,
|
|
316
294
|
chunks,
|
|
295
|
+
sessionId: event.sessionId,
|
|
317
296
|
});
|
|
318
|
-
if (
|
|
297
|
+
if (streamed) {
|
|
319
298
|
if (
|
|
320
299
|
channel.state.channelId !== null &&
|
|
321
300
|
channel.state.threadTs !== null
|
|
@@ -388,29 +367,17 @@ export function buildDefaultEvents(
|
|
|
388
367
|
// Empty final text: still close any open stream / clear the skeleton
|
|
389
368
|
// and clear typing.
|
|
390
369
|
if (event.data.text === "") {
|
|
391
|
-
|
|
392
|
-
await strategy.finalizeEmpty({
|
|
393
|
-
channel,
|
|
394
|
-
channelId: state.streamChannelId ?? state.channelId,
|
|
395
|
-
streamTs: state.streamTs,
|
|
396
|
-
});
|
|
397
|
-
channel.state.streamTs = null;
|
|
398
|
-
}
|
|
370
|
+
await strategy.finalizeEmpty({ channel });
|
|
399
371
|
await clearWorkingStatus(state.channelId, state.threadTs);
|
|
400
372
|
return;
|
|
401
373
|
}
|
|
402
374
|
|
|
403
|
-
const canStream =
|
|
404
|
-
streaming &&
|
|
405
|
-
state.streamingUnavailable !== true &&
|
|
406
|
-
state.streamTs !== null &&
|
|
407
|
-
state.streamTs !== "";
|
|
375
|
+
const canStream = streaming && state.streamingUnavailable !== true;
|
|
408
376
|
|
|
409
|
-
if (canStream
|
|
377
|
+
if (canStream) {
|
|
410
378
|
const { delivered } = await strategy.finalize({
|
|
411
379
|
channel,
|
|
412
380
|
channelId: state.streamChannelId ?? state.channelId,
|
|
413
|
-
streamTs: state.streamTs,
|
|
414
381
|
text: event.data.text,
|
|
415
382
|
sessionId: event.sessionId,
|
|
416
383
|
});
|
|
@@ -509,11 +476,10 @@ export function buildDefaultEvents(
|
|
|
509
476
|
const errorText = formatSlackTurnFailureMessage(event.data.message);
|
|
510
477
|
|
|
511
478
|
let delivered = false;
|
|
512
|
-
if (
|
|
479
|
+
if (streaming && state.streamingUnavailable !== true) {
|
|
513
480
|
({ delivered } = await strategy.fail({
|
|
514
481
|
channel,
|
|
515
482
|
channelId: state.streamChannelId ?? state.channelId,
|
|
516
|
-
streamTs: state.streamTs,
|
|
517
483
|
errorText,
|
|
518
484
|
sessionId: event.sessionId,
|
|
519
485
|
}));
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
normalizeIdentity,
|
|
10
10
|
} from "../../internal/continuation-identity.js";
|
|
11
11
|
import { routeLocalIngressContinuation } from "../../internal/local-ingress.js";
|
|
12
|
+
import { steeringEnabled } from "../../internal/steering.js";
|
|
12
13
|
import type {
|
|
13
14
|
ArtifactsApi,
|
|
14
15
|
HostContext,
|
|
@@ -16,7 +17,11 @@ import type {
|
|
|
16
17
|
SendMessageFn,
|
|
17
18
|
} from "../../types.js";
|
|
18
19
|
import { buildSlackBinding, slackContinuationKey } from "./api.js";
|
|
19
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
firstLineTitle,
|
|
22
|
+
maybeSetSuggestedPrompts,
|
|
23
|
+
maybeSetThreadTitle,
|
|
24
|
+
} from "./assistant.js";
|
|
20
25
|
import {
|
|
21
26
|
appendSlackAttachmentAnnotations,
|
|
22
27
|
prepareSlackAttachments,
|
|
@@ -33,6 +38,7 @@ import { isExternalSlackSender } from "./external-policy.js";
|
|
|
33
38
|
import {
|
|
34
39
|
formatSlackContextBlock,
|
|
35
40
|
parseAppMentionEvent,
|
|
41
|
+
parseAssistantThreadStarted,
|
|
36
42
|
parseChannelMessageEvent,
|
|
37
43
|
parseDirectMessageEvent,
|
|
38
44
|
parseReactionAddedEvent,
|
|
@@ -51,6 +57,7 @@ import type {
|
|
|
51
57
|
SlackDispatchDecision,
|
|
52
58
|
SlackMessage,
|
|
53
59
|
SlackMessageHandler,
|
|
60
|
+
SlackSuggestedPrompt,
|
|
54
61
|
} from "./types.js";
|
|
55
62
|
|
|
56
63
|
const FOLLOWUP_TYPING = "Saw your follow-up…";
|
|
@@ -167,6 +174,12 @@ export interface SlackInboundDispatchDeps extends SlackContinuationProbes {
|
|
|
167
174
|
* `false` to admit them (or when an upstream gate already refused them).
|
|
168
175
|
*/
|
|
169
176
|
blockExternals?: boolean;
|
|
177
|
+
/**
|
|
178
|
+
* Suggested prompts written on `assistant_thread_started` so the
|
|
179
|
+
* assistant pane is not blank before the first user message.
|
|
180
|
+
*/
|
|
181
|
+
suggestedPrompts?: SlackSuggestedPrompt[];
|
|
182
|
+
suggestedPromptsTitle?: string;
|
|
170
183
|
}
|
|
171
184
|
|
|
172
185
|
function triggeringMergeMessage(
|
|
@@ -529,27 +542,24 @@ export async function dispatchInboundMessage(args: {
|
|
|
529
542
|
continuation,
|
|
530
543
|
event_id: args.eventId,
|
|
531
544
|
});
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
:
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
continuation,
|
|
551
|
-
event_id: args.eventId,
|
|
552
|
-
});
|
|
545
|
+
if (!steeringEnabled()) {
|
|
546
|
+
try {
|
|
547
|
+
await args.host.slackNudges?.append({
|
|
548
|
+
continuationKey: continuation,
|
|
549
|
+
sourceTs: message.ts,
|
|
550
|
+
text: media.userText,
|
|
551
|
+
author: message.author?.userName,
|
|
552
|
+
});
|
|
553
|
+
} catch (nudgeError) {
|
|
554
|
+
log.warn("nudge append failed", {
|
|
555
|
+
error:
|
|
556
|
+
nudgeError instanceof Error
|
|
557
|
+
? nudgeError.message
|
|
558
|
+
: String(nudgeError),
|
|
559
|
+
continuation,
|
|
560
|
+
event_id: args.eventId,
|
|
561
|
+
});
|
|
562
|
+
}
|
|
553
563
|
}
|
|
554
564
|
try {
|
|
555
565
|
if (args.followUpStatus !== false) {
|
|
@@ -750,6 +760,30 @@ export function dispatchInboundFromEventBody(
|
|
|
750
760
|
return true;
|
|
751
761
|
}
|
|
752
762
|
|
|
763
|
+
const assistantThread = parseAssistantThreadStarted(body);
|
|
764
|
+
if (assistantThread !== null) {
|
|
765
|
+
const prompts = deps.suggestedPrompts ?? [];
|
|
766
|
+
log.info("assistant thread started", {
|
|
767
|
+
channel: assistantThread.channelId,
|
|
768
|
+
thread_ts: assistantThread.threadTs,
|
|
769
|
+
user: assistantThread.userId,
|
|
770
|
+
event_id: eventId,
|
|
771
|
+
});
|
|
772
|
+
if (prompts.length > 0) {
|
|
773
|
+
deps.waitUntil(
|
|
774
|
+
maybeSetSuggestedPrompts({
|
|
775
|
+
botToken: deps.credentials?.botToken,
|
|
776
|
+
channelId: assistantThread.channelId,
|
|
777
|
+
threadTs: assistantThread.threadTs,
|
|
778
|
+
prompts,
|
|
779
|
+
title: deps.suggestedPromptsTitle,
|
|
780
|
+
log,
|
|
781
|
+
})
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
return true;
|
|
785
|
+
}
|
|
786
|
+
|
|
753
787
|
if (deps.channelWatch !== undefined) {
|
|
754
788
|
// Parse keeps bot-authored posts; the watcher enforces the per-channel
|
|
755
789
|
// policy (includeBotPosts, own-post loop safety) with skip logging.
|
|
@@ -121,6 +121,49 @@ export function parseAppMentionEvent(
|
|
|
121
121
|
return delegation === undefined ? message : { ...message, delegation };
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
export interface SlackAssistantThreadStarted {
|
|
125
|
+
channelId: string;
|
|
126
|
+
threadTs: string;
|
|
127
|
+
userId?: string;
|
|
128
|
+
teamId?: string;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Slack fires this when a user opens the assistant pane. No model turn. */
|
|
132
|
+
export function parseAssistantThreadStarted(
|
|
133
|
+
body: unknown
|
|
134
|
+
): SlackAssistantThreadStarted | null {
|
|
135
|
+
const root = asRecord(body);
|
|
136
|
+
if (root === null || root.type !== "event_callback") {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
const event = asRecord(root.event);
|
|
140
|
+
if (event === null || event.type !== "assistant_thread_started") {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const thread = asRecord(event.assistant_thread);
|
|
144
|
+
if (thread === null) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const channelId = asString(thread.channel_id);
|
|
148
|
+
const threadTs = asString(thread.thread_ts);
|
|
149
|
+
if (
|
|
150
|
+
channelId === undefined ||
|
|
151
|
+
channelId === "" ||
|
|
152
|
+
threadTs === undefined ||
|
|
153
|
+
threadTs === ""
|
|
154
|
+
) {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const userId = asString(thread.user_id);
|
|
158
|
+
const teamId = asString(root.team_id) ?? asString(event.team_id);
|
|
159
|
+
return {
|
|
160
|
+
channelId,
|
|
161
|
+
threadTs,
|
|
162
|
+
userId: userId === undefined || userId === "" ? undefined : userId,
|
|
163
|
+
teamId: teamId === undefined || teamId === "" ? undefined : teamId,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
124
167
|
/**
|
|
125
168
|
* Parse DM / IM messages. More generous than a strict channel_type check:
|
|
126
169
|
* accepts `channel_type === "im"` or channel ids starting with `D`, and
|