@passioncode-ai/fabric-agent-adapter 0.58.0 → 0.60.0
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 +97 -0
- package/README.md +1 -1
- 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 +3 -2
- package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/operator-channel-and-repository.md +4 -1
- package/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/source-and-instance.md +27 -2
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +16 -19
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/board.md +35 -13
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/kit-modules.md +1 -1
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/references/package.md +7 -2
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-board-session.mjs +9 -2
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-board-slots.mjs +80 -1
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-package.mjs +6 -1
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_board_session.py +11 -3
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_board_slots.py +80 -4
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_package.py +14 -6
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/kit.json +187 -7
- package/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/sample_service.py +2 -2
- package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +19 -7
- package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/operator-channel-and-repository.md +4 -1
- package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/source-and-instance.md +27 -2
- package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/where-agents-run.md +23 -1
- package/plugins/fabric-agent-adapter/skills/working-with-fabric/SKILL.md +5 -5
- package/plugins/fabric-agent-adapter/skills/working-with-fabric/references/project-board.md +21 -7
- package/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session_env.py +1 -1
package/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/where-agents-run.md
CHANGED
|
@@ -16,6 +16,7 @@ The normative rules are the Fabric Agent Contract's, at the commit this plugin p
|
|
|
16
16
|
- [Connecting a machine or a cloud to the estate](#connecting-a-machine-or-a-cloud-to-the-estate)
|
|
17
17
|
- [Sharing an agent into an organization](#sharing-an-agent-into-an-organization)
|
|
18
18
|
- [Running while the laptop is closed](#running-while-the-laptop-is-closed)
|
|
19
|
+
- [Uptime: A or B](#uptime-a-or-b)
|
|
19
20
|
- [Selling an agent](#selling-an-agent)
|
|
20
21
|
- [The checklist](#the-checklist)
|
|
21
22
|
|
|
@@ -85,13 +86,33 @@ checked, and removes the instance from the next revision.
|
|
|
85
86
|
## Running while the laptop is closed
|
|
86
87
|
|
|
87
88
|
A cloud agent keeps working with the laptop closed only if everything it needs is in the cloud: its worker, its
|
|
88
|
-
secrets, its data, and a hub that can admit
|
|
89
|
+
secrets, its data, and, for the calls Fabric admits, a hub that can admit them. The local Fabric hub is not a cloud hub. Design for it:
|
|
89
90
|
|
|
90
91
|
- Declare what each capability needs and where it is; a capability that needs the person's machine reports
|
|
91
92
|
`pending` or `unavailable` instead of pretending, and queues within a deadline or declines.
|
|
92
93
|
- Never charge for work it cannot deliver on the promised terms.
|
|
93
94
|
- A test that passed on fixtures says nothing about uptime; measure the installed agent in its cloud.
|
|
94
95
|
|
|
96
|
+
## Uptime: A or B
|
|
97
|
+
|
|
98
|
+
Every new agent is given an uptime category on its first day, and the README names it:
|
|
99
|
+
|
|
100
|
+
- **A, around the clock.** A capability must answer while the owner's machine is off or asleep: a schedule, a chat,
|
|
101
|
+
callers outside the machine. A cloud host is required from the first release; Heroku is the default, another host
|
|
102
|
+
only when a reason names it: an instance in the person's PassionCode cloud or an organization's cloud runs there
|
|
103
|
+
(the places above), and a paid agent stays in PassionCode's cloud (selling an agent, below). On a host with no
|
|
104
|
+
Fabric hub it answers what reaches its own origin (its schedule, its chat, its API); a call Fabric admits needs a
|
|
105
|
+
cloud hub, as running while the laptop is closed says. The agent is an online service (building-fabric-services, the remote placement), often
|
|
106
|
+
alongside its local instance, and starts from the cloud Fabric-server template once that template's repository
|
|
107
|
+
exists. Its data lives where the cloud reaches it, in a durable store (a database, an object store, the private
|
|
108
|
+
`<agent>-data` repository), never the host's own folder, which a platform such as Heroku does not keep across a
|
|
109
|
+
restart.
|
|
110
|
+
- **B, local only.** Nothing needs it while the machine sleeps: a local service and no cloud. It reads an A agent's
|
|
111
|
+
data through that agent's MCP or API, never from its store.
|
|
112
|
+
|
|
113
|
+
A B agent that gains a capability that must answer around the clock becomes A for that capability; record the change
|
|
114
|
+
and move only that capability to the cloud.
|
|
115
|
+
|
|
95
116
|
## Selling an agent
|
|
96
117
|
|
|
97
118
|
- **A paid agent** runs in PassionCode's cloud inside its developer's organization (`org:<developer>`); each customer
|
|
@@ -108,6 +129,7 @@ secrets, its data, and a hub that can admit calls. The local Fabric hub is not a
|
|
|
108
129
|
- Where does each instance run, and in which context? Write it in the knowledge pack.
|
|
109
130
|
- Does any state, secret, log line or cache key cross contexts? It must not.
|
|
110
131
|
- Which capabilities need the person's machine, and what do they answer when it is off?
|
|
132
|
+
- Which uptime category is it, A (a cloud host from the first release) or B (local only)? The README names it.
|
|
111
133
|
- Who pays for each call (which grant, which key)? The person's personal key never pays for an organization.
|
|
112
134
|
- If it joins machines or applies the estate record: tokens from stdin or a 0600 file only, revisions verified with
|
|
113
135
|
their parent.
|
|
@@ -18,7 +18,7 @@ compatibility: >-
|
|
|
18
18
|
this plugin; Codex/Kimi use command hooks; Hermes/OpenCode/OpenClaw/Pi use native context plugins after opt-in.
|
|
19
19
|
metadata:
|
|
20
20
|
author: PassionCode.ai
|
|
21
|
-
version: "0.
|
|
21
|
+
version: "0.60.0"
|
|
22
22
|
---
|
|
23
23
|
|
|
24
24
|
# Working with Fabric
|
|
@@ -283,15 +283,15 @@ build or test in flight is not a stall. Note each restart (what stopped, when, a
|
|
|
283
283
|
|
|
284
284
|
## Step 6: tasks link to backlog rows, never copy them
|
|
285
285
|
|
|
286
|
-
A backlog row
|
|
286
|
+
A repository's backlog row stays the status source. File the Fabric task that runs it with the row's address:
|
|
287
287
|
|
|
288
288
|
```json
|
|
289
289
|
{"title": "…", "source": {"repository": "passioncode-ai/fabric-agent-adapter", "path": "docs/backlog.md", "id": "FAA-18"}}
|
|
290
290
|
```
|
|
291
291
|
|
|
292
|
-
through `fabric_task_create` (or `fabric_work_claim`, which files one when none exists)
|
|
293
|
-
|
|
294
|
-
|
|
292
|
+
through `fabric_task_create` (or `fabric_work_claim`, which files one when none exists); read its answer as Step 4
|
|
293
|
+
item 2 says. Your single live claim links the row (Fabric 0.3.14): file an unrelated row after your release, never linked
|
|
294
|
+
by hand, or say it is linked. Do not paste the row's text or status into the task; edit it in its repository.
|
|
295
295
|
|
|
296
296
|
## Step 7: at the end
|
|
297
297
|
|
|
@@ -61,12 +61,12 @@ reply or progress note): the target replied, not that the work was done. Read th
|
|
|
61
61
|
still cancel the request. `noResponder` in your `com.submit` receipt says nobody can answer that capability for that
|
|
62
62
|
Project now: the request is stored, a reply may still answer it and a responder may come later. An `accepted`
|
|
63
63
|
request can also wait unanswered for its responder's operator: since adapter 0.53.0 a responder whose slot was moved
|
|
64
|
-
to another session leaves its accepted work `accepted` and unanswered until the slot is taken back
|
|
65
|
-
hands it over
|
|
64
|
+
to another session leaves its accepted work `accepted` and unanswered until the slot is taken back, or, once Fabric offers the operator's move,
|
|
65
|
+
moved back to it (a responder from adapter 0.60.0 finds that; an older one comes back only by take-back), or until Fabric hands it over (CT-175), which is not the operator's hold below; tell
|
|
66
66
|
the person, and cancel it if it is past what they can wait. Never resend it under
|
|
67
|
-
a new key while it is open; follow "When nobody answers" below. A request without a deadline gets one seven
|
|
68
|
-
(DEC-0098) and then reads `expired`: if the ask still stands, submit it again with a new key and record the wait
|
|
69
|
-
new request.
|
|
67
|
+
a new key while it is open; follow "When nobody answers" below. A queued or claimed request without a deadline gets one seven
|
|
68
|
+
days out (DEC-0098) and then reads `expired`: if the ask still stands, submit it again with a new key and record the wait
|
|
69
|
+
on the new request. An accepted one is kept past its deadline (C4) and never expires: follow "When nobody answers".
|
|
70
70
|
`settledBy: "owner"` on a request (DEC-0081) means the estate owner settled it after its responder was gone: read it as
|
|
71
71
|
the owner's attestation, not the responder's.
|
|
72
72
|
|
|
@@ -100,6 +100,20 @@ A request to a Project whose owner is not working now would wait for nobody. Aft
|
|
|
100
100
|
the files you would touch (`git ls-remote origin 'refs/agent-sync/leases/*'` in its repository). `noResponder` in
|
|
101
101
|
the receipt says nobody serves the capability now. A capability or Project that is `held` is the operator's stop,
|
|
102
102
|
not "nobody live": wait, and make no change there.
|
|
103
|
+
An `active` responder does not prove your request is being worked. A slot moved to another session (the operator's move,
|
|
104
|
+
contract DEC-0140 PR-2, once Fabric offers it, or another session's replacement) keeps the requests the old holder had accepted: they stay `accepted` with the old holder's
|
|
105
|
+
attempt, which nobody works until the new holder takes them over by a transfer or the old service gets the slot back
|
|
106
|
+
(its take-back, or a move back to a responder from adapter 0.60.0), while Fabric's thread view shows the
|
|
107
|
+
new holder as "Answers it" and its "requests no agent answers now" leaves them out (FAA-172). The board shows a
|
|
108
|
+
requester no attempt or generation (`com.get` gives the request's `state`, `effect` and `revision`, never its attempt), so you cannot tell
|
|
109
|
+
this from slow work: when your request has stayed `accepted` with no progress note or reply past what the work
|
|
110
|
+
should take, ask on its thread (`com.reply`) whether it is being worked. If nobody answers, cancel it first: while
|
|
111
|
+
its `effect` is still `not_started`, `com.cancel` moves it to `cancelled` (nothing has happened yet). Only when the
|
|
112
|
+
cancel's receipt shows the request `cancelled`, submit it again and read the new request from this step (an active
|
|
113
|
+
responder is step 2; step 3 only when nobody is live and it stays queued and unclaimed); an
|
|
114
|
+
accepted request never expires, and the old service would carry it out by a transfer once it gets the slot back, so
|
|
115
|
+
it is never adapted while still accepted. `outcome_unknown` means the work began meanwhile: tell the person and
|
|
116
|
+
change nothing.
|
|
103
117
|
2. **Live:** wait under a watcher (below) and work on independent tasks meanwhile; never touch files a live session
|
|
104
118
|
holds.
|
|
105
119
|
3. **Nobody live, and the change is small.** Small means all three:
|
|
@@ -114,8 +128,8 @@ A request to a Project whose owner is not working now would wait for nobody. Aft
|
|
|
114
128
|
allow. Then reply on the request's thread, one line of body text (not a `reaction`, which only an announcement's
|
|
115
129
|
reply carries): **adapted by** your Project, the merge commit, and what the owner should look at. The owner's next
|
|
116
130
|
session reads it and may revert it. One such change per target repository at a time. Your own reply does not answer
|
|
117
|
-
your own request:
|
|
118
|
-
the owner to see until its deadline; do not cancel it.
|
|
131
|
+
your own request: a queued one stays on the board, on its thread and on Fabric's home ("requests no agent answers
|
|
132
|
+
now"), for the owner to see until its deadline; do not cancel it.
|
|
119
133
|
4. **Not small** (a decision, a contract, a release, a large change): the request stays queued for its owner until its
|
|
120
134
|
deadline (seven days by default); never take a decision that is the owner's, record the wait in one line (what it
|
|
121
135
|
waits on, which watcher acts) and go on with your own work. An expiry posts no message, so the mail watcher does
|