@passioncode-ai/passioncode 0.2.39 → 0.2.40

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 (60) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/family.json +1 -1
  3. package/package.json +1 -1
  4. package/payload/.claude-plugin/marketplace.json +2 -2
  5. package/payload/manifest.json +8 -8
  6. package/payload/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +1 -1
  7. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +3 -3
  8. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/dashboard-links.md +5 -2
  9. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/adapt_project.py +2 -2
  10. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/check_dashboard_link.py +8 -6
  11. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +6 -3
  12. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/recipes/support-agent/README.md +5 -3
  13. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/board.md +3 -1
  14. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard-links.md +5 -2
  15. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/delegation.md +4 -1
  16. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/estate-record.md +60 -0
  17. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/interop.md +60 -1
  18. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/kit-modules.md +7 -2
  19. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/package.md +4 -2
  20. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/protocol.md +11 -2
  21. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/surfaces-and-auth.md +35 -0
  22. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/check_dashboard_link.py +8 -6
  23. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/check_service.py +22 -0
  24. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/check_service_rules.py +47 -1
  25. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-a2a.mjs +170 -0
  26. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-actions.mjs +31 -2
  27. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-context.mjs +151 -0
  28. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-delegation.mjs +17 -9
  29. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-descriptor.mjs +14 -1
  30. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-estate.mjs +6 -0
  31. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-interop-rules.mjs +29 -6
  32. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-interop.mjs +29 -1
  33. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-mandate.mjs +247 -0
  34. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-page-links.mjs +144 -0
  35. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-paths.mjs +22 -1
  36. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-protocols.mjs +1 -1
  37. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-share.mjs +30 -2
  38. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-supervisors.mjs +5 -4
  39. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_a2a.py +209 -0
  40. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_actions.py +40 -2
  41. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_context.py +170 -0
  42. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_delegation.py +15 -12
  43. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_descriptor.py +16 -2
  44. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_estate.py +7 -0
  45. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_interop.py +99 -14
  46. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_interop_rules.py +32 -7
  47. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_mandate.py +324 -0
  48. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_page_links.py +559 -0
  49. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_paths.py +21 -0
  50. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_protocols.py +1 -1
  51. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_share.py +35 -0
  52. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_supervisors.py +6 -4
  53. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/kit.json +302 -22
  54. package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +3 -3
  55. package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/dashboard-links.md +5 -2
  56. package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/scripts/check_dashboard_link.py +8 -6
  57. package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/SKILL.md +54 -9
  58. package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/references/project-board.md +10 -0
  59. package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session_env.py +1 -1
  60. package/payload/plugins/passioncode/.claude-plugin/plugin.json +1 -1
@@ -30,7 +30,7 @@ from fabric_base import (
30
30
  )
31
31
  from fabric_paths import (
32
32
  atomic_write,
33
- service_dirs,
33
+ instance_dirs,
34
34
  )
35
35
  from fabric_lock import (
36
36
  SUPERVISOR_ARG,
@@ -376,14 +376,16 @@ def launchd_install(label: str, plist_path: Path, plist_bytes: bytes, *, origin:
376
376
 
377
377
 
378
378
  def launchd_uninstall(label: str, plist_path: Path, *, timeout: float = 30.0, purge: bool = False,
379
- service_id: Optional[str] = None) -> Dict[str, Any]:
379
+ service_id: Optional[str] = None, instance: str = "default") -> Dict[str, Any]:
380
380
  """Symmetric with ``launchd_install`` (LC-14): bootout and WAIT until the job is gone, remove
381
381
  the plist, and reset the override to ``enabled`` — launchctl has no verb that deletes an
382
382
  override, and a leftover ``disabled`` would make a later fresh install stay off. Data stays
383
- unless ``purge`` (then ``service_id`` names whose data, logs and cache go). A job still
383
+ unless ``purge`` (then ``service_id`` names whose data, logs and cache go, and ``instance`` which
384
+ instance's: ``instance_dirs``, so one context's purge never reaches another's, FAA-125). A job still
384
385
  loaded at ``timeout`` raises, leaving the plist and data in place."""
385
386
  if purge and not service_id:
386
387
  raise ServiceError("purge needs the service id whose data, logs and cache to remove.")
388
+ dirs = instance_dirs(str(service_id), instance) if purge else {}
387
389
  target = "%s/%s" % (_domain(), label)
388
390
  _launchctl("bootout", target)
389
391
  deadline = time.monotonic() + timeout
@@ -399,7 +401,7 @@ def launchd_uninstall(label: str, plist_path: Path, *, timeout: float = 30.0, pu
399
401
  _launchctl("enable", target)
400
402
  purged: List[str] = []
401
403
  if purge:
402
- for directory in service_dirs(str(service_id)).values():
404
+ for directory in dirs.values():
403
405
  if directory.is_symlink():
404
406
  directory.unlink()
405
407
  elif directory.exists():
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fabric-service-kit",
3
- "version": "0.50.0",
3
+ "version": "0.51.1",
4
4
  "about": "The service kit's modules in dependency order: a module imports only modules listed before it. Written by fabric_kit.py build; edit the order and layers by hand, never the digests.",
5
5
  "python": [
6
6
  {
@@ -64,7 +64,7 @@
64
64
  "fabric_base",
65
65
  "fabric_platform"
66
66
  ],
67
- "sha256": "6c92af34292baddf7e10d3134d0a5b0bb23387741812a9f79c409cf1628bad23"
67
+ "sha256": "8a1ee742f80f436e9f28c61b4f049a9545de2a9e0d66bfc61faa6ee5d1ba3734"
68
68
  },
69
69
  {
70
70
  "module": "fabric_estate",
@@ -77,7 +77,18 @@
77
77
  "fabric_secrets",
78
78
  "fabric_time"
79
79
  ],
80
- "sha256": "a0ddc49d748c1efb1830de176998d6c8eac30f77d387c71eae12549c52aaab27"
80
+ "sha256": "bcc2af6ddf3fee3def7a5c5a738a0397c0e27e815ac9cb462714acef47b0c8c5"
81
+ },
82
+ {
83
+ "module": "fabric_mandate",
84
+ "file": "fabric_mandate.py",
85
+ "layer": "L2",
86
+ "imports": [
87
+ "fabric_base",
88
+ "fabric_jsvalue",
89
+ "fabric_time"
90
+ ],
91
+ "sha256": "e7742f3c64b37251f76ffa44b5ee8e865e55f6feefcbc8439d0b1658247b272f"
81
92
  },
82
93
  {
83
94
  "module": "fabric_delegation",
@@ -87,9 +98,10 @@
87
98
  "fabric_crypto",
88
99
  "fabric_estate",
89
100
  "fabric_jsvalue",
101
+ "fabric_mandate",
90
102
  "fabric_paths"
91
103
  ],
92
- "sha256": "f6c135126d2b9f6ff0c93f2947be1aa03d99460cb759495f51fe86f3edf481b3"
104
+ "sha256": "39ca0b8ed853eea125b616eb7ccc46a8aba0cd08b96202e2b55d5b50ab07ac50"
93
105
  },
