@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.
Files changed (140) hide show
  1. package/dist/routes/agents.d.ts.map +1 -1
  2. package/dist/routes/agents.js +45 -2
  3. package/dist/routes/agents.js.map +1 -1
  4. package/dist/routes/issues.d.ts.map +1 -1
  5. package/dist/routes/issues.js +55 -26
  6. package/dist/routes/issues.js.map +1 -1
  7. package/dist/services/access.d.ts.map +1 -1
  8. package/dist/services/access.js +3 -16
  9. package/dist/services/access.js.map +1 -1
  10. package/dist/services/agent-assignability.d.ts +7 -0
  11. package/dist/services/agent-assignability.d.ts.map +1 -0
  12. package/dist/services/agent-assignability.js +135 -0
  13. package/dist/services/agent-assignability.js.map +1 -0
  14. package/dist/services/agent-invokability.d.ts +18 -0
  15. package/dist/services/agent-invokability.d.ts.map +1 -0
  16. package/dist/services/agent-invokability.js +105 -0
  17. package/dist/services/agent-invokability.js.map +1 -0
  18. package/dist/services/agents.d.ts +30 -30
  19. package/dist/services/agents.d.ts.map +1 -1
  20. package/dist/services/agents.js +57 -20
  21. package/dist/services/agents.js.map +1 -1
  22. package/dist/services/company-artifacts.d.ts.map +1 -1
  23. package/dist/services/company-artifacts.js +218 -37
  24. package/dist/services/company-artifacts.js.map +1 -1
  25. package/dist/services/company-portability.d.ts.map +1 -1
  26. package/dist/services/company-portability.js +7 -1
  27. package/dist/services/company-portability.js.map +1 -1
  28. package/dist/services/heartbeat.d.ts +26 -0
  29. package/dist/services/heartbeat.d.ts.map +1 -1
  30. package/dist/services/heartbeat.js +374 -26
  31. package/dist/services/heartbeat.js.map +1 -1
  32. package/dist/services/instance-settings.d.ts.map +1 -1
  33. package/dist/services/instance-settings.js +2 -0
  34. package/dist/services/instance-settings.js.map +1 -1
  35. package/dist/services/issue-thread-interactions.d.ts.map +1 -1
  36. package/dist/services/issue-thread-interactions.js +88 -16
  37. package/dist/services/issue-thread-interactions.js.map +1 -1
  38. package/dist/services/issues.d.ts.map +1 -1
  39. package/dist/services/issues.js +42 -30
  40. package/dist/services/issues.js.map +1 -1
  41. package/dist/services/projects.d.ts +22 -1
  42. package/dist/services/projects.d.ts.map +1 -1
  43. package/dist/services/projects.js +63 -11
  44. package/dist/services/projects.js.map +1 -1
  45. package/dist/services/recovery/issue-graph-liveness.d.ts.map +1 -1
  46. package/dist/services/recovery/issue-graph-liveness.js +13 -11
  47. package/dist/services/recovery/issue-graph-liveness.js.map +1 -1
  48. package/dist/services/recovery/service.d.ts +1 -1
  49. package/dist/services/recovery/service.d.ts.map +1 -1
  50. package/dist/services/recovery/service.js +35 -15
  51. package/dist/services/recovery/service.js.map +1 -1
  52. package/dist/services/routines.d.ts.map +1 -1
  53. package/dist/services/routines.js +9 -22
  54. package/dist/services/routines.js.map +1 -1
  55. package/package.json +17 -17
  56. package/skills/paperclip/SKILL.md +65 -0
  57. package/skills/paperclip/references/api-reference.md +114 -2
  58. package/ui-dist/assets/{_basePickBy-TwuHwDU_.js → _basePickBy-C_RfFMia.js} +1 -1
  59. package/ui-dist/assets/{_baseUniq-DuuKaf0j.js → _baseUniq-_Nh234nR.js} +1 -1
  60. package/ui-dist/assets/{arc-BgpxUYR5.js → arc-B6vfQ3hb.js} +1 -1
  61. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-D0LieYas.js → architectureDiagram-VXUJARFQ-LjysPQSA.js} +1 -1
  62. package/ui-dist/assets/{blockDiagram-VD42YOAC-DnzdgLaQ.js → blockDiagram-VD42YOAC-BAf2Yjuq.js} +1 -1
  63. package/ui-dist/assets/{browser-ponyfill-BHNpAVhF.js → browser-ponyfill-A_VMEFyN.js} +1 -1
  64. package/ui-dist/assets/{c4Diagram-YG6GDRKO-BsuUgR_L.js → c4Diagram-YG6GDRKO-uVqFOYss.js} +1 -1
  65. package/ui-dist/assets/channel-R0XihF9S.js +1 -0
  66. package/ui-dist/assets/{chunk-4BX2VUAB-BDzzaLI6.js → chunk-4BX2VUAB-nNtt6J07.js} +1 -1
  67. package/ui-dist/assets/{chunk-55IACEB6-D4EgylLx.js → chunk-55IACEB6-DbJ6uUpi.js} +1 -1
  68. package/ui-dist/assets/{chunk-B4BG7PRW-CR1mzzPr.js → chunk-B4BG7PRW-Cr5YohVk.js} +1 -1
  69. package/ui-dist/assets/{chunk-DI55MBZ5-BhiYJ0P4.js → chunk-DI55MBZ5-xjTTC5J2.js} +1 -1
  70. package/ui-dist/assets/{chunk-FMBD7UC4-Y3rBUhsS.js → chunk-FMBD7UC4-CuibM5vb.js} +1 -1
  71. package/ui-dist/assets/{chunk-QN33PNHL-Cx5QljBr.js → chunk-QN33PNHL-C11huAJQ.js} +1 -1
  72. package/ui-dist/assets/{chunk-QZHKN3VN-DVnkMPhf.js → chunk-QZHKN3VN-DMJ4N7Eq.js} +1 -1
  73. package/ui-dist/assets/{chunk-TZMSLE5B-CA7vlAtP.js → chunk-TZMSLE5B-CvJhJE9b.js} +1 -1
  74. package/ui-dist/assets/classDiagram-2ON5EDUG-C9TrzeXY.js +1 -0
  75. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-C9TrzeXY.js +1 -0
  76. package/ui-dist/assets/clone-CKFqIcB2.js +1 -0
  77. package/ui-dist/assets/{cose-bilkent-S5V4N54A-C8kNbQd4.js → cose-bilkent-S5V4N54A-CS590I9i.js} +1 -1
  78. package/ui-dist/assets/{dagre-6UL2VRFP-BvsKb7Nu.js → dagre-6UL2VRFP-0S-rsgGN.js} +1 -1
  79. package/ui-dist/assets/{diagram-PSM6KHXK-Bl4U3FBt.js → diagram-PSM6KHXK-DcFNrhxL.js} +1 -1
  80. package/ui-dist/assets/{diagram-QEK2KX5R-D28oLdAY.js → diagram-QEK2KX5R-zleFWuFt.js} +1 -1
  81. package/ui-dist/assets/{diagram-S2PKOQOG-B27cZY7U.js → diagram-S2PKOQOG-CPxtM9BN.js} +1 -1
  82. package/ui-dist/assets/{erDiagram-Q2GNP2WA-Cy2_8xkh.js → erDiagram-Q2GNP2WA-DzYsy5xN.js} +1 -1
  83. package/ui-dist/assets/{flowDiagram-NV44I4VS-O8Ocbvtr.js → flowDiagram-NV44I4VS-pXGIbLNU.js} +1 -1
  84. package/ui-dist/assets/{ganttDiagram-JELNMOA3-BQj50wKn.js → ganttDiagram-JELNMOA3-CTBIhGYq.js} +1 -1
  85. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-mNj0TeBq.js → gitGraphDiagram-V2S2FVAM-BQfUowxh.js} +1 -1
  86. package/ui-dist/assets/{graph-Dty_XUDs.js → graph-BOJRKArF.js} +1 -1
  87. package/ui-dist/assets/index-BB-1FtQG.css +1 -0
  88. package/ui-dist/assets/index-BDwOd4Jc.js +537 -0
  89. package/ui-dist/assets/{index-C3GnEQ6-.js → index-BIGaNz6F.js} +1 -1
  90. package/ui-dist/assets/{index-DeaoIrBt.js → index-Bcf_MLn-.js} +1 -1
  91. package/ui-dist/assets/{index-D_4hho87.js → index-BhE_j01J.js} +1 -1
  92. package/ui-dist/assets/{index-BgdZTAqj.js → index-Bme3l0Br.js} +1 -1
  93. package/ui-dist/assets/{index-don1PrSS.js → index-Bq4D3Ugy.js} +1 -1
  94. package/ui-dist/assets/{index-B7k3IRuF.js → index-CTMiQ6mz.js} +1 -1
  95. package/ui-dist/assets/{index-B5Mtf_qq.js → index-CbZz32z-.js} +1 -1
  96. package/ui-dist/assets/{index-By8F7c6-.js → index-Crz3Cw5T.js} +1 -1
  97. package/ui-dist/assets/{index-ekDXpSjG.js → index-D73xzJsm.js} +1 -1
  98. package/ui-dist/assets/{index-DpwPLTpO.js → index-DDwvFhtD.js} +1 -1
  99. package/ui-dist/assets/{index-D9pW4cTf.js → index-DMPqFddg.js} +1 -1
  100. package/ui-dist/assets/{index-lyNYrfv7.js → index-DRHLqcXJ.js} +1 -1
  101. package/ui-dist/assets/{index-DXQ0Dykd.js → index-DSh6P9Gz.js} +1 -1
  102. package/ui-dist/assets/{index-DeK90lOK.js → index-DXXIMIeb.js} +1 -1
  103. package/ui-dist/assets/{index-4sSFK9Nz.js → index-DpwG3v67.js} +1 -1
  104. package/ui-dist/assets/{index-f4FgpW68.js → index-DxDfWyma.js} +1 -1
  105. package/ui-dist/assets/{index-BmCCFlMP.js → index-K1AO1zAZ.js} +1 -1
  106. package/ui-dist/assets/{index-D8hTVRKE.js → index-aEPy6MBv.js} +1 -1
  107. package/ui-dist/assets/{index-DmuKyd7n.js → index-alJPMYgW.js} +1 -1
  108. package/ui-dist/assets/{index-HAoLTf33.js → index-cQaUyQLm.js} +1 -1
  109. package/ui-dist/assets/{index-rULdHZBh.js → index-dCm6LHY6.js} +1 -1
  110. package/ui-dist/assets/{index-Kodi61gA.js → index-gZ_2R4c_.js} +1 -1
  111. package/ui-dist/assets/{infoDiagram-HS3SLOUP-BAN6qCWb.js → infoDiagram-HS3SLOUP-DgJfGjRX.js} +1 -1
  112. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-Bq1lTOmJ.js → journeyDiagram-XKPGCS4Q-Rn-W4Dgq.js} +1 -1
  113. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-DUUNdyiu.js → kanban-definition-3W4ZIXB7-Nhso-N_U.js} +1 -1
  114. package/ui-dist/assets/{layout-D6fvIf_D.js → layout-C7X7fK4q.js} +1 -1
  115. package/ui-dist/assets/{linear-Bk4ZNRTT.js → linear-DWSvB80t.js} +1 -1
  116. package/ui-dist/assets/{mermaid.core-R9M_M1pz.js → mermaid.core-CHR6mEs1.js} +4 -4
  117. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-Cr7W56m7.js → mindmap-definition-VGOIOE7T-BAukDpbC.js} +1 -1
  118. package/ui-dist/assets/{pieDiagram-ADFJNKIX-DdpHVi4H.js → pieDiagram-ADFJNKIX-B6ChJoiZ.js} +1 -1
  119. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-MagRXwwb.js → quadrantDiagram-AYHSOK5B-H-E8RXLa.js} +1 -1
  120. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-DfplyfDT.js → requirementDiagram-UZGBJVZJ-zt7I1l8G.js} +1 -1
  121. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-C53cM-h1.js → sankeyDiagram-TZEHDZUN-CQbyb_TU.js} +1 -1
  122. package/ui-dist/assets/{sequenceDiagram-WL72ISMW-n2ZXg6J8.js → sequenceDiagram-WL72ISMW-CLqG86Kr.js} +1 -1
  123. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-WE6P2n08.js → stateDiagram-FKZM4ZOC-8pYJMKO3.js} +1 -1
  124. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3--T4mXkZf.js +1 -0
  125. package/ui-dist/assets/{timeline-definition-IT6M3QCI-Bq9SQq_H.js → timeline-definition-IT6M3QCI-Bh6Dacgx.js} +1 -1
  126. package/ui-dist/assets/{treemap-GDKQZRPO-fwBzIjvA.js → treemap-GDKQZRPO-sClaTHNC.js} +1 -1
  127. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-BjIdmgWS.js → xychartDiagram-PRI3JC2R-BcnL4uL3.js} +1 -1
  128. package/ui-dist/index.html +2 -2
  129. package/ui-dist/locales/en/common.json +549 -11
  130. package/ui-dist/locales/zh-CN/common.json +539 -1
  131. package/skills/diagnose-why-work-stopped/SKILL.md +0 -161
  132. package/skills/paperclip-create-plugin/SKILL.md +0 -154
  133. package/skills/terminal-bench-loop/SKILL.md +0 -236
  134. package/ui-dist/assets/channel-DDuh2RRO.js +0 -1
  135. package/ui-dist/assets/classDiagram-2ON5EDUG-DUUzajYJ.js +0 -1
  136. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-DUUzajYJ.js +0 -1
  137. package/ui-dist/assets/clone-DAdQrzLE.js +0 -1
  138. package/ui-dist/assets/index-BVtUA2hf.js +0 -536
  139. package/ui-dist/assets/index-DkMg77MF.css +0 -1
  140. 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;AAyEhF,wBAAgB,WAAW,CACzB,EAAE,EAAE,EAAE,EACN,OAAO,GAAE;IAAE,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;CAAO,8CAk3G5D"}
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"}
@@ -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
- if (!(await getAccessibleAgent(req, res, id))) {
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 heartbeat.cancelActiveForAgent(id);
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 = {