@penclipai/server 2026.606.0 → 2026.607.0-canary.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.
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +45 -2
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +55 -26
- package/dist/routes/issues.js.map +1 -1
- package/dist/services/access.d.ts.map +1 -1
- package/dist/services/access.js +3 -16
- package/dist/services/access.js.map +1 -1
- package/dist/services/agent-assignability.d.ts +7 -0
- package/dist/services/agent-assignability.d.ts.map +1 -0
- package/dist/services/agent-assignability.js +135 -0
- package/dist/services/agent-assignability.js.map +1 -0
- package/dist/services/agent-invokability.d.ts +18 -0
- package/dist/services/agent-invokability.d.ts.map +1 -0
- package/dist/services/agent-invokability.js +105 -0
- package/dist/services/agent-invokability.js.map +1 -0
- package/dist/services/agents.d.ts +30 -30
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/agents.js +57 -20
- package/dist/services/agents.js.map +1 -1
- package/dist/services/company-artifacts.d.ts.map +1 -1
- package/dist/services/company-artifacts.js +218 -37
- package/dist/services/company-artifacts.js.map +1 -1
- package/dist/services/company-portability.d.ts.map +1 -1
- package/dist/services/company-portability.js +7 -1
- package/dist/services/company-portability.js.map +1 -1
- package/dist/services/heartbeat.d.ts +26 -0
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +374 -26
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +2 -0
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/issue-thread-interactions.d.ts.map +1 -1
- package/dist/services/issue-thread-interactions.js +88 -16
- package/dist/services/issue-thread-interactions.js.map +1 -1
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.js +42 -30
- package/dist/services/issues.js.map +1 -1
- package/dist/services/projects.d.ts +22 -1
- package/dist/services/projects.d.ts.map +1 -1
- package/dist/services/projects.js +63 -11
- package/dist/services/projects.js.map +1 -1
- package/dist/services/recovery/issue-graph-liveness.d.ts.map +1 -1
- package/dist/services/recovery/issue-graph-liveness.js +13 -11
- package/dist/services/recovery/issue-graph-liveness.js.map +1 -1
- package/dist/services/recovery/service.d.ts +1 -1
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +35 -15
- package/dist/services/recovery/service.js.map +1 -1
- package/dist/services/routines.d.ts.map +1 -1
- package/dist/services/routines.js +9 -22
- package/dist/services/routines.js.map +1 -1
- package/package.json +17 -17
- package/skills/paperclip/SKILL.md +65 -0
- package/skills/paperclip/references/api-reference.md +114 -2
- package/ui-dist/assets/{_basePickBy-TwuHwDU_.js → _basePickBy-C_RfFMia.js} +1 -1
- package/ui-dist/assets/{_baseUniq-DuuKaf0j.js → _baseUniq-_Nh234nR.js} +1 -1
- package/ui-dist/assets/{arc-BgpxUYR5.js → arc-B6vfQ3hb.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-VXUJARFQ-D0LieYas.js → architectureDiagram-VXUJARFQ-LjysPQSA.js} +1 -1
- package/ui-dist/assets/{blockDiagram-VD42YOAC-DnzdgLaQ.js → blockDiagram-VD42YOAC-BAf2Yjuq.js} +1 -1
- package/ui-dist/assets/{browser-ponyfill-BHNpAVhF.js → browser-ponyfill-A_VMEFyN.js} +1 -1
- package/ui-dist/assets/{c4Diagram-YG6GDRKO-BsuUgR_L.js → c4Diagram-YG6GDRKO-uVqFOYss.js} +1 -1
- package/ui-dist/assets/channel-R0XihF9S.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-BDzzaLI6.js → chunk-4BX2VUAB-nNtt6J07.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-D4EgylLx.js → chunk-55IACEB6-DbJ6uUpi.js} +1 -1
- package/ui-dist/assets/{chunk-B4BG7PRW-CR1mzzPr.js → chunk-B4BG7PRW-Cr5YohVk.js} +1 -1
- package/ui-dist/assets/{chunk-DI55MBZ5-BhiYJ0P4.js → chunk-DI55MBZ5-xjTTC5J2.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-Y3rBUhsS.js → chunk-FMBD7UC4-CuibM5vb.js} +1 -1
- package/ui-dist/assets/{chunk-QN33PNHL-Cx5QljBr.js → chunk-QN33PNHL-C11huAJQ.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-DVnkMPhf.js → chunk-QZHKN3VN-DMJ4N7Eq.js} +1 -1
- package/ui-dist/assets/{chunk-TZMSLE5B-CA7vlAtP.js → chunk-TZMSLE5B-CvJhJE9b.js} +1 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-C9TrzeXY.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-C9TrzeXY.js +1 -0
- package/ui-dist/assets/clone-CKFqIcB2.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-C8kNbQd4.js → cose-bilkent-S5V4N54A-CS590I9i.js} +1 -1
- package/ui-dist/assets/{dagre-6UL2VRFP-BvsKb7Nu.js → dagre-6UL2VRFP-0S-rsgGN.js} +1 -1
- package/ui-dist/assets/{diagram-PSM6KHXK-Bl4U3FBt.js → diagram-PSM6KHXK-DcFNrhxL.js} +1 -1
- package/ui-dist/assets/{diagram-QEK2KX5R-D28oLdAY.js → diagram-QEK2KX5R-zleFWuFt.js} +1 -1
- package/ui-dist/assets/{diagram-S2PKOQOG-B27cZY7U.js → diagram-S2PKOQOG-CPxtM9BN.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q2GNP2WA-Cy2_8xkh.js → erDiagram-Q2GNP2WA-DzYsy5xN.js} +1 -1
- package/ui-dist/assets/{flowDiagram-NV44I4VS-O8Ocbvtr.js → flowDiagram-NV44I4VS-pXGIbLNU.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-JELNMOA3-BQj50wKn.js → ganttDiagram-JELNMOA3-CTBIhGYq.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-mNj0TeBq.js → gitGraphDiagram-V2S2FVAM-BQfUowxh.js} +1 -1
- package/ui-dist/assets/{graph-Dty_XUDs.js → graph-BOJRKArF.js} +1 -1
- package/ui-dist/assets/index-BB-1FtQG.css +1 -0
- package/ui-dist/assets/index-BDwOd4Jc.js +537 -0
- package/ui-dist/assets/{index-C3GnEQ6-.js → index-BIGaNz6F.js} +1 -1
- package/ui-dist/assets/{index-DeaoIrBt.js → index-Bcf_MLn-.js} +1 -1
- package/ui-dist/assets/{index-D_4hho87.js → index-BhE_j01J.js} +1 -1
- package/ui-dist/assets/{index-BgdZTAqj.js → index-Bme3l0Br.js} +1 -1
- package/ui-dist/assets/{index-don1PrSS.js → index-Bq4D3Ugy.js} +1 -1
- package/ui-dist/assets/{index-B7k3IRuF.js → index-CTMiQ6mz.js} +1 -1
- package/ui-dist/assets/{index-B5Mtf_qq.js → index-CbZz32z-.js} +1 -1
- package/ui-dist/assets/{index-By8F7c6-.js → index-Crz3Cw5T.js} +1 -1
- package/ui-dist/assets/{index-ekDXpSjG.js → index-D73xzJsm.js} +1 -1
- package/ui-dist/assets/{index-DpwPLTpO.js → index-DDwvFhtD.js} +1 -1
- package/ui-dist/assets/{index-D9pW4cTf.js → index-DMPqFddg.js} +1 -1
- package/ui-dist/assets/{index-lyNYrfv7.js → index-DRHLqcXJ.js} +1 -1
- package/ui-dist/assets/{index-DXQ0Dykd.js → index-DSh6P9Gz.js} +1 -1
- package/ui-dist/assets/{index-DeK90lOK.js → index-DXXIMIeb.js} +1 -1
- package/ui-dist/assets/{index-4sSFK9Nz.js → index-DpwG3v67.js} +1 -1
- package/ui-dist/assets/{index-f4FgpW68.js → index-DxDfWyma.js} +1 -1
- package/ui-dist/assets/{index-BmCCFlMP.js → index-K1AO1zAZ.js} +1 -1
- package/ui-dist/assets/{index-D8hTVRKE.js → index-aEPy6MBv.js} +1 -1
- package/ui-dist/assets/{index-DmuKyd7n.js → index-alJPMYgW.js} +1 -1
- package/ui-dist/assets/{index-HAoLTf33.js → index-cQaUyQLm.js} +1 -1
- package/ui-dist/assets/{index-rULdHZBh.js → index-dCm6LHY6.js} +1 -1
- package/ui-dist/assets/{index-Kodi61gA.js → index-gZ_2R4c_.js} +1 -1
- package/ui-dist/assets/{infoDiagram-HS3SLOUP-BAN6qCWb.js → infoDiagram-HS3SLOUP-DgJfGjRX.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-Bq1lTOmJ.js → journeyDiagram-XKPGCS4Q-Rn-W4Dgq.js} +1 -1
- package/ui-dist/assets/{kanban-definition-3W4ZIXB7-DUUNdyiu.js → kanban-definition-3W4ZIXB7-Nhso-N_U.js} +1 -1
- package/ui-dist/assets/{layout-D6fvIf_D.js → layout-C7X7fK4q.js} +1 -1
- package/ui-dist/assets/{linear-Bk4ZNRTT.js → linear-DWSvB80t.js} +1 -1
- package/ui-dist/assets/{mermaid.core-R9M_M1pz.js → mermaid.core-CHR6mEs1.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-VGOIOE7T-Cr7W56m7.js → mindmap-definition-VGOIOE7T-BAukDpbC.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ADFJNKIX-DdpHVi4H.js → pieDiagram-ADFJNKIX-B6ChJoiZ.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-MagRXwwb.js → quadrantDiagram-AYHSOK5B-H-E8RXLa.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-DfplyfDT.js → requirementDiagram-UZGBJVZJ-zt7I1l8G.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-C53cM-h1.js → sankeyDiagram-TZEHDZUN-CQbyb_TU.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-WL72ISMW-n2ZXg6J8.js → sequenceDiagram-WL72ISMW-CLqG86Kr.js} +1 -1
- package/ui-dist/assets/{stateDiagram-FKZM4ZOC-WE6P2n08.js → stateDiagram-FKZM4ZOC-8pYJMKO3.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3--T4mXkZf.js +1 -0
- package/ui-dist/assets/{timeline-definition-IT6M3QCI-Bq9SQq_H.js → timeline-definition-IT6M3QCI-Bh6Dacgx.js} +1 -1
- package/ui-dist/assets/{treemap-GDKQZRPO-fwBzIjvA.js → treemap-GDKQZRPO-sClaTHNC.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-PRI3JC2R-BjIdmgWS.js → xychartDiagram-PRI3JC2R-BcnL4uL3.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/locales/en/common.json +549 -11
- package/ui-dist/locales/zh-CN/common.json +539 -1
- package/skills/diagnose-why-work-stopped/SKILL.md +0 -161
- package/skills/paperclip-create-plugin/SKILL.md +0 -154
- package/skills/terminal-bench-loop/SKILL.md +0 -236
- package/ui-dist/assets/channel-DDuh2RRO.js +0 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-DUUzajYJ.js +0 -1
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-DUUzajYJ.js +0 -1
- package/ui-dist/assets/clone-DAdQrzLE.js +0 -1
- package/ui-dist/assets/index-BVtUA2hf.js +0 -536
- package/ui-dist/assets/index-DkMg77MF.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-waFhQqcP.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAsDxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAsDxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AA0EhF,wBAAgB,WAAW,CACzB,EAAE,EAAE,EAAE,EACN,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;CAAO,8CA+5G5D"}
|
package/dist/routes/agents.js
CHANGED
|
@@ -34,6 +34,7 @@ import { assertEnvironmentSelectionForCompany } from "./environment-selection.js
|
|
|
34
34
|
import { recoveryService } from "../services/recovery/service.js";
|
|
35
35
|
import { resolveCoreTrustPreset } from "../services/trust-preset-resolver.js";
|
|
36
36
|
import { readObject } from "../lib/objects.js";
|
|
37
|
+
import { listInvalidOrgChainDescendantIds } from "../services/agent-invokability.js";
|
|
37
38
|
const RUN_LOG_DEFAULT_LIMIT_BYTES = 256_000;
|
|
38
39
|
const RUN_LOG_MAX_LIMIT_BYTES = 1024 * 1024;
|
|
39
40
|
function readRunLogLimitBytes(value) {
|
|
@@ -2278,7 +2279,14 @@ export function agentRoutes(db, options = {}) {
|
|
|
2278
2279
|
router.post("/agents/:id/resume", async (req, res) => {
|
|
2279
2280
|
assertBoard(req);
|
|
2280
2281
|
const id = req.params.id;
|
|
2281
|
-
|
|
2282
|
+
const existing = await getAccessibleAgent(req, res, id);
|
|
2283
|
+
if (!existing) {
|
|
2284
|
+
return;
|
|
2285
|
+
}
|
|
2286
|
+
if (existing.orgChainHealth?.status === "invalid_org_chain") {
|
|
2287
|
+
res.status(409).json({
|
|
2288
|
+
error: existing.orgChainHealth?.repairGuidance ?? "Repair this agent's reporting chain before resuming it",
|
|
2289
|
+
});
|
|
2282
2290
|
return;
|
|
2283
2291
|
}
|
|
2284
2292
|
const agent = await svc.resume(id);
|
|
@@ -2339,7 +2347,18 @@ export function agentRoutes(db, options = {}) {
|
|
|
2339
2347
|
res.status(404).json({ error: "Agent not found" });
|
|
2340
2348
|
return;
|
|
2341
2349
|
}
|
|
2342
|
-
await
|
|
2350
|
+
const companyAgentRows = await db
|
|
2351
|
+
.select({
|
|
2352
|
+
id: agentsTable.id,
|
|
2353
|
+
companyId: agentsTable.companyId,
|
|
2354
|
+
name: agentsTable.name,
|
|
2355
|
+
reportsTo: agentsTable.reportsTo,
|
|
2356
|
+
status: agentsTable.status,
|
|
2357
|
+
})
|
|
2358
|
+
.from(agentsTable)
|
|
2359
|
+
.where(eq(agentsTable.companyId, agent.companyId));
|
|
2360
|
+
const invalidOrgChainDescendantIds = listInvalidOrgChainDescendantIds(id, companyAgentRows);
|
|
2361
|
+
const cancellation = await heartbeat.cancelInvocationsForAgents([id, ...invalidOrgChainDescendantIds], "Cancelled because the agent was terminated or became invalid-org-chain under a terminated manager");
|
|
2343
2362
|
await logActivity(db, {
|
|
2344
2363
|
companyId: agent.companyId,
|
|
2345
2364
|
actorType: "user",
|
|
@@ -2347,6 +2366,18 @@ export function agentRoutes(db, options = {}) {
|
|
|
2347
2366
|
action: "agent.terminated",
|
|
2348
2367
|
entityType: "agent",
|
|
2349
2368
|
entityId: agent.id,
|
|
2369
|
+
details: {
|
|
2370
|
+
invalidOrgChain: {
|
|
2371
|
+
descendantCount: invalidOrgChainDescendantIds.length,
|
|
2372
|
+
descendantIds: invalidOrgChainDescendantIds,
|
|
2373
|
+
state: invalidOrgChainDescendantIds.length > 0 ? "descendants_invalid_under_terminated_manager" : "none",
|
|
2374
|
+
},
|
|
2375
|
+
cancellation: {
|
|
2376
|
+
agentIds: cancellation.agentIds,
|
|
2377
|
+
runsCancelled: cancellation.runsCancelled,
|
|
2378
|
+
wakeupsCancelled: cancellation.wakeupsCancelled,
|
|
2379
|
+
},
|
|
2380
|
+
},
|
|
2350
2381
|
});
|
|
2351
2382
|
res.json(agent);
|
|
2352
2383
|
});
|
|
@@ -2446,6 +2477,12 @@ export function agentRoutes(db, options = {}) {
|
|
|
2446
2477
|
else {
|
|
2447
2478
|
await assertBoardCanManageAgentsForCompany(req, agent.companyId);
|
|
2448
2479
|
}
|
|
2480
|
+
if (agent.orgChainHealth?.status === "invalid_org_chain") {
|
|
2481
|
+
res.status(409).json({
|
|
2482
|
+
error: agent.orgChainHealth?.repairGuidance ?? "Repair this agent's reporting chain before starting runs",
|
|
2483
|
+
});
|
|
2484
|
+
return;
|
|
2485
|
+
}
|
|
2449
2486
|
const requestedUiLocale = resolveExplicitRequestUiLocale(req);
|
|
2450
2487
|
const run = await heartbeat.wakeup(id, {
|
|
2451
2488
|
source: opts.source,
|
|
@@ -2510,6 +2547,12 @@ export function agentRoutes(db, options = {}) {
|
|
|
2510
2547
|
else {
|
|
2511
2548
|
await assertBoardCanManageAgentsForCompany(req, agent.companyId);
|
|
2512
2549
|
}
|
|
2550
|
+
if (agent.orgChainHealth?.status === "invalid_org_chain") {
|
|
2551
|
+
res.status(409).json({
|
|
2552
|
+
error: agent.orgChainHealth?.repairGuidance ?? "Repair this agent's reporting chain before starting runs",
|
|
2553
|
+
});
|
|
2554
|
+
return;
|
|
2555
|
+
}
|
|
2513
2556
|
const requestedUiLocale = resolveExplicitRequestUiLocale(req);
|
|
2514
2557
|
const body = (req.body ?? {});
|
|
2515
2558
|
const contextSnapshot = {
|