94
106
  {
95
107
  "module": "fabric_share",
@@ -101,7 +113,7 @@
101
113
  "fabric_jsvalue",
102
114
  "fabric_time"
103
115
  ],
104
- "sha256": "78506fe1a60829c525dbf6266a0aa0749a2164290ed94da8249a20b4e9be5605",
116
+ "sha256": "da36a466426fc29dd7dd40013167f3959a18375f8fedd228bf64f298cec1040c",
105
117
  "data": [
106
118
  "share-registration.schema.json"
107
119
  ]
@@ -150,7 +162,7 @@
150
162
  "imports": [
151
163
  "fabric_secrets"
152
164
  ],
153
- "sha256": "4e78c4004d5d8eb26d1a6e40d6ab75f68af2a7f9165d386f9a62e79e69dcae19"
165
+ "sha256": "03925496392bb01d844f198750e9a8fdcea77f57baae00102ccd2ed08c336e11"
154
166
  },
155
167
  {
156
168
  "module": "fabric_actions",
@@ -159,9 +171,10 @@
159
171
  "imports": [
160
172
  "fabric_base",
161
173
  "fabric_jsvalue",
174
+ "fabric_mandate",
162
175
  "fabric_time"
163
176
  ],
164
- "sha256": "44feb5e70bd9894c5ed1fa23bf8df55989ec99acb934b24bf97ddd7295891251"
177
+ "sha256": "c786326e4e39cfd5341249fa9dd5d2584715c5fa6eb71c46d25997b3311b4553"
165
178
  },
166
179
  {
167
180
  "module": "fabric_connections",
@@ -173,6 +186,29 @@
173
186
  ],
174
187
  "sha256": "77d3ccf863c70e9209d21ef45c46a6db9c06237019bc20d54f8d3946873f3f11"
175
188
  },
189
+ {
190
+ "module": "fabric_a2a",
191
+ "file": "fabric_a2a.py",
192
+ "layer": "L3",
193
+ "imports": [
194
+ "fabric_base",
195
+ "fabric_jsvalue",
196
+ "fabric_secrets"
197
+ ],
198
+ "sha256": "8b01502131215bb4de1c01866187c56e99b791543923ed8577535573db33b919"
199
+ },
200
+ {
201
+ "module": "fabric_page_links",
202
+ "file": "fabric_page_links.py",
203
+ "layer": "L3",
204
+ "imports": [
205
+ "fabric_base",
206
+ "fabric_connections",
207
+ "fabric_jsvalue",
208
+ "fabric_secrets"
209
+ ],
210
+ "sha256": "1b57ea573c550e2f90d1ec3edcc655917ceaa0db9dd1635fccf422ec3024d25e"
211
+ },
176
212
  {
177
213
  "module": "fabric_lock",
178
214
  "file": "fabric_lock.py",
@@ -213,6 +249,7 @@
213
249
  "file": "fabric_descriptor.py",
214
250
  "layer": "L3",
215
251
  "imports": [
252
+ "fabric_a2a",
216
253
  "fabric_actions",
217
254
  "fabric_base",
218
255
  "fabric_connections",
@@ -221,7 +258,22 @@
221
258
  "fabric_secrets",
222
259
  "fabric_usage"
223
260
  ],
224
- "sha256": "361610f7c5bc94642a26a6dd7e4b6a5849efa0bd2aa814a8e2034eaed30368b6"
261
+ "sha256": "c973def06b68dce7ef369da77186542ce3afe357d4579a7d409604f06e4bf131"
262
+ },
263
+ {
264
+ "module": "fabric_context",
265
+ "file": "fabric_context.py",
266
+ "layer": "L3",
267
+ "imports": [
268
+ "fabric_base",
269
+ "fabric_descriptor",
270
+ "fabric_estate",
271
+ "fabric_lock",
272
+ "fabric_paths",
273
+ "fabric_share",
274
+ "fabric_time"
275
+ ],
276
+ "sha256": "51016070a56d2dd0cedefe1d677ee54e9d42dfe0821b56767a983121995ed55a"
225
277
  },
226
278
  {
227
279
  "module": "fabric_auth",
@@ -266,7 +318,7 @@
266
318
  "fabric_paths",
267
319
  "fabric_secrets"
268
320
  ],
269
- "sha256": "a2dbf15aa1c4eb9de42996b413103fa4814afd2e4e66d1ab7315f30e06ab6841"
321
+ "sha256": "3c5b2e8c310738720b1c1b779be4710e90251013d9be4c68f9952edc0bf55d5f"
270
322
  },
271
323
  {
272
324
  "module": "fabric_service",
@@ -313,9 +365,10 @@
313
365
  "fabric_actions",
314
366
  "fabric_base",
315
367
  "fabric_delegation",
368
+ "fabric_mandate",
316
369
  "fabric_time"
317
370
  ],
318
- "sha256": "33dfb0841077df5379df425e288c1e01ae03c22344e6870024b5f4231ad89e75"
371
+ "sha256": "59fa795b32da64fdbab62a433ad2ab5eb199c5c2d00b59266ec1c9729a8e8b47"
319
372
  },
320
373
  {
321
374
  "module": "fabric_interop",
@@ -326,10 +379,12 @@
326
379
  "fabric_base",
327
380
  "fabric_delegation",
328
381
  "fabric_interop_rules",
382
+ "fabric_mandate",
383
+ "fabric_page_links",
329
384
  "fabric_service",
330
385
  "fabric_time"
331
386
  ],
332
- "sha256": "0999ded29d908c8a55d13061f0b501887a5ea259dbf7d2251a90c04018761fbb"
387
+ "sha256": "71f3fb166f0a50ad14124cb0c579d058d5ea2dafb4728d8b8ef6ce645e8cda40"
333
388
  },
