@passioncode-ai/fabric-agent-adapter 0.78.0 → 0.79.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 (57) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/README.md +14 -7
  3. package/package.json +1 -1
  4. package/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +1 -1
  5. package/plugins/fabric-agent-adapter/hooks/hooks.json +1 -1
  6. package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +6 -4
  7. package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/dashboard-links.md +37 -5
  8. package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/operator-channel-and-repository.md +13 -3
  9. package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/provider-entry.md +2 -2
  10. package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/fabric_provider.py +14 -7
  11. package/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +1 -1
  12. package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-button.js +6 -3
  13. package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-dashboard.css +1 -1
  14. package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-dashboard.js +34 -8
  15. package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/kit.json +9 -4
  16. package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/board.md +8 -5
  17. package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/connectors.md +2 -2
  18. package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard-kit.md +1 -1
  19. package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard-links.md +37 -5
  20. package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/delegation.md +4 -1
  21. package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/lifecycle.md +6 -1
  22. package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/protocol.md +3 -0
  23. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-base.mjs +5 -0
  24. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-board-link.mjs +2 -0
  25. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-board-session.mjs +12 -6
  26. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-board-slots.mjs +2 -2
  27. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-delegation.mjs +30 -2
  28. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-descriptor.mjs +7 -2
  29. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-lock.mjs +54 -20
  30. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-openrouter.mjs +4 -0
  31. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-peer-owner.mjs +3 -1
  32. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-secrets.mjs +4 -1
  33. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-service.mjs +2 -0
  34. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-supervisors.mjs +17 -5
  35. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_base.py +6 -0
  36. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_board_link.py +3 -0
  37. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_board_session.py +13 -5
  38. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_board_slots.py +2 -2
  39. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_delegation.py +22 -4
  40. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_descriptor.py +14 -1
  41. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_lock.py +41 -1
  42. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_openrouter.py +6 -0
  43. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_service.py +4 -0
  44. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_supervisors.py +64 -10
  45. package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/kit.json +215 -25
  46. package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +10 -5
  47. package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/dashboard-links.md +37 -5
  48. package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/models-and-providers.md +6 -3
  49. package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/operator-channel-and-repository.md +13 -3
  50. package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/resilience-and-autonomy.md +6 -3
  51. package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/where-agents-run.md +4 -0
  52. package/plugins/fabric-agent-adapter/skills/observing-products/SKILL.md +1 -1
  53. package/plugins/fabric-agent-adapter/skills/working-with-fabric/SKILL.md +10 -9
  54. package/plugins/fabric-agent-adapter/skills/working-with-fabric/references/on-demand-session.md +57 -37
  55. package/plugins/fabric-agent-adapter/skills/working-with-fabric/references/project-board.md +50 -25
  56. package/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session_cli.py +26 -10
  57. package/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session_env.py +11 -5
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fabric-service-kit",
3
- "version": "0.78.0",
3
+ "version": "0.79.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
  {
@@ -59,7 +59,7 @@
59
59
  "file": "fabric_base.py",
60
60
  "layer": "L1",
61
61
  "imports": [],
62
- "sha256": "f62bcc2ed9912660fa875d27a09f60867260cc4925f79873501fd9620be59611"
62
+ "sha256": "d8c67f345e30332cce3664af77b0e6e07cd477b78c961ac009e9efee1be7e1b2"
63
63
  },
64
64
  {
65
65
  "module": "fabric_platform",
@@ -125,9 +125,10 @@
125
125
  "fabric_estate",
126
126
  "fabric_jsvalue",
127
127
  "fabric_mandate",
128
- "fabric_paths"
128
+ "fabric_paths",
129
+ "fabric_peer_owner"
129
130
  ],
130
- "sha256": "716f0ff7ac01095f54b24970beac1962128e8ff33026b243fc0467876142ab03"
131
+ "sha256": "e923be4d2d901d5e0d8bf16b05a637119464009a51cffb247bd20de5e9c1d0c9"
131
132
  },
132
133
  {
133
134
  "module": "fabric_share",
@@ -244,7 +245,7 @@
244
245
  "fabric_paths",
245
246
  "fabric_platform"
246
247
  ],
247
- "sha256": "dfaf92a7086cbb097d832a305869b7964e2d2a9da0e3365c8ec1685a7bb4fef9"
248
+ "sha256": "10d6a2321ac8da47fc6f5bb01b32e2f8c8c966ef6d7145cf3b12bd35156bd650"
248
249
  },
249
250
  {
250
251
  "module": "fabric_usage",
@@ -284,7 +285,7 @@
284
285
  "fabric_secrets",
285
286
  "fabric_usage"
286
287
  ],
287
- "sha256": "c08c91ca0960c694ed7677e7e9247d6307c7b63f37a7e614db022c080cd92ccc"
288
+ "sha256": "16de580eb299ea9213d3e6711bf463cfeb47fcff6b9a4af42f0e95beee481b65"
288
289
  },
289
290
  {
290
291
  "module": "fabric_context",
@@ -345,7 +346,7 @@
345
346
  "fabric_peer_owner",
346
347
  "fabric_secrets"
347
348
  ],
348
- "sha256": "6f10d6e60222c6725434a93253873762e8c4b55fe1cc16ef12c18f2dfbb16798"
349
+ "sha256": "9aafbde1d19f36648257ace623547fb28eb595ea9ccc8db562f2acf0ab39ce15"
349
350
  },
350
351
  {
351
352
  "module": "fabric_service",
@@ -369,7 +370,7 @@
369
370
  "fabric_time",
370
371
  "fabric_usage"
371
372
  ],
372
- "sha256": "8162f7c7934ba5d9c4b46be4cef060b1d5998afa940fbbb2f14b3f7a029bb6ea"
373
+ "sha256": "cc619eea1467a6bdf32c00f51ac8de8e66afd8808d619050ad2a8e67126740c9"
373
374
  },
374
375
  {
375
376
  "module": "fabric_profiles",
@@ -447,7 +448,7 @@
447
448
  "fabric_service",
448
449
  "fabric_time"
449
450
  ],
450
- "sha256": "052bc3c474ece835bb428c37ca864810d04e394d991ddb9c93989a7a825073a5"
451
+ "sha256": "37aacd7afb0b7971c60f434d489fbfc556a70d8da87257179d891be4d2b661b0"
451
452
  },
452
453
  {
453
454
  "module": "fabric_board_slots",
@@ -456,7 +457,7 @@
456
457
  "imports": [
457
458
  "fabric_board_shapes"
458
459
  ],
459
- "sha256": "92b065e3df935547cf46653245f1129e4a1f8b59b0a41e8fa9ffdc41596ee592"
460
+ "sha256": "1bfc68207a23a737c3a6fb31b1fa46ec6ca8e4f9060cb4df7187ff32b2fa5f46"
460
461
  },
461
462
  {
462
463
  "module": "fabric_board_session",
@@ -469,7 +470,7 @@
469
470
  "fabric_hub",
470
471
  "fabric_service"
471
472
  ],
