@passioncode-ai/passioncode 0.1.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 +73 -0
- package/LICENSE +22 -0
- package/README.md +69 -0
- package/SECURITY.md +42 -0
- package/bin/passioncode.js +65 -0
- package/family.json +45 -0
- package/lib/launcher.js +361 -0
- package/package.json +48 -0
- package/payload/.claude-plugin/marketplace.json +47 -0
- package/payload/manifest.json +77 -0
- package/payload/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +24 -0
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +175 -0
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/profile-selection.md +71 -0
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/provider-bundle.md +62 -0
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/references/verification.md +55 -0
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/scripts/adapt_project.py +537 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +240 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/dashboard.md +32 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/events-and-notifications.md +44 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/lifecycle.md +63 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/migrating-a-service.md +32 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/protocol.md +83 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/references/surfaces-and-auth.md +58 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/check_service.py +373 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric-service.mjs +380 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/fabric_service.py +663 -0
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/scripts/sample_service.py +226 -0
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +126 -0
- package/payload/plugins/observatory-log/.claude-plugin/plugin.json +19 -0
- package/payload/plugins/observatory-log/hooks/ask-why.py +98 -0
- package/payload/plugins/observatory-log/hooks/hooks.json +31 -0
- package/payload/plugins/observatory-log/hooks/record-turn.sh +81 -0
- package/payload/plugins/observatory-log/hooks/session-start.sh +27 -0
- package/payload/plugins/observatory-log/skills/explaining-changes/SKILL.md +111 -0
- package/payload/plugins/observatory-log/skills/handling-secrets/SKILL.md +115 -0
- package/payload/plugins/observatory-log/skills/tracking-resources/SKILL.md +87 -0
- package/payload/plugins/passioncode/.claude-plugin/plugin.json +13 -0
- package/payload/plugins/passioncode/hooks/hooks.json +10 -0
- package/payload/plugins/passioncode/hooks/probe.js +23 -0
- package/payload/plugins/passioncode/hooks/session-start.js +45 -0
- package/payload/plugins/passioncode/hooks/update-check.js +126 -0
- package/payload/plugins/passioncode/trust.json +6 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.4 - 2026-09-29
|
|
4
|
+
|
|
5
|
+
### Security
|
|
6
|
+
|
|
7
|
+
- The package is `@passioncode-ai/passioncode`, in the npm organisation that PassionCode.ai
|
|
8
|
+
owns. The bare name `passioncode` was unclaimed, so whoever registered it would have been
|
|
9
|
+
what the self-update checks. The hook now watches the scoped name, and `trust.json` names
|
|
10
|
+
the organisation's publisher.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Install and update with `npx @passioncode-ai/passioncode@latest update`.
|
|
15
|
+
- A `v*` tag releases and publishes from GitHub Actions (`.github/workflows/release.yml`),
|
|
16
|
+
the same pipeline as the adapter.
|
|
17
|
+
|
|
18
|
+
## 0.1.3 - 2026-09-29
|
|
19
|
+
|
|
20
|
+
- Observatory Log 0.12.2 (Observatory 0.8.1): the engine's `full agent` recognises the copy this
|
|
21
|
+
launcher installs instead of adding a second one, and `tracking-resources` no longer triggers on
|
|
22
|
+
creation requests.
|
|
23
|
+
|
|
24
|
+
### Security
|
|
25
|
+
|
|
26
|
+
- The session-start hook no longer runs whatever is published under the npm name
|
|
27
|
+
`passioncode`. The name was unclaimed (`npm view passioncode` answered E404), so
|
|
28
|
+
whoever registered it would have had code run on every machine with the plugin. The
|
|
29
|
+
daily probe now records the latest version together with its npm maintainers and
|
|
30
|
+
publishing account (`npm view passioncode version maintainers _npmUser --json`); the
|
|
31
|
+
hook updates only when every one of them is in `plugin/passioncode/trust.json`, and
|
|
32
|
+
otherwise spawns nothing and names who published it. The list ships empty: until the
|
|
33
|
+
maintainers add their npm account, nothing updates on its own.
|
|
34
|
+
- The update it runs is pinned — `npx --yes passioncode@<verified version> update` — so
|
|
35
|
+
what was checked is what runs, not whatever `@latest` points at a moment later.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- A failed update check is shown once in the session-start line instead of never; the
|
|
40
|
+
same error is not repeated every session.
|
|
41
|
+
- A background update is recorded (`updatingSince`) when it starts, so a second session
|
|
42
|
+
start within ten minutes does not start a second one.
|
|
43
|
+
- The old single-member marketplaces (`fabric-agent-adapter`, `observatory-log`) are
|
|
44
|
+
retired once the member's `@passioncode` plugin is verified and nothing else installed
|
|
45
|
+
comes from them: the `extraKnownMarketplaces` entry leaves `~/.claude/settings.json`
|
|
46
|
+
(backed up in the quarantine) and `claude plugin marketplace remove` unregisters it —
|
|
47
|
+
otherwise Claude Code re-registered it, with autoUpdate, and installing from it would
|
|
48
|
+
bring a second channel back. `passioncode restore` re-adds both. `status` names any
|
|
49
|
+
that are left.
|
|
50
|
+
- Vendoring no longer needs the maintainer's own checkouts: a member whose `checkout`
|
|
51
|
+
is absent is shallow-cloned from `repo` at `ref` over SSH (`--clone` or
|
|
52
|
+
`PASSIONCODE_VENDOR_CLONE=1` forces it). The payload's marketplace entries carry
|
|
53
|
+
`displayName` and `author`, and the `$schema` URLs are ones that resolve.
|
|
54
|
+
|
|
55
|
+
## 0.1.2 - 2026-09-29
|
|
56
|
+
|
|
57
|
+
- Fabric Agent Adapter 0.4.2: the kit's `LoopbackHTTPServer` binds without a reverse DNS
|
|
58
|
+
lookup, a garbled pid file reads as unknown, and every SKILL.md front matter parses as
|
|
59
|
+
strict YAML (0.4.1).
|
|
60
|
+
|
|
61
|
+
## 0.1.1 - 2026-09-29
|
|
62
|
+
|
|
63
|
+
- `update --dry-run` says the plan changed nothing instead of reporting it as done.
|
|
64
|
+
0.1.0 was tagged but never published.
|
|
65
|
+
|
|
66
|
+
## 0.1.0 - 2026-09-28
|
|
67
|
+
|
|
68
|
+
- First release: Fabric Agent Adapter 0.4.0 and Observatory Log 0.12.1 as Claude Code
|
|
69
|
+
plugins from one local marketplace, and through the `~/.agents/skills` hub for every
|
|
70
|
+
other agent.
|
|
71
|
+
- Replaces the old single-member plugin installs, and moves shadowing
|
|
72
|
+
`~/.claude/skills` entries and working-tree hub links into a restorable quarantine.
|
|
73
|
+
- Once-a-day update check at session start with a background update (`update.auto`).
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 PassionCode.ai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# passioncode
|
|
2
|
+
|
|
3
|
+
> **PassionCode.ai — The agent-agnostic operating system for AI-native teams.**
|
|
4
|
+
|
|
5
|
+
Every PassionCode.ai agent skill, for Claude Code and every other agent on your machine,
|
|
6
|
+
installed and updated as one set:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npx @passioncode-ai/passioncode@latest update
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Member | Skills |
|
|
13
|
+
|---|---|
|
|
14
|
+
| Fabric Agent Adapter | `creating-fabric-agents`, `adapting-projects-to-fabric`, `building-fabric-services` |
|
|
15
|
+
| Observatory Log | `explaining-changes`, `handling-secrets`, `tracking-resources` (+ its session hooks) |
|
|
16
|
+
| passioncode | the once-a-day update check |
|
|
17
|
+
|
|
18
|
+
Only PassionCode.ai products are members. Agents that people build for themselves stay
|
|
19
|
+
out of it, even when they implement Fabric protocols.
|
|
20
|
+
|
|
21
|
+
## How it installs
|
|
22
|
+
|
|
23
|
+
- **Claude Code** gets plugins from a local marketplace named `passioncode` at
|
|
24
|
+
`~/.passioncode/current` — no GitHub access needed. A plugin that was installed from
|
|
25
|
+
its old single-member marketplace (`fabric-agent-adapter@fabric-agent-adapter`,
|
|
26
|
+
`observatory-log@observatory-log`) is replaced once the new one is verified, and that
|
|
27
|
+
marketplace is unregistered and taken out of `settings.json` once nothing installed
|
|
28
|
+
comes from it.
|
|
29
|
+
- **Every other agent** (Cursor, Codex, Gemini, OpenCode, Kiro, Windsurf, Goose, …) gets
|
|
30
|
+
the same skills through `~/.agents/skills`, linked from each channel that exists on
|
|
31
|
+
the machine.
|
|
32
|
+
- Nothing is written to `~/.claude/skills`: a plain copy there shadows the plugin. Such
|
|
33
|
+
copies, and hub entries that pointed at a repository's working tree, are moved into
|
|
34
|
+
`~/.passioncode/quarantine/` — `npx passioncode restore` puts them back.
|
|
35
|
+
- Each version is an immutable release under `~/.passioncode/releases/<version>`.
|
|
36
|
+
|
|
37
|
+
## Staying current
|
|
38
|
+
|
|
39
|
+
At every Claude Code session start the `passioncode` plugin checks npm at most once a
|
|
40
|
+
day and, when a newer set is out **and every npm account that publishes it is in the
|
|
41
|
+
plugin's `trust.json`**, updates to that exact version in the background — it takes
|
|
42
|
+
effect in the next session. A version published by anyone else is named and not
|
|
43
|
+
installed ([SECURITY.md](SECURITY.md#the-self-update-and-who-it-trusts)).
|
|
44
|
+
`npx passioncode config set update.auto off` makes it only say so.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npx passioncode status # installed version, per-member channels, shadows
|
|
48
|
+
npx passioncode update --dry-run
|
|
49
|
+
npx passioncode uninstall
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Release (maintainers)
|
|
53
|
+
|
|
54
|
+
1. Tag every member at the version to ship; set `ref` to that tag in `family.json`.
|
|
55
|
+
2. Bump `version` in `package.json` and `plugin/passioncode/.claude-plugin/plugin.json`
|
|
56
|
+
(a test holds them and the CHANGELOG in sync), add the CHANGELOG section.
|
|
57
|
+
3. The npm account that publishes must be listed in `plugin/passioncode/trust.json`
|
|
58
|
+
(`npmPublishers`), and be the package's only kind of maintainer — otherwise every
|
|
59
|
+
installed hook refuses the update and says so.
|
|
60
|
+
4. Merge, then tag the merge commit `vX.Y.Z` and push the tag. `.github/workflows/release.yml`
|
|
61
|
+
validates, checks the tag against both manifests, creates the GitHub release from the
|
|
62
|
+
CHANGELOG section, vendors every member **from its own repository** at its pinned tag,
|
|
63
|
+
runs the tests, installs the packed tarball from a clean `HOME`, publishes
|
|
64
|
+
`@passioncode-ai/passioncode` and waits until npm serves it. It runs when the repository
|
|
65
|
+
variables `RELEASE_ENABLED` and `PUBLISH_NPMJS` are `true`; npm auth is trusted publishing
|
|
66
|
+
(OIDC) or the `NPM_TOKEN` secret; a private member needs `MEMBERS_READ_TOKEN`.
|
|
67
|
+
By hand, `npm publish` still works: `prepublishOnly` vendors from tags only (`--release`),
|
|
68
|
+
refuses credential-shaped strings and runs the tests.
|
|
69
|
+
5. `npx @passioncode-ai/passioncode@<version> update` on this machine; restart the agents.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
Report vulnerabilities privately to the maintainers of the `passioncode-ai` organization.
|
|
4
|
+
|
|
5
|
+
What `passioncode update` touches: `~/.passioncode/` (releases, state, quarantine,
|
|
6
|
+
logs); Claude Code's plugin registry through the `claude plugin` CLI only;
|
|
7
|
+
`~/.agents/skills/<member skill>` and `<agent channel>/<member skill>` links; and
|
|
8
|
+
`~/.claude/skills/<member skill>`, which it moves into the quarantine once the plugin
|
|
9
|
+
that replaces it is verified. For a member's old single-member marketplace
|
|
10
|
+
(`legacyMarketplaces` in `family.json`), once that plugin is verified and nothing else
|
|
11
|
+
installed comes from it, it also moves the `extraKnownMarketplaces` entry out of
|
|
12
|
+
`~/.claude/settings.json` (a copy of the file is kept in the quarantine) and runs
|
|
13
|
+
`claude plugin marketplace remove <name>`. It never deletes: every move is listed in
|
|
14
|
+
`~/.passioncode/quarantine/<run>/moved.json` and undone by `passioncode restore`.
|
|
15
|
+
|
|
16
|
+
## The self-update and who it trusts
|
|
17
|
+
|
|
18
|
+
The SessionStart hook reads `~/.passioncode/state.json` and, at most once a day, starts
|
|
19
|
+
`npm view @passioncode-ai/passioncode version maintainers _npmUser --json`, detached, logging to
|
|
20
|
+
`~/.passioncode/logs/`. It records the latest version, the package's npm maintainers
|
|
21
|
+
and the account that published that version.
|
|
22
|
+
|
|
23
|
+
The hook installs a newer version on its own only when all of these hold:
|
|
24
|
+
|
|
25
|
+
- `update.auto` is on (the default);
|
|
26
|
+
- the recorded maintainers are not empty, and every maintainer **and** the publishing
|
|
27
|
+
account is listed in `trust.json` inside the plugin (`npmPublishers`);
|
|
28
|
+
- the version is a plain `x.y.z`.
|
|
29
|
+
|
|
30
|
+
It then runs `npx --yes @passioncode-ai/passioncode@<that exact version> update --quiet`, detached, so
|
|
31
|
+
the version that was checked is the version that runs. In every other case it spawns
|
|
32
|
+
nothing: a version from an account outside the list is reported in one line naming the
|
|
33
|
+
account ("… not a trusted PassionCode publisher — not installing"); a name nobody has
|
|
34
|
+
published (npm E404) is silent; a failed check is shown once.
|
|
35
|
+
|
|
36
|
+
`trust.json` ships **empty**, so auto-update stays inert until the maintainers name the
|
|
37
|
+
npm account(s) that publish PassionCode. Adding an account there is a release decision:
|
|
38
|
+
it is reviewed like code and ships in the package. A person who wants no background
|
|
39
|
+
updates at all runs `npx passioncode config set update.auto off`.
|
|
40
|
+
|
|
41
|
+
The published package carries skill text only; the vendor step refuses to build when it
|
|
42
|
+
finds a credential-shaped string, or when the self plugin has no valid `trust.json`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
const L = require('../lib/launcher');
|
|
4
|
+
|
|
5
|
+
const HELP = `passioncode — every PassionCode.ai skill, for every agent on this machine
|
|
6
|
+
|
|
7
|
+
npx @passioncode-ai/passioncode@latest update [--dry-run] [--json] install or update the whole set
|
|
8
|
+
npx passioncode status [--json] what is installed where
|
|
9
|
+
npx passioncode restore put back what the last update moved aside
|
|
10
|
+
npx passioncode config set update.auto on|off background updates at session start
|
|
11
|
+
npx passioncode uninstall remove the set (quarantined items stay restorable)
|
|
12
|
+
|
|
13
|
+
Claude Code gets plugins from the local "passioncode" marketplace; other agents get
|
|
14
|
+
the same skills through ~/.agents/skills. Restart your agent after an update.`;
|
|
15
|
+
|
|
16
|
+
function main(argv) {
|
|
17
|
+
const [cmd = 'help', ...rest] = argv;
|
|
18
|
+
const json = rest.includes('--json');
|
|
19
|
+
const quiet = rest.includes('--quiet');
|
|
20
|
+
const out = (value, text) => process.stdout.write(json ? JSON.stringify(value, null, 2) + '\n' : text + '\n');
|
|
21
|
+
try {
|
|
22
|
+
if (cmd === 'update' || cmd === 'install') {
|
|
23
|
+
const r = L.update({ dryRun: rest.includes('--dry-run') });
|
|
24
|
+
const failed = r.steps.filter((s) => s.outcome === 'failed');
|
|
25
|
+
if (!quiet || failed.length) {
|
|
26
|
+
out(r, [
|
|
27
|
+
...r.steps.map((s) => `${s.outcome.padEnd(8)} ${s.kind.padEnd(11)} ${s.detail}${s.error ? `\n ${s.error}` : ''}`),
|
|
28
|
+
'',
|
|
29
|
+
failed.length ? `${failed.length} step(s) failed — the rest were applied. Re-run after fixing, or \`passioncode restore\`.` : rest.includes('--dry-run') ? `Plan for PassionCode.ai ${r.version}: nothing was changed.` : `PassionCode.ai ${r.version}: done. Restart your agent — skills load at session start.`,
|
|
30
|
+
r.moved.length ? `${r.moved.length} item(s) moved aside, restorable with \`passioncode restore\`.` : '',
|
|
31
|
+
].filter(Boolean).join('\n'));
|
|
32
|
+
}
|
|
33
|
+
return failed.length ? 1 : 0;
|
|
34
|
+
}
|
|
35
|
+
if (cmd === 'status') {
|
|
36
|
+
const s = L.status();
|
|
37
|
+
out(s, [
|
|
38
|
+
`installed ${s.installed || 'nothing'} · package ${s.package || '?'} · latest on npm ${s.latest || 'not checked'}${s.auto ? ' · auto-update on' : ' · auto-update off'}`,
|
|
39
|
+
...s.members.map((m) => `${m.name.padEnd(22)} ${String(m.version).padEnd(8)} claude: ${m.claude}${m.legacy.length ? ` (+ legacy ${m.legacy.join(', ')})` : ''}${m.legacyMarketplaces.length ? ` (+ legacy marketplace ${m.legacyMarketplaces.join(', ')})` : ''} · hub: ${m.hub.filter((h) => h.ok).length}/${m.hub.length}${m.shadows.length ? ` · SHADOW: ${m.shadows.join(', ')}` : ''}`),
|
|
40
|
+
].join('\n'));
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
if (cmd === 'restore') {
|
|
44
|
+
const r = L.restore();
|
|
45
|
+
out(r, r.length ? `Restored:\n ${r.join('\n ')}` : 'Nothing to restore.');
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
if (cmd === 'config' && rest[0] === 'set') {
|
|
49
|
+
out(L.setConfig({ key: rest[1], value: rest[2] }), `update.auto = ${rest[2]}`);
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
if (cmd === 'uninstall') {
|
|
53
|
+
const r = L.uninstall();
|
|
54
|
+
out(r, r.length ? `Removed:\n ${r.join('\n ')}` : 'Nothing was installed.');
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
process.stdout.write(HELP + '\n');
|
|
58
|
+
return cmd === 'help' || cmd === '--help' || cmd === '-h' ? 0 : 2;
|
|
59
|
+
} catch (error) {
|
|
60
|
+
process.stderr.write(`passioncode: ${error.message}\n`);
|
|
61
|
+
return 1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
process.exit(main(process.argv.slice(2)));
|
package/family.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "passioncode",
|
|
3
|
+
"owner": "passioncode-ai",
|
|
4
|
+
"displayName": "PassionCode.ai",
|
|
5
|
+
"description": "Every PassionCode.ai agent skill, for Claude Code and every other agent on the machine, updated as one set.",
|
|
6
|
+
"members": [
|
|
7
|
+
{
|
|
8
|
+
"name": "fabric-agent-adapter",
|
|
9
|
+
"displayName": "Fabric Agent Adapter",
|
|
10
|
+
"repo": "passioncode-ai/fabric-agent-adapter",
|
|
11
|
+
"checkout": "~/DATA/fabric-agent-adapter",
|
|
12
|
+
"ref": "v0.4.2",
|
|
13
|
+
"kind": "plugin",
|
|
14
|
+
"path": "plugins/fabric-agent-adapter",
|
|
15
|
+
"legacyPluginIds": [
|
|
16
|
+
"fabric-agent-adapter@fabric-agent-adapter"
|
|
17
|
+
],
|
|
18
|
+
"legacyMarketplaces": [
|
|
19
|
+
"fabric-agent-adapter"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "observatory-log",
|
|
24
|
+
"displayName": "Observatory Log",
|
|
25
|
+
"repo": "passioncode-ai/project-observatory-dashboard",
|
|
26
|
+
"checkout": "~/DATA/project-observatory-open-source",
|
|
27
|
+
"ref": "v0.8.1",
|
|
28
|
+
"kind": "plugin",
|
|
29
|
+
"path": "observatory/engine/skill/plugins/observatory-log",
|
|
30
|
+
"legacyPluginIds": [
|
|
31
|
+
"observatory-log@observatory-log"
|
|
32
|
+
],
|
|
33
|
+
"legacyMarketplaces": [
|
|
34
|
+
"observatory-log"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "passioncode",
|
|
39
|
+
"displayName": "PassionCode.ai",
|
|
40
|
+
"kind": "self",
|
|
41
|
+
"path": "plugin/passioncode",
|
|
42
|
+
"description": "Keeps the PassionCode.ai set current: a once-a-day check at session start and a background update."
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|