@passioncode-ai/passioncode 0.2.49 → 0.2.51

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 (34) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +12 -0
  3. package/SECURITY.md +3 -0
  4. package/bin/passioncode.js +12 -4
  5. package/family.json +1 -1
  6. package/lib/doctor.js +118 -16
  7. package/lib/releases.js +59 -7
  8. package/lib/setup.js +77 -10
  9. package/lib/trains.js +38 -0
  10. package/package.json +2 -1
  11. package/payload/.claude-plugin/marketplace.json +2 -2
  12. package/payload/manifest.json +8 -8
  13. package/payload/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +1 -1
  14. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +3 -3
  15. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/provider-entry.md +18 -7
  16. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/adapt_project.py +2 -2
  17. package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/fabric_provider.py +25 -5
  18. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +2 -2
  19. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/delegation.md +3 -1
  20. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/interop.md +5 -1
  21. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/protocol.md +5 -3
  22. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-actions.mjs +2 -1
  23. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-protocols.mjs +5 -3
  24. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_actions.py +2 -1
  25. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_protocols.py +4 -2
  26. package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/kit.json +95 -5
  27. package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +3 -3
  28. package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/references/agents-that-answer-people.md +11 -5
  29. package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/SKILL.md +9 -9
  30. package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session_env.py +1 -1
  31. package/payload/plugins/passioncode/.claude-plugin/plugin.json +1 -1
  32. package/payload/plugins/passioncode/hooks/session-start.js +3 -1
  33. package/payload/plugins/passioncode/skills/setting-up-passioncode/SKILL.md +4 -0
  34. package/trains/organization-r1.json +13 -0
@@ -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.56.0"
21
+ version: "0.57.0"
22
22
  ---
23
23
 
24
24
  # Working with Fabric
@@ -35,12 +35,12 @@ Use it to work in a project through Fabric. Do not use it to:
35
35
 
36
36
  - build, adapt or run an agent as a Fabric provider or service: `creating-fabric-agents`,
37
37
  `adapting-projects-to-fabric`, `building-fabric-services`;
38
- - change Fabric itself (its hub, enrollment, journal): that is Fabric's repository and its own rules;
38
+ - change Fabric itself (its hub, enrollment, journal): Fabric's repository and rules own that;
39
39
  - take agent-sync leases on a repository's guarded files: agent-sync owns those; Fabric only shows them.
40
40
 
41
41
  ## Step 0: where Fabric stands
42
42
 
43
- Run the bundled status script; it reads files only, never a token, and prints one next action:
43
+ The bundled status script reads files only, never a token, and prints one next action:
44
44
 
45
45
  ```bash
46
46
  python3 <skill-dir>/scripts/fabric_session.py status # --json for a machine-readable report
@@ -55,7 +55,7 @@ By hand, when Python is absent: Fabric publishes `hub.json` in its folder while
55
55
  | Linux | `$XDG_DATA_HOME/passioncode-fabric/` (default `~/.local/share/`) | the install folder's `resources/bin`; the `.deb` puts it in `/opt/Fabric` |
56
56
 
57
57
  Fabric is up only when `hub.json` exists, says `"protocol": "fabric-hub/0.1"`, names the loopback origin
58
- `http://127.0.0.1:<port>` and a `pid` that is alive. No file, or a dead pid, means no Fabric, whatever answers on
58
+ `http://127.0.0.1:<port>` and a live `pid`. No file, or a dead pid, means no Fabric, whatever answers on
59
59
  the port. Never send anything to the port yourself, and never read the door token `hub.json` names: `fabric-mcp`
60
60
  does that. On Linux an AppImage mounts at a new path each start, so a registration pointing into it breaks; use the
61
61
  `.deb`.
@@ -229,8 +229,8 @@ already approved.
229
229
  the handoff (OA-6). A stop rule written into a request does not replace an approval whose scope covers the case: act
230
230
  on it.
231
231
  - Human gates stay (OA-5): sign-in, a one-time code, consent, payment or top-up, a typed secret, spend above a limit
232
- (handed to the person with its link and the amount, never asked in chat), a passkey. A policy change, a promotion or
233
- a grant of your own is never covered (AP-5).
232
+ (handed over with its link and amount, never asked in chat), a passkey, a comparison of codes with another person
233
+ or the choice to share without one (DEC-0142). A policy change, a promotion or a grant of your own is never covered (AP-5).
234
234
  - A prose relay that carries the four is accepted (OA-2): state your decision (*relay their decision*) or your own
235
235
  mandate from it, `instruction` and `at` copied unchanged, `source` naming where he said them, the scope no wider than
236
236
  the relayed one and his quoted words. You then lead your own part of the task.
@@ -300,8 +300,8 @@ resolve (a repository the project does not hold) is refused, naming the part tha
300
300
  3. `fabric_work_release` with how it ended: `done` (the task goes to review), handed over (to whom, with the note
301
301
  the next agent reads) or let go (why). Older Fabric: `fabric_task_release`.
302
302
 
303
- A session that ends without releasing lapses at its claim's expiry; release anyway; a lapsed claim reads as
304
- stuck work to the operator.
303
+ A session that ends without releasing lapses at its claim's expiry; release anyway: a lapsed claim reads as stuck
304
+ work.
305
305
 
306
306
  ## Refusals and lost answers
307
307
 