472
- "sha256": "1fd3c3884f3044b56a40f78b33ff88dcac9272284f6681ea359c662879826f7e"
473
+ "sha256": "90ba8f2528c6c64c446cbd3237a584a7fe602a1441e4a7203f2bc20147d3edc4"
473
474
  },
474
475
  {
475
476
  "module": "fabric_board_fixture",
@@ -512,7 +513,7 @@
512
513
  "fabric_time",
513
514
  "fabric_usage"
514
515
  ],
515
- "sha256": "d06a40f83f2fb8bd441ab3485ae882f1fbdd9cd7a9c1ec175eb47cb8ae2cce81"
516
+ "sha256": "a415db7475c3359fa15c85979a63a3a223a0ad7f85f878bcc2d638acccb44090"
516
517
  }
517
518
  ],
518
519
  "node": [
@@ -542,14 +543,14 @@
542
543
  "file": "fabric-secrets.mjs",
543
544
  "layer": "L0",
544
545
  "imports": [],
545
- "sha256": "5822a7e25ecf2e87b5bab4f99c1074af7379d8b49e2784283b5d7d8c25022cde"
546
+ "sha256": "60fe70b64e1fc6a9802e533679af9d2a6623f51fe96aae72cdd6d655712d0845"
546
547
  },
547
548
  {
548
549
  "module": "fabric-peer-owner",
549
550
  "file": "fabric-peer-owner.mjs",
550
551
  "layer": "L0",
551
552
  "imports": [],
552
- "sha256": "ea6d58c06647d9b17778840b1aa775b3cd8715cdf8027a7037672bd5ba4aed64"
553
+ "sha256": "c93cb426aa6a1be7de7cc29338d4d069f236c27b082ee53760d9d119351d3f77"
553
554
  },
554
555
  {
555
556
  "module": "fabric-tailnet",
@@ -570,7 +571,7 @@
570
571
  "file": "fabric-base.mjs",
571
572
  "layer": "L1",
572
573
  "imports": [],
573
- "sha256": "7804b2df7715dbbf9702a9b61b6b8cef2110f9a52b04cabd8fb0a66458d87512"
574
+ "sha256": "1a804bfc3ec5d2479ffc39d3c8d67b056b72af836e1b88102881f9ff632f1901"
574
575
  },
575
576
  {
576
577
  "module": "fabric-platform",
@@ -636,9 +637,10 @@
636
637
  "fabric-estate",
637
638
  "fabric-jsvalue",
638
639
  "fabric-mandate",
639
- "fabric-paths"
640
+ "fabric-paths",
641
+ "fabric-peer-owner"
640
642
  ],
641
- "sha256": "8f63a63aab9a8746b7f664720b87e9398137d01b8d50880974d5070038e414a0"
643
+ "sha256": "27b8f28d072c756b60f5cb90957e22700500dc8eb86ba18bd61c451e6788390b"
642
644
  },
643
645
  {
644
646
  "module": "fabric-share",
@@ -752,7 +754,7 @@
752
754
  "fabric-base",
753
755
  "fabric-paths"
754
756
  ],
755
- "sha256": "02cf833c97a07a8b3c788f9c93f70c4b9c9066efa25318dccf0038e0fc79717f"
757
+ "sha256": "cf79c3aed04dfd36833929f7edd76404976699ac7a8fe38820f0fa02fc2243be"
756
758
  },
757
759
  {
758
760
  "module": "fabric-usage",
@@ -793,7 +795,7 @@
793
795
  "fabric-secrets",
794
796
  "fabric-usage"
795
797
  ],
796
- "sha256": "7c0ef7d245c037eb9e859ab481f6e66fb3e5ef2cf6d1e0a8d32b6d303097ca43"
798
+ "sha256": "a2d9cf633d49085a3d455a489dcc6c41b14d41f1f28a8de45f0690cd6c332d51"
797
799
  },
798
800
  {
799
801
  "module": "fabric-context",
@@ -855,7 +857,7 @@
855
857
  "fabric-peer-owner",
856
858
  "fabric-secrets"
857
859
  ],
858
- "sha256": "8301d7dace103688a46550ae13524438a66127f16281e00871529f625a841e70"
860
+ "sha256": "af8518b8c7e87c1ecd6b865a2f4d9a51a377daa323200c4e90a6178b1725a7d6"
859
861
  },
860
862
  {
861
863
  "module": "fabric-service",
@@ -877,7 +879,7 @@
877
879
  "fabric-supervisors",
878
880
  "fabric-usage"
879
881
  ],
880
- "sha256": "eb30141440043b9a4f3f235b9d2dbfa15ba14dbaab35553f9591b0e2eb01c59a"
882
+ "sha256": "a62bba8c6314e482778b4b793bc60eacaef211a4b0bea571a7e05c58299cf944"
881
883
  },
882
884
  {
883
885
  "module": "fabric-profiles",
@@ -949,7 +951,7 @@
949
951
  "fabric-service",
950
952
  "fabric-time"
951
953
  ],
952
- "sha256": "6e7d51f4fd9730d93455f50dd30e97907b8b9e1ca65a1d69f036f2e8ec05cc0d"
954
+ "sha256": "a21fcfe6f4e701b1f5142a008ceeb7eea42c251a01688f9022539235b6f80b62"
953
955
  },
954
956
  {
955
957
  "module": "fabric-board-slots",
@@ -958,7 +960,7 @@
958
960
  "imports": [
959
961
  "fabric-board-shapes"
960
962
  ],
961
- "sha256": "fc77a3c6e62aa18575568bef4f703cce2edaba8cef648813ebcdbb21bdc27a11"
963
+ "sha256": "c2e80445115c9eab620a5a3686034ba3adc26f32ed307ea0cd8bbc5bc7b87209"
962
964
  },
963
965
  {
964
966
  "module": "fabric-board-session",
@@ -971,7 +973,7 @@
971
973
  "fabric-hub",
972
974
  "fabric-service"
973
975
  ],
974
- "sha256": "18555962e5f6d18080a3e7971c4c6640452542f6042d07917e7ebc073721c415"
976
+ "sha256": "fd71362bf4d244885b54bf52bf14e345fdb05d3d98b7fd6c1da6136f79e4b871"
975
977
  },
976
978
  {
977
979
  "module": "fabric-board-fixture",
@@ -1014,7 +1016,7 @@
1014
1016
  "fabric-time",
1015
1017
  "fabric-usage"
1016
1018
  ],
1017
- "sha256": "6041f3ab30f516658e1dbab4897a651cc8509b2136cfa8e769802c6b40ec2f35"
1019
+ "sha256": "4e3e73a1b8882bdde4cbb311f6f4a5e2f048fa81fa245409a16df1e6cab03e19"
1018
1020
  }
1019
1021
  ],
