@tickernelz/paperclip-pro-server 2026.1016.2 → 2026.1017.0

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 (51) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/routes/agents.d.ts.map +1 -1
  3. package/dist/routes/agents.js +36 -1
  4. package/dist/routes/agents.js.map +1 -1
  5. package/dist/routes/issues.d.ts.map +1 -1
  6. package/dist/routes/issues.js +69 -12
  7. package/dist/routes/issues.js.map +1 -1
  8. package/dist/services/attention.d.ts.map +1 -1
  9. package/dist/services/attention.js +4 -0
  10. package/dist/services/attention.js.map +1 -1
  11. package/dist/services/heartbeat/retries.d.ts +1 -0
  12. package/dist/services/heartbeat/retries.d.ts.map +1 -1
  13. package/dist/services/heartbeat/retries.js +8 -2
  14. package/dist/services/heartbeat/retries.js.map +1 -1
  15. package/dist/services/heartbeat/scheduling.d.ts.map +1 -1
  16. package/dist/services/heartbeat/scheduling.js +83 -2
  17. package/dist/services/heartbeat/scheduling.js.map +1 -1
  18. package/dist/services/heartbeat/workspaces.d.ts.map +1 -1
  19. package/dist/services/heartbeat/workspaces.js +16 -9
  20. package/dist/services/heartbeat/workspaces.js.map +1 -1
  21. package/dist/services/heartbeat.d.ts.map +1 -1
  22. package/dist/services/heartbeat.js +3 -3
  23. package/dist/services/heartbeat.js.map +1 -1
  24. package/dist/services/native-runtime/status-decision-committer.d.ts +12 -0
  25. package/dist/services/native-runtime/status-decision-committer.d.ts.map +1 -1
  26. package/dist/services/native-runtime/status-decision-committer.js +67 -9
  27. package/dist/services/native-runtime/status-decision-committer.js.map +1 -1
  28. package/dist/services/recovery/service.d.ts +3 -2
  29. package/dist/services/recovery/service.d.ts.map +1 -1
  30. package/dist/services/recovery/service.js +12 -1
  31. package/dist/services/recovery/service.js.map +1 -1
  32. package/node_modules/@microsoft/teams.api/package.json +4 -4
  33. package/node_modules/@microsoft/teams.apps/dist/middleware/auth/inbound-activity-token-validator.d.ts +10 -0
  34. package/node_modules/@microsoft/teams.apps/dist/middleware/auth/inbound-activity-token-validator.js +22 -3
  35. package/node_modules/@microsoft/teams.apps/package.json +5 -5
  36. package/node_modules/@microsoft/teams.cards/package.json +2 -2
  37. package/node_modules/@microsoft/teams.common/package.json +2 -2
  38. package/node_modules/@microsoft/teams.graph/package.json +3 -3
  39. package/node_modules/@microsoft/teams.graph-endpoints/package.json +2 -2
  40. package/package.json +21 -21
  41. package/ui-dist/assets/{Agents.production-CVULb5cR.js → Agents.production-DpTtM4u0.js} +2 -2
  42. package/ui-dist/assets/{CompanyActivity.production-Wked11oO.js → CompanyActivity.production-DM91g5Qm.js} +1 -1
  43. package/ui-dist/assets/{CompanyExport-CsJNakda.js → CompanyExport-BBybWfOl.js} +1 -1
  44. package/ui-dist/assets/{CompanySkills.production-CXPBOlb3.js → CompanySkills.production-BhE1n37T.js} +1 -1
  45. package/ui-dist/assets/{OrgChart.production-BjDW9Rac.js → OrgChart.production-v5jbdAkS.js} +1 -1
  46. package/ui-dist/assets/{RoutineDetail.production-C03tDWie.js → RoutineDetail.production-CL8QlWKs.js} +1 -1
  47. package/ui-dist/assets/{Routines.production-CDaXZ2Kc.js → Routines.production-Be0sGmcv.js} +1 -1
  48. package/ui-dist/assets/{definition-CjvFnh6k.js → definition-INMCT-ER.js} +1 -1
  49. package/ui-dist/assets/{index-D4MfEOIw.js → index-CIfPzMR0.js} +5 -5
  50. package/ui-dist/index.html +1 -1
  51. package/ui-dist/sw.js +1 -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";