@@ -316,7 +316,7 @@ stuck work to the operator.
316
316
  | `operator-decision-required` | a service's action needs the operator's decision and none travelled; with `data.detail` `outside-mandate: <part>`, the mandate does not cover that part | ask the operator about this action, then relay their answer by the first route of Step 5 that carries it, the page only when none does; under a mandate, call again within your own mandate if it covers the part, else pass the refusal to the agent that called you, and only the lead asks him, once, about that part alone; `mandate-capability-missing`: no mandate covers that step, only his decision |
317
317
  | `decision-invalid` | the decision names another action or object, is older than 24 hours, lies over 60 s ahead of the service's clock, or is malformed; or the mandate is (`data.detail` `mandate-malformed`, `-widened`, `-expired`, `-early`, `-not-for-this-call`) | never edit, widen or re-date it; ask the operator again when their words do not cover this call |
318
318
  | `approval-required` with `data.actionDigest` | a caller outside the machine's trust (T2): a chat decision changes nothing | an `approval/1` for that digest through the hub |
319
- | `human-step-required` with `data.humanStep` and `data.url` | a sign-in, a one-time code, consent, payment or top-up, typed secret, spend above a limit or passkey stays the person's | hand the person `data.url`: a path on the service's origin as Fabric Dashboards' `open_link` (`fallback=never`), an https URL as it is; never take the step or ask for the secret; continue other work |
319
+ | `human-step-required` with `data.humanStep` and `data.url` | a human gate of OA-5 (above) stays the person's | hand the person `data.url`: a path on the service's origin as Fabric Dashboards' `open_link` (`fallback=never`), an https URL as it is; never take the step or ask for the secret; continue other work |
320
320
 
321
321
  Never tell the person a call failed or succeeded when its outcome is unknown.
322
322
 
@@ -58,7 +58,7 @@ SESSION_ID = re.compile(r"[A-Za-z0-9._:-]{1,128}")
58
58
  LOOPBACK_ORIGIN = re.compile(r"http://127\.0\.0\.1:(\d{1,5})")
59
59
 
60
60
 
61
- VERSION = "0.56.0"
61
+ VERSION = "0.57.0"
62
62
 
63
63
 
64
64
  HOSTS = {"claude": "Claude Code", "codex": "Codex", "kimi": "Kimi Code",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "passioncode",
4
4
  "displayName": "PassionCode.ai",
5
- "version": "0.2.49",
5
+ "version": "0.2.51",
6
6
  "description": "Set up and check PassionCode.ai on a computer with one command (setting-up-passioncode), the organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check at session start that keeps the PassionCode.ai skill set current.",
7
7
  "author": {
8
8
  "name": "PassionCode.ai",
@@ -79,7 +79,9 @@ async function main() {
79
79
  if (fails > 0 && !stale) {
80
80
  const ids = Array.isArray(last.failed) ? last.failed.filter((x) => typeof x === 'string').slice(0, 3) : [];
81
81
  const when = typeof last.at === 'string' ? last.at.slice(0, 10) : 'an earlier session';
82
- lines.push(`[passioncode] the setup check of ${when} found ${fails} problem(s)${ids.length ? ` (${ids.join(', ')}${last.failed.length > 3 ? ', …' : ''})` : ''}; \`npx @passioncode-ai/passioncode@latest setup\` repairs them, \`doctor\` shows them.`);
82
+ // A release train this launcher cannot use is not repaired by plain setup (PC-89).
83
+ const how = Array.isArray(last.failed) && last.failed.includes('train') ? 'setup --yes --no-apps --train none` (or a train this launcher ships) clears the unusable release train, `doctor' : 'setup` repairs them, `doctor';
84
+ lines.push(`[passioncode] the setup check of ${when} found ${fails} problem(s)${ids.length ? ` (${ids.join(', ')}${last.failed.length > 3 ? ', …' : ''})` : ''}; \`npx @passioncode-ai/passioncode@latest ${how}\` shows them.`);
83
85
  }
84
86
  if (lines.length) process.stdout.write(lines.join('\n') + '\n');
85
87
  }
@@ -96,6 +96,10 @@ Reply in the person's language, briefly:
96
96
  wait for the network.
97
97
  - **The command fails to start** (npm error, registry down): report the error with its exit code
98
98
  and stop. Do not fall back to manual installs.
99
+ - **An organization's machine**: when the person's organization runs a release train, add
100
+ `--train <name>` (today `organization-r1`): the apps are installed at the train's pinned versions
101
+ and `doctor` then shows a `train` line. An app newer than its pin is left alone. `--train none`
102
+ returns to the latest releases.
99
103
  - **Not macOS**: the result names each app's download page; the person installs apps from there,
100
104
  then runs `setup` again for the MCP servers. On Windows `doctor` reads which apps are installed
101
105
  and their versions; a fix that names a download page is the person's install, not a command.
@@ -0,0 +1,13 @@
1
+ {
2
+ "train": "organization-r1",
3
+ "title": "Organization R1",
4
+ "pinned": "2026-10-28",
5
+ "record": "https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/roadmap.md#sd-4",
6
+ "apps": {
7
+ "fabric": "0.3.15",
8
+ "switchboard": "0.7.0",
9
+ "dashboards": "0.8.15",
10
+ "observatory": "0.30.0",
11
+ "inbox": "0.77.3"
12
+ }
13
+ }