@tickernelz/paperclip-pro-server 2026.1017.0 → 2026.1017.2
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/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +2 -0
- package/dist/middleware/auth.js.map +1 -1
- package/dist/routes/access.d.ts.map +1 -1
- package/dist/routes/access.js +24 -10
- package/dist/routes/access.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +25 -10
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/approvals.d.ts.map +1 -1
- package/dist/routes/approvals.js +14 -10
- package/dist/routes/approvals.js.map +1 -1
- package/dist/routes/authz.d.ts +1 -0
- package/dist/routes/authz.d.ts.map +1 -1
- package/dist/routes/authz.js +26 -5
- package/dist/routes/authz.js.map +1 -1
- package/dist/routes/companies.d.ts.map +1 -1
- package/dist/routes/companies.js +18 -21
- package/dist/routes/companies.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +11 -9
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/paperclip-mcp.d.ts.map +1 -1
- package/dist/routes/paperclip-mcp.js +13 -3
- package/dist/routes/paperclip-mcp.js.map +1 -1
- package/dist/routes/workspace-command-authz.d.ts.map +1 -1
- package/dist/routes/workspace-command-authz.js +2 -1
- package/dist/routes/workspace-command-authz.js.map +1 -1
- package/dist/routes/workspace-runtime-service-authz.d.ts.map +1 -1
- package/dist/routes/workspace-runtime-service-authz.js +5 -2
- package/dist/routes/workspace-runtime-service-authz.js.map +1 -1
- package/dist/services/agent-authority-escalation.js +2 -2
- package/dist/services/agent-authority-escalation.js.map +1 -1
- package/dist/services/authorization.d.ts +1 -0
- package/dist/services/authorization.d.ts.map +1 -1
- package/dist/services/authorization.js +39 -3
- package/dist/services/authorization.js.map +1 -1
- package/dist/services/heartbeat/workspaces.d.ts +4 -0
- package/dist/services/heartbeat/workspaces.d.ts.map +1 -1
- package/dist/services/heartbeat/workspaces.js +31 -1
- package/dist/services/heartbeat/workspaces.js.map +1 -1
- package/dist/services/native-runtime/task-reassignment.test.js +8 -1
- package/dist/services/native-runtime/task-reassignment.test.js.map +1 -1
- package/package.json +21 -21
- package/ui-dist/assets/{AgentAvatar-DZh8tNnK.js → AgentAvatar-Cy7DadMK.js} +1 -1
- package/ui-dist/assets/{Agents.production-DpTtM4u0.js → Agents.production-BJyEbiQk.js} +2 -2
- package/ui-dist/assets/{BreadcrumbContext-Bxr1TyKN.js → BreadcrumbContext-CIC8QOSJ.js} +2 -2
- package/ui-dist/assets/{CompanyActivity.production-DM91g5Qm.js → CompanyActivity.production-Dp4ldx4P.js} +1 -1
- package/ui-dist/assets/{CompanyExport-BBybWfOl.js → CompanyExport-BBAKbfHg.js} +2 -2
- package/ui-dist/assets/{CompanySkills.production-BhE1n37T.js → CompanySkills.production-XuOHqAg6.js} +3 -3
- package/ui-dist/assets/{EmptyState-DliXLd04.js → EmptyState-Dvu_j1Dk.js} +1 -1
- package/ui-dist/assets/{MarkdownBody-B5ygzgk6.js → MarkdownBody-Dh6kczcO.js} +3 -3
- package/ui-dist/assets/{MarkdownEditor-D7suACD6.js → MarkdownEditor-nPcj3w4g.js} +4 -4
- package/ui-dist/assets/{OrgChart.production-v5jbdAkS.js → OrgChart.production-B-U1K3BO.js} +1 -1
- package/ui-dist/assets/{PageSkeleton-BZF4K6Hf.js → PageSkeleton-B858kNMV.js} +1 -1
- package/ui-dist/assets/{RoutineDetail.production-CL8QlWKs.js → RoutineDetail.production-DR37hdFP.js} +1 -1
- package/ui-dist/assets/{RoutineRunVariablesDialog-DE5hp-_u.js → RoutineRunVariablesDialog-TmqPj_PL.js} +2 -2
- package/ui-dist/assets/{Routines.production-Be0sGmcv.js → Routines.production-D4Jwvus7.js} +1 -1
- package/ui-dist/assets/{StatusIcon-YdJnE47W.js → StatusIcon-PIDWeOS3.js} +1 -1
- package/ui-dist/assets/{ToastContext-Dh8dPdr5.js → ToastContext-B6w8XXdu.js} +1 -1
- package/ui-dist/assets/{agent-avatar-url-BnmqahQ7.js → agent-avatar-url-Dp-4-Emx.js} +1 -1
- package/ui-dist/assets/{alert-dialog-BxpRolrb.js → alert-dialog-Cgn1_GT7.js} +1 -1
- package/ui-dist/assets/{arrow-right-bnOoaiPg.js → arrow-right-Dblp-MTW.js} +1 -1
- package/ui-dist/assets/{badge-D5aOL1Ll.js → badge-B6lcLGFG.js} +1 -1
- package/ui-dist/assets/{bot-DpNd1tv2.js → bot-BIsZWSPn.js} +1 -1
- package/ui-dist/assets/{card-PCL2aF_L.js → card-Byu34cBe.js} +1 -1
- package/ui-dist/assets/{check-BiXfODpl.js → check-AN9f-5s7.js} +1 -1
- package/ui-dist/assets/{checkbox-5wFlZdZn.js → checkbox-DVrU8RYw.js} +1 -1
- package/ui-dist/assets/{clipboard-CTmezHYG.js → clipboard-Bj1LrAus.js} +1 -1
- package/ui-dist/assets/{company-members-Dd6xBf6K.js → company-members-B3Kl56Wi.js} +1 -1
- package/ui-dist/assets/{definition-INMCT-ER.js → definition-DSY4nExe.js} +1 -1
- package/ui-dist/assets/{dist-BrRwU9U9.js → dist-BoN0lntx.js} +1 -1
- package/ui-dist/assets/{dist-CvM0_U_m.js → dist-DNeg6Olm.js} +1 -1
- package/ui-dist/assets/{dist-CMegW-DS.js → dist-qobNlkwf.js} +1 -1
- package/ui-dist/assets/{environments-Bj-4l7Ol.js → environments-CnsaRGwX.js} +1 -1
- package/ui-dist/assets/{external-link-LnxJtUIq.js → external-link-DJ5KXpF5.js} +1 -1
- package/ui-dist/assets/{file-text-Ba5Wddur.js → file-text-BqJfYVg5.js} +1 -1
- package/ui-dist/assets/{health-D8T5Zr74.js → health-DXJ-aWLi.js} +1 -1
- package/ui-dist/assets/{heartbeats-Dae6h2SU.js → heartbeats-BoD7FLml.js} +1 -1
- package/ui-dist/assets/{index-CIfPzMR0.js → index-BVwUuuxT.js} +168 -168
- package/ui-dist/assets/{input-CtLHwxEw.js → input-BGjNwUvf.js} +1 -1
- package/ui-dist/assets/{label-YjU0jMtG.js → label-CKJXPwWx.js} +2 -2
- package/ui-dist/assets/{mention-chips-ClRmijVb.js → mention-chips-BovBgzq0.js} +1 -1
- package/ui-dist/assets/{rotate-ccw-2WnWy1fs.js → rotate-ccw-B7ntLtp4.js} +1 -1
- package/ui-dist/assets/{select-DRgGQ-iP.js → select-DIma4_VX.js} +1 -1
- package/ui-dist/assets/{sheet-CACWxbsc.js → sheet-C9tsiOQC.js} +1 -1
- package/ui-dist/assets/skeleton-CyS6Uq5n.js +1 -0
- package/ui-dist/assets/{tabs-BfOtoFWj.js → tabs-nc-7quf8.js} +1 -1
- package/ui-dist/assets/{use-adapter-capabilities-JhD0-FlQ.js → use-adapter-capabilities-DiUfxjZz.js} +1 -1
- package/ui-dist/assets/{use-copy-action-qHyHFl14.js → use-copy-action-RWCAx8p8.js} +1 -1
- package/ui-dist/assets/{useHiddenSettings-Dz7GWNDr.js → useHiddenSettings-Be7MTSIM.js} +1 -1
- package/ui-dist/index.html +39 -39
- package/ui-dist/sw.js +1 -1
- 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":"AA0EA,OAAO,EAA4D,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAiCvE,OAAO,EAwDL,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAoC3B,MAAM,kCAAkC,CAAC;AAI1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAUL,gBAAgB,EAmBjB,MAAM,sBAAsB,CAAC;AAoC9B,OAAO,KAAK,EACV,uBAAuB,EAExB,MAAM,+BAA+B,CAAC;
|
|
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
|
@@ -57,7 +57,7 @@ import { logger } from "../middleware/logger.js";
|
|
|
57
57
|
import { badRequest, conflict, forbidden, HttpError, notFound, unauthorized, unprocessable, } from "../errors.js";
|
|
58
58
|
import { privateJsonEtag } from "../middleware/private-json-etag.js";
|
|
59
59
|
import { createRequestPromiseMemo } from "../lib/request-promise-memo.js";
|
|
60
|
-
import { assertBoard, assertBoardOrAgentAuthority, assertCompanyAccess, getAccessibleResource, getActorInfo, hasAgentAuthority, } from "./authz.js";
|
|
60
|
+
import { assertBoard, assertBoardOrAgentAuthority, assertCompanyAccess, getAccessibleResource, getActorInfo, hasAgentAuthority, isCompanyOwnerAgentActor, } from "./authz.js";
|
|
61
61
|
import { assertNoAgentHostWorkspaceCommandMutation, collectIssueWorkspaceCommandPaths, } from "./workspace-command-authz.js";
|
|
62
62
|
import { shouldWakeAssigneeOnCheckout } from "./issues-checkout-wakeup.js";
|
|
63
63
|
import { normalizeContentType, normalizeUploadAttachmentContentType, } from "../attachment-types.js";
|
|
@@ -2380,7 +2380,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
2380
2380
|
return resolveActorSourceTrustForIssue({ db, issue, actor });
|
|
2381
2381
|
}
|
|
2382
2382
|
async function assertCrossIssueInfluenceWithinRunCap(req, res, issue, kind) {
|
|
2383
|
-
if (req.actor.type !== "agent")
|
|
2383
|
+
if (req.actor.type !== "agent" || isCompanyOwnerAgentActor(req))
|
|
2384
2384
|
return true;
|
|
2385
2385
|
if (!req.actor.agentId || !req.actor.runId)
|
|
2386
2386
|
throw crossIssueInfluenceRunContextError();
|
|
@@ -2641,7 +2641,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
2641
2641
|
});
|
|
2642
2642
|
}
|
|
2643
2643
|
async function actorIsLowTrustReview(req, companyId, issue) {
|
|
2644
|
-
if (req.actor.type !== "agent")
|
|
2644
|
+
if (req.actor.type !== "agent" || isCompanyOwnerAgentActor(req))
|
|
2645
2645
|
return false;
|
|
2646
2646
|
const resolution = await resolveAgentTrustForIssue({
|
|
2647
2647
|
agentId: req.actor.agentId,
|
|
@@ -3862,7 +3862,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
3862
3862
|
async function assertAgentIssueMutationAllowed(req, res, issue, options = {}) {
|
|
3863
3863
|
if (!(await assertIssueReadAllowed(req, res, issue)))
|
|
3864
3864
|
return false;
|
|
3865
|
-
if (req.actor.type !== "agent")
|
|
3865
|
+
if (req.actor.type !== "agent" || isCompanyOwnerAgentActor(req))
|
|
3866
3866
|
return true;
|
|
3867
3867
|
const actorAgentId = req.actor.agentId;
|
|
3868
3868
|
if (!actorAgentId) {
|
|
@@ -7414,7 +7414,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
7414
7414
|
agentId: actor.agentId ?? null,
|
|
7415
7415
|
userId: actor.actorType === "user" ? actor.actorId : null,
|
|
7416
7416
|
},
|
|
7417
|
-
allowBoardOverride: req.actor.type === "board" && req.actor.source !== "mcp_oauth",
|
|
7417
|
+
allowBoardOverride: (req.actor.type === "board" && req.actor.source !== "mcp_oauth") || isCompanyOwnerAgentActor(req),
|
|
7418
7418
|
commentBody: resolutionNote ?? null,
|
|
7419
7419
|
});
|
|
7420
7420
|
Object.assign(updateFields, transition.patch);
|
|
@@ -10370,7 +10370,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
10370
10370
|
: null;
|
|
10371
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;
|
|
10372
10372
|
if (requestedModelOverride !== undefined) {
|
|
10373
|
-
if (req.actor.type === "agent") {
|
|
10373
|
+
if (req.actor.type === "agent" && !isCompanyOwnerAgentActor(req)) {
|
|
10374
10374
|
res.status(403).json({
|
|
10375
10375
|
error: "Agents cannot change the per-task model override",
|
|
10376
10376
|
});
|
|
@@ -10568,7 +10568,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
10568
10568
|
});
|
|
10569
10569
|
return;
|
|
10570
10570
|
}
|
|
10571
|
-
if (req.actor.type !== "board") {
|
|
10571
|
+
if (req.actor.type !== "board" && !isCompanyOwnerAgentActor(req)) {
|
|
10572
10572
|
res.status(403).json({
|
|
10573
10573
|
error: "Only board users can interrupt active runs from issue comments",
|
|
10574
10574
|
});
|
|
@@ -10656,7 +10656,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
10656
10656
|
agentId: actor.agentId ?? null,
|
|
10657
10657
|
userId: actor.actorType === "user" ? actor.actorId : null,
|
|
10658
10658
|
},
|
|
10659
|
-
allowBoardOverride: req.actor.type === "board" && req.actor.source !== "mcp_oauth",
|
|
10659
|
+
allowBoardOverride: (req.actor.type === "board" && req.actor.source !== "mcp_oauth") || isCompanyOwnerAgentActor(req),
|
|
10660
10660
|
commentBody,
|
|
10661
10661
|
reviewRequest: reviewRequest === undefined ? undefined : reviewRequest,
|
|
10662
10662
|
monitorExplicitlyUpdated: req.body.executionPolicy !== undefined && monitorChanged,
|
|
@@ -10720,6 +10720,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
10720
10720
|
if (descriptor && typeof descriptor === "object") {
|
|
10721
10721
|
const owner = descriptor.owner;
|
|
10722
10722
|
if (req.actor.type === "agent" &&
|
|
10723
|
+
!isCompanyOwnerAgentActor(req) &&
|
|
10723
10724
|
(owner === "board" || "userId" in owner)) {
|
|
10724
10725
|
throw forbidden("Agents may only name themselves as an unblock owner");
|
|
10725
10726
|
}
|
|
@@ -10733,6 +10734,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
10733
10734
|
if (!target)
|
|
10734
10735
|
throw unprocessable("Unblock owner agent must belong to the issue company");
|
|
10735
10736
|
if (req.actor.type === "agent" &&
|
|
10737
|
+
!isCompanyOwnerAgentActor(req) &&
|
|
10736
10738
|
req.actor.agentId !== owner.agentId) {
|
|
10737
10739
|
throw forbidden("Agents may only name themselves as an unblock owner");
|
|
10738
10740
|
}
|
|
@@ -15137,7 +15139,7 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
15137
15139
|
});
|
|
15138
15140
|
}
|
|
15139
15141
|
if (interruptRequested) {
|
|
15140
|
-
if (req.actor.type !== "board") {
|
|
15142
|
+
if (req.actor.type !== "board" && !isCompanyOwnerAgentActor(req)) {
|
|
15141
15143
|
res.status(403).json({
|
|
15142
15144
|
error: "Only board users can interrupt active runs from issue comments",
|
|
15143
15145
|
});
|