@@ -13143,13 +13144,31 @@ export function issueRoutes(db, storage, opts = {}) {
13143
13144
  * because you asked" from "you asked to steer and got a queue instead".
13144
13145
  */
13145
13146
  async function resolveMessageDeliveryDisposition(input) {
13147
+ const queued = async (steeringUnavailable, detail = {}) => {
13148
+ if (steeringUnavailable !== "not_requested") {
13149
+ try {
13150
+ await logQueuedCommentQueued({
13151
+ issue: input.issue,
13152
+ actor: input.actor,
13153
+ commentId: input.commentId,
13154
+ targetRunId: detail.targetRunId ?? null,
13155
+ reason: steeringUnavailable,
13156
+ errorCode: detail.errorCode ?? null,
13157
+ });
13158
+ }
13159
+ catch (err) {
13160
+ logger.warn({ err, issueId: input.issue.id, commentId: input.commentId, reason: steeringUnavailable }, "failed to record the queue reason for a posted comment");
13161
+ }
13162
+ }
13163
+ return { deliveredAs: "queued", steeringUnavailable };
13164
+ };
13146
13165
  const effective = input.requested ??
13147
13166
  (await instanceSettings.getGeneral()).defaultMessageDelivery;
13148
13167
  if (effective === "queue") {
13149
13168
  return { deliveredAs: "queued", steeringUnavailable: "not_requested" };
13150
13169
  }
13151
13170
  if (input.actor.actorType !== "agent" && !input.boardUserId) {
13152
- return { deliveredAs: "queued", steeringUnavailable: "board_only" };
13171
+ return queued("board_only");
13153
13172
  }
13154
13173
  if (input.actor.actorType === "agent" &&
13155
13174
  (!input.actor.agentId || input.actor.agentId === input.issue.assigneeAgentId)) {
@@ -13161,7 +13180,7 @@ export function issueRoutes(db, storage, opts = {}) {
13161
13180
  return false;
13162
13181
  });
13163
13182
  if (!maySteer)
13164
- return { deliveredAs: "queued", steeringUnavailable: "conversation_order" };
13183
+ return queued("conversation_order");
13165
13184
  }
13166
13185
  try {
13167
13186
  await input.wakeDispatch;
@@ -13171,14 +13190,11 @@ export function issueRoutes(db, storage, opts = {}) {
13171
13190
  }
13172
13191
  const resolved = await resolveQueuedSteeringTarget(input);
13173
13192
  if (resolved.kind === "unavailable") {
13174
- return { deliveredAs: "queued", steeringUnavailable: resolved.reason };
13193
+ return queued(resolved.reason);
13175
13194
  }
13176
13195
  const target = resolved.kind === "target" ? resolved.target : null;
13177
13196
  if (!target) {
13178
- return {
13179
- deliveredAs: "queued",
13180
- steeringUnavailable: input.requested === "steer" ? "no_active_run" : "not_requested",
13181
- };
13197
+ return queued(input.requested === "steer" ? "no_active_run" : "not_requested");
13182
13198
  }
13183
13199
  if (input.actor.actorType === "agent") {
13184
13200
  const blocked = await agentSteeringBlock({
@@ -13188,7 +13204,7 @@ export function issueRoutes(db, storage, opts = {}) {
13188
13204
  targetRunId: target.targetRunId,
13189
13205
  });
13190
13206
  if (blocked)
13191
- return { deliveredAs: "queued", steeringUnavailable: blocked };
13207
+ return queued(blocked, { targetRunId: target.targetRunId });
13192
13208
  }
13193
13209
  let steered;
13194
13210
  try {
@@ -13201,10 +13217,18 @@ export function issueRoutes(db, storage, opts = {}) {
13201
13217
  });
13202
13218
  }
13203
13219
  catch (error) {
13204
- return {
13205
- deliveredAs: "queued",
13206
- steeringUnavailable: steeringUnavailableFromError(error),
13207
- };
13220
+ if (steeringErrorCode(error) === "steering_stale_turn") {
13221
+ deferUntilAdapterTurnActive(target.targetRunId, async () => {
13222
+ const issue = await svc.getById(input.issue.id);
13223
+ if (!issue || issue.companyId !== input.issue.companyId)
13224
+ return;
13225
+ await resolveMessageDeliveryDisposition({ ...input, issue, wakeDispatch: Promise.resolve() });
13226
+ });
13227
+ }
13228
+ return queued(steeringUnavailableFromError(error), {
13229
+ targetRunId: target.targetRunId,
13230
+ errorCode: steeringErrorCode(error),
13231
+ });
13208
13232
  }
13209
13233
  try {
13210
13234
  await logQueuedCommentSteered({
@@ -13228,6 +13252,7 @@ export function issueRoutes(db, storage, opts = {}) {
13228
13252
  if (!["accepted", "answered", "rejected"].includes(interaction.status))
13229
13253
  return false;
13230
13254
  let steered = null;
13255
+ let targetRunId = null;
13231
13256
  const issue = await svc.getById(input.issueId).catch(() => null);
13232
13257
  if (!issue?.assigneeAgentId)
13233
13258
  return false;
@@ -13241,6 +13266,7 @@ export function issueRoutes(db, storage, opts = {}) {
13241
13266
  const resolved = await resolveQueuedSteeringTarget({ issue, commentId: interaction.id, actor });
13242
13267
  if (resolved.kind !== "target")
13243
13268
  return false;
13269
+ targetRunId = resolved.target.targetRunId;
13244
13270
  steered = {
13245
13271
  targetRunId: resolved.target.targetRunId,
13246
13272
  receipt: await steerQueuedCommentWithRetry({
@@ -13253,6 +13279,18 @@ export function issueRoutes(db, storage, opts = {}) {
13253
13279
  };
13254
13280
  }
13255
13281
  catch (err) {
13282
+ if (targetRunId && steeringErrorCode(err) === "steering_stale_turn") {
13283
+ deferUntilAdapterTurnActive(targetRunId, async () => {
13284
+ const [current] = await db
13285
+ .select()
13286
+ .from(issueThreadInteractions)
13287
+ .where(and(eq(issueThreadInteractions.id, interaction.id), eq(issueThreadInteractions.companyId, interaction.companyId)))
13288
+ .limit(1);
13289
+ if (!current || current.issueId !== input.issueId)
13290
+ return;
13291
+ await steerInteractionResponse({ ...input, interaction: current });
13292
+ });
13293
+ }
13256
13294
  logger.warn({ err, issueId: issue.id, interactionId: interaction.id, code: steeringErrorCode(err) }, "interaction response stays queued because steering was refused");
13257
13295
  return false;
13258
13296
  }
@@ -13428,6 +13466,25 @@ export function issueRoutes(db, storage, opts = {}) {
13428
13466
  },
13429
13467
  });
13430
13468
  }
13469
+ async function logQueuedCommentQueued(input) {
13470
+ await logActivity(db, {
13471
+ companyId: input.issue.companyId,
13472
+ actorType: input.actor.actorType,
13473
+ actorId: input.actor.actorId,
13474
+ agentId: input.actor.agentId,
13475
+ runId: input.actor.runId,
13476
+ agentApiKeyId: input.actor.agentApiKeyId,
13477
+ action: "issue.queued_comment_queued",
13478
+ entityType: "issue",
13479
+ entityId: input.issue.id,
13480
+ details: {
13481
+ commentId: input.commentId,
13482
+ targetRunId: input.targetRunId,
13483
+ reason: input.reason,
13484
+ errorCode: input.errorCode,
13485
+ },
13486
+ });
13487
+ }
13431
13488
  router.post("/issues/:id/queued-comments/:commentId/steer", validate(queuedCommentSteeringTargetSchema), async (req, res) => {
13432
13489
  assertBoard(req);
13433
13490
  if (!req.actor.userId)