@passioncode-ai/fabric-agent-adapter 0.28.0 → 0.29.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 CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.29.0 - 2026-10-13
4
+
5
+ `working-with-fabric` carries the limit-stop rule (fabric-workspace principle 10, item 6, operator 2026-10-13).
6
+
7
+ ### Added
8
+
9
+ - **A lane stopped on a limit: restart it at once** (`working-with-fabric`, Step 5). Applies to a workflow lane,
10
+ subagent or session that stops on *You've hit your session / usage limit · resets <time>*, on a rate-limit error,
11
+ or after 15–20 minutes of silence with its task unfinished. The agent that started it restarts it at once and does
12
+ not wait for the reset:
13
+ - a workflow: `TaskStop`, then `Workflow` with `resumeFromRunId` and the same args;
14
+ - a subagent: `SendMessage` «resume»;
15
+ - a session: a re-prompt.
16
+
17
+ If a restart stops again at once, the next tries come after 2, 5, 10, then every 15 minutes. A spend, credit or
18
+ billing limit goes to the operator once and is not retried. A long command in flight is not a stall. Each restart
19
+ goes into a `fabric_task_note`.
20
+ - The description gains the trigger "hit your limit, resets at".
21
+
22
+ ### Evidence
23
+
24
+ - The scenario eval `limit-stop-restarts-at-once` and two trigger queries (English and Russian) were written before
25
+ the prose.
26
+
3
27
  ## 0.28.0 - 2026-10-13
4
28
 
5
29
  A service answers a Project's requests on Fabric's project board (`fabric-project-comms/0.1`; FAA-12b, contract
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@passioncode-ai/fabric-agent-adapter",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
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.28.0",
6
+ "version": "0.29.0",
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.28.0"
8
+ version: "0.29.0"
9
9
  contract-version: "0.1.0"
10
10
  contract-commit: "f00a7685e3861c27f7899c033fb850a145a1708f"
11
11
  ---
@@ -17,7 +17,7 @@ license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
17
17
  compatibility: Python 3.9+ or Node.js 20+ for the kits; 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.
18
18
  metadata:
19
19
  author: PassionCode.ai
20
- version: "0.28.0"
20
+ version: "0.29.0"
21
21
  contract-version: "0.1.0"
22
22
  extension: "fabric-service/0.1"
23
23
  extension-commit: "f00a7685e3861c27f7899c033fb850a145a1708f"
@@ -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.28.0"
8
+ version: "0.29.0"
9
9
  contract-version: "0.1.0"
10
10
  contract-commit: "f00a7685e3861c27f7899c033fb850a145a1708f"
11
11
  ---
@@ -7,7 +7,8 @@ description: >-
7
7
  com.submit; unread-mail lines, watch-mail), claiming and releasing work (fabric_work_claim, fabric_work_release),
8
8
  reports, handoffs, refusals. Triggers - "connect to Fabric", "register fabric-mcp", "claim the task in Fabric",
9
9
  "check the project board", "ask the other project through Fabric", "Fabric is not running", «подключись к
10
- Fabric», «возьми задачу в Fabric», «проверь доску проекта», «Fabric не запущен». Explains the plugin's session
10
+ Fabric», «возьми задачу в Fabric», «проверь доску проекта»,
11
+ «Fabric не запущен», "hit your limit, resets at". Explains the plugin's session
11
12
  hooks. NOT for building or adapting an agent or a board responder (creating-fabric-agents,
12
13
  adapting-projects-to-fabric, building-fabric-services), changing Fabric's own code, or messaging people.
13
14
  license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
@@ -18,7 +19,7 @@ compatibility: >-
18
19
  this plugin; Codex and Kimi Code get the session-start preamble hook on the person's consent.
19
20
  metadata:
20
21
  author: PassionCode.ai
21
- version: "0.28.0"
22
+ version: "0.29.0"
22
23
  ---
23
24
 
24
25
  # Working with Fabric
@@ -146,6 +147,23 @@ A Fabric older than 0.4.0 has no `fabric_work_*` tools: use `fabric_tasks_list`
146
147
  - `fabric_question_ask` for a decision you are not entitled to make; `fabric_effect_request` before spending,
147
148
  deleting or publishing — refused until a person agrees.
148
149
 
150
+ ### A lane stopped on a limit: restart it at once
151
+
152
+ A workflow lane, subagent or session can stop on *You've hit your session / usage limit · resets <time>* or a
153
+ rate-limit error. It can also go silent: no transcript write for 15–20 minutes, its task unfinished, and no command
154
+ of its own still running. In each case, do not wait for the reset ([principle 10, item 6](https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/principles.md#10-a-free-agent-takes-the-next-task)).
155
+ Restart it from where it stopped:
156
+
157
+ - a workflow: stop it (`TaskStop`), then call `Workflow` with `resumeFromRunId` and **the same args**. Finished
158
+ agents replay from the cache; the failed or stalled ones run again;
159
+ - a subagent: `SendMessage` «resume» to its id, so it keeps its context;
160
+ - a session: re-prompt it with «continue from where you stopped».
161
+
162
+ The stop is usually stale by then. Switchboard moves a limited account to the pool's next account within a minute
163
+ (SB-98). If a restart stops again at once, retry after 2, 5, 10, then every 15 minutes, and do other work meanwhile.
164
+ A spend, credit or billing limit is not retried on a timer: it goes to the operator once, as a payment gate. A long
165
+ build or test in flight is not a stall. Note each restart (what stopped, when, attempt) with `fabric_task_note`.
166
+
149
167
  ## Step 6 — tasks link to backlog rows, never copy them
150
168
 
151
169
  A backlog row in a repository stays the status source. File the Fabric task that runs it with the row's address:
@@ -60,7 +60,7 @@ WATCH_MAX_BACKOFF_S = 900
60
60
  SESSION_ID = re.compile(r"[A-Za-z0-9._:-]{1,128}")
61
61
  LOOPBACK_ORIGIN = re.compile(r"http://127\.0\.0\.1:(\d{1,5})")
62
62
  LOCAL_ORIGIN = re.compile(r'"origin": "http://(?:127\.0\.0\.1|localhost)')
63
- VERSION = "0.28.0"
63
+ VERSION = "0.29.0"
64
64
  HOSTS = {"claude": "Claude Code", "codex": "Codex", "kimi": "Kimi Code"}
65
65
  # A session Fabric launched. FABRIC_LAUNCHED_SESSION=1 is the marker Fabric is asked to set (need D6); the others are
66
66
  # what Fabric already gives a launched session (fabric sessionBundle.ts): only their NAMES are looked at, never a value