@passioncode-ai/passioncode 0.1.11 → 0.1.12
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 +26 -0
- package/CLA.md +28 -0
- package/COMMERCIAL-LICENSE.md +11 -0
- package/LICENSE +661 -155
- package/README.md +16 -13
- package/family.json +1 -1
- package/package.json +4 -2
- package/payload/.claude-plugin/marketplace.json +4 -4
- package/payload/manifest.json +10 -10
- package/payload/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +2 -2
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +23 -2
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +23 -2
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +21 -2
- package/payload/plugins/passioncode/.claude-plugin/plugin.json +2 -2
- package/payload/plugins/passioncode/hooks/repo-rules.js +11 -9
- package/payload/plugins/passioncode/skills/working-in-passioncode/SKILL.md +59 -31
- package/payload/plugins/passioncode/skills/working-in-passioncode/references/publishing.md +37 -27
package/README.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# PassionCode.ai launcher
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
The **PassionCode.ai launcher** (`@passioncode-ai/passioncode` on npm) installs and updates every
|
|
4
|
+
PassionCode.ai agent skill and plugin — the Fabric Agent Adapter, Observatory Log and the
|
|
5
|
+
organization's working rules — for Claude Code and every other agent on your machine, as one set.
|
|
6
|
+
It is how a teammate's agent gets the tools that build for Fabric, PassionCode.ai's CEO AI agent,
|
|
7
|
+
and it works on its own: no Fabric install, no account, no key.
|
|
7
8
|
|
|
8
9
|
```bash
|
|
9
10
|
npx @passioncode-ai/passioncode@latest update
|
|
@@ -27,8 +28,11 @@ out of it, even when they implement Fabric protocols.
|
|
|
27
28
|
no unscoped `passioncode` package on npm.
|
|
28
29
|
2. **Configure:** nothing to set, no account and no key. Background updates are on by default;
|
|
29
30
|
`npx @passioncode-ai/passioncode@latest config set update.auto off` turns them off.
|
|
30
|
-
3. **MCP:** none. The launcher installs skills and session hooks
|
|
31
|
-
|
|
31
|
+
3. **MCP:** none today, and not planned. The launcher installs skills and session hooks and is
|
|
32
|
+
driven by its CLI (`update`, `status`, `restore`, `uninstall`, `config`); it neither serves nor
|
|
33
|
+
calls an MCP server. The products it installs for, and the ones that serve MCP (Fabric
|
|
34
|
+
Switchboard, Fabric Inbox, Fabric Dashboards), document their own registration and proving
|
|
35
|
+
call; the Fabric Agent Adapter's quick start builds and calls one.
|
|
32
36
|
4. **Develop:** clone, then `npm test` — there are no dependencies and no lockfile, so there is
|
|
33
37
|
nothing to install (`npm ci` refuses to run here). `npm run vendor` builds `payload/` from the
|
|
34
38
|
members pinned in `family.json`; `claude plugin validate ./payload --strict` checks it. Start
|
|
@@ -93,9 +97,8 @@ reads a member from `<dir>/<repository name>`, and `PASSIONCODE_CHECKOUT_<MEMBER
|
|
|
93
97
|
|
|
94
98
|
## License
|
|
95
99
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
([CONTRIBUTING.md](CONTRIBUTING.md)).
|
|
100
|
+
Open source under the [GNU AGPL-3.0](LICENSE). A [commercial license](COMMERCIAL-LICENSE.md) is
|
|
101
|
+
available for use that does not meet the AGPL's terms — contact@passioncode.ai.
|
|
102
|
+
Versions before 0.1.12 were released under PolyForm Noncommercial or Internal Use (v0.1.5 to
|
|
103
|
+
v0.1.11) and MIT (v0.1.4 and earlier); each keeps the licence it was released under.
|
|
104
|
+
Contributions are accepted under [CLA.md](CLA.md) ([CONTRIBUTING.md](CONTRIBUTING.md)).
|
package/family.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passioncode-ai/passioncode",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"description": "Every PassionCode.ai agent skill — Fabric Agent Adapter, Observatory Log and the organisation's working rules — for Claude Code and every other agent on the machine, updated as one set.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"passioncode": "bin/passioncode.js"
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"family.json",
|
|
13
13
|
"README.md",
|
|
14
14
|
"LICENSE",
|
|
15
|
+
"COMMERCIAL-LICENSE.md",
|
|
16
|
+
"CLA.md",
|
|
15
17
|
"CHANGELOG.md",
|
|
16
18
|
"SECURITY.md"
|
|
17
19
|
],
|
|
@@ -32,7 +34,7 @@
|
|
|
32
34
|
"url": "git+https://github.com/passioncode-ai/passioncode.git"
|
|
33
35
|
},
|
|
34
36
|
"homepage": "https://github.com/passioncode-ai/passioncode",
|
|
35
|
-
"license": "
|
|
37
|
+
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial",
|
|
36
38
|
"author": {
|
|
37
39
|
"name": "PassionCode.ai",
|
|
38
40
|
"url": "https://passioncode.ai/"
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"name": "fabric-agent-adapter",
|
|
12
12
|
"displayName": "Fabric Agent Adapter",
|
|
13
13
|
"source": "./plugins/fabric-agent-adapter",
|
|
14
|
-
"version": "0.5.
|
|
14
|
+
"version": "0.5.3",
|
|
15
15
|
"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.",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "PassionCode.ai",
|
|
18
18
|
"url": "https://passioncode.ai/"
|
|
19
19
|
},
|
|
20
|
-
"license": "
|
|
20
|
+
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"name": "observatory-log",
|
|
@@ -35,13 +35,13 @@
|
|
|
35
35
|
"name": "passioncode",
|
|
36
36
|
"displayName": "PassionCode.ai",
|
|
37
37
|
"source": "./plugins/passioncode",
|
|
38
|
-
"version": "0.1.
|
|
38
|
+
"version": "0.1.12",
|
|
39
39
|
"description": "The organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
|
|
40
40
|
"author": {
|
|
41
41
|
"name": "PassionCode.ai",
|
|
42
42
|
"url": "https://passioncode.ai/"
|
|
43
43
|
},
|
|
44
|
-
"license": "
|
|
44
|
+
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial"
|
|
45
45
|
}
|
|
46
46
|
]
|
|
47
47
|
}
|
package/payload/manifest.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"family": "passioncode",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"release": true,
|
|
5
5
|
"members": [
|
|
6
6
|
{
|
|
7
7
|
"name": "fabric-agent-adapter",
|
|
8
8
|
"displayName": "Fabric Agent Adapter",
|
|
9
9
|
"repo": "passioncode-ai/fabric-agent-adapter",
|
|
10
|
-
"ref": "v0.5.
|
|
11
|
-
"commit": "
|
|
12
|
-
"version": "0.5.
|
|
10
|
+
"ref": "v0.5.3",
|
|
11
|
+
"commit": "951b2910e450c491078486ddf022489d4742bbaf",
|
|
12
|
+
"version": "0.5.3",
|
|
13
13
|
"via": "clone of https://***@github.com/passioncode-ai/fabric-agent-adapter.git",
|
|
14
14
|
"skills": [
|
|
15
15
|
"adapting-projects-to-fabric",
|
|
@@ -22,13 +22,13 @@
|
|
|
22
22
|
"legacyMarketplaces": [
|
|
23
23
|
"fabric-agent-adapter"
|
|
24
24
|
],
|
|
25
|
-
"contentHash": "sha256:
|
|
25
|
+
"contentHash": "sha256:1b9d3028d72947aa3dc99f2cc979ffb9a6710a99ab0a89773f7de9ce673be210",
|
|
26
26
|
"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.",
|
|
27
27
|
"author": {
|
|
28
28
|
"name": "PassionCode.ai",
|
|
29
29
|
"url": "https://passioncode.ai/"
|
|
30
30
|
},
|
|
31
|
-
"license": "
|
|
31
|
+
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial"
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
"name": "observatory-log",
|
|
@@ -61,22 +61,22 @@
|
|
|
61
61
|
"name": "passioncode",
|
|
62
62
|
"displayName": "PassionCode.ai",
|
|
63
63
|
"repo": "passioncode-ai/passioncode",
|
|
64
|
-
"ref": "v0.1.
|
|
64
|
+
"ref": "v0.1.12",
|
|
65
65
|
"commit": null,
|
|
66
|
-
"version": "0.1.
|
|
66
|
+
"version": "0.1.12",
|
|
67
67
|
"via": "this repository",
|
|
68
68
|
"skills": [
|
|
69
69
|
"working-in-passioncode"
|
|
70
70
|
],
|
|
71
71
|
"legacyPluginIds": [],
|
|
72
72
|
"legacyMarketplaces": [],
|
|
73
|
-
"contentHash": "sha256:
|
|
73
|
+
"contentHash": "sha256:f0be91c0c114b6b5af7e9ae74459eb1c60a433ee0515b11468917f44fe4d6af0",
|
|
74
74
|
"description": "The organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
|
|
75
75
|
"author": {
|
|
76
76
|
"name": "PassionCode.ai",
|
|
77
77
|
"url": "https://passioncode.ai/"
|
|
78
78
|
},
|
|
79
|
-
"license": "
|
|
79
|
+
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial"
|
|
80
80
|
}
|
|
81
81
|
]
|
|
82
82
|
}
|
|
@@ -3,14 +3,14 @@
|
|
|
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.",
|
|
6
|
-
"version": "0.5.
|
|
6
|
+
"version": "0.5.3",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "PassionCode.ai",
|
|
9
9
|
"url": "https://passioncode.ai/"
|
|
10
10
|
},
|
|
11
11
|
"homepage": "https://github.com/passioncode-ai/fabric-agent-adapter",
|
|
12
12
|
"repository": "https://github.com/passioncode-ai/fabric-agent-adapter",
|
|
13
|
-
"license": "
|
|
13
|
+
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial",
|
|
14
14
|
"keywords": [
|
|
15
15
|
"fabric",
|
|
16
16
|
"agent",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: adapting-projects-to-fabric
|
|
3
3
|
description: Use when adapting an existing agent, MCP server, A2A peer, HTTP service, or terminal CLI to the Fabric Agent Contract—choosing MCP/A2A/local-runner, scaffolding a provider bundle, or checking Fabric compatibility; also for «подключить проект к Fabric» or «сделать агента совместимым с Fabric». NOT for building the Fabric host/orchestrator, configuring an MCP client, or a brand-new agent — that is creating-fabric-agents.
|
|
4
|
-
license:
|
|
4
|
+
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 private fabric-agent-contract checkout. Works without those tools in an explicitly degraded structural-check mode.
|
|
6
6
|
metadata:
|
|
7
7
|
author: PassionCode.ai
|
|
8
|
-
version: "0.5.
|
|
8
|
+
version: "0.5.3"
|
|
9
9
|
contract-version: "0.1.0"
|
|
10
10
|
contract-commit: "2ea54f70c161c8b3bf7ec3c567735c7a2d4ce12f"
|
|
11
11
|
---
|
|
@@ -179,6 +179,27 @@ unverified surfaces. If live Fabric admission/runtime does not yet exist, the la
|
|
|
179
179
|
remain `NOT VERIFIED`; the completed deliverable is an adaptation-ready provider bundle,
|
|
180
180
|
not a connected provider.
|
|
181
181
|
|
|
182
|
+
## The repository around the provider
|
|
183
|
+
|
|
184
|
+
**For a PassionCode.ai repository**, the adapted project's repository follows the organization's
|
|
185
|
+
[repository standard](https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/repository-standard.md) (`knowledge/repository-standard.md`
|
|
186
|
+
in the organization's knowledge base; a clone has it at `fabric-workspace/knowledge/`) from its
|
|
187
|
+
first commit:
|
|
188
|
+
|
|
189
|
+
- `LICENSE`, `COMMERCIAL-LICENSE.md` and `CLA.md` copied byte for byte from the knowledge base's
|
|
190
|
+
`templates/`, and `AGPL-3.0-only OR LicenseRef-PassionCode-Commercial` in every manifest and
|
|
191
|
+
every SKILL.md `license:`; `SECURITY.md` when the repository is public;
|
|
192
|
+
- a README whose first heading is the full name, with `## Quick start for a new teammate`
|
|
193
|
+
(Install; Configure, key names only; MCP, the registration command and one proving tool call,
|
|
194
|
+
verified with a real client in a temporary config; Develop) and `## License`;
|
|
195
|
+
- an `AGENTS.md` that opens with the template's *Read first* block and closes with *After work*,
|
|
196
|
+
and a `CLAUDE.md` whose first line is `@AGENTS.md`.
|
|
197
|
+
|
|
198
|
+
org-index `scripts/check_format.py` reports 0 findings for it before it is called done. **An agent
|
|
199
|
+
someone builds for themselves is not a PassionCode.ai repository:** its licence is its owner's
|
|
200
|
+
choice, nothing about it is published or listed by the organization, and none of these files is
|
|
201
|
+
required of it — though the verified MCP quick start is still how anyone learns to drive it.
|
|
202
|
+
|
|
182
203
|
## Completion format
|
|
183
204
|
|
|
184
205
|
Report:
|
|
@@ -11,11 +11,11 @@ description: >-
|
|
|
11
11
|
descriptor, the well-known document, the events feed and notifications; ships Python and Node
|
|
12
12
|
reference kits and a live conformance probe. NOT for a one-off script or cron job, a hosted
|
|
13
13
|
SaaS, the provider manifest itself (adapting-projects-to-fabric), or building Fabric Dashboards.
|
|
14
|
-
license:
|
|
14
|
+
license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
15
15
|
compatibility: Python 3.9+ or Node.js 20+ for the kits; the probe needs Python 3.9+. launchd steps are macOS-only (Linux services use lifecycle manager none until a systemd adapter exists). No network or package install; the contract checkout is optional.
|
|
16
16
|
metadata:
|
|
17
17
|
author: PassionCode.ai
|
|
18
|
-
version: "0.5.
|
|
18
|
+
version: "0.5.3"
|
|
19
19
|
contract-version: "0.1.0"
|
|
20
20
|
extension: "fabric-service/0.1"
|
|
21
21
|
extension-commit: "2ea54f70c161c8b3bf7ec3c567735c7a2d4ce12f"
|
|
@@ -209,6 +209,27 @@ Then prove the lock: start a second copy by hand against the same data directory
|
|
|
209
209
|
must exit 75 while the first keeps serving. Prove recovery: `kill -9` the launchd pid;
|
|
210
210
|
the well-known document must answer again with a new pid within about 15 seconds.
|
|
211
211
|
|
|
212
|
+
## The repository around the service
|
|
213
|
+
|
|
214
|
+
**For a PassionCode.ai repository**, the service's repository follows the organization's
|
|
215
|
+
[repository standard](https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/repository-standard.md) (`knowledge/repository-standard.md`
|
|
216
|
+
in the organization's knowledge base; a clone has it at `fabric-workspace/knowledge/`) from its
|
|
217
|
+
first commit:
|
|
218
|
+
|
|
219
|
+
- `LICENSE`, `COMMERCIAL-LICENSE.md` and `CLA.md` copied byte for byte from the knowledge base's
|
|
220
|
+
`templates/`, and `AGPL-3.0-only OR LicenseRef-PassionCode-Commercial` in every manifest and
|
|
221
|
+
every SKILL.md `license:`; `SECURITY.md` when the repository is public;
|
|
222
|
+
- a README whose first heading is the full name, with `## Quick start for a new teammate`
|
|
223
|
+
(Install; Configure, key names only; MCP, the registration command and one proving tool call,
|
|
224
|
+
verified with a real client in a temporary config; Develop) and `## License`;
|
|
225
|
+
- an `AGENTS.md` that opens with the template's *Read first* block and closes with *After work*,
|
|
226
|
+
and a `CLAUDE.md` whose first line is `@AGENTS.md`.
|
|
227
|
+
|
|
228
|
+
org-index `scripts/check_format.py` reports 0 findings for it before it is called done. **An agent
|
|
229
|
+
someone builds for themselves is not a PassionCode.ai repository:** its licence is its owner's
|
|
230
|
+
choice, nothing about it is published or listed by the organization, and none of these files is
|
|
231
|
+
required of it — though the verified MCP quick start is still how anyone learns to drive it.
|
|
232
|
+
|
|
212
233
|
## Migrating an existing service
|
|
213
234
|
|
|
214
235
|
Read [the migration reference](references/migrating-a-service.md) — the order of
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: creating-fabric-agents
|
|
3
3
|
description: Use when designing and building a NEW agent or provider that must be Fabric-compatible from its first commit — «создай агента, совместимого с фабрикой Passion Code», «новый агент под Fabric», "create a fabric-compatible agent", "build a new Fabric provider", "fabric-ready agent from scratch". Runs the intake grill (capability, named consumer, workflow-or-agent, MCP/A2A/local-runner profile, effect declarations), distils source projects into a knowledge pack whose recorded failures become planted eval fixtures, scaffolds the pinned contract bundle, and sets the two-clock eval expectation with the conformance report. NOT for adapting an existing project (use adapting-projects-to-fabric), building the Fabric host or orchestrator, or generic agent design where Fabric compatibility is not part of the request.
|
|
4
|
-
license:
|
|
4
|
+
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 private fabric-agent-contract checkout. 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.5.
|
|
8
|
+
version: "0.5.3"
|
|
9
9
|
contract-version: "0.1.0"
|
|
10
10
|
contract-commit: "2ea54f70c161c8b3bf7ec3c567735c7a2d4ce12f"
|
|
11
11
|
---
|
|
@@ -80,6 +80,25 @@ that would show it met, written now, before the implementation. The input corpus
|
|
|
80
80
|
authored now: it grows from real traces once the provider runs, and the step-1 fixtures
|
|
81
81
|
are its seed because a source project's recorded failures count as production.
|
|
82
82
|
|
|
83
|
+
**For a PassionCode.ai repository**, the new agent's repository follows the organization's
|
|
84
|
+
[repository standard](https://github.com/passioncode-ai/fabric-workspace/blob/main/knowledge/repository-standard.md) (`knowledge/repository-standard.md`
|
|
85
|
+
in the organization's knowledge base; a clone has it at `fabric-workspace/knowledge/`) from its
|
|
86
|
+
first commit:
|
|
87
|
+
|
|
88
|
+
- `LICENSE`, `COMMERCIAL-LICENSE.md` and `CLA.md` copied byte for byte from the knowledge base's
|
|
89
|
+
`templates/`, and `AGPL-3.0-only OR LicenseRef-PassionCode-Commercial` in every manifest and
|
|
90
|
+
every SKILL.md `license:`; `SECURITY.md` when the repository is public;
|
|
91
|
+
- a README whose first heading is the full name, with `## Quick start for a new teammate`
|
|
92
|
+
(Install; Configure, key names only; MCP, the registration command and one proving tool call,
|
|
93
|
+
verified with a real client in a temporary config; Develop) and `## License`;
|
|
94
|
+
- an `AGENTS.md` that opens with the template's *Read first* block and closes with *After work*,
|
|
95
|
+
and a `CLAUDE.md` whose first line is `@AGENTS.md`.
|
|
96
|
+
|
|
97
|
+
org-index `scripts/check_format.py` reports 0 findings for it before it is called done. **An agent
|
|
98
|
+
someone builds for themselves is not a PassionCode.ai repository:** its licence is its owner's
|
|
99
|
+
choice, nothing about it is published or listed by the organization, and none of these files is
|
|
100
|
+
required of it — though the verified MCP quick start is still how anyone learns to drive it.
|
|
101
|
+
|
|
83
102
|
## Step 3 — scaffold the provider bundle
|
|
84
103
|
|
|
85
104
|
Reuse the sibling skill's scaffolder against the new skeleton with the profile chosen at
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "passioncode",
|
|
4
4
|
"displayName": "PassionCode.ai",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.12",
|
|
6
6
|
"description": "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",
|
|
9
9
|
"url": "https://passioncode.ai/"
|
|
10
10
|
},
|
|
11
11
|
"homepage": "https://github.com/passioncode-ai/passioncode",
|
|
12
|
-
"license": "
|
|
12
|
+
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial"
|
|
13
13
|
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
/**
|
|
3
|
-
* The read-first reminder. In a passioncode-ai repository an
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
3
|
+
* The read-first reminder: the protocol of Fabric ADR-0093. In a passioncode-ai repository an
|
|
4
|
+
* agent reads the organization's knowledge base (fabric-workspace/knowledge/, published at
|
|
5
|
+
* wiki.passioncode.ai/knowledge) and the repository's AGENTS.md before its first edit, and after
|
|
6
|
+
* the work updates the knowledge base page that owns any cross-repository fact it changed. A rule
|
|
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. Anything unexpected (no git, no
|
|
9
|
+
* origin, a slow git) prints nothing: a reminder must never cost a session.
|
|
9
10
|
*/
|
|
10
11
|
const { execFileSync } = require('child_process');
|
|
11
12
|
|
|
12
|
-
const
|
|
13
|
+
const KNOWLEDGE = 'fabric-workspace/knowledge/';
|
|
14
|
+
const KNOWLEDGE_WEB = 'https://wiki.passioncode.ai/knowledge';
|
|
13
15
|
|
|
14
16
|
/** The GitHub organization an origin URL belongs to, when it is passioncode-ai; else null. */
|
|
15
17
|
function orgOf(url) {
|
|
@@ -30,7 +32,7 @@ function originOf(dir) {
|
|
|
30
32
|
/** The one line to print at session start in `dir`, or null. */
|
|
31
33
|
function rulesLine(dir) {
|
|
32
34
|
if (!orgOf(originOf(dir))) return null;
|
|
33
|
-
return `[passioncode] passioncode-ai repository: read
|
|
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.`;
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
module.exports = {
|
|
38
|
+
module.exports = { KNOWLEDGE, KNOWLEDGE_WEB, orgOf, rulesLine };
|
|
@@ -7,12 +7,12 @@ description: >-
|
|
|
7
7
|
PassionCode», «как тут принято», «где записать решение», «как выпустить релиз». Covers the org
|
|
8
8
|
map, landing (protected and unprotected main, fast-forward, never force-push shared work,
|
|
9
9
|
never touch another session's work), nightly CI and why a blocked run is not green,
|
|
10
|
-
handoffs, decisions, ids and leases, secrets, licensing (
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
handoffs, decisions, ids and leases, secrets, licensing (AGPL-3.0 or commercial, CLA), the
|
|
11
|
+
repository standard, the privacy gate, and releases, versions and pins; the knowledge base
|
|
12
|
+
stays the source of truth. NOT for product UX, visual design or copy (super-ux,
|
|
13
13
|
sheleg-design, copywriting), building Fabric agents or services (the fabric-agent-adapter
|
|
14
14
|
skills), or repositories outside passioncode-ai.
|
|
15
|
-
license:
|
|
15
|
+
license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
16
16
|
compatibility: Any agent that can read files and run git. The gh CLI and a clone of passioncode-ai/org-index make the checks exact; without them follow the fallbacks in the body.
|
|
17
17
|
metadata:
|
|
18
18
|
author: PassionCode.ai
|
|
@@ -20,17 +20,33 @@ metadata:
|
|
|
20
20
|
|
|
21
21
|
# Working in PassionCode repositories
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
What belongs to no single repository — the vision, the principles, how to work, the rules, the
|
|
24
|
+
repository standard, the products and the licence — lives in one place: the organization's
|
|
25
|
+
**knowledge base**, `fabric-workspace/knowledge/` in a clone (org-index
|
|
26
|
+
`scripts/clone_all.sh` makes it), published at https://wiki.passioncode.ai/knowledge (sign-in
|
|
27
|
+
required; Fabric ADR-0093). [org-index](https://github.com/passioncode-ai/org-index) (private;
|
|
28
|
+
every member can read it) keeps the map (`repositories.json`), `ONBOARDING.md` and the checks
|
|
29
|
+
(`check_index.py`, `check_names.py`, `check_format.py`). This skill is the checklist that makes
|
|
30
|
+
those rules reach you while you work. It summarises; it does not replace. Where it and the
|
|
31
|
+
knowledge base disagree, **the knowledge base wins**; where a repository's own `AGENTS.md` is
|
|
32
|
+
stricter, **that file wins**.
|
|
33
|
+
|
|
34
|
+
## 0. The protocol — before and after every piece of work
|
|
35
|
+
|
|
36
|
+
**Before the first edit**, read the knowledge base (at least its `README.md`, `vision.md`,
|
|
37
|
+
`principles.md` and `how-to-work.md`), then the repository's `AGENTS.md`. The session-start hook
|
|
38
|
+
of this plugin prints that line in every passioncode-ai repository.
|
|
39
|
+
|
|
40
|
+
**After the work**, in the same run: update the repository's own docs in the change that changes
|
|
41
|
+
the behaviour; if a fact that crosses repositories changed — a product, a version, a plan row, a
|
|
42
|
+
principle, a rule — update the knowledge base page that owns it (`products.md`, `plans.md`, …);
|
|
43
|
+
land both; then publish (`node scripts/workspace.mjs sync` from a Fabric checkout) or leave it to
|
|
44
|
+
the scheduled sync. A page there is read as true: every claim carries its receipt.
|
|
29
45
|
|
|
30
46
|
## 1. Before the first edit
|
|
31
47
|
|
|
32
|
-
1. Read the repository's `AGENTS.md` (its `CLAUDE.md` imports
|
|
33
|
-
the test command and any local rule.
|
|
48
|
+
1. Read the knowledge base, then the repository's `AGENTS.md` (its `CLAUDE.md` imports
|
|
49
|
+
it). `AGENTS.md` names the role, the test command and any local rule.
|
|
34
50
|
2. Find who owns what you are about to change: the table in org-index `README.md`,
|
|
35
51
|
generated from `repositories.json`. Do not guess an owner from a directory name.
|
|
36
52
|
3. `git fetch origin`, then work in a worktree from `origin/main` on your own branch
|
|
@@ -41,13 +57,14 @@ where a repository's own `AGENTS.md` is stricter, **that file wins**.
|
|
|
41
57
|
4. An unmerged branch or a dirty tree you did not create is someone's work in
|
|
42
58
|
progress. Leave it; ask before touching it.
|
|
43
59
|
|
|
44
|
-
No
|
|
45
|
-
follow the repository's `AGENTS.md`, and name that you
|
|
60
|
+
No clone: `gh repo clone passioncode-ai/org-index`, then its `scripts/clone_all.sh` for the
|
|
61
|
+
knowledge base. No access at all: say so, follow the repository's `AGENTS.md`, and name that you
|
|
62
|
+
worked from it alone.
|
|
46
63
|
|
|
47
64
|
Also, before the first edit:
|
|
48
65
|
|
|
49
66
|
- **Read the organization's [CONTRIBUTING.md](https://github.com/passioncode-ai/.github/blob/main/CONTRIBUTING.md)**
|
|
50
|
-
— the
|
|
67
|
+
— the repository's `AGENTS.md` sends you there in its *Read first* block.
|
|
51
68
|
- **Names** (Fabric ADR-0090): PassionCode.ai is the organization; **Fabric** is the product,
|
|
52
69
|
the CEO AI agent; Fabric's tools carry its full name before any short form (Fabric Inbox,
|
|
53
70
|
Fabric Dashboards, Fabric Switchboard); the Fabric Agent Contract and Adapter make any agent
|
|
@@ -121,21 +138,31 @@ not edit a guarded file — say which file and why you stopped.
|
|
|
121
138
|
enough. With the Observatory plugin installed, its `handling-secrets` skill does this
|
|
122
139
|
by slot name without printing the value.
|
|
123
140
|
|
|
124
|
-
## 6. Licensing
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
141
|
+
## 6. Licensing and the repository standard
|
|
142
|
+
|
|
143
|
+
- **Every repository** is open source under the GNU AGPL-3.0, or available under a commercial
|
|
144
|
+
license from PassionCode.ai (contact@passioncode.ai):
|
|
145
|
+
`AGPL-3.0-only OR LicenseRef-PassionCode-Commercial` (Fabric ADR-0092; the knowledge base
|
|
146
|
+
`licensing.md` owns it). Copyright: Siarhei Sheleh. No price or term is stated anywhere.
|
|
147
|
+
- `LICENSE`, `COMMERCIAL-LICENSE.md` and `CLA.md` are copied **byte for byte** from the knowledge
|
|
148
|
+
base's `templates/`; every manifest and SKILL.md `license:` carries the expression.
|
|
149
|
+
- A version released earlier keeps its licence — MIT or PolyForm Noncommercial or Internal Use —
|
|
150
|
+
and the README may say which. Never write that a released version changed.
|
|
151
|
+
- The README's `## License` section uses the knowledge base wording and names the earlier
|
|
152
|
+
licences: "Open source under the GNU AGPL-3.0. A commercial license is available for use that
|
|
153
|
+
does not meet the AGPL's terms — contact@passioncode.ai."
|
|
154
|
+
- Contributions are accepted under the repository's `CLA.md`; the PR template carries the
|
|
155
|
+
"I agree to CLA.md" box.
|
|
156
|
+
- **The repository standard** (the knowledge base `repository-standard.md`): README first heading
|
|
157
|
+
`# <Full name>`, `## Quick start for a new teammate` (Install, Configure, MCP — the registration
|
|
158
|
+
command and one proving call verified with a real client in a temporary config — and Develop)
|
|
159
|
+
and `## License`; `AGENTS.md` opens with the template's *Read first* block and ends with
|
|
160
|
+
*After work*; `CLAUDE.md` starts with `@AGENTS.md`; `SECURITY.md` in public repositories.
|
|
161
|
+
org-index `python3 scripts/check_format.py` checks it (offline: siblings `org-index`,
|
|
162
|
+
`fabric-workspace` and the repository, then `--offline --repo <repo>`); it reports 0 before
|
|
163
|
+
you call a repository done.
|
|
164
|
+
- The operator's own agents are outside the organization and this licence: their licence is the
|
|
165
|
+
operator's choice, and nothing about them is published.
|
|
139
166
|
|
|
140
167
|
Read [publishing](references/publishing.md) when adding or changing a license, a
|
|
141
168
|
manifest's `license` field, `CLA.md` or a PR template.
|
|
@@ -209,4 +236,5 @@ skill's: `super-ux`, `sheleg-design` and `copywriting`.
|
|
|
209
236
|
|
|
210
237
|
Report: the repository and branch; the landed commit or the PR URL; each gate command
|
|
211
238
|
with its exit code; the hosted CI state (ran, blocked, or nightly pending); the handoff
|
|
212
|
-
path;
|
|
239
|
+
path; the knowledge base page you updated, or that no cross-repository fact changed; and the
|
|
240
|
+
one next task.
|
|
@@ -13,41 +13,50 @@ change to a license, a manifest's `license` field, `CLA.md` or a PR template.
|
|
|
13
13
|
|
|
14
14
|
## The license, file by file
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
`
|
|
20
|
-
`
|
|
21
|
-
|
|
16
|
+
Every repository is open source under the GNU AGPL-3.0, or available under a commercial
|
|
17
|
+
license from PassionCode.ai (contact@passioncode.ai): SPDX
|
|
18
|
+
`AGPL-3.0-only OR LicenseRef-PassionCode-Commercial` (Fabric ADR-0092). The owning page is the
|
|
19
|
+
knowledge base's `licensing.md`; the file list is its `repository-standard.md`, and org-index
|
|
20
|
+
`scripts/check_format.py` (rules F7–F11) checks it. The three licence files are **copied byte
|
|
21
|
+
for byte** from the knowledge base's `templates/` — never retyped, reflowed or "fixed".
|
|
22
22
|
|
|
23
23
|
| File | What it carries |
|
|
24
24
|
|---|---|
|
|
25
|
-
| `LICENSE` |
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
25
|
+
| `LICENSE` | `templates/LICENSE-AGPL-3.0.txt`, the unmodified AGPL-3.0 text (SHA-256 `0d96a4ff…abcb0`) |
|
|
26
|
+
| `COMMERCIAL-LICENSE.md` | `templates/COMMERCIAL-LICENSE.md` |
|
|
27
|
+
| `CLA.md` | `templates/CLA.md`, in every repository, private ones included |
|
|
28
|
+
| `SECURITY.md` | every public repository: report privately to contact@passioncode.ai |
|
|
29
|
+
| `CONTRIBUTING.md` | only when the repository adds rules; says contributions are accepted under `CLA.md` |
|
|
28
30
|
| `.github/pull_request_template.md` | a checkbox "I agree to CLA.md"; any existing template content is kept |
|
|
29
|
-
| `package.json` | `"license"` set to the SPDX expression |
|
|
31
|
+
| `package.json` | `"license"` set to the SPDX expression; `files` ships `LICENSE` and `COMMERCIAL-LICENSE.md` |
|
|
30
32
|
| `.claude-plugin/plugin.json`, marketplace entries | `"license"` set to the SPDX expression |
|
|
31
33
|
| SKILL.md front matter | `license:` set to the SPDX expression |
|
|
32
|
-
| `pyproject.toml` | `license
|
|
33
|
-
| `Cargo.toml` | `license-file = "LICENSE"` instead of `license`, and `publish = false` |
|
|
34
|
+
| `pyproject.toml`, `Cargo.toml` | `license = "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial"` |
|
|
34
35
|
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- A published MIT release stays MIT. Never write that it changed.
|
|
36
|
+
- A version released earlier keeps the licence it was released under — MIT or PolyForm
|
|
37
|
+
Noncommercial or Internal Use. Never write that it changed; the README may say which.
|
|
38
|
+
- Third-party code keeps its own licence and notice (vendored dependencies, imported templates).
|
|
39
|
+
- The operator's own agents are outside the organization and outside this licence: their
|
|
40
|
+
licence is the operator's choice, and nothing about them is published.
|
|
41
41
|
|
|
42
42
|
## Wording
|
|
43
43
|
|
|
44
|
-
- The
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
- The README section, word for word apart from the versions:
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
## License
|
|
48
|
+
|
|
49
|
+
Open source under the [GNU AGPL-3.0](LICENSE). A [commercial license](COMMERCIAL-LICENSE.md) is
|
|
50
|
+
available for use that does not meet the AGPL's terms — contact@passioncode.ai.
|
|
51
|
+
Versions before <first AGPL version> were released under <MIT | PolyForm Noncommercial or Internal Use>.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
- "Source-available" and the PolyForm expression describe past releases only; never state
|
|
55
|
+
them as the current licence.
|
|
56
|
+
- No price or term for the commercial licence is stated anywhere; point to
|
|
57
|
+
contact@passioncode.ai.
|
|
58
|
+
- Positioning and names come from the knowledge base (`vision.md`, `principles.md` §2); do not
|
|
59
|
+
restate a tagline from memory.
|
|
51
60
|
|
|
52
61
|
## The privacy gate
|
|
53
62
|
|
|
@@ -70,7 +79,8 @@ MIT-history sentence — the copyright line and the Required Notice stay as they
|
|
|
70
79
|
- Product metadata: author and owner **PassionCode.ai**, URL `https://passioncode.ai/`.
|
|
71
80
|
The site names the author by first name only; do not add full names or biographies to
|
|
72
81
|
product surfaces.
|
|
73
|
-
- Public documents do not link private repositories. org-index
|
|
74
|
-
|
|
82
|
+
- Public documents do not link private repositories. org-index and the knowledge base
|
|
83
|
+
(fabric-workspace `knowledge/`, published at wiki.passioncode.ai/knowledge) may be linked for
|
|
84
|
+
the map and the rules only.
|
|
75
85
|
- Security and conduct contact: contact@passioncode.ai, plus GitHub private
|
|
76
86
|
vulnerability reporting on a public repository.
|