1020
1022
  "history": {
@@ -6353,6 +6355,194 @@
6353
6355
  "fabric-openrouter.mjs": "6041f3ab30f516658e1dbab4897a651cc8509b2136cfa8e769802c6b40ec2f35",
6354
6356
  "fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
6355
6357
  "share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
6358
+ },
6359
+ "0.79.0": {
6360
+ "fabric_jsvalue.py": "052f1b40bab18600b3731dbdca27cbff17588c21d9458fa6241efd1340d0e09a",
6361
+ "fabric_time.py": "588f383da4ac6a243ea95b6ffc3a0aa99ca94245732dc4937734f190b7af4ae9",
6362
+ "fabric_identifiers.py": "0fd814d521ac3aa39907458265870753046a73f48af3d8581ab864b93b211607",
6363
+ "fabric_secrets.py": "53c5df8d6f2c87433c288853bfaad9a43f544789bdf1e39bda8d3ff14485c89d",
6364
+ "fabric_peer_owner.py": "cc6ce03987a99a506608e6ac05cb32ac05fdd0305060a404b817de71d22b1317",
6365
+ "fabric_tailnet.py": "c60416539be0199182f7969c24a37b14d0db50c8ea5e3e04cea43babfb483407",
6366
+ "fabric_crypto.py": "9c34aee20dbe4d6742e4fdbaab68ceb934bbe7dbd3a904c0010824ace16cdeaa",
6367
+ "fabric_base.py": "d8c67f345e30332cce3664af77b0e6e07cd477b78c961ac009e9efee1be7e1b2",
6368
+ "fabric_platform.py": "a9350dff55ef0fb3a23cdb4d0320a15868b15a8deb10d2eb74d72c58740c284b",
6369
+ "fabric_paths.py": "8a1ee742f80f436e9f28c61b4f049a9545de2a9e0d66bfc61faa6ee5d1ba3734",
6370
+ "fabric_estate_rules.py": "8b36a7f4108d9c2b1fb38c8bff344778c807bed631a99b4a563ecb0a49c10b1c",
6371
+ "fabric_estate.py": "0737ae1d1bb12586bae49de1f15ef1348bc207b5007cced9dad4c55bb5870874",
6372
+ "fabric_mandate.py": "fb19ce5359606bd6e3352ab02b2a12f49605ec6e5c49b55cce1f79c831325044",
6373
+ "fabric_delegation.py": "e923be4d2d901d5e0d8bf16b05a637119464009a51cffb247bd20de5e9c1d0c9",
6374
+ "fabric_share.py": "da36a466426fc29dd7dd40013167f3959a18375f8fedd228bf64f298cec1040c",
6375
+ "fabric_ceremonies.py": "a59e83cf4adb2669a9b98008e3d3a0cba991a35cbff97bc604fc82fe81cfd49f",
6376
+ "fabric_package_schema.py": "e623f0408d38e3343ed66222fb812907c6c52e1a286eb1c1176ab2e64640c9ad",
6377
+ "fabric_package.py": "1f2b9e73b2b32a7e1e887d4b69f87c6e21b4d1227ad924a235334223e6dd51ca",
6378
+ "fabric_protocols.py": "077c6f03f3b887a2e22d9ce6b5bd3750199d71a29d4c82b1d5af8a615b509d93",
6379
+ "fabric_actions.py": "ae21d1199614c4f74d1dcd1e0a87107a9d52434cd9e2d64aa24a7b1e196fb723",
6380
+ "fabric_connections.py": "7de55cb7d808f756d650effabfaa12027d40a5bd5d2f6d448c32969d47529ecb",
6381
+ "fabric_a2a.py": "8b01502131215bb4de1c01866187c56e99b791543923ed8577535573db33b919",
6382
+ "fabric_page_links.py": "1b57ea573c550e2f90d1ec3edcc655917ceaa0db9dd1635fccf422ec3024d25e",
6383
+ "fabric_lock.py": "10d6a2321ac8da47fc6f5bb01b32e2f8c8c966ef6d7145cf3b12bd35156bd650",
6384
+ "fabric_usage.py": "5cc2e03ccc5b06e81987ed7bc3eead7a7e6cbf1a7cb8e05c6c64315eed9d91b6",
6385
+ "fabric_backups.py": "1f3f0d7ecf361b29e9101e07f1c53e5dc304d598bf26fd59ec89f16b9fed2420",
6386
+ "fabric_descriptor.py": "16de580eb299ea9213d3e6711bf463cfeb47fcff6b9a4af42f0e95beee481b65",
6387
+ "fabric_context.py": "6ae311ddc7217a4aff915e7ce2646486931acd128462b7bebe4a52bbb5fbb6c7",
6388
+ "fabric_auth.py": "74ccc10239b65a3567cec5213a7b344cbd88d6eee1fd1c5f7be1d6daf985993c",
6389
+ "fabric_events.py": "da3fe3e3e19d4c9754b90c719e9c069a3ac85e080b9fffd07adbaf63b5bfcf0d",
6390
+ "fabric_logs.py": "86dc55bfafa2a57264722e2403510a249b95de0e4a722b2e4bc3948e3bd93da9",
6391
+ "fabric_supervisors.py": "6842a1b1663950a05074b94de2d7f5f36475c543e08a22a441dbb94cf1281d33",
6392
+ "fabric_service.py": "cc619eea1467a6bdf32c00f51ac8de8e66afd8808d619050ad2a8e67126740c9",
6393
+ "fabric_profiles.py": "26e21ec29c016000f8ca8053b7b489184854a73be1b7fdc0a18d12990203db9b",
6394
+ "fabric_interop_rules.py": "9bdb7989e57b9d0b0d15eb9982d396499823a5e2c528230b71c67866c736e0f5",
6395
+ "fabric_interop.py": "d27e31834611a37cf2a117746f2f60fc187ccc48718eb546ff923c5d0fce7dea",
6396
+ "fabric_hub.py": "c261a81616c52f603eb28cc12ec4034dc479f0517328a65f0dc48d436cf0708b",
6397
+ "fabric_board_shapes.py": "0a0e8d3d40e33dfd8c457aedb85330b2ff25f8c49a33eb6cbd5a5cc8a5007f7e",
6398
+ "fabric_board_link.py": "37aacd7afb0b7971c60f434d489fbfc556a70d8da87257179d891be4d2b661b0",
6399
+ "fabric_board_slots.py": "edb4930bcda7ec356d74988dcd7f43e269fa9199fe45ae6ba2762533f08e3675",
6400
+ "fabric_board_session.py": "5b8984dd6f15bcb8156a661d4d62997a2d30a877d88da299562e18c1ad5e6d07",
6401
+ "fabric_board_fixture.py": "69761ce205ec640762ec9b591c6903e5a87f844e8d423b041681924027e39d1e",
6402
+ "fabric_board.py": "f86c40b8291f8c818f6924910f4022b013d5fd107abaf8825dd0aa6c5e418638",
6403
+ "fabric_http.py": "b11b9930c3f0ab911a9cd325086a4c07a5ed4c246799d290f6085245669f4994",
6404
+ "fabric_openrouter.py": "a415db7475c3359fa15c85979a63a3a223a0ad7f85f878bcc2d638acccb44090",
6405
+ "fabric-jsvalue.mjs": "dfbdb8c41584972c9389750a41719374a1cfc5652ed438dd1623025190b0106e",
6406
+ "fabric-time.mjs": "3ff932069038a720df1c68c6492976906737b2e67e5c12d9c81c418597f661de",
6407
+ "fabric-identifiers.mjs": "a18c2a501a4aa170bfd3d99e571ad6b7662649b4d3b9d2a540c002ea42811bbf",
6408
+ "fabric-secrets.mjs": "60fe70b64e1fc6a9802e533679af9d2a6623f51fe96aae72cdd6d655712d0845",
6409
+ "fabric-peer-owner.mjs": "ea6d58c06647d9b17778840b1aa775b3cd8715cdf8027a7037672bd5ba4aed64",
6410
+ "fabric-tailnet.mjs": "aff3591552448bc042af306cd8a9e5cb9102c6b62d6dc05d53db35e35c51e347",
6411
+ "fabric-crypto.mjs": "038e03689701e3c9721a1e7f8e0a4d02a52d6a5d1661b0dc84035edc3ebbfcf6",
6412
+ "fabric-base.mjs": "1a804bfc3ec5d2479ffc39d3c8d67b056b72af836e1b88102881f9ff632f1901",
6413
+ "fabric-platform.mjs": "a8119d95ebba4d589a9e401f5d6fc8dda62d59d44e4c1ff811d97fac3771ac0c",
6414
+ "fabric-paths.mjs": "aa630d611e748a899e7043480f4a4e46b444f2e15ff945f30c2fbef21c1ceea5",
6415
+ "fabric-estate-rules.mjs": "7476be71174aa5b1026134f2b335abf647feaa55584e2f9de8618e3054aa8e1e",
6416
+ "fabric-estate.mjs": "e8a2e62d2313121e6cb502f6e6abad94d1d546a44b4d9b3ce2be29e7808e8cf3",
6417
+ "fabric-mandate.mjs": "b70f3de03a659e60bba7b5a0580b3582825cd7b8a8e30a28c79621919ec5b7bb",
6418
+ "fabric-delegation.mjs": "27b8f28d072c756b60f5cb90957e22700500dc8eb86ba18bd61c451e6788390b",
6419
+ "fabric-share.mjs": "bfb26581c21ad984c2a337da02429f9f3a165cc582f8ba48de4d3dfb7d163a59",
6420
+ "fabric-ceremonies.mjs": "117d4374c9e95c930a38de7adbd4323774798f4fe6ec6f24afcd6f2c7298ca44",
6421
+ "fabric-package-schema.mjs": "cd28092375db0fc21ffab1f0bb7794f7f8979ee08c64d3b9faf4b3845357caa6",
6422
+ "fabric-package.mjs": "8cfb32eebbd4e1bcf28a6e4437344ae2dd54479b0e7c820f002e9f94ab9ecaad",
6423
+ "fabric-protocols.mjs": "a560b7d6eb0d26204c5536711c3dda9daae90cc91e07cdc75412e75c86272767",
6424
+ "fabric-actions.mjs": "06e42f5e24c96311d5417d0d1effa93479ef7128a7ab139903b2bcf59253f6be",
6425
+ "fabric-connections.mjs": "303432e547ce563e90ca9ffcd827f5612f51d3582929834e1add0fdaf6485dcc",
6426
+ "fabric-a2a.mjs": "51b72fe1d80649d659fcad3a8f96370db3476c4a7b30cbabd8522c138be69346",
6427
+ "fabric-page-links.mjs": "a8834926e9d4bbf7c4857f551451d2ebf6ac8873bbccaaf89c5e30cf45b17ee6",
6428
+ "fabric-lock.mjs": "cf79c3aed04dfd36833929f7edd76404976699ac7a8fe38820f0fa02fc2243be",
6429
+ "fabric-usage.mjs": "1c4d18004639409624ac3516a02f2b60bbf55abdb612e9a96c37e83666eb87a7",
6430
+ "fabric-backups.mjs": "cfd8c9085e3d597a783099c2bd2ffe2f3faa0daaadab46dedd30523894cfeb06",
6431
+ "fabric-descriptor.mjs": "a2d9cf633d49085a3d455a489dcc6c41b14d41f1f28a8de45f0690cd6c332d51",
6432
+ "fabric-context.mjs": "1112d695e872f9825cbc94f08484974bff3880087bc29b8be59f885f03e8f7be",
6433
+ "fabric-auth.mjs": "10ff37a39f9e3adb4d0f05db66c45f49b10eef582e9220c213907964109d7e52",
6434
+ "fabric-events.mjs": "c95c07e2745e52fddbb7237b89824123f240d4f8d6b14f5cb269a09e1845c3ba",
6435
+ "fabric-logs.mjs": "58467e5719c16e099d05bbedec47a95712506ab03c33f3cd4be1252e8498a946",
6436
+ "fabric-supervisors.mjs": "ed23afbf779440cc32418f18edf1721ae2e70c6687b5e5859b22372874c67d8e",
6437
+ "fabric-service.mjs": "a62bba8c6314e482778b4b793bc60eacaef211a4b0bea571a7e05c58299cf944",
6438
+ "fabric-profiles.mjs": "314376cf2deb87f235fb18b11d3b532e211f585b9af0a9302b5f4cc39971b532",
6439
+ "fabric-interop-rules.mjs": "b4e386c359a48e49ffff8a842215760c18a7c98a0af4754a808a35fb2820d458",
6440
+ "fabric-interop.mjs": "989040aed33b2712a258244192bdf70e811a51076aa1b62f2adc2a6db051dbed",
6441
+ "fabric-hub.mjs": "73ab07f72320a50042f39b52893b563157be2ac94615614416df45a796eac988",
6442
+ "fabric-board-shapes.mjs": "c1db7b7bd0d58d82bb6d8dfbc3cd1547a256a333052d367e82ff1b3edf2804d7",
6443
+ "fabric-board-link.mjs": "a21fcfe6f4e701b1f5142a008ceeb7eea42c251a01688f9022539235b6f80b62",
6444
+ "fabric-board-slots.mjs": "ee454c53110506d39175a4b139ecd4ddead5c204f6b209f0cc25a6f10e442f8b",
6445
+ "fabric-board-session.mjs": "584c7937aa10f624e094970b08fc867edfbf546433d4226b029b9f91c8ec620c",
6446
+ "fabric-board-fixture.mjs": "83c4b7e33ee47b68385faf2569d38d5c8a0c5cb0f8656090f41e1b0eed2f436e",
6447
+ "fabric-board.mjs": "15fbb4441fcf7d2f285375b75de64ad6cffea129c515084c110245376b07775f",
6448
+ "fabric-http.mjs": "b83b4c0c208763d56c3eebda5fe9e4a46d595cd91227699bf6876e65a3c7f9b9",
6449
+ "fabric-openrouter.mjs": "4e3e73a1b8882bdde4cbb311f6f4a5e2f048fa81fa245409a16df1e6cab03e19",
6450
+ "fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
6451
+ "share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
6452
+ },
6453
+ "0.79.1": {
6454
+ "fabric_jsvalue.py": "052f1b40bab18600b3731dbdca27cbff17588c21d9458fa6241efd1340d0e09a",
6455
+ "fabric_time.py": "588f383da4ac6a243ea95b6ffc3a0aa99ca94245732dc4937734f190b7af4ae9",
6456
+ "fabric_identifiers.py": "0fd814d521ac3aa39907458265870753046a73f48af3d8581ab864b93b211607",
6457
+ "fabric_secrets.py": "53c5df8d6f2c87433c288853bfaad9a43f544789bdf1e39bda8d3ff14485c89d",
6458
+ "fabric_peer_owner.py": "cc6ce03987a99a506608e6ac05cb32ac05fdd0305060a404b817de71d22b1317",
6459
+ "fabric_tailnet.py": "c60416539be0199182f7969c24a37b14d0db50c8ea5e3e04cea43babfb483407",
6460
+ "fabric_crypto.py": "9c34aee20dbe4d6742e4fdbaab68ceb934bbe7dbd3a904c0010824ace16cdeaa",
6461
+ "fabric_base.py": "d8c67f345e30332cce3664af77b0e6e07cd477b78c961ac009e9efee1be7e1b2",
6462
+ "fabric_platform.py": "a9350dff55ef0fb3a23cdb4d0320a15868b15a8deb10d2eb74d72c58740c284b",
6463
+ "fabric_paths.py": "8a1ee742f80f436e9f28c61b4f049a9545de2a9e0d66bfc61faa6ee5d1ba3734",
6464
+ "fabric_estate_rules.py": "8b36a7f4108d9c2b1fb38c8bff344778c807bed631a99b4a563ecb0a49c10b1c",
6465
+ "fabric_estate.py": "0737ae1d1bb12586bae49de1f15ef1348bc207b5007cced9dad4c55bb5870874",
6466
+ "fabric_mandate.py": "fb19ce5359606bd6e3352ab02b2a12f49605ec6e5c49b55cce1f79c831325044",
6467
+ "fabric_delegation.py": "e923be4d2d901d5e0d8bf16b05a637119464009a51cffb247bd20de5e9c1d0c9",
6468
+ "fabric_share.py": "da36a466426fc29dd7dd40013167f3959a18375f8fedd228bf64f298cec1040c",
6469
+ "fabric_ceremonies.py": "a59e83cf4adb2669a9b98008e3d3a0cba991a35cbff97bc604fc82fe81cfd49f",
6470
+ "fabric_package_schema.py": "e623f0408d38e3343ed66222fb812907c6c52e1a286eb1c1176ab2e64640c9ad",
6471
+ "fabric_package.py": "1f2b9e73b2b32a7e1e887d4b69f87c6e21b4d1227ad924a235334223e6dd51ca",
6472
+ "fabric_protocols.py": "077c6f03f3b887a2e22d9ce6b5bd3750199d71a29d4c82b1d5af8a615b509d93",
6473
+ "fabric_actions.py": "ae21d1199614c4f74d1dcd1e0a87107a9d52434cd9e2d64aa24a7b1e196fb723",
6474
+ "fabric_connections.py": "7de55cb7d808f756d650effabfaa12027d40a5bd5d2f6d448c32969d47529ecb",
6475
+ "fabric_a2a.py": "8b01502131215bb4de1c01866187c56e99b791543923ed8577535573db33b919",
6476
+ "fabric_page_links.py": "1b57ea573c550e2f90d1ec3edcc655917ceaa0db9dd1635fccf422ec3024d25e",
6477
+ "fabric_lock.py": "10d6a2321ac8da47fc6f5bb01b32e2f8c8c966ef6d7145cf3b12bd35156bd650",
6478
+ "fabric_usage.py": "5cc2e03ccc5b06e81987ed7bc3eead7a7e6cbf1a7cb8e05c6c64315eed9d91b6",
6479
+ "fabric_backups.py": "1f3f0d7ecf361b29e9101e07f1c53e5dc304d598bf26fd59ec89f16b9fed2420",
6480
+ "fabric_descriptor.py": "16de580eb299ea9213d3e6711bf463cfeb47fcff6b9a4af42f0e95beee481b65",
6481
+ "fabric_context.py": "6ae311ddc7217a4aff915e7ce2646486931acd128462b7bebe4a52bbb5fbb6c7",
6482
+ "fabric_auth.py": "74ccc10239b65a3567cec5213a7b344cbd88d6eee1fd1c5f7be1d6daf985993c",
6483
+ "fabric_events.py": "da3fe3e3e19d4c9754b90c719e9c069a3ac85e080b9fffd07adbaf63b5bfcf0d",
6484
+ "fabric_logs.py": "86dc55bfafa2a57264722e2403510a249b95de0e4a722b2e4bc3948e3bd93da9",
6485
+ "fabric_supervisors.py": "9aafbde1d19f36648257ace623547fb28eb595ea9ccc8db562f2acf0ab39ce15",
6486
+ "fabric_service.py": "cc619eea1467a6bdf32c00f51ac8de8e66afd8808d619050ad2a8e67126740c9",
6487
+ "fabric_profiles.py": "26e21ec29c016000f8ca8053b7b489184854a73be1b7fdc0a18d12990203db9b",
6488
+ "fabric_interop_rules.py": "9bdb7989e57b9d0b0d15eb9982d396499823a5e2c528230b71c67866c736e0f5",
6489
+ "fabric_interop.py": "d27e31834611a37cf2a117746f2f60fc187ccc48718eb546ff923c5d0fce7dea",
6490
+ "fabric_hub.py": "c261a81616c52f603eb28cc12ec4034dc479f0517328a65f0dc48d436cf0708b",
6491
+ "fabric_board_shapes.py": "0a0e8d3d40e33dfd8c457aedb85330b2ff25f8c49a33eb6cbd5a5cc8a5007f7e",
6492
+ "fabric_board_link.py": "37aacd7afb0b7971c60f434d489fbfc556a70d8da87257179d891be4d2b661b0",
6493
+ "fabric_board_slots.py": "1bfc68207a23a737c3a6fb31b1fa46ec6ca8e4f9060cb4df7187ff32b2fa5f46",
6494
+ "fabric_board_session.py": "90ba8f2528c6c64c446cbd3237a584a7fe602a1441e4a7203f2bc20147d3edc4",
6495
+ "fabric_board_fixture.py": "69761ce205ec640762ec9b591c6903e5a87f844e8d423b041681924027e39d1e",
6496
+ "fabric_board.py": "f86c40b8291f8c818f6924910f4022b013d5fd107abaf8825dd0aa6c5e418638",
6497
+ "fabric_http.py": "b11b9930c3f0ab911a9cd325086a4c07a5ed4c246799d290f6085245669f4994",
6498
+ "fabric_openrouter.py": "a415db7475c3359fa15c85979a63a3a223a0ad7f85f878bcc2d638acccb44090",
6499
+ "fabric-jsvalue.mjs": "dfbdb8c41584972c9389750a41719374a1cfc5652ed438dd1623025190b0106e",
6500
+ "fabric-time.mjs": "3ff932069038a720df1c68c6492976906737b2e67e5c12d9c81c418597f661de",
6501
+ "fabric-identifiers.mjs": "a18c2a501a4aa170bfd3d99e571ad6b7662649b4d3b9d2a540c002ea42811bbf",
6502
+ "fabric-secrets.mjs": "60fe70b64e1fc6a9802e533679af9d2a6623f51fe96aae72cdd6d655712d0845",
6503
+ "fabric-peer-owner.mjs": "c93cb426aa6a1be7de7cc29338d4d069f236c27b082ee53760d9d119351d3f77",
6504
+ "fabric-tailnet.mjs": "aff3591552448bc042af306cd8a9e5cb9102c6b62d6dc05d53db35e35c51e347",
6505
+ "fabric-crypto.mjs": "038e03689701e3c9721a1e7f8e0a4d02a52d6a5d1661b0dc84035edc3ebbfcf6",
6506
+ "fabric-base.mjs": "1a804bfc3ec5d2479ffc39d3c8d67b056b72af836e1b88102881f9ff632f1901",
6507
+ "fabric-platform.mjs": "a8119d95ebba4d589a9e401f5d6fc8dda62d59d44e4c1ff811d97fac3771ac0c",
6508
+ "fabric-paths.mjs": "aa630d611e748a899e7043480f4a4e46b444f2e15ff945f30c2fbef21c1ceea5",
6509
+ "fabric-estate-rules.mjs": "7476be71174aa5b1026134f2b335abf647feaa55584e2f9de8618e3054aa8e1e",
6510
+ "fabric-estate.mjs": "e8a2e62d2313121e6cb502f6e6abad94d1d546a44b4d9b3ce2be29e7808e8cf3",
6511
+ "fabric-mandate.mjs": "b70f3de03a659e60bba7b5a0580b3582825cd7b8a8e30a28c79621919ec5b7bb",
6512
+ "fabric-delegation.mjs": "27b8f28d072c756b60f5cb90957e22700500dc8eb86ba18bd61c451e6788390b",
6513
+ "fabric-share.mjs": "bfb26581c21ad984c2a337da02429f9f3a165cc582f8ba48de4d3dfb7d163a59",
6514
+ "fabric-ceremonies.mjs": "117d4374c9e95c930a38de7adbd4323774798f4fe6ec6f24afcd6f2c7298ca44",
6515
+ "fabric-package-schema.mjs": "cd28092375db0fc21ffab1f0bb7794f7f8979ee08c64d3b9faf4b3845357caa6",
6516
+ "fabric-package.mjs": "8cfb32eebbd4e1bcf28a6e4437344ae2dd54479b0e7c820f002e9f94ab9ecaad",
6517
+ "fabric-protocols.mjs": "a560b7d6eb0d26204c5536711c3dda9daae90cc91e07cdc75412e75c86272767",
6518
+ "fabric-actions.mjs": "06e42f5e24c96311d5417d0d1effa93479ef7128a7ab139903b2bcf59253f6be",
6519
+ "fabric-connections.mjs": "303432e547ce563e90ca9ffcd827f5612f51d3582929834e1add0fdaf6485dcc",
6520
+ "fabric-a2a.mjs": "51b72fe1d80649d659fcad3a8f96370db3476c4a7b30cbabd8522c138be69346",
6521
+ "fabric-page-links.mjs": "a8834926e9d4bbf7c4857f551451d2ebf6ac8873bbccaaf89c5e30cf45b17ee6",
6522
+ "fabric-lock.mjs": "cf79c3aed04dfd36833929f7edd76404976699ac7a8fe38820f0fa02fc2243be",
6523
+ "fabric-usage.mjs": "1c4d18004639409624ac3516a02f2b60bbf55abdb612e9a96c37e83666eb87a7",
6524
+ "fabric-backups.mjs": "cfd8c9085e3d597a783099c2bd2ffe2f3faa0daaadab46dedd30523894cfeb06",
6525
+ "fabric-descriptor.mjs": "a2d9cf633d49085a3d455a489dcc6c41b14d41f1f28a8de45f0690cd6c332d51",
6526
+ "fabric-context.mjs": "1112d695e872f9825cbc94f08484974bff3880087bc29b8be59f885f03e8f7be",
6527
+ "fabric-auth.mjs": "10ff37a39f9e3adb4d0f05db66c45f49b10eef582e9220c213907964109d7e52",
6528
+ "fabric-events.mjs": "c95c07e2745e52fddbb7237b89824123f240d4f8d6b14f5cb269a09e1845c3ba",
6529
+ "fabric-logs.mjs": "58467e5719c16e099d05bbedec47a95712506ab03c33f3cd4be1252e8498a946",
6530
+ "fabric-supervisors.mjs": "af8518b8c7e87c1ecd6b865a2f4d9a51a377daa323200c4e90a6178b1725a7d6",
6531
+ "fabric-service.mjs": "a62bba8c6314e482778b4b793bc60eacaef211a4b0bea571a7e05c58299cf944",
6532
+ "fabric-profiles.mjs": "314376cf2deb87f235fb18b11d3b532e211f585b9af0a9302b5f4cc39971b532",
6533
+ "fabric-interop-rules.mjs": "b4e386c359a48e49ffff8a842215760c18a7c98a0af4754a808a35fb2820d458",
6534
+ "fabric-interop.mjs": "989040aed33b2712a258244192bdf70e811a51076aa1b62f2adc2a6db051dbed",
6535
+ "fabric-hub.mjs": "73ab07f72320a50042f39b52893b563157be2ac94615614416df45a796eac988",
6536
+ "fabric-board-shapes.mjs": "c1db7b7bd0d58d82bb6d8dfbc3cd1547a256a333052d367e82ff1b3edf2804d7",
6537
+ "fabric-board-link.mjs": "a21fcfe6f4e701b1f5142a008ceeb7eea42c251a01688f9022539235b6f80b62",
6538
+ "fabric-board-slots.mjs": "c2e80445115c9eab620a5a3686034ba3adc26f32ed307ea0cd8bbc5bc7b87209",
6539
+ "fabric-board-session.mjs": "fd71362bf4d244885b54bf52bf14e345fdb05d3d98b7fd6c1da6136f79e4b871",
6540
+ "fabric-board-fixture.mjs": "83c4b7e33ee47b68385faf2569d38d5c8a0c5cb0f8656090f41e1b0eed2f436e",
6541
+ "fabric-board.mjs": "15fbb4441fcf7d2f285375b75de64ad6cffea129c515084c110245376b07775f",
6542
+ "fabric-http.mjs": "b83b4c0c208763d56c3eebda5fe9e4a46d595cd91227699bf6876e65a3c7f9b9",
6543
+ "fabric-openrouter.mjs": "4e3e73a1b8882bdde4cbb311f6f4a5e2f048fa81fa245409a16df1e6cab03e19",
6544
+ "fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
6545
+ "share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
6356
6546
  }
