@tickernelz/paperclip-pro-server 2026.1016.2 → 2026.1017.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/middleware/auth.d.ts.map +1 -1
  3. package/dist/middleware/auth.js +2 -0
  4. package/dist/middleware/auth.js.map +1 -1
  5. package/dist/routes/access.d.ts.map +1 -1
  6. package/dist/routes/access.js +24 -10
  7. package/dist/routes/access.js.map +1 -1
  8. package/dist/routes/agents.d.ts.map +1 -1
  9. package/dist/routes/agents.js +60 -10
  10. package/dist/routes/agents.js.map +1 -1
  11. package/dist/routes/approvals.d.ts.map +1 -1
  12. package/dist/routes/approvals.js +14 -10
  13. package/dist/routes/approvals.js.map +1 -1
  14. package/dist/routes/authz.d.ts +1 -0
  15. package/dist/routes/authz.d.ts.map +1 -1
  16. package/dist/routes/authz.js +26 -5
  17. package/dist/routes/authz.js.map +1 -1
  18. package/dist/routes/companies.d.ts.map +1 -1
  19. package/dist/routes/companies.js +18 -21
  20. package/dist/routes/companies.js.map +1 -1
  21. package/dist/routes/issues.d.ts.map +1 -1
  22. package/dist/routes/issues.js +80 -21
  23. package/dist/routes/issues.js.map +1 -1
  24. package/dist/routes/paperclip-mcp.d.ts.map +1 -1
  25. package/dist/routes/paperclip-mcp.js +13 -3
  26. package/dist/routes/paperclip-mcp.js.map +1 -1
  27. package/dist/routes/workspace-command-authz.d.ts.map +1 -1
  28. package/dist/routes/workspace-command-authz.js +2 -1
  29. package/dist/routes/workspace-command-authz.js.map +1 -1
  30. package/dist/routes/workspace-runtime-service-authz.d.ts.map +1 -1
  31. package/dist/routes/workspace-runtime-service-authz.js +5 -2
  32. package/dist/routes/workspace-runtime-service-authz.js.map +1 -1
  33. package/dist/services/agent-authority-escalation.js +2 -2
  34. package/dist/services/agent-authority-escalation.js.map +1 -1
  35. package/dist/services/attention.d.ts.map +1 -1
  36. package/dist/services/attention.js +4 -0
  37. package/dist/services/attention.js.map +1 -1
  38. package/dist/services/authorization.d.ts +1 -0
  39. package/dist/services/authorization.d.ts.map +1 -1
  40. package/dist/services/authorization.js +39 -3
  41. package/dist/services/authorization.js.map +1 -1
  42. package/dist/services/heartbeat/retries.d.ts +1 -0
  43. package/dist/services/heartbeat/retries.d.ts.map +1 -1
  44. package/dist/services/heartbeat/retries.js +8 -2
  45. package/dist/services/heartbeat/retries.js.map +1 -1
  46. package/dist/services/heartbeat/scheduling.d.ts.map +1 -1
  47. package/dist/services/heartbeat/scheduling.js +83 -2
  48. package/dist/services/heartbeat/scheduling.js.map +1 -1
  49. package/dist/services/heartbeat/workspaces.d.ts +4 -0
  50. package/dist/services/heartbeat/workspaces.d.ts.map +1 -1
  51. package/dist/services/heartbeat/workspaces.js +46 -9
  52. package/dist/services/heartbeat/workspaces.js.map +1 -1
  53. package/dist/services/heartbeat.d.ts.map +1 -1
  54. package/dist/services/heartbeat.js +3 -3
  55. package/dist/services/heartbeat.js.map +1 -1
  56. package/dist/services/native-runtime/status-decision-committer.d.ts +12 -0
  57. package/dist/services/native-runtime/status-decision-committer.d.ts.map +1 -1
  58. package/dist/services/native-runtime/status-decision-committer.js +67 -9
  59. package/dist/services/native-runtime/status-decision-committer.js.map +1 -1
  60. package/dist/services/native-runtime/task-reassignment.test.js +8 -1
  61. package/dist/services/native-runtime/task-reassignment.test.js.map +1 -1
  62. package/dist/services/recovery/service.d.ts +3 -2
  63. package/dist/services/recovery/service.d.ts.map +1 -1
  64. package/dist/services/recovery/service.js +12 -1
  65. package/dist/services/recovery/service.js.map +1 -1
  66. package/node_modules/@microsoft/teams.api/package.json +4 -4
  67. package/node_modules/@microsoft/teams.apps/dist/middleware/auth/inbound-activity-token-validator.d.ts +10 -0
  68. package/node_modules/@microsoft/teams.apps/dist/middleware/auth/inbound-activity-token-validator.js +22 -3
  69. package/node_modules/@microsoft/teams.apps/package.json +5 -5
  70. package/node_modules/@microsoft/teams.cards/package.json +2 -2
  71. package/node_modules/@microsoft/teams.common/package.json +2 -2
  72. package/node_modules/@microsoft/teams.graph/package.json +3 -3
  73. package/node_modules/@microsoft/teams.graph-endpoints/package.json +2 -2
  74. package/package.json +21 -21
  75. package/ui-dist/assets/{AgentAvatar-DZh8tNnK.js → AgentAvatar-Cy7DadMK.js} +1 -1
  76. package/ui-dist/assets/{Agents.production-CVULb5cR.js → Agents.production-BJyEbiQk.js} +2 -2
  77. package/ui-dist/assets/{BreadcrumbContext-Bxr1TyKN.js → BreadcrumbContext-CIC8QOSJ.js} +2 -2
  78. package/ui-dist/assets/{CompanyActivity.production-Wked11oO.js → CompanyActivity.production-Dp4ldx4P.js} +1 -1
  79. package/ui-dist/assets/{CompanyExport-CsJNakda.js → CompanyExport-BBAKbfHg.js} +2 -2
  80. package/ui-dist/assets/{CompanySkills.production-CXPBOlb3.js → CompanySkills.production-XuOHqAg6.js} +3 -3
  81. package/ui-dist/assets/{EmptyState-DliXLd04.js → EmptyState-Dvu_j1Dk.js} +1 -1
  82. package/ui-dist/assets/{MarkdownBody-B5ygzgk6.js → MarkdownBody-Dh6kczcO.js} +3 -3
  83. package/ui-dist/assets/{MarkdownEditor-D7suACD6.js → MarkdownEditor-nPcj3w4g.js} +4 -4
  84. package/ui-dist/assets/{OrgChart.production-BjDW9Rac.js → OrgChart.production-B-U1K3BO.js} +1 -1
  85. package/ui-dist/assets/{PageSkeleton-BZF4K6Hf.js → PageSkeleton-B858kNMV.js} +1 -1
  86. package/ui-dist/assets/{RoutineDetail.production-C03tDWie.js → RoutineDetail.production-DR37hdFP.js} +1 -1
  87. package/ui-dist/assets/{RoutineRunVariablesDialog-DE5hp-_u.js → RoutineRunVariablesDialog-TmqPj_PL.js} +2 -2
  88. package/ui-dist/assets/{Routines.production-CDaXZ2Kc.js → Routines.production-D4Jwvus7.js} +1 -1
  89. package/ui-dist/assets/{StatusIcon-YdJnE47W.js → StatusIcon-PIDWeOS3.js} +1 -1
  90. package/ui-dist/assets/{ToastContext-Dh8dPdr5.js → ToastContext-B6w8XXdu.js} +1 -1
  91. package/ui-dist/assets/{agent-avatar-url-BnmqahQ7.js → agent-avatar-url-Dp-4-Emx.js} +1 -1
  92. package/ui-dist/assets/{alert-dialog-BxpRolrb.js → alert-dialog-Cgn1_GT7.js} +1 -1
  93. package/ui-dist/assets/{arrow-right-bnOoaiPg.js → arrow-right-Dblp-MTW.js} +1 -1
  94. package/ui-dist/assets/{badge-D5aOL1Ll.js → badge-B6lcLGFG.js} +1 -1
  95. package/ui-dist/assets/{bot-DpNd1tv2.js → bot-BIsZWSPn.js} +1 -1
  96. package/ui-dist/assets/{card-PCL2aF_L.js → card-Byu34cBe.js} +1 -1
  97. package/ui-dist/assets/{check-BiXfODpl.js → check-AN9f-5s7.js} +1 -1
  98. package/ui-dist/assets/{checkbox-5wFlZdZn.js → checkbox-DVrU8RYw.js} +1 -1
  99. package/ui-dist/assets/{clipboard-CTmezHYG.js → clipboard-Bj1LrAus.js} +1 -1
  100. package/ui-dist/assets/{company-members-Dd6xBf6K.js → company-members-B3Kl56Wi.js} +1 -1
  101. package/ui-dist/assets/{definition-CjvFnh6k.js → definition-DSY4nExe.js} +1 -1
  102. package/ui-dist/assets/{dist-BrRwU9U9.js → dist-BoN0lntx.js} +1 -1
  103. package/ui-dist/assets/{dist-CvM0_U_m.js → dist-DNeg6Olm.js} +1 -1
  104. package/ui-dist/assets/{dist-CMegW-DS.js → dist-qobNlkwf.js} +1 -1
  105. package/ui-dist/assets/{environments-Bj-4l7Ol.js → environments-CnsaRGwX.js} +1 -1
  106. package/ui-dist/assets/{external-link-LnxJtUIq.js → external-link-DJ5KXpF5.js} +1 -1
  107. package/ui-dist/assets/{file-text-Ba5Wddur.js → file-text-BqJfYVg5.js} +1 -1
  108. package/ui-dist/assets/{health-D8T5Zr74.js → health-DXJ-aWLi.js} +1 -1
  109. package/ui-dist/assets/{heartbeats-Dae6h2SU.js → heartbeats-BoD7FLml.js} +1 -1
  110. package/ui-dist/assets/{index-D4MfEOIw.js → index-BVwUuuxT.js} +168 -168
  111. package/ui-dist/assets/{input-CtLHwxEw.js → input-BGjNwUvf.js} +1 -1
  112. package/ui-dist/assets/{label-YjU0jMtG.js → label-CKJXPwWx.js} +2 -2
  113. package/ui-dist/assets/{mention-chips-ClRmijVb.js → mention-chips-BovBgzq0.js} +1 -1
  114. package/ui-dist/assets/{rotate-ccw-2WnWy1fs.js → rotate-ccw-B7ntLtp4.js} +1 -1
  115. package/ui-dist/assets/{select-DRgGQ-iP.js → select-DIma4_VX.js} +1 -1
  116. package/ui-dist/assets/{sheet-CACWxbsc.js → sheet-C9tsiOQC.js} +1 -1
  117. package/ui-dist/assets/skeleton-CyS6Uq5n.js +1 -0
  118. package/ui-dist/assets/{tabs-BfOtoFWj.js → tabs-nc-7quf8.js} +1 -1
  119. package/ui-dist/assets/{use-adapter-capabilities-JhD0-FlQ.js → use-adapter-capabilities-DiUfxjZz.js} +1 -1
  120. package/ui-dist/assets/{use-copy-action-qHyHFl14.js → use-copy-action-RWCAx8p8.js} +1 -1
  121. package/ui-dist/assets/{useHiddenSettings-Dz7GWNDr.js → useHiddenSettings-Be7MTSIM.js} +1 -1
  122. package/ui-dist/index.html +39 -39
  123. package/ui-dist/sw.js +1 -1
  124. package/ui-dist/assets/skeleton-DCrngTtF.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { parseObject } from "../adapters/utils.js";
