@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.
- package/dist/build-info.json +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +36 -1
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +69 -12
- package/dist/routes/issues.js.map +1 -1
- package/dist/services/attention.d.ts.map +1 -1
- package/dist/services/attention.js +4 -0
- package/dist/services/attention.js.map +1 -1
- package/dist/services/heartbeat/retries.d.ts +1 -0
- package/dist/services/heartbeat/retries.d.ts.map +1 -1
- package/dist/services/heartbeat/retries.js +8 -2
- package/dist/services/heartbeat/retries.js.map +1 -1
- package/dist/services/heartbeat/scheduling.d.ts.map +1 -1
- package/dist/services/heartbeat/scheduling.js +83 -2
- package/dist/services/heartbeat/scheduling.js.map +1 -1
- package/dist/services/heartbeat/workspaces.d.ts.map +1 -1
- package/dist/services/heartbeat/workspaces.js +16 -9
- package/dist/services/heartbeat/workspaces.js.map +1 -1
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +3 -3
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/native-runtime/status-decision-committer.d.ts +12 -0
- package/dist/services/native-runtime/status-decision-committer.d.ts.map +1 -1
- package/dist/services/native-runtime/status-decision-committer.js +67 -9
- package/dist/services/native-runtime/status-decision-committer.js.map +1 -1
- package/dist/services/recovery/service.d.ts +3 -2
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +12 -1
- package/dist/services/recovery/service.js.map +1 -1
- package/node_modules/@microsoft/teams.api/package.json +4 -4
- package/node_modules/@microsoft/teams.apps/dist/middleware/auth/inbound-activity-token-validator.d.ts +10 -0
- package/node_modules/@microsoft/teams.apps/dist/middleware/auth/inbound-activity-token-validator.js +22 -3
- package/node_modules/@microsoft/teams.apps/package.json +5 -5
- package/node_modules/@microsoft/teams.cards/package.json +2 -2
- package/node_modules/@microsoft/teams.common/package.json +2 -2
- package/node_modules/@microsoft/teams.graph/package.json +3 -3
- package/node_modules/@microsoft/teams.graph-endpoints/package.json +2 -2
- package/package.json +21 -21
- package/ui-dist/assets/{Agents.production-CVULb5cR.js → Agents.production-DpTtM4u0.js} +2 -2
- package/ui-dist/assets/{CompanyActivity.production-Wked11oO.js → CompanyActivity.production-DM91g5Qm.js} +1 -1
- package/ui-dist/assets/{CompanyExport-CsJNakda.js → CompanyExport-BBybWfOl.js} +1 -1
- package/ui-dist/assets/{CompanySkills.production-CXPBOlb3.js → CompanySkills.production-BhE1n37T.js} +1 -1
- package/ui-dist/assets/{OrgChart.production-BjDW9Rac.js → OrgChart.production-v5jbdAkS.js} +1 -1
- package/ui-dist/assets/{RoutineDetail.production-C03tDWie.js → RoutineDetail.production-CL8QlWKs.js} +1 -1
- package/ui-dist/assets/{Routines.production-CDaXZ2Kc.js → Routines.production-Be0sGmcv.js} +1 -1
- package/ui-dist/assets/{definition-CjvFnh6k.js → definition-INMCT-ER.js} +1 -1
- package/ui-dist/assets/{index-D4MfEOIw.js → index-CIfPzMR0.js} +5 -5
- package/ui-dist/index.html +1 -1
- package/ui-dist/sw.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/issues.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
13205
|
-
|
|
13206
|
-
|
|
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)
|