6357
6547
  },
6358
6548
  "data": {
@@ -9,7 +9,7 @@ license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
9
9
  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.
10
10
  metadata:
11
11
  author: PassionCode.ai
12
- version: "0.78.0"
12
+ version: "0.79.1"
13
13
  contract-version: "0.1.0"
14
14
  contract-commit: "18f8d48762edc5bfb1433657cbfe1c16196df1a6"
15
15
  ---
@@ -57,6 +57,8 @@ and say in the report which skill was missing.
57
57
 
58
58
  No file is created until every row has an answer. An answer of "later" fails the grill.
59
59
 
60
+ If your organization keeps a private catalogue of agent templates with an architect, ask it first: it names the template, version, variant and known traps; this skill runs after it.
61
+
60
62
  Once the grill names the capability and its consumer, consult the [agents database](references/agents-database.md): `agents-db.consult` on the
61
63
  board (or, with a grant, its scan tool over the source projects), and build from the template it names.
62
64
 
@@ -248,7 +250,9 @@ file and a test per line, or `NOT_RUN` where the agent has no such stage.
248
250
  Report: capability, consumer, profile with the step-0 grill answers; the knowledge pack
249
251
  and which traps became fixtures; created files; contract version and commit; the gate
250
252
  table with `PASS`, `FAIL`, `NOT_RUN`, or `NOT_VERIFIED`; remaining placeholders; the
251
- operator channel answer (step 6); the template it was built from (the database's id and version, the communication template prompt, or none); and the exact next command. Never summarize the outcome as
253
+ operator channel answer (step 6); the template it was built from (the database's id and version, the communication template prompt, or none); for an agent that answers people, one line per item of
254
+ the *Checklist* in [agents that answer people](references/agents-that-answer-people.md), each with a file and a test or `NOT_RUN`, its
255
+ first-reply time measured from the person's message; and the exact next command. Never summarize the outcome as
252
256
  "Fabric-compatible" unless every required admission gate passed against the real provider.
253
257
 
254
258
  ## Agent pages open only in Fabric Dashboards
@@ -262,9 +266,10 @@ host's `open` and `fallback=never`. Never `open <url>`, `open -a Safari`, `xdg-o
262
266
  `not_installed` host; an installed host that failed to open is reported, never replaced by HTTP.
263
267
  Links carry no token or login code.
264
268
 
265
- The agent's `AGENTS.md` carries this as its dashboard rule block, and its checks run the adapter's link gate
266
- (`scripts/check_dashboard_link.py` from this skill's own directory; it is not copied into the project) on every
267
- completion and notification action before delivery:
269
+ The agent's `AGENTS.md` carries this as its dashboard rule block; the agent runs the adapter's link gate
270
+ (`scripts/check_dashboard_link.py` from this skill's own directory, an agent-side gate never copied into the project or
271
+ run by its CI) on every completion and notification action before delivery, and the project's own test pins the
272
+ negative fixture:
268
273
  [dashboard links](references/dashboard-links.md) has the block, the gate's input and the remote case.
269
274
  Headless agents need no dashboard.
270
275
 
@@ -125,11 +125,43 @@ its acceptance does not authorize or deliver it. Enforce grants/dedup/expiry in
125
125
  the transport. Unknown or failed host status produces no executable local action.
126
126
  A separately labelled copyable link for diagnosis is not an open action.
127
127
 
128
- Add this check to the generated project's dashboard completion/notification
129
- renderer before delivery. A raw-HTTP primary action with an available host is the
130
- negative fixture; a valid native action is the positive one. Keep diagnostics
131
- separate. This gate checks structured actions, not arbitrary prose: a CLI invocation
132
- or instructions alone do not prove all final answers from every agent are filtered.
128
+ The gate is **agent-side**: the agent runs it from this skill's directory before it
129
+ delivers an action. It is never copied into the generated project and never run by
130
+ that project's CI: the adapter's versioned plugin folder has no stable path there, so
131
+ its result in a project's pipeline would always be NOT_RUN. A raw-HTTP primary action
132
+ with an available host is the gate's negative fixture; a valid native action is the
133
+ positive one. Keep diagnostics separate. This gate checks structured actions, not
134
+ arbitrary prose: a CLI invocation or instructions alone do not prove all final answers
135
+ from every agent are filtered.
136
+
137
+ The generated project pins the same negative fixture in its own test suite, without
138
+ calling the gate: a test that renders its completion and notification output with an
139
+ available host and fails when a raw loopback `http_url` or a legacy `open?service=`
140
+ link appears in it. The snippet is self-contained; `render` stands for the project's
141
+ own renderer:
142
+
143
+ ```python
144
+ import re
145
+ import unittest
146
+
147
+ RAW_LOOPBACK = re.compile(r"https?://(?:127\.0\.0\.1|localhost|\[::1\])")
148
+ LEGACY = "fabric-dashboards://open?service="
149
+ RESOLVED = {"service": "example-agent.default",
150
+ "open_link": "fabric-dashboards://service/example-agent.default?path=%2Fdashboard",
151
+ "http_url": "http://127.0.0.1:47195/dashboard"}
152
+
153
+
154
+ def render(resolved, host_state): # replace with the project's completion/notification renderer
155
+ raise NotImplementedError
156
+
157
+
158
+ class RenderedDashboardLinks(unittest.TestCase):
159
+ def test_rendered_output_has_no_raw_loopback_or_legacy_link(self):
160
+ out = render(RESOLVED, host_state="available")
161
+ self.assertIn(RESOLVED["open_link"], out)
162
+ self.assertIsNone(RAW_LOOPBACK.search(out), out)
163
+ self.assertNotIn(LEGACY, out)
164
+ ```
133
165
 
134
166
  ## Degradation
135
167
 
@@ -97,8 +97,10 @@ change an embedding model without re-indexing every stored vector (search silent
97
97
  (an organization's key follows its grant), and the agent's own
98
98
  stop sits a little under the key's limit, so the provider never refuses first (the kit's OpenRouter client counts a
99
99
  month with window="month"; its default window is a day).
100
- Read it from the environment the service manager or the session gives the agent (Fabric Switchboard hands an agent
101
- the key of the project it starts in).
100
+ Read it from the environment the service manager, a vault runner or the session gives the agent's own process
101
+ (Fabric Switchboard hands an agent the key of the project it starts in); never pass it on to a child the agent starts:
102
+ scrub the child's environment and hand a child a key over a file descriptor or a per-command vault run
103
+ (references/resilience-and-autonomy.md, *Secrets and confinement* 1).
102
104
  - **An organization's instance spends the organization's key** under its grant; a personal key never pays for an
103
105
  organization's work.
104
106
  - **Check every attempt against the ceiling before it is sent,** retries included, estimating at the full output
@@ -123,5 +125,6 @@ scope recorded next to the default. Re-run it when you change the model, the pro
123
125
  - Each lane: primary, fallback of another vendor, open-vendor where it reads user content, a declared class.
124
126
  - Each lane's input modalities checked in the catalog; media generation through one media service.
125
127
  - Budgets that survive reasoning; empty answers retried, never shipped.
126
- - One key per agent and context, read from the environment, with a ceiling checked before every call.
128
+ - One key per agent and context, read from the agent's own environment and never passed to a child, with a ceiling
129
+ checked before every call.
127
130
  - The choice measured on real inputs, recorded with its date.
@@ -25,6 +25,16 @@ unless addressed (`/command@ThisBot`, a reply to its own message or a press of i
25
25
  bare `/command` in a group is not addressed), and a channel nobody receives on is `degraded`
26
26
  (`receiver-missing`). Say so in the proposal when the operator means to bind a shared group.
27
27
 
28
+ Where the estate runs a messaging gateway service the operator chose for sending (one service every
29
+ agent sends through, holding its own grants and allowlist), the channel sends through that gateway
30
+ and does not call the messenger itself; the agent's own bot above is the contract's form (DEC-0034,
31
+ OC-11) and the form used where no such gateway runs. A bot token read by polling (Telegram
32
+ `getUpdates`) has exactly one poller across every machine: a second poller on the same token gets
33
+ `409 Conflict` and the two take each other's updates. Check placement before polling: the instance
34
+ on the machine the estate's placement record names for the agent polls, an instance on any other
35
+ machine does not poll and reports `degraded` with the reason (`poller-elsewhere`), and a test starts a
36
+ second instance placed elsewhere and sees it stay off the token.
37
+
28
38
  Record the answer (`accepted`, `declined` or `later`) in the agent's state and in its conformance
29
39
  report, and do not ask again; an agent that serves `surfaces.operatorChannel` also shows it as
30
40
  `proposal` in its status document. Creating the bot and putting its token into the secret store
@@ -57,9 +67,9 @@ For a PassionCode.ai repository, the agent's repository follows the organization
57
67
  and a `CLAUDE.md` whose first line is `@AGENTS.md`.
58
68
 
59
69
  Whoever owns the repository, an agent with a page gets the dashboard rule block in its `AGENTS.md`
60
- (pages open only in Fabric Dashboards; the block is in `references/dashboard-links.md`), and its
61
- checks run the adapter's link gate (`scripts/check_dashboard_link.py` from the skill's own directory, not a copy in
62
- the project).
70
+ (pages open only in Fabric Dashboards; the block is in `references/dashboard-links.md`); the agent runs the
71
+ adapter's link gate (`scripts/check_dashboard_link.py` from the skill's own directory, agent-side, never a copy in the
72
+ project or a step of its CI), and the project's own test pins the gate's negative fixture (the same reference).
63
73
 
64
74
  org-index `scripts/check_format.py` reports 0 findings for it before it is called done. An agent
65
75
  someone builds for themselves is not a PassionCode.ai repository: its licence is its owner's
@@ -218,9 +218,12 @@ leaves a held task still. The working-with-fabric skill's Step 5 carries it; Fab
218
218
 
219
219
  ## Secrets and confinement
220
220
 
221
- 1. **A secret never enters an environment, argv, URL or log a child can read.** Hand it over a
222
- pipe or file descriptor, or through a vault runner per command; never print a configuration
223
- dump, and never filter one yourself.
221
+ 1. **A secret never enters an environment, argv, URL or log a child can read.** The agent's own
222
+ process may receive its key in its environment from its supervisor or a vault runner (the one
223
+ rule this page, `models-and-providers.md` and building-fabric-services' LC-21 share); it never
224
+ passes that key to a child it starts. Scrub the child's environment, and hand a child a secret
225
+ it needs over a pipe or file descriptor, or through a vault runner per command; never print a
226
+ configuration dump, and never filter one yourself.
224
227
  2. **Confine what an agent runs by the operating system**, per run (filesystem, network, ports),
225
228
  and treat prompt rules and command guards as tripwires, not boundaries.
226
229
  3. **Fail closed.** When a reduced view or a scope cannot be built, answer an error, never the
@@ -28,6 +28,8 @@ The normative rules are the Fabric Agent Contract's, at the commit this plugin p
28
28
  | **Personal cloud** | the person's own always-on machine in PassionCode's cloud (or the same stack self-hosted), one more machine of their estate | an agent that answers mail at night, a scheduled digest, a bot |
29
29
  | **Organization** | the organization's cloud, its members' machines enrolled into it, its own server holding members, grants and usage | a support agent, an internal analyst, an agent the organization bought |
30
30
  | **Enterprise** | an organization's dedicated cloud with personal onboarding | the same agents under the enterprise's own boundary |
31
+ | **One computer, a personal and an organization account** | one Mac (or other computer) with two counted OS accounts, the person's own and one an organization owns whole, each running its own Fabric and its own copy of each agent (contract DEC-0154, `docs/specification/service.md`, *Several OS accounts on one computer*) | the same agent once per account: its own port recorded per account and claimed in the computer's shared folder (HA-1), never the other account's; loopback reaches every account, so a caller checks the listener's owner (HA-2) and no door answers loopback without a token (HA-3) |
32
+ | **A member's virtual machine** | a virtual machine under a member's account, enrolled as a device of its own (DEC-0154 HA-4, `docs/specification/devices.md`); it may carry the computer's host label | an agent the member runs apart from the computer's accounts: its own enrollment, secrets and ports; a port forwarder that relays the guest onto loopback makes its callers T2, never token-free |
31
33
 
32
34
  Every step up is paid as cloud only: the person or the organization pays for the cloud its agents run in, and the
33
35
  order says which hosting it holds (`personal-cloud`, `org-cloud`, `enterprise-cloud` in `entitlement/1`). An agent never
@@ -129,6 +131,8 @@ and move only that capability to the cloud.
129
131
  - Where does each instance run, and in which context? Write it in the knowledge pack.
130
132
  - Does any state, secret, log line or cache key cross contexts? It must not.
131
133
  - Which capabilities need the person's machine, and what do they answer when it is off?
134
+ - On a computer with more than one counted OS account, or under a member's virtual machine: a port recorded per
135
+ account, the listener's owner checked before a token is sent, no token-free loopback door (DEC-0154).
132
136
  - Which uptime category is it, A (a cloud host from the first release) or B (local only)? The README names it.
133
137
  - Who pays for each call (which grant, which key)? The person's personal key never pays for an organization.
134
138
  - If it joins machines or applies the estate record: tokens from stdin or a 0600 file only, revisions verified with
@@ -12,7 +12,7 @@ compatibility: >-
12
12
  from Project Observatory's vault by slot name when it is installed.
13
13
  metadata:
14
14
  author: PassionCode.ai
15
- version: "0.78.0"
15
+ version: "0.79.1"
16
16
  ---
17
17
 
18
18
  # Observing products