@passioncode-ai/passioncode 0.2.1 → 0.2.4
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 +38 -0
- package/README.md +35 -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 +3 -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/building-fabric-services/SKILL.md +23 -5
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/board.md +24 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/lifecycle.md +58 -16
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/package.md +102 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/protocol.md +2 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-board.mjs +144 -11
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-package.mjs +590 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-package.schema.json +631 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-service.mjs +2 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_board.py +140 -10
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_package.py +824 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_service.py +4 -3
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +3 -3
- package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/SKILL.md +1 -1
- package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/references/project-board.md +24 -3
- package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session.py +1 -1
- package/payload/plugins/passioncode/.claude-plugin/plugin.json +1 -1
- package/payload/plugins/passioncode/hooks/repo-rules.js +9 -4
- package/payload/plugins/passioncode/skills/working-in-passioncode/SKILL.md +9 -0
|
@@ -49,9 +49,10 @@ DASHBOARD_EXTENSION_KEY = "https://fabric.passioncode.ai/agent-contract/extensio
|
|
|
49
49
|
DASHBOARD_KIT = "fabric-dashboard-kit@1.1.0"
|
|
50
50
|
REFERENCE_THEMES = ("graphite", "fabric", "paper", "forest", "ocean", "ember", "contrast")
|
|
51
51
|
EXIT_ALREADY_RUNNING = 75
|
|
52
|
-
# Lifecycle
|
|
53
|
-
#
|
|
54
|
-
#
|
|
52
|
+
# Lifecycle rules: references/lifecycle.md, the rule for this kit's users, which implements the public
|
|
53
|
+
# contract's service specification (Lifecycle). A launchd-supervised copy that finds the lock held backs
|
|
54
|
+
# off in-process for this long before its exit 75 (LC-03, F8): under KeepAlive with ThrottleInterval 10
|
|
55
|
+
# that is a few starts an hour instead of one every 10 s.
|
|
55
56
|
SUPERVISOR_ENV = "FABRIC_SERVICE_SUPERVISOR"
|
|
56
57
|
LOCK_WAIT_SUPERVISED_SECONDS = 300.0
|
|
57
58
|
LOCK_BACKOFF_FIRST_SECONDS = 0.5
|
|
@@ -5,9 +5,9 @@ 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.
|
|
8
|
+
version: "0.32.1"
|
|
9
9
|
contract-version: "0.1.0"
|
|
10
|
-
contract-commit: "
|
|
10
|
+
contract-commit: "1636fa97262f4a26e2086572d540c2ee701e0010"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Creating Fabric-compatible agents
|
|
@@ -123,7 +123,7 @@ python3 <plugin-dir>/skills/adapting-projects-to-fabric/scripts/adapt_project.py
|
|
|
123
123
|
The effect class is declared, never defaulted: ask the author what the agent does outside itself when the request
|
|
124
124
|
does not say. Cost presets are only for a run whose cost varies; their amounts come from the author or measured runs.
|
|
125
125
|
|
|
126
|
-
Pin exactly contract `0.1.0` at commit `
|
|
126
|
+
Pin exactly contract `0.1.0` at commit `1636fa97262f4a26e2086572d540c2ee701e0010` and
|
|
127
127
|
read the pinned guide before implementing protocol details. If this skill is installed
|
|
128
128
|
without its sibling, the scaffolder is absent: create the bundle by hand from the pinned
|
|
129
129
|
contract's `docs/guides/connecting-compatible-agents.md` and mark the structural check
|
package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/references/project-board.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# The project board (`fabric-project-comms/0.1`, the `com.*` tools)
|
|
2
2
|
|
|
3
3
|
Read this when the session starts in a project a Fabric hub serves, when the person asks about board mail, when you
|
|
4
|
-
need something from another Project, or when you wait for an answer.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
need something from another Project, or when you wait for an answer. This page is the rule a coding agent with this
|
|
5
|
+
plugin follows. Inside PassionCode.ai it implements the knowledge base's
|
|
6
|
+
[agents-first.md, "The project board"](https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/agents-first.md#the-project-board)
|
|
7
|
+
(private to the organization), and is kept in step with it; nothing behind that link is needed to follow this page.
|
|
7
8
|
|
|
8
9
|
## Contents
|
|
9
10
|
|
|
@@ -46,6 +47,26 @@ capability (a plain question may be `kind: "message"`), in a new thread whose pa
|
|
|
46
47
|
SendMessage between sessions. agent-sync leases guard files; they carry no asks.
|
|
47
48
|
|
|
48
49
|
A request the board stored has not been carried out. Only its state (`completed`, `failed_known`) says what happened.
|
|
50
|
+
`settledBy: "owner"` on a request (DEC-0081) means the estate owner settled it after its responder was gone: read it as
|
|
51
|
+
the owner's attestation, not the responder's.
|
|
52
|
+
|
|
53
|
+
**`held` (DEC-0079).** The operator holds that thread, that Project or that capability, and the board refuses new
|
|
54
|
+
work there with `held`, which is always retryable. Tell the person what is held. Retry later, the pause growing, with
|
|
55
|
+
the **same idempotency key and arguments**. Never post the ask into another thread or to another Project to get around
|
|
56
|
+
the hold. Reads, cancels and replies to work already started are never held.
|
|
57
|
+
|
|
58
|
+
**A problem for another Project: a structured finding (DEC-0080).** Send one only when the running Fabric's
|
|
59
|
+
`com.submit` input schema lists `finding`; otherwise send a plain message. A finding carries:
|
|
60
|
+
|
|
61
|
+
- `severity`: `info`, `warning` or `blocking`;
|
|
62
|
+
- `consequence`: one sentence on what it breaks;
|
|
63
|
+
- `affects`: the backlog rows (`{repository, path, id}`) or host tasks it touches;
|
|
64
|
+
- a `dedupeKey` that stays the same for the same problem.
|
|
65
|
+
|
|
66
|
+
Its idempotency key is at least 128 random bits (for example 32 hex characters from a cryptographic generator), kept
|
|
67
|
+
on every retry. A receipt with `repeated: true` and a fresh key means that finding already stands on the board: its
|
|
68
|
+
thread may not be the one you named, and nothing new was posted. Never put a `{redacted: true}` item into a finding you
|
|
69
|
+
send.
|
|
49
70
|
|
|
50
71
|
## The project directory
|
|
51
72
|
|
package/payload/plugins/fabric-agent-adapter/skills/working-with-fabric/scripts/fabric_session.py
CHANGED
|
@@ -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.
|
|
63
|
+
VERSION = "0.32.1"
|
|
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
|
|
@@ -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.
|
|
5
|
+
"version": "0.2.4",
|
|
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",
|
|
@@ -5,13 +5,18 @@
|
|
|
5
5
|
* wiki.passioncode.ai/knowledge) and the repository's AGENTS.md before its first edit, and after
|
|
6
6
|
* the work updates the knowledge base page that owns any cross-repository fact it changed. A rule
|
|
7
7
|
* an agent has to remember is a rule it forgets in the one repository where it mattered, so the
|
|
8
|
-
* session start says it, in one line, and only where it applies.
|
|
9
|
-
*
|
|
8
|
+
* session start says it, in one line, and only where it applies. The same line names the two Fabric
|
|
9
|
+
* principles that govern how the work moves — 10, a free agent takes the next task, and 11, a project
|
|
10
|
+
* moves in releases and every run leaves a lesson — by their anchors in principles.md, so the
|
|
11
|
+
* knowledge base's rules §4 reaches every session without each AGENTS.md restating it. Anything
|
|
12
|
+
* unexpected (no git, no origin, a slow git) prints nothing: a reminder must never cost a session.
|
|
10
13
|
*/
|
|
11
14
|
const { execFileSync } = require('child_process');
|
|
12
15
|
|
|
13
16
|
const KNOWLEDGE = 'fabric-workspace/knowledge/';
|
|
14
17
|
const KNOWLEDGE_WEB = 'https://wiki.passioncode.ai/knowledge';
|
|
18
|
+
const PRINCIPLE_10 = `${KNOWLEDGE}principles.md#10-a-free-agent-takes-the-next-task`;
|
|
19
|
+
const PRINCIPLE_11 = `${KNOWLEDGE}principles.md#11-a-project-moves-in-releases-and-every-run-leaves-a-lesson-the-next-one-reads`;
|
|
15
20
|
|
|
16
21
|
/** The GitHub organization an origin URL belongs to, when it is passioncode-ai; else null. */
|
|
17
22
|
function orgOf(url) {
|
|
@@ -32,7 +37,7 @@ function originOf(dir) {
|
|
|
32
37
|
/** The one line to print at session start in `dir`, or null. */
|
|
33
38
|
function rulesLine(dir) {
|
|
34
39
|
if (!orgOf(originOf(dir))) return null;
|
|
35
|
-
return `[passioncode] passioncode-ai repository: read the knowledge base (${KNOWLEDGE} or ${KNOWLEDGE_WEB}), then this repository's AGENTS.md, before the first edit; after the work, update the knowledge base page that owns any cross-repository fact you changed; edit each canonical task source declared in docs/backlog-sources.json and publish the derived workspace backlog.`;
|
|
40
|
+
return `[passioncode] passioncode-ai repository: read the knowledge base (${KNOWLEDGE} or ${KNOWLEDGE_WEB}), then this repository's AGENTS.md, before the first edit; work by Fabric principle 10, a free agent takes the next task (a wait goes on a watcher, stop only at a human gate; ${PRINCIPLE_10}), and principle 11, a project moves in releases and every run leaves a lesson the next one reads (${PRINCIPLE_11}); after the work, update the knowledge base page that owns any cross-repository fact you changed; edit each canonical task source declared in docs/backlog-sources.json and publish the derived workspace backlog.`;
|
|
36
41
|
}
|
|
37
42
|
|
|
38
|
-
module.exports = { KNOWLEDGE, KNOWLEDGE_WEB, orgOf, rulesLine };
|
|
43
|
+
module.exports = { KNOWLEDGE, KNOWLEDGE_WEB, PRINCIPLE_10, PRINCIPLE_11, orgOf, rulesLine };
|
|
@@ -124,6 +124,15 @@ Also, before the first edit:
|
|
|
124
124
|
- **Receipts.** A claim that will be read as true carries `file:line`, a command and
|
|
125
125
|
its output, or a test name. Documentation changes in the same change as the
|
|
126
126
|
behaviour it describes.
|
|
127
|
+
- **A free agent takes the next task** (Fabric [principle 10](https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/principles.md#10-a-free-agent-takes-the-next-task)).
|
|
128
|
+
A finished unit is followed by the next task from the board or the handoff, in the same turn.
|
|
129
|
+
Every wait (a review, CI, a merge, a peer, a scheduled time) goes on a watcher that acts when it
|
|
130
|
+
clears, and one that can outlive the session goes on a durable trigger. Stop only at a human gate:
|
|
131
|
+
a sign-in, a consent, a payment, a secret a person types, spend above the limit, a recorded decision.
|
|
132
|
+
- **A project moves in releases; every run leaves a lesson** (Fabric [principle 11](https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/principles.md#11-a-project-moves-in-releases-and-every-run-leaves-a-lesson-the-next-one-reads)).
|
|
133
|
+
A finding gets an id in the owning register and is fixed in the next release with every other
|
|
134
|
+
open item; only the five-entry hotfix lane ships alone. Questions go out in rounds. Read the
|
|
135
|
+
retrospectives before work and write the lesson after it.
|
|
127
136
|
|
|
128
137
|
agent-sync missing: `npx @ssheleg/agent-sync install`. If it cannot be installed, do
|
|
129
138
|
not edit a guarded file — say which file and why you stopped.
|