@passioncode-ai/passioncode 0.2.38 → 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.
- package/CHANGELOG.md +16 -0
- package/family.json +1 -1
- package/package.json +1 -1
- package/payload/.claude-plugin/marketplace.json +2 -2
- package/payload/manifest.json +8 -8
- package/payload/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +1 -1
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +29 -11
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/dashboard-links.md +58 -5
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/operator-channel-and-repository.md +11 -3
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/adapt_project.py +2 -2
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/check_dashboard_link.py +8 -6
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +50 -12
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-button.js +5 -4
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-dashboard.css +1 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/fabric-dashboard.js +2 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/assets/dashboard-kit/kit.json +9 -4
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/recipes/support-agent/README.md +5 -3
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/board.md +3 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard-kit.md +3 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard-links.md +58 -5
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard.md +13 -4
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/delegation.md +13 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/estate-record.md +60 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/interop.md +159 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/kit-modules.md +8 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/package.md +4 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/protocol.md +14 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/settings-backups.md +2 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/surfaces-and-auth.md +40 -3
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/check_dashboard_link.py +8 -6
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/check_service.py +67 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/check_service_rules.py +371 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-a2a.mjs +170 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-actions.mjs +275 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-backups.mjs +3 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-context.mjs +151 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-delegation.mjs +38 -8
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-descriptor.mjs +31 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-estate.mjs +6 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-interop-rules.mjs +68 -3
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-interop.mjs +31 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-mandate.mjs +247 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-page-links.mjs +144 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-paths.mjs +22 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-protocols.mjs +2 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-service.mjs +1 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-share.mjs +30 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-supervisors.mjs +5 -4
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_a2a.py +209 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_actions.py +340 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_backups.py +2 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_context.py +170 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_delegation.py +36 -12
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_descriptor.py +36 -3
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_estate.py +7 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_interop.py +242 -11
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_interop_rules.py +70 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_mandate.py +324 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_page_links.py +559 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_paths.py +21 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_protocols.py +2 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_service.py +9 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_share.py +35 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_supervisors.py +6 -4
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/kit.json +413 -25
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +29 -11
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/dashboard-links.md +58 -5
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/operator-channel-and-repository.md +11 -3
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/scripts/check_dashboard_link.py +8 -6
- package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/SKILL.md +87 -10
- package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/references/project-board.md +12 -0
- package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session_env.py +1 -1
- package/payload/plugins/passioncode/.claude-plugin/plugin.json +1 -1
package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_share.py
CHANGED
|
@@ -158,6 +158,41 @@ def grant_usage_context_findings(value: Any) -> List[Dict[str, str]]:
|
|
|
158
158
|
return findings
|
|
159
159
|
|
|
160
160
|
|
|
161
|
+
def instance_share_grant(record: Any, machine_id: Any, agent_ref: Any, context: Any, at_ms: float) -> Dict[str, Any]:
|
|
162
|
+
"""Whether an organization's instance may run on ``machine_id`` now (FAA-125, N-11): the placement of ``agent_ref``
|
|
163
|
+
in ``context`` (as written; absent is personal) among that machine's packages, FAC-SEM-111 on it, and the grant's
|
|
164
|
+
window at ``at_ms`` (``startsAt`` <= at < ``expiresAt``; an unreadable instant or clock is outside it). Answers
|
|
165
|
+
``{"ok": True, "grant": {"id", "startsAt"?, "expiresAt"?}}`` (``{"ok": True}`` for a personal placement) or ``{"ok": False, "code", "detail"}`` with code
|
|
166
|
+
``placement-missing``, ``grant-refused`` or ``grant-window``; never raises. It reads the revision it is given, as
|
|
167
|
+
FAC-SEM-111 does: the caller verified it (``verify_estate_record``); a revocation delta is the hub's and the meter's."""
|
|
168
|
+
record = record if isinstance(record, dict) else {}
|
|
169
|
+
machine = next((m for m in _objects(record.get("machines")) if _jsv.same(m.get("id", _jsv.MISSING), machine_id)), {})
|
|
170
|
+
placement = next((p for p in _objects(machine.get("packages"))
|
|
171
|
+
if _jsv.same(p.get("agentRef", _jsv.MISSING), agent_ref)
|
|
172
|
+
and _jsv.same(p.get("context", _estate.PERSONAL_CONTEXT), context)), None)
|
|
173
|
+
if placement is None:
|
|
174
|
+
return {"ok": False, "code": "placement-missing", "detail": "this machine places no such agent in that context (FAC-SEM-074)"}
|
|
175
|
+
findings = _estate.placement_grant_findings(record, placement)
|
|
176
|
+
if findings:
|
|
177
|
+
return {"ok": False, "code": "grant-refused", "detail": "; ".join(f["message"] for f in findings)}
|
|
178
|
+
if not isinstance(placement.get("grant"), str):
|
|
179
|
+
return {"ok": True} # a personal placement, which names no grant
|
|
180
|
+
ident = _ids.normal_identifier(placement["grant"])
|
|
181
|
+
grant = next((g for g in _objects(record.get("shareGrants")) if _jsv.same(g.get("context", _jsv.MISSING), context)
|
|
182
|
+
and isinstance(g.get("meta"), dict) and isinstance(g["meta"].get("id"), str)
|
|
183
|
+
and _ids.normal_identifier(g["meta"]["id"]) == ident), None)
|
|
184
|
+
if grant is None: # defensive: FAC-SEM-111 has already matched one, so this answers rather than raises
|
|
185
|
+
return {"ok": False, "code": "grant-refused", "detail": "the record has no share grant for this placement"}
|
|
186
|
+
answer = {"id": grant["meta"]["id"]}
|
|
187
|
+
for name in ("startsAt", "expiresAt"):
|
|
188
|
+
if name in grant:
|
|
189
|
+
answer[name] = grant[name]
|
|
190
|
+
starts, expires = (_ftime.parse_rfc3339_ms(answer[n]) if n in answer else None for n in ("startsAt", "expiresAt"))
|
|
191
|
+
if (starts is not None and not starts <= at_ms) or (expires is not None and not at_ms < expires):
|
|
192
|
+
return {"ok": False, "code": "grant-window", "detail": "now is outside the share grant's window, or an instant cannot be read"}
|
|
193
|
+
return {"ok": True, "grant": answer}
|
|
194
|
+
|
|
195
|
+
|
|
161
196
|
def share_rules(kind: str, value: Any) -> Optional[List[Dict[str, str]]]:
|
|
162
197
|
"""Kinds ``grant`` (FAC-SEM-110, 117), ``org-share-grants`` (117 with parent), ``share-registration`` (118) and
|
|
163
198
|
``device-attribution`` (045's grant.usage clause only); None for another kind."""
|
|
@@ -30,7 +30,7 @@ from fabric_base import (
|
|
|
30
30
|
)
|
|
31
31
|
from fabric_paths import (
|
|
32
32
|
atomic_write,
|
|
33
|
-
|
|
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
|
|
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
|
|
404
|
+
for directory in dirs.values():
|
|
403
405
|
if directory.is_symlink():
|
|
404
406
|
directory.unlink()
|
|
405
407
|
elif directory.exists():
|