@bivy/bivy 0.21.2-staging.4 → 0.21.2-staging.6

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 (103) hide show
  1. package/dist/apps/styles.css +1 -0
  2. package/dist/automation-reseal.js +2 -0
  3. package/dist/server.js +24 -13
  4. package/package.json +1 -1
  5. package/web/assets/{AutomationsView-BY-ao-yT.js → AutomationsView-Bg_Sj16B.js} +2 -2
  6. package/web/assets/{ChangesCard-CStyXhLg.js → ChangesCard-CDrb21JE.js} +1 -1
  7. package/web/assets/{LibraryView-BB8VXYUp.js → LibraryView-hIeS76Mt.js} +1 -1
  8. package/web/assets/{ProviderConnect-m2z3rzjM.js → ProviderConnect-BbsPnldQ.js} +1 -1
  9. package/web/assets/{SessionList-_wbdngq9.js → SessionList-DiF-CdGq.js} +1 -1
  10. package/web/assets/{Settings-D0ffju0g.js → Settings-C9xLdwDM.js} +3 -3
  11. package/web/assets/{Sheet-BHC1Er3w.js → Sheet-C5AbfFE0.js} +1 -1
  12. package/web/assets/{Terminal-pLMXO2X_.js → Terminal-CM1s2ZAi.js} +1 -1
  13. package/web/assets/{VoiceSettings-DDrmPVsq.js → VoiceSettings-dBhDcrhi.js} +1 -1
  14. package/web/assets/{abnfDiagram-VCTEODGH-Bu-Jy4CX.js → abnfDiagram-VCTEODGH-_V-80U0B.js} +1 -1
  15. package/web/assets/architecture-7GRP2DOG-CARdrWJG.js +1 -0
  16. package/web/assets/{architectureDiagram-5GKGNRK7-BH5BQDOp.js → architectureDiagram-5GKGNRK7-CiAmc-1_.js} +1 -1
  17. package/web/assets/{blockDiagram-I7D4REHJ-CIvEKueJ.js → blockDiagram-I7D4REHJ-DhRVAiCO.js} +1 -1
  18. package/web/assets/{c4Diagram-7LVT6UL2-DSJyEs-4.js → c4Diagram-7LVT6UL2-D6PhwpuO.js} +1 -1
  19. package/web/assets/channel-DvmeeZ2F.js +1 -0
  20. package/web/assets/{chunk-4HAMMTFA-fG7hMwtx.js → chunk-4HAMMTFA-brTBRkGn.js} +1 -1
  21. package/web/assets/{chunk-75Z2AOVW-UHGnEWy0.js → chunk-75Z2AOVW-C4AdmBK6.js} +1 -1
  22. package/web/assets/{chunk-DU6HZSFF-D1QIxige.js → chunk-DU6HZSFF-S8xvnkj4.js} +1 -1
  23. package/web/assets/{chunk-F27PBJKO-DU4tIZLM.js → chunk-F27PBJKO-COlSy3Wg.js} +1 -1
  24. package/web/assets/{chunk-GMAD6QVW-BD2l2A4h.js → chunk-GMAD6QVW-BZtGV9Yh.js} +1 -1
  25. package/web/assets/{chunk-GVQU2GXP-u9JZFjFE.js → chunk-GVQU2GXP-BmLk92lG.js} +1 -1
  26. package/web/assets/{chunk-IMKFNOWR-BJvMf9VC.js → chunk-IMKFNOWR-0Wvl4FC2.js} +1 -1
  27. package/web/assets/{chunk-L3NEJ4N5-BXDhbzQF.js → chunk-L3NEJ4N5-5Fco-AUP.js} +1 -1
  28. package/web/assets/{chunk-OSK3NFVY-DU9QrXdW.js → chunk-OSK3NFVY-DannyDXo.js} +1 -1
  29. package/web/assets/{chunk-P2QGCYS3-D3X2yhRW.js → chunk-P2QGCYS3-C3XHyWF1.js} +1 -1
  30. package/web/assets/{chunk-POPQ4Y6H-DYbbgTsV.js → chunk-POPQ4Y6H-Dcoizfo7.js} +1 -1
  31. package/web/assets/{chunk-PWAF6VOD-yZQdaNjV.js → chunk-PWAF6VOD-B6IG1NOQ.js} +1 -1
  32. package/web/assets/{chunk-SHT3W25Y-CKo01QbQ.js → chunk-SHT3W25Y-BBQJu9Gk.js} +1 -1
  33. package/web/assets/{chunk-SVP7TREG-C-et_nlo.js → chunk-SVP7TREG-hlcqm19w.js} +1 -1
  34. package/web/assets/{chunk-TICWLB2K-Dc4TI9fK.js → chunk-TICWLB2K-C6soZCQF.js} +1 -1
  35. package/web/assets/classDiagram-ZZMXUADV-B7CNRsJX.js +1 -0
  36. package/web/assets/classDiagram-v2-VYDZK3BY-B7CNRsJX.js +1 -0
  37. package/web/assets/{cynefin-OW5HDTMX-Cbx-z0hs.js → cynefin-OW5HDTMX-D68FhuVE.js} +1 -1
  38. package/web/assets/{cynefinDiagram-5FMLGOSQ-CS6YAhV6.js → cynefinDiagram-5FMLGOSQ-D58JLjp-.js} +1 -1
  39. package/web/assets/{dagre-GXQ25YYZ-C5SS2t7j.js → dagre-GXQ25YYZ-Cht7kthW.js} +1 -1
  40. package/web/assets/{diagram-S7CK7UJ4-CnIn2O-o.js → diagram-S7CK7UJ4-C9zQe7Qy.js} +1 -1
  41. package/web/assets/{diagram-UQ7AKVKN-BJS_F3IU.js → diagram-UQ7AKVKN-Uq9b6gmu.js} +1 -1
  42. package/web/assets/{diagram-VSXAHHWV-CytWVMJF.js → diagram-VSXAHHWV-DD89gsDb.js} +1 -1
  43. package/web/assets/{diagram-VX7I27RA-DdcqnzCD.js → diagram-VX7I27RA-MQRL2Z6g.js} +1 -1
  44. package/web/assets/{diagram-Z3DM3KII-Beo5lA8h.js → diagram-Z3DM3KII-BcqplB4-.js} +1 -1
  45. package/web/assets/{ebnfDiagram-PWID7BFC-CxqzE5X5.js → ebnfDiagram-PWID7BFC-DZMHNJSa.js} +1 -1
  46. package/web/assets/{erDiagram-RLTQ6QDP-DRlSKm8N.js → erDiagram-RLTQ6QDP-CcLDG61z.js} +1 -1
  47. package/web/assets/eventmodeling-NTZA5JFV-BmGvuEOS.js +1 -0
  48. package/web/assets/flowDiagram-HODETNUW-Cyllon0I.js +1 -0
  49. package/web/assets/{ganttDiagram-EL5Y4UJY-CdBzMdZp.js → ganttDiagram-EL5Y4UJY-DRxO0Q2b.js} +1 -1
  50. package/web/assets/{gitGraph-4MIJSDKK-DsMNqerD.js → gitGraph-4MIJSDKK-DgW0UDY-.js} +1 -1
  51. package/web/assets/{gitGraphDiagram-WWUBYQGX-BHrLmpY6.js → gitGraphDiagram-WWUBYQGX-v6KTkbMF.js} +1 -1
  52. package/web/assets/index-Be7u4OBp.css +1 -0
  53. package/web/assets/{index-BrFY5W3A.js → index-CZ125Fi3.js} +2 -2
  54. package/web/assets/{info-A6RAGUB7-DELWzfBx.js → info-A6RAGUB7-Bv3Ho3oh.js} +1 -1
  55. package/web/assets/{infoDiagram-27XIBGKW-CjSv0VBj.js → infoDiagram-27XIBGKW-C7siOH71.js} +1 -1
  56. package/web/assets/{ishikawaDiagram-5VMMS53U-N338g1Ve.js → ishikawaDiagram-5VMMS53U-DeQzizr7.js} +1 -1
  57. package/web/assets/{journeyDiagram-3NMN7TZE-BSJU7cE2.js → journeyDiagram-3NMN7TZE-DwSMXaXO.js} +1 -1
  58. package/web/assets/{kanban-definition-UXKFOSKX-DGZS5bW2.js → kanban-definition-UXKFOSKX-DkL-xdq3.js} +1 -1
  59. package/web/assets/{mermaid-parser.core-_RsyYuSW.js → mermaid-parser.core-CQm7nF9Y.js} +3 -3
  60. package/web/assets/{mermaid.core-C9tor7qI.js → mermaid.core-0YsSvQlA.js} +4 -4
  61. package/web/assets/{mindmap-definition-YA3MSWOX-B14UHQYX.js → mindmap-definition-YA3MSWOX-CBtXHsGA.js} +1 -1
  62. package/web/assets/{mount-BoTID49S.js → mount-D1H4mpVt.js} +7 -7
  63. package/web/assets/{packet-AYTQ26CC-Bivf99fT.js → packet-AYTQ26CC-BVwlLl9_.js} +1 -1
  64. package/web/assets/{pegDiagram-XKGWAZYB-Bz0CCvOY.js → pegDiagram-XKGWAZYB-CElJBuiC.js} +1 -1
  65. package/web/assets/{pie-WAS4IAKB-QstjQMTw.js → pie-WAS4IAKB-DOpELS0m.js} +1 -1
  66. package/web/assets/{pieDiagram-E7YTZNPT-BY3x3GMx.js → pieDiagram-E7YTZNPT-DVEzQEMS.js} +1 -1
  67. package/web/assets/{quadrantDiagram-AXDQQJYC-D1_BqsAh.js → quadrantDiagram-AXDQQJYC-hZyhf-v1.js} +1 -1
  68. package/web/assets/{radar-RG4KPBEZ-BJin4ESX.js → radar-RG4KPBEZ-CXEyhH0h.js} +1 -1
  69. package/web/assets/{railroad-74A4TZTK-G-7A0c2L.js → railroad-74A4TZTK-BDzYI3qh.js} +1 -1
  70. package/web/assets/railroad-abnf-HS5TGJTU-BBzlM7CQ.js +1 -0
  71. package/web/assets/railroad-ebnf-LZEXJU2U-CY8XjGes.js +1 -0
  72. package/web/assets/railroad-peg-WCYAUIDC-B3YCEeMq.js +1 -0
  73. package/web/assets/{railroadDiagram-O6MQD6OU-BOMW6nh7.js → railroadDiagram-O6MQD6OU-CUuOuiN8.js} +1 -1
  74. package/web/assets/{requirementDiagram-BXWQKSXE-rus_Tp37.js → requirementDiagram-BXWQKSXE-m-QCgbhV.js} +1 -1
  75. package/web/assets/{sankeyDiagram-P5KCCOFB-uo2HyjMS.js → sankeyDiagram-P5KCCOFB-B06pLDBW.js} +1 -1
  76. package/web/assets/{sequenceDiagram-WJ2MYXX4-DH-ZdB25.js → sequenceDiagram-WJ2MYXX4-CkqFabL6.js} +1 -1
  77. package/web/assets/{settingsRoute-CfvfHfQ1.js → settingsRoute-44QTxYxq.js} +1 -1
  78. package/web/assets/{stateDiagram-D77RDMKH-BTB4JZeC.js → stateDiagram-D77RDMKH-ERlpJ9B-.js} +1 -1
  79. package/web/assets/stateDiagram-v2-MP3YSRHH-BIJHKqN-.js +1 -0
  80. package/web/assets/{swimlanes-42K2YHIH-Bq4zavht.js → swimlanes-42K2YHIH-D-5pZGCM.js} +1 -1
  81. package/web/assets/swimlanesDiagram-VR7AAH4N-C3R6QkX9.js +8 -0
  82. package/web/assets/{timeline-definition-24CTP7MA-CospY358.js → timeline-definition-24CTP7MA-DmSDaVFu.js} +1 -1
  83. package/web/assets/{treeView-Q6P3EWNA-GMAbaiVQ.js → treeView-Q6P3EWNA-DvqtCm6i.js} +1 -1
  84. package/web/assets/{treemap-WGGIJYW6-By6mwzKi.js → treemap-WGGIJYW6-C8sV-tG0.js} +1 -1
  85. package/web/assets/{useStore-Co02NZiN.js → useStore-JcZJy-qV.js} +2 -2
  86. package/web/assets/{vennDiagram-4TSXK5OY-DxD3vz13.js → vennDiagram-4TSXK5OY-Bw8G48iM.js} +1 -1
  87. package/web/assets/{wardley-WFR3VGLG-DbLOhzjA.js → wardley-WFR3VGLG-PmKR0ssq.js} +1 -1
  88. package/web/assets/{wardleyDiagram-VM6X3IG4-D87cmVlC.js → wardleyDiagram-VM6X3IG4-B3_3eBUJ.js} +1 -1
  89. package/web/assets/{xychartDiagram-S5SC5T6Z-bFtAW5rN.js → xychartDiagram-S5SC5T6Z-B1fEjyXX.js} +1 -1
  90. package/web/index.html +2 -2
  91. package/web/sw.js +1 -1
  92. package/web/assets/architecture-7GRP2DOG-sKSrrY85.js +0 -1
  93. package/web/assets/channel-BGpJlQhX.js +0 -1
  94. package/web/assets/classDiagram-ZZMXUADV-g2DN2K_S.js +0 -1
  95. package/web/assets/classDiagram-v2-VYDZK3BY-g2DN2K_S.js +0 -1
  96. package/web/assets/eventmodeling-NTZA5JFV-iy6Lplqt.js +0 -1
  97. package/web/assets/flowDiagram-HODETNUW-v4eWd5FC.js +0 -1
  98. package/web/assets/index-CtJDDeFG.css +0 -1
  99. package/web/assets/railroad-abnf-HS5TGJTU-BzWTY8GG.js +0 -1
  100. package/web/assets/railroad-ebnf-LZEXJU2U-BvP_AHjd.js +0 -1
  101. package/web/assets/railroad-peg-WCYAUIDC-CnyFvuFd.js +0 -1
  102. package/web/assets/stateDiagram-v2-MP3YSRHH-Cz7BcNDq.js +0 -1
  103. package/web/assets/swimlanesDiagram-VR7AAH4N-CvQwsJPA.js +0 -8
