@passioncode-ai/fabric-agent-adapter 0.46.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/package.json +1 -1
- package/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +1 -1
- package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +1 -1
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +1 -1
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-button.js +2 -2
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-dashboard.css +2 -2
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-dashboard.js +40 -8
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/kit.json +9 -4
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard-kit.md +1 -0
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-descriptor.mjs +1 -1
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_descriptor.py +1 -1
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/kit.json +79 -3
- package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +1 -1
- package/plugins/fabric-agent-adapter/skills/working-with-fabric/SKILL.md +1 -1
- package/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session_env.py +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.46.1 (2026-10-23)
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **Dashboard kit 1.1.3: the section navigation no longer leaves a half-cut link beside More** (FAA-104, a finding
|
|
8
|
+
from research-agent on board thread `288afbce`). `foldNav` measured the fit, then wrote the summary (`More: <current>`
|
|
9
|
+
or `More (N)`), whose longer text narrowed the list after the measurement; it now measures with the summary in place,
|
|
10
|
+
and also catches a link that sticks out by a fraction of a pixel. The summary follows `aria-current` when a page
|
|
11
|
+
moves it (a `MutationObserver`), and `FabricDashboard.refreshNav(nav)` refits after a page changes the links' text.
|
|
12
|
+
A refit keeps keyboard focus on the link it was on, `aria-current="false"` (as React renders it) is not current, and
|
|
13
|
+
folding a nav a second time refits it instead of adding observers.
|
|
14
|
+
Held by a WebKit test that sweeps 360 to 640 px at every current section (`test/fabric-dashboard-fold.test.mjs`, run
|
|
15
|
+
with `FABRIC_PLAYWRIGHT`). Services pick it up by re-vendoring the kit (`dashboard_kit.py`; the session-start notice
|
|
16
|
+
names an older copy).
|
|
17
|
+
|
|
3
18
|
## 0.46.0 (2026-10-23)
|
|
4
19
|
|
|
5
20
|
### Changed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passioncode-ai/fabric-agent-adapter",
|
|
3
|
-
"version": "0.46.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"description": "Create Fabric-compatible agents, run them as always-alive local services with dashboards (fabric-service/0.1), and adapt existing projects to the Fabric Agent Contract. This package is the installer CLI.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "python3 test/validate.py && python3 -m unittest discover -s test -q && node --test 'test/*.test.mjs'"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "fabric-agent-adapter",
|
|
4
4
|
"displayName": "Fabric Agent Adapter",
|
|
5
5
|
"description": "Create new Fabric-compatible agents, build them as always-alive local services with dashboards (fabric-service/0.1), and adapt existing projects to the Fabric Agent Contract through evidence-backed MCP, A2A, or local-runner provider bundles; and teach a coding agent to work in a project through Fabric (fabric-mcp, fabric_whoami, claim and release), with Claude Code session hooks.",
|
|
6
|
-
"version": "0.46.
|
|
6
|
+
"version": "0.46.1",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "PassionCode.ai",
|
|
9
9
|
"url": "https://passioncode.ai/"
|
|
@@ -5,7 +5,7 @@ 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.
|
|
6
6
|
metadata:
|
|
7
7
|
author: PassionCode.ai
|
|
8
|
-
version: "0.46.
|
|
8
|
+
version: "0.46.1"
|
|
9
9
|
contract-version: "0.1.0"
|
|
10
10
|
contract-commit: "0a4ce773c4b9e6bec40c6387eb3f988af7152c0e"
|
|
11
11
|
---
|
|
@@ -14,7 +14,7 @@ license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
|
14
14
|
compatibility: Python 3.9+ or Node.js 20+ for the kits (Node.js 22+ for a Linux service's instance lock); the probe needs Python 3.9+. launchd steps are macOS-only; Linux services install a systemd user unit and Windows ones a per-user Scheduled Task with the kits' writers. Dashboard handoff optionally uses Fabric Dashboards MCP link/host_status/open; without it, report unresolved host capability. The contract checkout is optional.
|
|
15
15
|
metadata:
|
|
16
16
|
author: PassionCode.ai
|
|
17
|
-
version: "0.46.
|
|
17
|
+
version: "0.46.1"
|
|
18
18
|
contract-version: "0.1.0"
|
|
19
19
|
extension: "fabric-service/0.1"
|
|
20
20
|
extension-commit: "0a4ce773c4b9e6bec40c6387eb3f988af7152c0e"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* fabric-dashboard-kit@1.1.
|
|
1
|
+
/* fabric-dashboard-kit@1.1.3 · Fabric's button (Fabric Agent Contract DEC-0040, FB-1…FB-8, FL-1…FL-6)
|
|
2
2
|
Load it same-origin, after fabric-dashboard.css, with the service it opens Fabric on:
|
|
3
3
|
<script src="fabric-button.js" defer data-service="example-agent.default" data-service-name="Example Agent"
|
|
4
4
|
data-project="project-a" data-project-name="Project A"></script>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
(function (root) {
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var VERSION = '1.1.
|
|
13
|
+
var VERSION = '1.1.3';
|
|
14
14
|
var COOKIE = 'fabric_button';
|
|
15
15
|
var GET_FABRIC = 'https://passioncode.ai/fabric';
|
|
16
16
|
var ABSENT_AFTER_MS = 1500;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* fabric-dashboard-kit@1.1.
|
|
1
|
+
/* fabric-dashboard-kit@1.1.3 · fabric-dashboard/0.1 (Fabric Agent Contract DEC-0036)
|
|
2
2
|
A Fabric service dashboard shown inside a host pane: usable from 360 CSS px up, navigation always
|
|
3
3
|
reachable, wide content in its own scroll box, one vertical scroller, appearance from the host.
|
|
4
4
|
Copy this file next to fabric-dashboard.js; do not edit it in place. Put the page's own rules in
|
|
@@ -115,7 +115,7 @@ html.fd-js .fd-chrome { position: sticky; top: var(--fd-chrome-top, 0px); z-inde
|
|
|
115
115
|
text-decoration: none; white-space: nowrap; cursor: pointer;
|
|
116
116
|
transition: background-color var(--dur-hover) var(--motion-ease), color var(--dur-hover) var(--motion-ease); }
|
|
117
117
|
.fd-nav a:hover, .fd-more > summary:hover { background: var(--panel-2); color: var(--ink); }
|
|
118
|
-
.fd-nav a[aria-current] { background: var(--accent-weak); color: var(--ink); box-shadow: inset 0 -2px 0 var(--accent); }
|
|
118
|
+
.fd-nav a[aria-current]:not([aria-current="false"]) { background: var(--accent-weak); color: var(--ink); box-shadow: inset 0 -2px 0 var(--accent); }
|
|
119
119
|
.fd-more { position: relative; flex: none; }
|
|
120
120
|
.fd-more[hidden] { display: none; }
|
|
121
121
|
.fd-more > summary { list-style: none; border: 1px solid var(--edge); }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* fabric-dashboard-kit@1.1.
|
|
1
|
+
/* fabric-dashboard-kit@1.1.3 · fabric-dashboard/0.1 (Fabric Agent Contract DEC-0036)
|
|
2
2
|
Load it same-origin with <script src="fabric-dashboard.js" defer></script>: no inline script, no
|
|
3
3
|
eval, nothing from a CDN. It applies the host's appearance (ED-6, ED-8), folds navigation that
|
|
4
4
|
does not fit into a More menu (ED-3), makes wide boxes keyboard-reachable (ED-4) and keeps
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
10
|
var KIT = 'fabric-dashboard-kit';
|
|
11
|
-
var VERSION = '1.1.
|
|
11
|
+
var VERSION = '1.1.3';
|
|
12
12
|
/* fabric-dashboard-kit:theme-ids:begin */
|
|
13
13
|
var THEMES = ['graphite', 'fabric', 'paper', 'forest', 'ocean', 'ember', 'contrast'];
|
|
14
14
|
/* fabric-dashboard-kit:theme-ids:end */
|
|
@@ -150,6 +150,7 @@
|
|
|
150
150
|
|
|
151
151
|
/* ---- navigation: fold what does not fit into More (ED-3) ---- */
|
|
152
152
|
function foldNav(nav) {
|
|
153
|
+
if (typeof nav.fdRefresh === 'function') { nav.fdRefresh(); return; } // folded already: refit, no second observers
|
|
153
154
|
var list = nav.querySelector('.fd-nav-list');
|
|
154
155
|
if (!list) return;
|
|
155
156
|
nav.classList.add('fd-nav--fold');
|
|
@@ -176,23 +177,53 @@
|
|
|
176
177
|
var summaryEl = more.querySelector('summary');
|
|
177
178
|
var label = nav.getAttribute('data-fd-more-label') || 'More';
|
|
178
179
|
|
|
180
|
+
// An item that sticks out by a fraction of a pixel is cut but leaves scrollWidth (rounded) unchanged: compare the
|
|
181
|
+
// last item's edge with the list's, on the side the text runs to.
|
|
182
|
+
var overflows = function () {
|
|
183
|
+
if (list.scrollWidth > list.clientWidth + 1) return true;
|
|
184
|
+
var last = list.lastElementChild;
|
|
185
|
+
if (!last) return false;
|
|
186
|
+
var a = last.getBoundingClientRect(), b = list.getBoundingClientRect();
|
|
187
|
+
return root.getComputedStyle(list).direction === 'rtl' ? a.left < b.left - 0.5 : a.right > b.right + 0.5;
|
|
188
|
+
};
|
|
189
|
+
function summarize() {
|
|
190
|
+
var current = menuList.querySelector('[aria-current]:not([aria-current="false"])');
|
|
191
|
+
summaryEl.textContent = current ? label + ': ' + current.textContent.trim() : label + ' (' + menuList.children.length + ')';
|
|
192
|
+
}
|
|
179
193
|
function layout() {
|
|
194
|
+
// Moving a focused link out of the document loses focus: keep it on the same link across the refit.
|
|
195
|
+
var focused = doc.activeElement && nav.contains(doc.activeElement) ? doc.activeElement : null;
|
|
196
|
+
fit();
|
|
197
|
+
if (focused && focused.isConnected && doc.activeElement !== focused) focused.focus({ preventScroll: true });
|
|
198
|
+
}
|
|
199
|
+
function fit() {
|
|
180
200
|
// Put every item back in its place, then move the last ones out until the rest fit.
|
|
181
201
|
while (menuList.firstChild) list.appendChild(menuList.firstChild);
|
|
182
202
|
more.hidden = true;
|
|
183
|
-
if (
|
|
203
|
+
if (!overflows()) { summaryEl.textContent = label; return; }
|
|
184
204
|
more.hidden = false;
|
|
185
205
|
var items = list.children;
|
|
186
|
-
|
|
187
|
-
|
|
206
|
+
// The summary names the current section or counts the folded ones, and its text takes room from the list, so
|
|
207
|
+
// set it after every move and measure again with it in place (a longer summary left a half-cut item, FAA-104).
|
|
208
|
+
summarize();
|
|
209
|
+
while (items.length && overflows()) {
|
|
210
|
+
menuList.insertBefore(items[items.length > 1 ? items.length - 1 : 0], menuList.firstChild);
|
|
211
|
+
summarize();
|
|
188
212
|
}
|
|
189
|
-
if (list.scrollWidth > list.clientWidth + 1 && items.length) menuList.insertBefore(items[0], menuList.firstChild);
|
|
190
|
-
var current = menuList.querySelector('[aria-current]');
|
|
191
|
-
summaryEl.textContent = current ? label + ': ' + current.textContent.trim() : label + ' (' + menuList.children.length + ')';
|
|
192
213
|
}
|
|
193
214
|
layout();
|
|
194
215
|
if (typeof root.ResizeObserver === 'function') new root.ResizeObserver(function () { layout(); }).observe(nav);
|
|
195
216
|
else root.addEventListener('resize', layout);
|
|
217
|
+
// A page that moves aria-current (its route changed) gets a fresh summary and fit, without telling the kit.
|
|
218
|
+
if (typeof root.MutationObserver === 'function') {
|
|
219
|
+
new root.MutationObserver(layout).observe(nav, { subtree: true, attributes: true, attributeFilter: ['aria-current'] });
|
|
220
|
+
}
|
|
221
|
+
nav.fdRefresh = layout;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* A page can also ask for a new fit itself, for example after it changed the items' text. */
|
|
225
|
+
function refreshNav(nav) {
|
|
226
|
+
if (nav && typeof nav.fdRefresh === 'function') nav.fdRefresh();
|
|
196
227
|
}
|
|
197
228
|
|
|
198
229
|
/* ---- wide boxes: keyboard-reachable, with a name, marked when they overflow (ED-4) ---- */
|
|
@@ -247,6 +278,7 @@
|
|
|
247
278
|
api.applyAppearance = applyAppearance;
|
|
248
279
|
api.prepareScrollBox = prepareScrollBox;
|
|
249
280
|
api.foldNav = foldNav;
|
|
281
|
+
api.refreshNav = refreshNav;
|
|
250
282
|
// Apply the theme before first paint when loaded without defer; the rest waits for the DOM.
|
|
251
283
|
applyAppearance();
|
|
252
284
|
if (doc.readyState === 'loading') doc.addEventListener('DOMContentLoaded', init); else init();
|
package/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/kit.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fabric-dashboard-kit",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"profile": "fabric-dashboard/0.1",
|
|
5
5
|
"decision": "DEC-0036",
|
|
6
6
|
"declarationKey": "https://fabric.passioncode.ai/agent-contract/extensions/dashboard/0.1",
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"contrast"
|
|
16
16
|
],
|
|
17
17
|
"files": {
|
|
18
|
-
"fabric-dashboard.css": "
|
|
19
|
-
"fabric-dashboard.js": "
|
|
20
|
-
"fabric-button.js": "
|
|
18
|
+
"fabric-dashboard.css": "fdcc7dadea987f0b89c63a5460b3b2b2c870768decc9ee981824a0dc0095169e",
|
|
19
|
+
"fabric-dashboard.js": "a69f80211132bb36c7a8d297d89674f0fafc087121289abf8cbebb6034e03235",
|
|
20
|
+
"fabric-button.js": "7f35ff22226e2c57e6ba980424fc839207ad150d1f235043296f9ac0fb5425a1",
|
|
21
21
|
"themes.json": "511839f1a1a83eb37fadfd132791474497d5c28c5091700b9aa31ad076e359b5"
|
|
22
22
|
},
|
|
23
23
|
"history": {
|
|
@@ -39,6 +39,11 @@
|
|
|
39
39
|
"fabric-dashboard.css": "fb8ed17166cb52cf5af1b28b5783fc069d3d673fe50d291a9d900154b6730d98",
|
|
40
40
|
"fabric-dashboard.js": "55fcfe9340877e718728eb7430c6cdc9453248315bda5594602e2713eddc3db1",
|
|
41
41
|
"fabric-button.js": "9f76e604140c8f7d3f97c21530c601d652348639403a1721c0c7fb8abe9b9209"
|
|
42
|
+
},
|
|
43
|
+
"1.1.3": {
|
|
44
|
+
"fabric-dashboard.css": "fdcc7dadea987f0b89c63a5460b3b2b2c870768decc9ee981824a0dc0095169e",
|
|
45
|
+
"fabric-dashboard.js": "a69f80211132bb36c7a8d297d89674f0fafc087121289abf8cbebb6034e03235",
|
|
46
|
+
"fabric-button.js": "7f35ff22226e2c57e6ba980424fc839207ad150d1f235043296f9ac0fb5425a1"
|
|
42
47
|
}
|
|
43
48
|
}
|
|
44
49
|
}
|
package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard-kit.md
CHANGED
|
@@ -59,6 +59,7 @@ Never edit the copied files: the page's own rules go in its own stylesheet, cons
|
|
|
59
59
|
| Grids | `.fd-grid` (cards, 320 px columns), `.fd-grid--tiles` (160 px), `.fd-grid--wide` (480 px); `--fd-col` sets your own |
|
|
60
60
|
| Wide content | `<div class="fd-scroll" data-fd-label="Jobs table"><table class="fd-table">…</table></div>`, `<pre class="fd-scroll">` |
|
|
61
61
|
| Atoms | `.fd-card`, `.fd-tile`, `.fd-chip` + `.fd-dot` + `.fd-s-ok\|warn\|danger\|info`, `.fd-btn`, `.fd-btn--primary`, `.fd-input`, `.fd-select`, `.fd-banner`, `.fd-empty`, `.fd-pairs` |
|
|
62
|
+
| Navigation that folds | with the script, links that do not fit move into **More** (`data-fd-more-label` names it, `data-fd-no-fold` keeps a nav as is); the summary names the current section (`aria-current`) or counts the folded links, and the fit is measured with that text in place. Moving `aria-current` refits on its own; after changing the links' text call `FabricDashboard.refreshNav(nav)` (since 1.1.3) |
|
|
62
63
|
| Own appearance controls | `<select data-fd-theme-picker>`, `<select data-fd-scheme-picker>` (the script fills them; hidden while the host owns appearance) |
|
|
63
64
|
|
|
64
65
|
Tokens are the workbench layer (`--bg`, `--panel`, `--panel-2`, `--ink`, `--muted`, `--border`,
|
package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-descriptor.mjs
CHANGED
|
@@ -13,7 +13,7 @@ import { ROUTES } from './fabric-usage.mjs';
|
|
|
13
13
|
// document's `extensions`. The kit is assets/dashboard-kit; its version is the one in kit.json.
|
|
14
14
|
export const DASHBOARD_EXTENSION_KEY = 'https://fabric.passioncode.ai/agent-contract/extensions/dashboard/0.1';
|
|
15
15
|
|
|
16
|
-
export const DASHBOARD_KIT = 'fabric-dashboard-kit@1.1.
|
|
16
|
+
export const DASHBOARD_KIT = 'fabric-dashboard-kit@1.1.3';
|
|
17
17
|
|
|
18
18
|
export const REFERENCE_THEMES = ['graphite', 'fabric', 'paper', 'forest', 'ocean', 'ember', 'contrast'];
|
|
19
19
|
|
package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_descriptor.py
CHANGED
|
@@ -46,7 +46,7 @@ from fabric_usage import (
|
|
|
46
46
|
DASHBOARD_EXTENSION_KEY = "https://fabric.passioncode.ai/agent-contract/extensions/dashboard/0.1"
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
DASHBOARD_KIT = "fabric-dashboard-kit@1.1.
|
|
49
|
+
DASHBOARD_KIT = "fabric-dashboard-kit@1.1.3"
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
REFERENCE_THEMES = ("graphite", "fabric", "paper", "forest", "ocean", "ember", "contrast")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fabric-service-kit",
|
|
3
|
-
"version": "0.46.
|
|
3
|
+
"version": "0.46.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
|
{
|
|
@@ -209,7 +209,7 @@
|
|
|
209
209
|
"fabric_secrets",
|
|
210
210
|
"fabric_usage"
|
|
211
211
|
],
|
|
212
|
-
"sha256": "
|
|
212
|
+
"sha256": "daf16f95b1810283b1386488e006e940a0cdfa5c3c8d09386ac33d29d58df78d"
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
"module": "fabric_auth",
|
|
@@ -604,7 +604,7 @@
|
|
|
604
604
|
"fabric-secrets",
|
|
605
605
|
"fabric-usage"
|
|
606
606
|
],
|
|
607
|
-
"sha256": "
|
|
607
|
+
"sha256": "95c0b7ff36c29d7c748f1fa6fb1767d6fe8c97fca7f1ee404559930abbd3cc84"
|
|
608
608
|
},
|
|
609
609
|
{
|
|
610
610
|
"module": "fabric-auth",
|
|
@@ -2343,6 +2343,82 @@
|
|
|
2343
2343
|
"fabric-openrouter.mjs": "f8f0168691f968b7cd85f36aa98e2167e88cc44f1104ff514fd0c7699b339253",
|
|
2344
2344
|
"fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
|
|
2345
2345
|
"share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
|
|
2346
|
+
},
|
|
2347
|
+
"0.46.1": {
|
|
2348
|
+
"fabric_jsvalue.py": "0cd4eab0a5d6ae35d097f7c59a08dc29173cb61c561c49e5291a8dad15d36779",
|
|
2349
|
+
"fabric_time.py": "588f383da4ac6a243ea95b6ffc3a0aa99ca94245732dc4937734f190b7af4ae9",
|
|
2350
|
+
"fabric_identifiers.py": "0fd814d521ac3aa39907458265870753046a73f48af3d8581ab864b93b211607",
|
|
2351
|
+
"fabric_secrets.py": "68a0b5e9e90c468ec9ac67b2f0fd1848e08813d6ec1ec14a2a47337eb1a98911",
|
|
2352
|
+
"fabric_crypto.py": "9c34aee20dbe4d6742e4fdbaab68ceb934bbe7dbd3a904c0010824ace16cdeaa",
|
|
2353
|
+
"fabric_base.py": "f62bcc2ed9912660fa875d27a09f60867260cc4925f79873501fd9620be59611",
|
|
2354
|
+
"fabric_platform.py": "a9350dff55ef0fb3a23cdb4d0320a15868b15a8deb10d2eb74d72c58740c284b",
|
|
2355
|
+
"fabric_paths.py": "6c92af34292baddf7e10d3134d0a5b0bb23387741812a9f79c409cf1628bad23",
|
|
2356
|
+
"fabric_estate.py": "50cc12166a00b680ba5b2e458200912d7bcfbef70bd73ec4edf57c7fcfa9b687",
|
|
2357
|
+
"fabric_delegation.py": "4eb5004188fdc6f5c0fd21fb0f9f1f538899a0383bcde0365dea080ef8347182",
|
|
2358
|
+
"fabric_share.py": "78506fe1a60829c525dbf6266a0aa0749a2164290ed94da8249a20b4e9be5605",
|
|
2359
|
+
"fabric_ceremonies.py": "a59e83cf4adb2669a9b98008e3d3a0cba991a35cbff97bc604fc82fe81cfd49f",
|
|
2360
|
+
"fabric_package_schema.py": "e623f0408d38e3343ed66222fb812907c6c52e1a286eb1c1176ab2e64640c9ad",
|
|
2361
|
+
"fabric_package.py": "ff533f1b3f92b4ea0f532fcec50b68c610d47549930eef8ad5247692a64dfb3c",
|
|
2362
|
+
"fabric_protocols.py": "420e83dedeccfc93306870b2776908336c81cb349abb188d4cd7be9c8cef9802",
|
|
2363
|
+
"fabric_connections.py": "77d3ccf863c70e9209d21ef45c46a6db9c06237019bc20d54f8d3946873f3f11",
|
|
2364
|
+
"fabric_lock.py": "ba2399d2137c7a7791b7133b9db9cca36693f4eb7e30955b25a75ade814e95ba",
|
|
2365
|
+
"fabric_usage.py": "ce685cb9fdfd62ea75fff8b1b2be12a2ba758da783e4bfb4dcebe47bcbeb832b",
|
|
2366
|
+
"fabric_backups.py": "02dc5eb66ec956723d3ddba07b6dd15f6a9726d901f4d60edfd02eee57880ceb",
|
|
2367
|
+
"fabric_descriptor.py": "daf16f95b1810283b1386488e006e940a0cdfa5c3c8d09386ac33d29d58df78d",
|
|
2368
|
+
"fabric_auth.py": "55794587750f6c9f40935b74295d83d7096cb4b26a0b36ac292334cd87d8f853",
|
|
2369
|
+
"fabric_events.py": "0086886c2c29dbd5c9d152be9d375c5bdf4a29f89b8095baff8490c2bcd64e47",
|
|
2370
|
+
"fabric_logs.py": "86dc55bfafa2a57264722e2403510a249b95de0e4a722b2e4bc3948e3bd93da9",
|
|
2371
|
+
"fabric_supervisors.py": "a2dbf15aa1c4eb9de42996b413103fa4814afd2e4e66d1ab7315f30e06ab6841",
|
|
2372
|
+
"fabric_service.py": "d411433ce6ff3e81189b10b2c1a8462335a97cd99574ab0ee7d1c28cf48e1694",
|
|
2373
|
+
"fabric_profiles.py": "26e21ec29c016000f8ca8053b7b489184854a73be1b7fdc0a18d12990203db9b",
|
|
2374
|
+
"fabric_interop_rules.py": "b5f0ecb1791b4c50c5ac151f987f692ed7001bc74841a8a161125ec775145e09",
|
|
2375
|
+
"fabric_interop.py": "f92fa111328fe3811438f733d8f0eb5295e6941c774123a78e26318bdcb35fc3",
|
|
2376
|
+
"fabric_hub.py": "b9ac852e601b1d54cf61351677a628afc69faeed7d1fc74ebe541c1cf38e0c2a",
|
|
2377
|
+
"fabric_board_shapes.py": "0a0e8d3d40e33dfd8c457aedb85330b2ff25f8c49a33eb6cbd5a5cc8a5007f7e",
|
|
2378
|
+
"fabric_board_link.py": "b5bff994cb615c6a4bb0d88d020e3a59504166180e1fa1aea3be93224f2aeccb",
|
|
2379
|
+
"fabric_board_session.py": "2271834c36c23f6bfa50395cd147e6af99f294ef09325fd15f0759ca8e18d941",
|
|
2380
|
+
"fabric_board_fixture.py": "69761ce205ec640762ec9b591c6903e5a87f844e8d423b041681924027e39d1e",
|
|
2381
|
+
"fabric_board.py": "0f075894b3e352194fcaf3fc7d08dee4e9f1c215e859769ed85fa5010e4a1599",
|
|
2382
|
+
"fabric_http.py": "5d7f72af3a73fdbe8c1f487ecf60cef23a7c46289eba542b03aff4706b8218d4",
|
|
2383
|
+
"fabric_openrouter.py": "2017d898c17001d7275f58267de653be7ecf6acd17ad8d9b24ecb7a43e5617d4",
|
|
2384
|
+
"fabric-jsvalue.mjs": "dfbdb8c41584972c9389750a41719374a1cfc5652ed438dd1623025190b0106e",
|
|
2385
|
+
"fabric-time.mjs": "3ff932069038a720df1c68c6492976906737b2e67e5c12d9c81c418597f661de",
|
|
2386
|
+
"fabric-identifiers.mjs": "a18c2a501a4aa170bfd3d99e571ad6b7662649b4d3b9d2a540c002ea42811bbf",
|
|
2387
|
+
"fabric-secrets.mjs": "6ad8ab18ac899ecc2384e8ec6a3fb689b92be3b9a5ce3a59b92a37d52da5d766",
|
|
2388
|
+
"fabric-crypto.mjs": "038e03689701e3c9721a1e7f8e0a4d02a52d6a5d1661b0dc84035edc3ebbfcf6",
|
|
2389
|
+
"fabric-base.mjs": "7804b2df7715dbbf9702a9b61b6b8cef2110f9a52b04cabd8fb0a66458d87512",
|
|
2390
|
+
"fabric-platform.mjs": "a8119d95ebba4d589a9e401f5d6fc8dda62d59d44e4c1ff811d97fac3771ac0c",
|
|
2391
|
+
"fabric-paths.mjs": "2201b4ed7126f260931b63e8386377b4317d8dcad419d109bf22c683e44b7f29",
|
|
2392
|
+
"fabric-estate.mjs": "912b1ceab57ed20f946986bf14ae2faf41fb8ea539e818164496874f3749ef65",
|
|
2393
|
+
"fabric-delegation.mjs": "85a7e00e606244e7e02f9cbecc3e421bfcb9c1e12cd2a91daadf8a9c2403104d",
|
|
2394
|
+
"fabric-share.mjs": "d40a7405d7bd4c3213ed691330b7549afe8e023db0753b582e249714e672010d",
|
|
2395
|
+
"fabric-ceremonies.mjs": "117d4374c9e95c930a38de7adbd4323774798f4fe6ec6f24afcd6f2c7298ca44",
|
|
2396
|
+
"fabric-package-schema.mjs": "cd28092375db0fc21ffab1f0bb7794f7f8979ee08c64d3b9faf4b3845357caa6",
|
|
2397
|
+
"fabric-package.mjs": "49b757eefcc50e4c91585d5a5694bf3c83d0b03d112c1837f1c9f01466797ab5",
|
|
2398
|
+
"fabric-protocols.mjs": "91a98de17b29e1d100b2e8b965f3310f57b24b65ad6b4596e7a90b26b9069d4d",
|
|
2399
|
+
"fabric-connections.mjs": "303432e547ce563e90ca9ffcd827f5612f51d3582929834e1add0fdaf6485dcc",
|
|
2400
|
+
"fabric-lock.mjs": "ac219ab0a326d5c43c7c4c255e0c3843d4794de795a60e3af661e7d5350ea052",
|
|
2401
|
+
"fabric-usage.mjs": "e413569620bbc8221bc59e24b27e22d1483825ed18457801ed58d54a57de8114",
|
|
2402
|
+
"fabric-backups.mjs": "849acdc6eba0fff648c8158e61f6b68cccd7bedf0880f7d5ec03a6a20f1e7005",
|
|
2403
|
+
"fabric-descriptor.mjs": "95c0b7ff36c29d7c748f1fa6fb1767d6fe8c97fca7f1ee404559930abbd3cc84",
|
|
2404
|
+
"fabric-auth.mjs": "3ea6796470fcd829bc72a772fb7e4c37532a09d1e37ff41592dcf1a1a3074ca2",
|
|
2405
|
+
"fabric-events.mjs": "c463d6ffcae24229a5c608d8fcea4268d2ccc5024b19fa10e5a452284068fa71",
|
|
2406
|
+
"fabric-logs.mjs": "58467e5719c16e099d05bbedec47a95712506ab03c33f3cd4be1252e8498a946",
|
|
2407
|
+
"fabric-supervisors.mjs": "9d61c1a17538a5e2453e33e5ae347337336748041bc054478a96dd51f3d4fc51",
|
|
2408
|
+
"fabric-service.mjs": "bc67550e52aa6aa9c6d2ed6cbae52418a3e836623e17164166699f953d8aafa8",
|
|
2409
|
+
"fabric-profiles.mjs": "314376cf2deb87f235fb18b11d3b532e211f585b9af0a9302b5f4cc39971b532",
|
|
2410
|
+
"fabric-interop-rules.mjs": "57a8081307956e8c381119b361fa5232a7bf791815be8e3541eb5492820e2ea5",
|
|
2411
|
+
"fabric-interop.mjs": "581983ec3e197e5c2340ad25e8468320c69a2459c90097c7fcf2699766b4fb26",
|
|
2412
|
+
"fabric-hub.mjs": "c005115a864cfd67daa4862097bb14acfe5a60bf653897e5bf8a570dd80f1070",
|
|
2413
|
+
"fabric-board-shapes.mjs": "c1db7b7bd0d58d82bb6d8dfbc3cd1547a256a333052d367e82ff1b3edf2804d7",
|
|
2414
|
+
"fabric-board-link.mjs": "4cd6d4e21713a38c8e56f7d59db3148638b8c27c08e774d96a0f6283c6049e0a",
|
|
2415
|
+
"fabric-board-session.mjs": "e9eefb5d34dc66f6d6b528a9c9e85960fd884e6ea5e179c26cbfe3c054ccf7bc",
|
|
2416
|
+
"fabric-board-fixture.mjs": "83c4b7e33ee47b68385faf2569d38d5c8a0c5cb0f8656090f41e1b0eed2f436e",
|
|
2417
|
+
"fabric-board.mjs": "9e7bfe4d412521982224ef12bebfc2ff255eeeaf8d96cf40234ac18de68e7a59",
|
|
2418
|
+
"fabric-http.mjs": "f886bcb49c4353d039387ac9568738dda26697a94dd07fc6a6204500f0bc27bf",
|
|
2419
|
+
"fabric-openrouter.mjs": "f8f0168691f968b7cd85f36aa98e2167e88cc44f1104ff514fd0c7699b339253",
|
|
2420
|
+
"fabric-package.schema.json": "2ba799f576fad0f608029223c4ccccd122152f1c5dbfa8ce8b31cd63ac92ad44",
|
|
2421
|
+
"share-registration.schema.json": "34b3997eeaf936ebc861342a23045634a7c18c19f01d7ed4198310d81989f5b0"
|
|
2346
2422
|
}
|
|
2347
2423
|
},
|
|
2348
2424
|
"data": {
|
|
@@ -5,7 +5,7 @@ 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.46.
|
|
8
|
+
version: "0.46.1"
|
|
9
9
|
contract-version: "0.1.0"
|
|
10
10
|
contract-commit: "0a4ce773c4b9e6bec40c6387eb3f988af7152c0e"
|
|
11
11
|
---
|