2
2
  import { enqueueFastResponse } from "../services/fast-responses.js";
3
+ import { deferUntilAdapterTurnActive } from "@tickernelz/paperclip-pro-adapter-utils/adapter-steer-registry";
3
4
  import { hasRequiredWorkspaceRecovery, LEGACY_WORKSPACE_RECOVERY_SCHEMA } from "../services/workspace-restore-recovery-state.js";
4
5
  import { monitorPoliciesEqual, applyActorMonitorScheduledBy, assertCanManageIssueMonitor, summarizeIssueMonitor } from "../services/issue-monitors.js";
5
6
  import { canActorReadHeartbeatRun } from "../services/heartbeat-run-privacy.js";
@@ -56,7 +57,7 @@ import { logger } from "../middleware/logger.js";
56
57
  import { badRequest, conflict, forbidden, HttpError, notFound, unauthorized, unprocessable, } from "../errors.js";
57
58
  import { privateJsonEtag } from "../middleware/private-json-etag.js";
58
59
  import { createRequestPromiseMemo } from "../lib/request-promise-memo.js";
59
- import { assertBoard, assertBoardOrAgentAuthority, assertCompanyAccess, getAccessibleResource, getActorInfo, hasAgentAuthority, } from "./authz.js";
60
+ import { assertBoard, assertBoardOrAgentAuthority, assertCompanyAccess, getAccessibleResource, getActorInfo, hasAgentAuthority, isCompanyOwnerAgentActor, } from "./authz.js";
60
61
  import { assertNoAgentHostWorkspaceCommandMutation, collectIssueWorkspaceCommandPaths, } from "./workspace-command-authz.js";