@@ -581,6 +581,7 @@ input, textarea, select { font-family: inherit; font-size: 16px; }
581
581
  large remote image can't blow out the chat column; rounded to match chips. */
582
582
  .msg.assistant img { max-width: 100%; height: auto; border-radius: var(--radius-md); }
583
583
  .msg.assistant img.md-image { max-height: 420px; object-fit: contain; }
584
+ .msg.assistant img.md-image[src] { cursor: zoom-in; }
584
585
  /* Before ChatView's hydrate effect resolves data-remote-src to a fetched blob:
585
586
  URL (or if the node's fetch fails/is disallowed), the element has no `src` and
586
587
  would otherwise collapse to nothing — give it a visible placeholder box so a
@@ -13,6 +13,8 @@ export async function resealAutomationTemplates(opts) {
13
13
  const plaintext = opts.retired.map((key) => tryOpen(key, payload)).find((text) => text !== undefined);
14
14
  if (plaintext === undefined) {
15
15
  result.unreadable.push(template.id);
16
+ if (!template.instructionsUnreadable)
17
+ await opts.markUnreadable(template.id);
16
18
  continue;
17
19
  }
18
20
  await opts.save(template.id, `${prefix}${seal(opts.current, plaintext)}`);
package/dist/server.js CHANGED
@@ -1078,7 +1078,7 @@ const linkedDevices = createLinkedDeviceController({
1078
1078
  syncPairingMetadata();
1079
1079
  relay?.pushRotate(deliveries);
1080
1080
  broadcast({ type: "devices.updated", devices });
1081
- void resealRetiredAutomationTemplates();
1081
+ void checkAutomationTemplates();
1082
1082
  },
1083
1083
  });
1084
1084
  const accessDevices = createAccessDeviceController({
@@ -3545,7 +3545,7 @@ function startRelayIfConfigured() {
3545
3545
  if (config.controlPlaneUrl && config.enrollmentToken) {
3546
3546
  sessionAdvertiseTarget = { controlPlaneUrl: config.controlPlaneUrl, enrollmentToken: config.enrollmentToken };
3547
3547
  void syncModelAuthFromControlPlane();
3548
- void resealRetiredAutomationTemplates();
3548
+ void checkAutomationTemplates();
3549
3549
  if (remoteRuntimeEnabled()) {
3550
3550
  // Stage 3: layer a control-plane-backed location registry UNDER the in-memory
3551
3551
  // one (so a lookup surviving a restart resolves from durable state), then
@@ -3675,27 +3675,36 @@ async function modelAuthFetch(pathname, init = {}) {
3675
3675
  }
3676
3676
  // A device revoke rotates the room key. Re-seal this node's stored automation
3677
3677
  // instructions under the new key so the node and its devices can still read
3678
- // them, then drop the retired keys. Retried at startup until it completes.
3679
- async function resealRetiredAutomationTemplates() {
3680
- const retired = pairingStore.retiredRoomKeys();
3681
- if (!retired.length || !sessionAdvertiseTarget)
3678
+ // them, then drop the retired keys. Instructions no key opens are flagged so the
3679
+ // automation list asks for them again. Runs at every start (retried there until
3680
+ // it completes), after a revoke, and when a run can't open its instructions.
3681
+ let automationTemplateCheck = null;
3682
+ function checkAutomationTemplates() {
3683
+ automationTemplateCheck ??= reconcileAutomationTemplates().finally(() => { automationTemplateCheck = null; });
3684
+ return automationTemplateCheck;
3685
+ }
3686
+ async function reconcileAutomationTemplates() {
3687
+ if (!sessionAdvertiseTarget)
3682
3688
  return;
3689
+ const retired = pairingStore.retiredRoomKeys();
3683
3690
  const current = pairingStore.roomKey();
3684
3691
  try {
3685
3692
  const res = await modelAuthFetch("/node/automation-templates");
3686
3693
  if (!res?.ok)
3687
3694
  throw new Error(`control plane returned ${res?.status}`);
3688
3695
  const { templates } = await res.json();
3696
+ const call = async (pathname, init) => {
3697
+ const out = await modelAuthFetch(pathname, init);
3698
+ if (!out?.ok)
3699
+ throw new Error(`control plane returned ${out?.status}`);
3700
+ };
3689
3701
  const result = await resealAutomationTemplates({
3690
3702
  nodeId: identity.nodeId,
3691
3703
  current,
3692
3704
  retired,
3693
3705
  templates,
3694
- save: async (id, templateCiphertext) => {
3695
- const saved = await modelAuthFetch(`/node/automation-templates/${encodeURIComponent(id)}`, { method: "PUT", body: JSON.stringify({ templateCiphertext }) });
3696
- if (!saved?.ok)
3697
- throw new Error(`control plane returned ${saved?.status}`);
3698
- },
3706
+ save: (id, templateCiphertext) => call(`/node/automation-templates/${encodeURIComponent(id)}`, { method: "PUT", body: JSON.stringify({ templateCiphertext }) }),
3707
+ markUnreadable: (id) => call(`/node/automation-templates/${encodeURIComponent(id)}/unreadable`, { method: "POST" }),
3699
3708
  });
3700
3709
  if (result.resealed)
3701
3710
  console.log(`[automation-reseal] re-sealed ${result.resealed} automation template(s) under the rotated room key`);
@@ -3703,8 +3712,9 @@ async function resealRetiredAutomationTemplates() {
3703
3712
  console.warn(`[automation-reseal] ${result.unreadable.length} automation template(s) were sealed under a key this node no longer has: ${result.unreadable.join(", ")}`);
3704
3713
  // Another rotation during this pass retired `current`; run again for it.
3705
3714
  if (!pairingStore.roomKey().equals(current))
3706
- return void resealRetiredAutomationTemplates();
3707
- pairingStore.forgetRetiredRoomKeys();
3715
+ return reconcileAutomationTemplates();
3716
+ if (retired.length)
3717
+ pairingStore.forgetRetiredRoomKeys();
3708
3718
  }
3709
3719
  catch (error) {
3710
3720
  console.warn("[automation-reseal] will retry at next start:", error.message);
@@ -5474,6 +5484,7 @@ async function executeWorkItem(item, report, signal) {
5474
5484
  item = { ...item, body: template.instructions };
5475
5485
  }
5476
5486
  catch {
5487
+ void checkAutomationTemplates();
5477
5488
  throw new Error("could not decrypt automation instructions on this node");
5478
5489
  }
5479
5490
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bivy/bivy",
3
- "version": "0.21.2-staging.4",
3
+ "version": "0.21.2-staging.6",
4
4
  "type": "module",
5
5
  "license": "AGPL-3.0-only",
6
6
  "description": "Run coding agents on machines you own. Open-source, self-hostable agent workspace.",