334
389
  {
335
390
  "module": "fabric_hub",
@@ -476,7 +531,7 @@
476
531
  "fabric-base",
477
532
  "fabric-platform"
478
533
  ],
479
- "sha256": "2201b4ed7126f260931b63e8386377b4317d8dcad419d109bf22c683e44b7f29"
534
+ "sha256": "aa630d611e748a899e7043480f4a4e46b444f2e15ff945f30c2fbef21c1ceea5"
480
535
  },
481
536
  {
482
537
  "module": "fabric-estate",
@@ -489,7 +544,18 @@
489
544
  "fabric-secrets",
490
545
  "fabric-time"
491
546
  ],
492
- "sha256": "b6610aaad9d00d8a7f42955627fb81725950841455bcedfc050abb0e079f0f93"
547
+ "sha256": "e2959b3986f1bd67b9594131d8a4057543f94d3193b57b6c65b19d05adf8d6e6"
548
+ },
549
+ {
550
+ "module": "fabric-mandate",
551
+ "file": "fabric-mandate.mjs",
552
+ "layer": "L2",
553
+ "imports": [
554
+ "fabric-base",
555
+ "fabric-jsvalue",
556
+ "fabric-time"
557
+ ],
558
+ "sha256": "e72bddcec16915ff0ae148fb88c1082d71d99b911e1c45236dca0ecfc3663067"
493
559
  },
494
560
  {
495
561
  "module": "fabric-delegation",
@@ -499,9 +565,10 @@
499
565
  "fabric-crypto",
500
566
  "fabric-estate",
501
567
  "fabric-jsvalue",
568
+ "fabric-mandate",
502
569
  "fabric-paths"
503
570
  ],
504
- "sha256": "fab1efdc1a9a0a9a00768905dded538fe185ca1b63c115dc4273717efc8e81f6"
571
+ "sha256": "770eacf79c16fef95cd390199da9ad5d056faed8bed8f9c05bfb9c4cd954e58d"
505
572
  },
506
573
  {
507
574
  "module": "fabric-share",
@@ -512,7 +579,7 @@
512
579
  "fabric-identifiers",
513
580
  "fabric-jsvalue"
514
581
  ],
515
- "sha256": "d40a7405d7bd4c3213ed691330b7549afe8e023db0753b582e249714e672010d",
582
+ "sha256": "bfb26581c21ad984c2a337da02429f9f3a165cc582f8ba48de4d3dfb7d163a59",
516
583
  "data": [
517
584
  "share-registration.schema.json"
518
585
  ]
@@ -560,7 +627,7 @@
560
627
  "imports": [
561
628
  "fabric-secrets"
562
629
  ],
563
- "sha256": "acd32d9d05cf1a0319e84ad77cede479ef9b6337011e2cf7726e0e8aa590a9e0"
630
+ "sha256": "9e20785989ab66cd009f69d77be8641e1dc0f4758693dbb2cc18c888b7d59ba6"
564
631
  },
565
632
  {
566
633
  "module": "fabric-actions",
@@ -569,9 +636,10 @@
569
636
  "imports": [
570
637
  "fabric-base",
571
638
  "fabric-jsvalue",
639
+ "fabric-mandate",
572
640
  "fabric-time"
573
641
  ],
574
- "sha256": "66f9ca7d1da31c89eeedffe7b78ff2230361d375d44c3aa90d9c60b66dfe5cbe"
642
+ "sha256": "85298a9b91c737b14f2308428138494b5afd742d586e319dca793b696450ab50"
575
643
  },
576
644
  {
577
645
  "module": "fabric-connections",
@@ -584,6 +652,28 @@
584
652
  ],
585
653
  "sha256": "303432e547ce563e90ca9ffcd827f5612f51d3582929834e1add0fdaf6485dcc"
586
654
  },
655
+ {
656
+ "module": "fabric-a2a",
657
+ "file": "fabric-a2a.mjs",
658
+ "layer": "L3",
659
+ "imports": [
660
+ "fabric-base",
661
+ "fabric-jsvalue",
662
+ "fabric-secrets"
663
+ ],
664
+ "sha256": "51b72fe1d80649d659fcad3a8f96370db3476c4a7b30cbabd8522c138be69346"
665
+ },
666
+ {
667
+ "module": "fabric-page-links",
668
+ "file": "fabric-page-links.mjs",
669
+ "layer": "L3",
670
+ "imports": [
671
+ "fabric-base",
672
+ "fabric-jsvalue",
673
+ "fabric-secrets"
674
+ ],
675
+ "sha256": "a8834926e9d4bbf7c4857f551451d2ebf6ac8873bbccaaf89c5e30cf45b17ee6"
676
+ },
587
677
  {
588
678
  "module": "fabric-lock",
589
679
  "file": "fabric-lock.mjs",
@@ -624,6 +714,7 @@
624
714
  "file": "fabric-descriptor.mjs",
625
715
  "layer": "L3",
626
716
  "imports": [
717
+ "fabric-a2a",
627
718
  "fabric-actions",
628
719
  "fabric-base",
629
720
  "fabric-connections",
@@ -632,7 +723,22 @@
632
723
  "fabric-secrets",
633
724
  "fabric-usage"
634
725
  ],
635
- "sha256": "c1ccaa9dff5edf90b82d6d77e2e5189a5d0f677fd48cc0aed3cccb83ad2a1f12"
726
+ "sha256": "84c35c7ba0ae09fde1dc3f6ab796cd578d008707e77815a0f7b7a80306fa4cce"
727
+ },
728
+ {
729
+ "module": "fabric-context",
730
+ "file": "fabric-context.mjs",
731
+ "layer": "L3",
732
+ "imports": [
733
+ "fabric-base",
734
+ "fabric-descriptor",
735
+ "fabric-estate",
736
+ "fabric-lock",
737
+ "fabric-paths",
738
+ "fabric-share",
739
+ "fabric-time"
740
+ ],
741
+ "sha256": "3b12f21df19456b08728b9f1c734349d631db67019756c849a91dd533ee6bcbe"
636
742
  },
637
743
  {
638
744
  "module": "fabric-auth",
@@ -678,7 +784,7 @@
678
784
  "fabric-paths",
679
785
  "fabric-secrets"
680
786
  ],
681
- "sha256": "9d61c1a17538a5e2453e33e5ae347337336748041bc054478a96dd51f3d4fc51"
787
+ "sha256": "d45c38de0cb3ed85e083496c2d3c51dab004454accdd87f4762a512a6d442573"
682
788
  },