61
62
  import { shouldWakeAssigneeOnCheckout } from "./issues-checkout-wakeup.js";
62
63
  import { normalizeContentType, normalizeUploadAttachmentContentType, } from "../attachment-types.js";
@@ -2379,7 +2380,7 @@ export function issueRoutes(db, storage, opts = {}) {
2379
2380
  return resolveActorSourceTrustForIssue({ db, issue, actor });
2380
2381
  }
2381
2382
  async function assertCrossIssueInfluenceWithinRunCap(req, res, issue, kind) {
2382
- if (req.actor.type !== "agent")
2383
+ if (req.actor.type !== "agent" || isCompanyOwnerAgentActor(req))
2383
2384
  return true;
2384
2385
  if (!req.actor.agentId || !req.actor.runId)
2385
2386
  throw crossIssueInfluenceRunContextError();
@@ -2640,7 +2641,7 @@ export function issueRoutes(db, storage, opts = {}) {
2640
2641
  });
2641
2642
  }
2642
2643
  async function actorIsLowTrustReview(req, companyId, issue) {
2643
- if (req.actor.type !== "agent")
2644
+ if (req.actor.type !== "agent" || isCompanyOwnerAgentActor(req))
2644
2645
  return false;
2645
2646
  const resolution = await resolveAgentTrustForIssue({
2646
2647
  agentId: req.actor.agentId,
@@ -3861,7 +3862,7 @@ export function issueRoutes(db, storage, opts = {}) {
3861
3862
  async function assertAgentIssueMutationAllowed(req, res, issue, options = {}) {
3862
3863
  if (!(await assertIssueReadAllowed(req, res, issue)))
3863
3864
  return false;
3864
- if (req.actor.type !== "agent")
3865
+ if (req.actor.type !== "agent" || isCompanyOwnerAgentActor(req))
3865
3866
  return true;
3866
3867
  const actorAgentId = req.actor.agentId;
3867
3868
  if (!actorAgentId) {
@@ -7413,7 +7414,7 @@ export function issueRoutes(db, storage, opts = {}) {
7413
7414
  agentId: actor.agentId ?? null,
7414
7415
  userId: actor.actorType === "user" ? actor.actorId : null,
7415
7416
  },
7416
- allowBoardOverride: req.actor.type === "board" && req.actor.source !== "mcp_oauth",
7417
+ allowBoardOverride: (req.actor.type === "board" && req.actor.source !== "mcp_oauth") || isCompanyOwnerAgentActor(req),
7417
7418
  commentBody: resolutionNote ?? null,
7418
7419
  });
7419
7420
  Object.assign(updateFields, transition.patch);
@@ -10369,7 +10370,7 @@ export function issueRoutes(db, storage, opts = {}) {
10369
10370
  : null;
10370
10371
  const { comment: commentBody, commentClientRequestId, attachmentIds: commentAttachmentIds, reviewInteractionId: requestedReviewInteractionId, reviewRequest, reopen: reopenRequested, resume: resumeRequested, interrupt: interruptRequested, deferWakeForGoal, hiddenAt: hiddenAtRaw, expectedExecutionPolicy, onBehalfOfUserId: _requestedOnBehalfOfUserId, modelOverride: requestedModelOverride, ...updateFields } = req.body;
10371
10372
  if (requestedModelOverride !== undefined) {
10372
- if (req.actor.type === "agent") {
10373
+ if (req.actor.type === "agent" && !isCompanyOwnerAgentActor(req)) {
10373
10374
  res.status(403).json({
10374
10375
  error: "Agents cannot change the per-task model override",
10375
10376
  });
@@ -10567,7 +10568,7 @@ export function issueRoutes(db, storage, opts = {}) {
10567
10568
  });
10568
10569
  return;
10569
10570
  }
10570
- if (req.actor.type !== "board") {
10571
+ if (req.actor.type !== "board" && !isCompanyOwnerAgentActor(req)) {
10571
10572
  res.status(403).json({
10572
10573
  error: "Only board users can interrupt active runs from issue comments",
10573
10574
  });
@@ -10655,7 +10656,7 @@ export function issueRoutes(db, storage, opts = {}) {
10655
10656
  agentId: actor.agentId ?? null,
10656
10657
  userId: actor.actorType === "user" ? actor.actorId : null,
10657
10658
  },
10658
- allowBoardOverride: req.actor.type === "board" && req.actor.source !== "mcp_oauth",
10659
+ allowBoardOverride: (req.actor.type === "board" && req.actor.source !== "mcp_oauth") || isCompanyOwnerAgentActor(req),
10659
10660
  commentBody,
10660
10661
  reviewRequest: reviewRequest === undefined ? undefined : reviewRequest,
10661
10662
  monitorExplicitlyUpdated: req.body.executionPolicy !== undefined && monitorChanged,
@@ -10719,6 +10720,7 @@ export function issueRoutes(db, storage, opts = {}) {
10719
10720
  if (descriptor && typeof descriptor === "object") {
10720
10721
  const owner = descriptor.owner;
10721
10722
  if (req.actor.type === "agent" &&
10723
+ !isCompanyOwnerAgentActor(req) &&
10722
10724
  (owner === "board" || "userId" in owner)) {
10723
10725
  throw forbidden("Agents may only name themselves as an unblock owner");
10724
10726
  }
@@ -10732,6 +10734,7 @@ export function issueRoutes(db, storage, opts = {}) {
10732
10734
  if (!target)
10733
10735
  throw unprocessable("Unblock owner agent must belong to the issue company");
10734
10736
  if (req.actor.type === "agent" &&
10737
+ !isCompanyOwnerAgentActor(req) &&
10735
10738
  req.actor.agentId !== owner.agentId) {
10736
10739
  throw forbidden("Agents may only name themselves as an unblock owner");
10737
10740
  }
@@ -13143,13 +13146,31 @@ export function issueRoutes(db, storage, opts = {}) {
13143
13146
  * because you asked" from "you asked to steer and got a queue instead".
13144
13147
  */
13145
13148
  async function resolveMessageDeliveryDisposition(input) {
13149
+ const queued = async (steeringUnavailable, detail = {}) => {
13150
+ if (steeringUnavailable !== "not_requested") {
13151
+ try {
13152
+ await logQueuedCommentQueued({
13153
+ issue: input.issue,
13154
+ actor: input.actor,
13155
+ commentId: input.commentId,
13156
+ targetRunId: detail.targetRunId ?? null,
13157
+ reason: steeringUnavailable,
13158
+ errorCode: detail.errorCode ?? null,
13159
+ });
13160
+ }
13161
+ catch (err) {
13162
+ logger.warn({ err, issueId: input.issue.id, commentId: input.commentId, reason: steeringUnavailable }, "failed to record the queue reason for a posted comment");
13163
+ }
13164
+ }
13165
+ return { deliveredAs: "queued", steeringUnavailable };
13166
+ };
13146
13167
  const effective = input.requested ??
13147
13168
  (await instanceSettings.getGeneral()).defaultMessageDelivery;
13148
13169
  if (effective === "queue") {
13149
13170
  return { deliveredAs: "queued", steeringUnavailable: "not_requested" };
13150
13171
  }
13151
13172
  if (input.actor.actorType !== "agent" && !input.boardUserId) {
13152
- return { deliveredAs: "queued", steeringUnavailable: "board_only" };
13173
+ return queued("board_only");
13153
13174
  }
13154
13175
  if (input.actor.actorType === "agent" &&
13155
13176
  (!input.actor.agentId || input.actor.agentId === input.issue.assigneeAgentId)) {
@@ -13161,7 +13182,7 @@ export function issueRoutes(db, storage, opts = {}) {
13161
13182
  return false;
13162
13183
  });
13163
13184
  if (!maySteer)
13164
- return { deliveredAs: "queued", steeringUnavailable: "conversation_order" };
13185
+ return queued("conversation_order");
13165
13186
  }
13166
13187
  try {
13167
13188
  await input.wakeDispatch;
@@ -13171,14 +13192,11 @@ export function issueRoutes(db, storage, opts = {}) {
13171
13192
  }
13172
13193
  const resolved = await resolveQueuedSteeringTarget(input);
13173
13194
  if (resolved.kind === "unavailable") {
13174
- return { deliveredAs: "queued", steeringUnavailable: resolved.reason };
13195
+ return queued(resolved.reason);
13175
13196
  }
13176
13197
  const target = resolved.kind === "target" ? resolved.target : null;
13177
13198
  if (!target) {
13178
- return {
13179
- deliveredAs: "queued",
13180
- steeringUnavailable: input.requested === "steer" ? "no_active_run" : "not_requested",
13181
- };
13199
+ return queued(input.requested === "steer" ? "no_active_run" : "not_requested");
13182
13200
  }
13183
13201
  if (input.actor.actorType === "agent") {
13184
13202
  const blocked = await agentSteeringBlock({
@@ -13188,7 +13206,7 @@ export function issueRoutes(db, storage, opts = {}) {
13188
13206
  targetRunId: target.targetRunId,
13189
13207
  });
13190
13208
  if (blocked)
13191
- return { deliveredAs: "queued", steeringUnavailable: blocked };
13209
+ return queued(blocked, { targetRunId: target.targetRunId });
13192
13210
  }
13193
13211
  let steered;
13194
13212
  try {
@@ -13201,10 +13219,18 @@ export function issueRoutes(db, storage, opts = {}) {
13201
13219
  });
13202
13220
  }
13203
13221
  catch (error) {
13204
- return {
13205
- deliveredAs: "queued",
13206
- steeringUnavailable: steeringUnavailableFromError(error),
13207
- };
13222
+ if (steeringErrorCode(error) === "steering_stale_turn") {
13223
+ deferUntilAdapterTurnActive(target.targetRunId, async () => {
13224
+ const issue = await svc.getById(input.issue.id);
13225
+ if (!issue || issue.companyId !== input.issue.companyId)
13226
+ return;
13227
+ await resolveMessageDeliveryDisposition({ ...input, issue, wakeDispatch: Promise.resolve() });
13228
+ });
13229
+ }
13230
+ return queued(steeringUnavailableFromError(error), {
13231
+ targetRunId: target.targetRunId,
13232
+ errorCode: steeringErrorCode(error),
13233
+ });
13208
13234
  }
13209
13235
  try {
13210
13236
  await logQueuedCommentSteered({
@@ -13228,6 +13254,7 @@ export function issueRoutes(db, storage, opts = {}) {
13228
13254
  if (!["accepted", "answered", "rejected"].includes(interaction.status))
13229
13255
  return false;
13230
13256
  let steered = null;
13257
+ let targetRunId = null;
13231
13258
  const issue = await svc.getById(input.issueId).catch(() => null);
13232
13259
  if (!issue?.assigneeAgentId)
13233
13260
  return false;
@@ -13241,6 +13268,7 @@ export function issueRoutes(db, storage, opts = {}) {
13241
13268
  const resolved = await resolveQueuedSteeringTarget({ issue, commentId: interaction.id, actor });
13242
13269
  if (resolved.kind !== "target")
13243
13270
  return false;
13271
+ targetRunId = resolved.target.targetRunId;
13244
13272
  steered = {
13245
13273
  targetRunId: resolved.target.targetRunId,
13246
13274
  receipt: await steerQueuedCommentWithRetry({
@@ -13253,6 +13281,18 @@ export function issueRoutes(db, storage, opts = {}) {
13253
13281
  };
13254
13282
  }
13255
13283
  catch (err) {
13284
+ if (targetRunId && steeringErrorCode(err) === "steering_stale_turn") {
13285
+ deferUntilAdapterTurnActive(targetRunId, async () => {
13286
+ const [current] = await db
13287
+ .select()
13288
+ .from(issueThreadInteractions)
13289
+ .where(and(eq(issueThreadInteractions.id, interaction.id), eq(issueThreadInteractions.companyId, interaction.companyId)))
13290
+ .limit(1);
13291
+ if (!current || current.issueId !== input.issueId)
13292
+ return;
13293
+ await steerInteractionResponse({ ...input, interaction: current });
13294
+ });
13295
+ }
13256
13296
  logger.warn({ err, issueId: issue.id, interactionId: interaction.id, code: steeringErrorCode(err) }, "interaction response stays queued because steering was refused");
13257
13297
  return false;
13258
13298
  }
@@ -13428,6 +13468,25 @@ export function issueRoutes(db, storage, opts = {}) {
13428
13468
  },
13429
13469
  });
13430
13470
  }
13471
+ async function logQueuedCommentQueued(input) {
13472
+ await logActivity(db, {
13473
+ companyId: input.issue.companyId,
13474
+ actorType: input.actor.actorType,
13475
+ actorId: input.actor.actorId,
13476
+ agentId: input.actor.agentId,
13477
+ runId: input.actor.runId,
13478
+ agentApiKeyId: input.actor.agentApiKeyId,
13479
+ action: "issue.queued_comment_queued",
13480
+ entityType: "issue",
13481
+ entityId: input.issue.id,
13482
+ details: {
13483
+ commentId: input.commentId,
13484
+ targetRunId: input.targetRunId,
13485
+ reason: input.reason,
13486
+ errorCode: input.errorCode,
13487
+ },
13488
+ });
13489
+ }
13431
13490
  router.post("/issues/:id/queued-comments/:commentId/steer", validate(queuedCommentSteeringTargetSchema), async (req, res) => {
13432
13491
  assertBoard(req);
13433
13492
  if (!req.actor.userId)
@@ -15080,7 +15139,7 @@ export function issueRoutes(db, storage, opts = {}) {
15080
15139
  });
15081
15140
  }
15082
15141
  if (interruptRequested) {
15083
- if (req.actor.type !== "board") {
15142
+ if (req.actor.type !== "board" && !isCompanyOwnerAgentActor(req)) {
15084
15143
  res.status(403).json({
15085
15144
  error: "Only board users can interrupt active runs from issue comments",
15086
15145
  });