683
789
  {
684
790
  "module": "fabric-service",
@@ -722,9 +828,10 @@
722
828
  "fabric-actions",
723
829
  "fabric-base",
724
830
  "fabric-delegation",
725
- "fabric-jsvalue"
831
+ "fabric-jsvalue",
832
+ "fabric-mandate"
726
833
  ],
727
- "sha256": "fc8f3044afe209a1b23ddb3bc9b3993f4831913fa66bfd6e7855f1be80428e43"
834
+ "sha256": "91fdedb96ad6d3905506867ed0c9ae922b593e2a4be0bafc28ea820f7148d918"
728
835
  },
729
836
  {
730
837
  "module": "fabric-interop",
@@ -733,9 +840,10 @@
733
840
  "imports": [
734
841
  "fabric-delegation",
735
842
  "fabric-interop-rules",
843
+ "fabric-page-links",
736
844
  "fabric-service"
737
845
  ],
738
- "sha256": "8f1ca418112d7129402783376bb9cbc9d2607f2aceec2a6796e703591a88f535"
846
+ "sha256": "1345a5b85d7a368cec3f7bc6b7e595e9a6caf3cd7bc9c0d156dda5756fbe71c4"
739
847
  },
740
848
  {
741
849
  "module": "fabric-hub",
@@ -3287,6 +3395,178 @@
3287
3395
  "fabric-openrouter.mjs": "ab6c4c7251d563980d895061ee19976bde2f364c21b6354efdd9a9027b1ea139",
3288
3396
  "fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
3289
3397
  "share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
3398
+ },
3399
+ "0.51.0": {
3400
+ "fabric_jsvalue.py": "12888a2c934a885d35999ac9782eaedc8d04946d9775213344a235a8814d3d28",
3401
+ "fabric_time.py": "588f383da4ac6a243ea95b6ffc3a0aa99ca94245732dc4937734f190b7af4ae9",
3402
+ "fabric_identifiers.py": "0fd814d521ac3aa39907458265870753046a73f48af3d8581ab864b93b211607",
3403
+ "fabric_secrets.py": "68a0b5e9e90c468ec9ac67b2f0fd1848e08813d6ec1ec14a2a47337eb1a98911",
3404
+ "fabric_crypto.py": "9c34aee20dbe4d6742e4fdbaab68ceb934bbe7dbd3a904c0010824ace16cdeaa",
3405
+ "fabric_base.py": "f62bcc2ed9912660fa875d27a09f60867260cc4925f79873501fd9620be59611",
3406
+ "fabric_platform.py": "a9350dff55ef0fb3a23cdb4d0320a15868b15a8deb10d2eb74d72c58740c284b",
3407
+ "fabric_paths.py": "8a1ee742f80f436e9f28c61b4f049a9545de2a9e0d66bfc61faa6ee5d1ba3734",
3408
+ "fabric_estate.py": "bcc2af6ddf3fee3def7a5c5a738a0397c0e27e815ac9cb462714acef47b0c8c5",
3409
+ "fabric_mandate.py": "e7742f3c64b37251f76ffa44b5ee8e865e55f6feefcbc8439d0b1658247b272f",
3410
+ "fabric_delegation.py": "39ca0b8ed853eea125b616eb7ccc46a8aba0cd08b96202e2b55d5b50ab07ac50",
3411
+ "fabric_share.py": "da36a466426fc29dd7dd40013167f3959a18375f8fedd228bf64f298cec1040c",
3412
+ "fabric_ceremonies.py": "a59e83cf4adb2669a9b98008e3d3a0cba991a35cbff97bc604fc82fe81cfd49f",
3413
+ "fabric_package_schema.py": "e623f0408d38e3343ed66222fb812907c6c52e1a286eb1c1176ab2e64640c9ad",
3414
+ "fabric_package.py": "ff533f1b3f92b4ea0f532fcec50b68c610d47549930eef8ad5247692a64dfb3c",
3415
+ "fabric_protocols.py": "03925496392bb01d844f198750e9a8fdcea77f57baae00102ccd2ed08c336e11",
3416
+ "fabric_actions.py": "c786326e4e39cfd5341249fa9dd5d2584715c5fa6eb71c46d25997b3311b4553",
3417
+ "fabric_connections.py": "77d3ccf863c70e9209d21ef45c46a6db9c06237019bc20d54f8d3946873f3f11",
3418
+ "fabric_a2a.py": "8b01502131215bb4de1c01866187c56e99b791543923ed8577535573db33b919",
3419
+ "fabric_page_links.py": "1b57ea573c550e2f90d1ec3edcc655917ceaa0db9dd1635fccf422ec3024d25e",
3420
+ "fabric_lock.py": "ba2399d2137c7a7791b7133b9db9cca36693f4eb7e30955b25a75ade814e95ba",
3421
+ "fabric_usage.py": "b1f335cab4625171a616cf68cf3fd892b18bdadcf4baec3a3a0fdcf12785c170",
3422
+ "fabric_backups.py": "1f3f0d7ecf361b29e9101e07f1c53e5dc304d598bf26fd59ec89f16b9fed2420",
3423
+ "fabric_descriptor.py": "c973def06b68dce7ef369da77186542ce3afe357d4579a7d409604f06e4bf131",
3424
+ "fabric_context.py": "51016070a56d2dd0cedefe1d677ee54e9d42dfe0821b56767a983121995ed55a",
3425
+ "fabric_auth.py": "71115d18c67b7b806cb57b64b77e01ad97fc0e63e6f49ee850f778123617d905",
3426
+ "fabric_events.py": "0086886c2c29dbd5c9d152be9d375c5bdf4a29f89b8095baff8490c2bcd64e47",
3427
+ "fabric_logs.py": "86dc55bfafa2a57264722e2403510a249b95de0e4a722b2e4bc3948e3bd93da9",
3428
+ "fabric_supervisors.py": "3c5b2e8c310738720b1c1b779be4710e90251013d9be4c68f9952edc0bf55d5f",
3429
+ "fabric_service.py": "a2e813469a47d4d3eea996628635c8903007498bdb6a1ae032a7a5ce6f49fe2f",
3430
+ "fabric_profiles.py": "26e21ec29c016000f8ca8053b7b489184854a73be1b7fdc0a18d12990203db9b",
3431
+ "fabric_interop_rules.py": "59fa795b32da64fdbab62a433ad2ab5eb199c5c2d00b59266ec1c9729a8e8b47",
3432
+ "fabric_interop.py": "71f3fb166f0a50ad14124cb0c579d058d5ea2dafb4728d8b8ef6ce645e8cda40",
3433
+ "fabric_hub.py": "b9ac852e601b1d54cf61351677a628afc69faeed7d1fc74ebe541c1cf38e0c2a",
3434
+ "fabric_board_shapes.py": "0a0e8d3d40e33dfd8c457aedb85330b2ff25f8c49a33eb6cbd5a5cc8a5007f7e",
3435
+ "fabric_board_link.py": "b5bff994cb615c6a4bb0d88d020e3a59504166180e1fa1aea3be93224f2aeccb",
3436
+ "fabric_board_session.py": "2845d7d758b06ac4588bdf825a471c201a46ce535a631805697b1e35495fead6",
3437
+ "fabric_board_fixture.py": "69761ce205ec640762ec9b591c6903e5a87f844e8d423b041681924027e39d1e",
3438
+ "fabric_board.py": "0f075894b3e352194fcaf3fc7d08dee4e9f1c215e859769ed85fa5010e4a1599",
3439
+ "fabric_http.py": "5d7f72af3a73fdbe8c1f487ecf60cef23a7c46289eba542b03aff4706b8218d4",
3440
+ "fabric_openrouter.py": "309f588f9c976b1061323f3161e35d86248afd5b59b16391afbfc4e1099ecd65",
3441
+ "fabric-jsvalue.mjs": "dfbdb8c41584972c9389750a41719374a1cfc5652ed438dd1623025190b0106e",
3442
+ "fabric-time.mjs": "3ff932069038a720df1c68c6492976906737b2e67e5c12d9c81c418597f661de",
3443
+ "fabric-identifiers.mjs": "a18c2a501a4aa170bfd3d99e571ad6b7662649b4d3b9d2a540c002ea42811bbf",
3444
+ "fabric-secrets.mjs": "6ad8ab18ac899ecc2384e8ec6a3fb689b92be3b9a5ce3a59b92a37d52da5d766",
3445
+ "fabric-crypto.mjs": "038e03689701e3c9721a1e7f8e0a4d02a52d6a5d1661b0dc84035edc3ebbfcf6",
3446
+ "fabric-base.mjs": "7804b2df7715dbbf9702a9b61b6b8cef2110f9a52b04cabd8fb0a66458d87512",
3447
+ "fabric-platform.mjs": "a8119d95ebba4d589a9e401f5d6fc8dda62d59d44e4c1ff811d97fac3771ac0c",
3448
+ "fabric-paths.mjs": "aa630d611e748a899e7043480f4a4e46b444f2e15ff945f30c2fbef21c1ceea5",
3449
+ "fabric-estate.mjs": "e2959b3986f1bd67b9594131d8a4057543f94d3193b57b6c65b19d05adf8d6e6",
3450
+ "fabric-mandate.mjs": "e72bddcec16915ff0ae148fb88c1082d71d99b911e1c45236dca0ecfc3663067",
3451
+ "fabric-delegation.mjs": "770eacf79c16fef95cd390199da9ad5d056faed8bed8f9c05bfb9c4cd954e58d",
3452
+ "fabric-share.mjs": "bfb26581c21ad984c2a337da02429f9f3a165cc582f8ba48de4d3dfb7d163a59",
3453
+ "fabric-ceremonies.mjs": "117d4374c9e95c930a38de7adbd4323774798f4fe6ec6f24afcd6f2c7298ca44",
3454
+ "fabric-package-schema.mjs": "cd28092375db0fc21ffab1f0bb7794f7f8979ee08c64d3b9faf4b3845357caa6",
3455
+ "fabric-package.mjs": "13913ea6d12056c3a31b8222b6c4aab8395941fe519913692e1a06d8672e1c88",
3456
+ "fabric-protocols.mjs": "9e20785989ab66cd009f69d77be8641e1dc0f4758693dbb2cc18c888b7d59ba6",
3457
+ "fabric-actions.mjs": "85298a9b91c737b14f2308428138494b5afd742d586e319dca793b696450ab50",
3458
+ "fabric-connections.mjs": "303432e547ce563e90ca9ffcd827f5612f51d3582929834e1add0fdaf6485dcc",
3459
+ "fabric-a2a.mjs": "51b72fe1d80649d659fcad3a8f96370db3476c4a7b30cbabd8522c138be69346",
3460
+ "fabric-page-links.mjs": "a8834926e9d4bbf7c4857f551451d2ebf6ac8873bbccaaf89c5e30cf45b17ee6",
3461
+ "fabric-lock.mjs": "ac219ab0a326d5c43c7c4c255e0c3843d4794de795a60e3af661e7d5350ea052",
3462
+ "fabric-usage.mjs": "1c4d18004639409624ac3516a02f2b60bbf55abdb612e9a96c37e83666eb87a7",
3463
+ "fabric-backups.mjs": "cfd8c9085e3d597a783099c2bd2ffe2f3faa0daaadab46dedd30523894cfeb06",
3464
+ "fabric-descriptor.mjs": "84c35c7ba0ae09fde1dc3f6ab796cd578d008707e77815a0f7b7a80306fa4cce",
3465
+ "fabric-context.mjs": "3b12f21df19456b08728b9f1c734349d631db67019756c849a91dd533ee6bcbe",
3466
+ "fabric-auth.mjs": "782c2aa732f8320f604194660117640a7ea145e12b8155c04e88cef7c516a5b3",
3467
+ "fabric-events.mjs": "c463d6ffcae24229a5c608d8fcea4268d2ccc5024b19fa10e5a452284068fa71",
3468
+ "fabric-logs.mjs": "58467e5719c16e099d05bbedec47a95712506ab03c33f3cd4be1252e8498a946",
3469
+ "fabric-supervisors.mjs": "d45c38de0cb3ed85e083496c2d3c51dab004454accdd87f4762a512a6d442573",
3470
+ "fabric-service.mjs": "6aa673657427211b491a9b63f94b9847a7e6aa3ee1b7353e1af11f46469803a3",
3471
+ "fabric-profiles.mjs": "314376cf2deb87f235fb18b11d3b532e211f585b9af0a9302b5f4cc39971b532",
3472
+ "fabric-interop-rules.mjs": "91fdedb96ad6d3905506867ed0c9ae922b593e2a4be0bafc28ea820f7148d918",
3473
+ "fabric-interop.mjs": "1345a5b85d7a368cec3f7bc6b7e595e9a6caf3cd7bc9c0d156dda5756fbe71c4",
3474
+ "fabric-hub.mjs": "c005115a864cfd67daa4862097bb14acfe5a60bf653897e5bf8a570dd80f1070",
3475
+ "fabric-board-shapes.mjs": "c1db7b7bd0d58d82bb6d8dfbc3cd1547a256a333052d367e82ff1b3edf2804d7",
3476
+ "fabric-board-link.mjs": "4cd6d4e21713a38c8e56f7d59db3148638b8c27c08e774d96a0f6283c6049e0a",
3477
+ "fabric-board-session.mjs": "26c9b0b2818a4cedc5248b08ea6732e2ee4ee81e31f6fee2b572a019db813c93",
3478
+ "fabric-board-fixture.mjs": "83c4b7e33ee47b68385faf2569d38d5c8a0c5cb0f8656090f41e1b0eed2f436e",
3479
+ "fabric-board.mjs": "9e7bfe4d412521982224ef12bebfc2ff255eeeaf8d96cf40234ac18de68e7a59",
3480
+ "fabric-http.mjs": "f886bcb49c4353d039387ac9568738dda26697a94dd07fc6a6204500f0bc27bf",
3481
+ "fabric-openrouter.mjs": "ab6c4c7251d563980d895061ee19976bde2f364c21b6354efdd9a9027b1ea139",
3482
+ "fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
3483
+ "share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
3484
+ },
3485
+ "0.51.1": {
3486
+ "fabric_jsvalue.py": "12888a2c934a885d35999ac9782eaedc8d04946d9775213344a235a8814d3d28",
3487
+ "fabric_time.py": "588f383da4ac6a243ea95b6ffc3a0aa99ca94245732dc4937734f190b7af4ae9",
3488
+ "fabric_identifiers.py": "0fd814d521ac3aa39907458265870753046a73f48af3d8581ab864b93b211607",
3489
+ "fabric_secrets.py": "68a0b5e9e90c468ec9ac67b2f0fd1848e08813d6ec1ec14a2a47337eb1a98911",
3490
+ "fabric_crypto.py": "9c34aee20dbe4d6742e4fdbaab68ceb934bbe7dbd3a904c0010824ace16cdeaa",
3491
+ "fabric_base.py": "f62bcc2ed9912660fa875d27a09f60867260cc4925f79873501fd9620be59611",
3492
+ "fabric_platform.py": "a9350dff55ef0fb3a23cdb4d0320a15868b15a8deb10d2eb74d72c58740c284b",
3493
+ "fabric_paths.py": "8a1ee742f80f436e9f28c61b4f049a9545de2a9e0d66bfc61faa6ee5d1ba3734",
3494
+ "fabric_estate.py": "bcc2af6ddf3fee3def7a5c5a738a0397c0e27e815ac9cb462714acef47b0c8c5",
3495
+ "fabric_mandate.py": "e7742f3c64b37251f76ffa44b5ee8e865e55f6feefcbc8439d0b1658247b272f",
3496
+ "fabric_delegation.py": "39ca0b8ed853eea125b616eb7ccc46a8aba0cd08b96202e2b55d5b50ab07ac50",
3497
+ "fabric_share.py": "da36a466426fc29dd7dd40013167f3959a18375f8fedd228bf64f298cec1040c",
3498
+ "fabric_ceremonies.py": "a59e83cf4adb2669a9b98008e3d3a0cba991a35cbff97bc604fc82fe81cfd49f",
3499
+ "fabric_package_schema.py": "e623f0408d38e3343ed66222fb812907c6c52e1a286eb1c1176ab2e64640c9ad",
3500
+ "fabric_package.py": "ff533f1b3f92b4ea0f532fcec50b68c610d47549930eef8ad5247692a64dfb3c",
3501
+ "fabric_protocols.py": "03925496392bb01d844f198750e9a8fdcea77f57baae00102ccd2ed08c336e11",
3502
+ "fabric_actions.py": "c786326e4e39cfd5341249fa9dd5d2584715c5fa6eb71c46d25997b3311b4553",
3503
+ "fabric_connections.py": "77d3ccf863c70e9209d21ef45c46a6db9c06237019bc20d54f8d3946873f3f11",
3504
+ "fabric_a2a.py": "8b01502131215bb4de1c01866187c56e99b791543923ed8577535573db33b919",
3505
+ "fabric_page_links.py": "1b57ea573c550e2f90d1ec3edcc655917ceaa0db9dd1635fccf422ec3024d25e",
3506
+ "fabric_lock.py": "ba2399d2137c7a7791b7133b9db9cca36693f4eb7e30955b25a75ade814e95ba",
3507
+ "fabric_usage.py": "b1f335cab4625171a616cf68cf3fd892b18bdadcf4baec3a3a0fdcf12785c170",
3508
+ "fabric_backups.py": "1f3f0d7ecf361b29e9101e07f1c53e5dc304d598bf26fd59ec89f16b9fed2420",
3509
+ "fabric_descriptor.py": "c973def06b68dce7ef369da77186542ce3afe357d4579a7d409604f06e4bf131",
3510
+ "fabric_context.py": "51016070a56d2dd0cedefe1d677ee54e9d42dfe0821b56767a983121995ed55a",
3511
+ "fabric_auth.py": "71115d18c67b7b806cb57b64b77e01ad97fc0e63e6f49ee850f778123617d905",
3512
+ "fabric_events.py": "0086886c2c29dbd5c9d152be9d375c5bdf4a29f89b8095baff8490c2bcd64e47",
3513
+ "fabric_logs.py": "86dc55bfafa2a57264722e2403510a249b95de0e4a722b2e4bc3948e3bd93da9",
3514
+ "fabric_supervisors.py": "3c5b2e8c310738720b1c1b779be4710e90251013d9be4c68f9952edc0bf55d5f",
3515
+ "fabric_service.py": "a2e813469a47d4d3eea996628635c8903007498bdb6a1ae032a7a5ce6f49fe2f",
3516
+ "fabric_profiles.py": "26e21ec29c016000f8ca8053b7b489184854a73be1b7fdc0a18d12990203db9b",
3517
+ "fabric_interop_rules.py": "59fa795b32da64fdbab62a433ad2ab5eb199c5c2d00b59266ec1c9729a8e8b47",
3518
+ "fabric_interop.py": "71f3fb166f0a50ad14124cb0c579d058d5ea2dafb4728d8b8ef6ce645e8cda40",
3519
+ "fabric_hub.py": "b9ac852e601b1d54cf61351677a628afc69faeed7d1fc74ebe541c1cf38e0c2a",
3520
+ "fabric_board_shapes.py": "0a0e8d3d40e33dfd8c457aedb85330b2ff25f8c49a33eb6cbd5a5cc8a5007f7e",
3521
+ "fabric_board_link.py": "b5bff994cb615c6a4bb0d88d020e3a59504166180e1fa1aea3be93224f2aeccb",
3522
+ "fabric_board_session.py": "2845d7d758b06ac4588bdf825a471c201a46ce535a631805697b1e35495fead6",
3523
+ "fabric_board_fixture.py": "69761ce205ec640762ec9b591c6903e5a87f844e8d423b041681924027e39d1e",
3524
+ "fabric_board.py": "0f075894b3e352194fcaf3fc7d08dee4e9f1c215e859769ed85fa5010e4a1599",
3525
+ "fabric_http.py": "5d7f72af3a73fdbe8c1f487ecf60cef23a7c46289eba542b03aff4706b8218d4",
3526
+ "fabric_openrouter.py": "309f588f9c976b1061323f3161e35d86248afd5b59b16391afbfc4e1099ecd65",
3527
+ "fabric-jsvalue.mjs": "dfbdb8c41584972c9389750a41719374a1cfc5652ed438dd1623025190b0106e",
3528
+ "fabric-time.mjs": "3ff932069038a720df1c68c6492976906737b2e67e5c12d9c81c418597f661de",
3529
+ "fabric-identifiers.mjs": "a18c2a501a4aa170bfd3d99e571ad6b7662649b4d3b9d2a540c002ea42811bbf",
3530
+ "fabric-secrets.mjs": "6ad8ab18ac899ecc2384e8ec6a3fb689b92be3b9a5ce3a59b92a37d52da5d766",
3531
+ "fabric-crypto.mjs": "038e03689701e3c9721a1e7f8e0a4d02a52d6a5d1661b0dc84035edc3ebbfcf6",
3532
+ "fabric-base.mjs": "7804b2df7715dbbf9702a9b61b6b8cef2110f9a52b04cabd8fb0a66458d87512",
3533
+ "fabric-platform.mjs": "a8119d95ebba4d589a9e401f5d6fc8dda62d59d44e4c1ff811d97fac3771ac0c",
3534
+ "fabric-paths.mjs": "aa630d611e748a899e7043480f4a4e46b444f2e15ff945f30c2fbef21c1ceea5",
3535
+ "fabric-estate.mjs": "e2959b3986f1bd67b9594131d8a4057543f94d3193b57b6c65b19d05adf8d6e6",
3536
+ "fabric-mandate.mjs": "e72bddcec16915ff0ae148fb88c1082d71d99b911e1c45236dca0ecfc3663067",
3537
+ "fabric-delegation.mjs": "770eacf79c16fef95cd390199da9ad5d056faed8bed8f9c05bfb9c4cd954e58d",
3538
+ "fabric-share.mjs": "bfb26581c21ad984c2a337da02429f9f3a165cc582f8ba48de4d3dfb7d163a59",
3539
+ "fabric-ceremonies.mjs": "117d4374c9e95c930a38de7adbd4323774798f4fe6ec6f24afcd6f2c7298ca44",
3540
+ "fabric-package-schema.mjs": "cd28092375db0fc21ffab1f0bb7794f7f8979ee08c64d3b9faf4b3845357caa6",
3541
+ "fabric-package.mjs": "13913ea6d12056c3a31b8222b6c4aab8395941fe519913692e1a06d8672e1c88",
3542
+ "fabric-protocols.mjs": "9e20785989ab66cd009f69d77be8641e1dc0f4758693dbb2cc18c888b7d59ba6",
3543
+ "fabric-actions.mjs": "85298a9b91c737b14f2308428138494b5afd742d586e319dca793b696450ab50",
3544
+ "fabric-connections.mjs": "303432e547ce563e90ca9ffcd827f5612f51d3582929834e1add0fdaf6485dcc",
3545
+ "fabric-a2a.mjs": "51b72fe1d80649d659fcad3a8f96370db3476c4a7b30cbabd8522c138be69346",
3546
+ "fabric-page-links.mjs": "a8834926e9d4bbf7c4857f551451d2ebf6ac8873bbccaaf89c5e30cf45b17ee6",
3547
+ "fabric-lock.mjs": "ac219ab0a326d5c43c7c4c255e0c3843d4794de795a60e3af661e7d5350ea052",
3548
+ "fabric-usage.mjs": "1c4d18004639409624ac3516a02f2b60bbf55abdb612e9a96c37e83666eb87a7",
3549
+ "fabric-backups.mjs": "cfd8c9085e3d597a783099c2bd2ffe2f3faa0daaadab46dedd30523894cfeb06",
3550
+ "fabric-descriptor.mjs": "84c35c7ba0ae09fde1dc3f6ab796cd578d008707e77815a0f7b7a80306fa4cce",
3551
+ "fabric-context.mjs": "3b12f21df19456b08728b9f1c734349d631db67019756c849a91dd533ee6bcbe",
3552
+ "fabric-auth.mjs": "782c2aa732f8320f604194660117640a7ea145e12b8155c04e88cef7c516a5b3",
3553
+ "fabric-events.mjs": "c463d6ffcae24229a5c608d8fcea4268d2ccc5024b19fa10e5a452284068fa71",
3554
+ "fabric-logs.mjs": "58467e5719c16e099d05bbedec47a95712506ab03c33f3cd4be1252e8498a946",
3555
+ "fabric-supervisors.mjs": "d45c38de0cb3ed85e083496c2d3c51dab004454accdd87f4762a512a6d442573",
3556
+ "fabric-service.mjs": "6aa673657427211b491a9b63f94b9847a7e6aa3ee1b7353e1af11f46469803a3",
3557
+ "fabric-profiles.mjs": "314376cf2deb87f235fb18b11d3b532e211f585b9af0a9302b5f4cc39971b532",
3558
+ "fabric-interop-rules.mjs": "91fdedb96ad6d3905506867ed0c9ae922b593e2a4be0bafc28ea820f7148d918",
3559
+ "fabric-interop.mjs": "1345a5b85d7a368cec3f7bc6b7e595e9a6caf3cd7bc9c0d156dda5756fbe71c4",
3560
+ "fabric-hub.mjs": "c005115a864cfd67daa4862097bb14acfe5a60bf653897e5bf8a570dd80f1070",
3561
+ "fabric-board-shapes.mjs": "c1db7b7bd0d58d82bb6d8dfbc3cd1547a256a333052d367e82ff1b3edf2804d7",
3562
+ "fabric-board-link.mjs": "4cd6d4e21713a38c8e56f7d59db3148638b8c27c08e774d96a0f6283c6049e0a",
3563
+ "fabric-board-session.mjs": "26c9b0b2818a4cedc5248b08ea6732e2ee4ee81e31f6fee2b572a019db813c93",
3564
+ "fabric-board-fixture.mjs": "83c4b7e33ee47b68385faf2569d38d5c8a0c5cb0f8656090f41e1b0eed2f436e",
3565
+ "fabric-board.mjs": "9e7bfe4d412521982224ef12bebfc2ff255eeeaf8d96cf40234ac18de68e7a59",
3566
+ "fabric-http.mjs": "f886bcb49c4353d039387ac9568738dda26697a94dd07fc6a6204500f0bc27bf",
3567
+ "fabric-openrouter.mjs": "ab6c4c7251d563980d895061ee19976bde2f364c21b6354efdd9a9027b1ea139",
3568
+ "fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
3569
+ "share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
3290
3570
  }
3291
3571
  },
3292
3572
  "data": {
@@ -5,9 +5,9 @@ license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
5
5
  compatibility: Requires filesystem access and Python 3.9+. Exact schema checks additionally need git, Node.js, pnpm, and the pinned fabric-agent-contract checkout (a public repository). Works without those tools in an explicitly degraded structural-check mode. Ships in one plugin with adapting-projects-to-fabric, whose scripts it reuses.
6
6
  metadata:
7
7
  author: PassionCode.ai
8
- version: "0.50.0"
8
+ version: "0.51.1"
9
9
  contract-version: "0.1.0"
10
- contract-commit: "52c7d798b9f4eb784eb4e29e717038a8912c759d"
10
+ contract-commit: "e6c4fc16b415eec3190dd34d924d269405359dc9"
11
11
  ---
12
12
 
13
13
  # Creating Fabric-compatible agents
@@ -136,7 +136,7 @@ python3 <plugin-dir>/skills/adapting-projects-to-fabric/scripts/adapt_project.py
136
136
  The effect class is declared, never defaulted: ask the author what the agent does outside itself when the request
137
137
  does not say. Cost presets are only for a run whose cost varies; their amounts come from the author or measured runs.
138
138
 
139
- Pin exactly contract `0.1.0` at commit `52c7d798b9f4eb784eb4e29e717038a8912c759d` and
139
+ Pin exactly contract `0.1.0` at commit `e6c4fc16b415eec3190dd34d924d269405359dc9` and
140
140
  read the pinned guide before implementing protocol details. If this skill is installed
141
141
  without its sibling, the scaffolder is absent: create the bundle by hand from the pinned
142
142
  contract's `docs/guides/connecting-compatible-agents.md` and mark the structural check
@@ -140,5 +140,8 @@ or instructions alone do not prove all final answers from every agent are filter
140
140
 
141
141
  Syntax is owned by Fabric Dashboards and `@passioncode-ai/fabric-service-host`:
142
142
  [ADR-0005](https://github.com/passioncode-ai/fabric-dashboards/blob/51a7a80acf42781d7bec304cc87c655d48cc309b/docs/adr/0005-service-links.md).
143
- The gate accepts canonical links and the legacy `open?service=` form returned by
144
- older hosts; it does not generate either dialect or redefine the Fabric wire contract.
143
+ The gate accepts only the service form, `fabric-dashboards://service/SERVICE_ID.INSTANCE`
144
+ with at most one `path`; since 0.51.0 it refuses the legacy `open?service=` form, as contract
145
+ DEC-0123 (PL-1, checker rule `FAC-SEM-143`) and its vectors do. A host that still returns the
146
+ legacy form fails the gate: report it as an installed host that did not open the page. The gate
147
+ does not generate links or redefine the Fabric wire contract.
@@ -74,7 +74,9 @@ def login_path(path):
74
74
 
75
75
  def safe_path(path):
76
76
  return (isinstance(path, str) and path.startswith('/') and not path.startswith('//')
77
- and len(path) <= 2048 and not re.search(r'[\\\x00-\x1f\x7f]', path))
77
+ and len(path) <= 2048 and not re.search(r'[\\\x00-\x1f\x7f]', path)
78
+ # JavaScript's whitespace (\s), which the contract's parseDashboardsLink refuses in a page (DEC-0123)
79
+ and not re.search('[ \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]', path))
78
80
 
79
81
 
80
82
  def check(data):
@@ -87,11 +89,11 @@ def check(data):
87
89
  require(not re.search(r'[\\\x00-\x20\x7f]', native + http), 'unsafe_url')
88
90
  deep, plain = urlsplit(native), urlsplit(http)
89
91
  require(deep.scheme == 'fabric-dashboards' and not deep.username and not deep.password and not deep.port and not deep.fragment, 'invalid_deep_link')
90
- query = parse_qs(deep.query, keep_blank_values=True, strict_parsing=True)
91
- if deep.netloc == 'service':
92
- require(deep.path in ('/' + service, '/' + service + '/') and set(query) <= {'path'}, 'wrong_service_or_parameter')
93
- else:
94
- require(deep.netloc == 'open' and deep.path in ('', '/') and query.get('service') == [service] and set(query) <= {'service', 'path'}, 'invalid_legacy_link')
92
+ # An empty query is no fields: Python 3.9's strict parse_qs raises on '' where 3.11 and later answer {}.
93
+ query = parse_qs(deep.query, keep_blank_values=True, strict_parsing=True) if deep.query else {}
94
+ # DEC-0123 PL-1: only the service form; the legacy open?service= link is refused (FAC-SEM-143, since 0.51.0).
95
+ require(deep.netloc == 'service', 'not_service_link')
96
+ require(deep.path in ('/' + service, '/' + service + '/') and set(query) <= {'path'}, 'wrong_service_or_parameter')
95
97
  require('path' not in query or len(query['path']) == 1, 'duplicate_path')
96
98
  page = query.get('path', [None])[0]
97
99
  require(page is None or safe_path(page), 'unsafe_path')