@jini-ai/agent-plugins 0.4.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 +57 -0
- package/LICENSE +201 -0
- package/README.md +261 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/lifecycle/activation.d.ts +177 -0
- package/dist/lifecycle/activation.js +874 -0
- package/dist/lifecycle/bundled-digests.d.ts +27 -0
- package/dist/lifecycle/bundled-digests.js +149 -0
- package/dist/lifecycle/bundled-source-archive.d.ts +13 -0
- package/dist/lifecycle/bundled-source-archive.js +96 -0
- package/dist/lifecycle/capability-projection.d.ts +11 -0
- package/dist/lifecycle/capability-projection.js +60 -0
- package/dist/lifecycle/fetch-archive.d.ts +88 -0
- package/dist/lifecycle/fetch-archive.js +215 -0
- package/dist/lifecycle/index.d.ts +174 -0
- package/dist/lifecycle/index.js +94 -0
- package/dist/lifecycle/install-from-url.d.ts +78 -0
- package/dist/lifecycle/install-from-url.js +73 -0
- package/dist/lifecycle/install.d.ts +52 -0
- package/dist/lifecycle/install.js +286 -0
- package/dist/lifecycle/layout.d.ts +20 -0
- package/dist/lifecycle/layout.js +30 -0
- package/dist/lifecycle/manifest.d.ts +214 -0
- package/dist/lifecycle/manifest.js +409 -0
- package/dist/lifecycle/mcp-provisioning.d.ts +20 -0
- package/dist/lifecycle/mcp-provisioning.js +14 -0
- package/dist/lifecycle/node.d.ts +11 -0
- package/dist/lifecycle/node.js +34 -0
- package/dist/lifecycle/package-paths.d.ts +12 -0
- package/dist/lifecycle/package-paths.js +74 -0
- package/dist/lifecycle/ports.d.ts +81 -0
- package/dist/lifecycle/ports.js +2 -0
- package/dist/lifecycle/resolve-agent-plugin-refs.d.ts +18 -0
- package/dist/lifecycle/resolve-agent-plugin-refs.js +143 -0
- package/dist/lifecycle/retire-bundled.d.ts +36 -0
- package/dist/lifecycle/retire-bundled.js +69 -0
- package/dist/lifecycle/search.d.ts +23 -0
- package/dist/lifecycle/search.js +50 -0
- package/dist/lifecycle/seed-bundled.d.ts +29 -0
- package/dist/lifecycle/seed-bundled.js +118 -0
- package/dist/lifecycle/set-enabled.d.ts +21 -0
- package/dist/lifecycle/set-enabled.js +39 -0
- package/dist/lifecycle/trusted-plugin-files.d.ts +29 -0
- package/dist/lifecycle/trusted-plugin-files.js +82 -0
- package/dist/lifecycle/types.d.ts +20 -0
- package/dist/lifecycle/types.js +2 -0
- package/dist/lifecycle/uninstall.d.ts +41 -0
- package/dist/lifecycle/uninstall.js +148 -0
- package/dist/lifecycle/yauzl-archive-reader.d.ts +62 -0
- package/dist/lifecycle/yauzl-archive-reader.js +73 -0
- package/dist/manifest.d.ts +68 -0
- package/dist/manifest.js +38 -0
- package/package.json +92 -0
- package/ui-ux-design/com.anthropic.claude-code/hooks/hooks.json +4 -0
- package/ui-ux-design/mcp.json +4 -0
- package/ui-ux-design/plugin.json +5 -0
- package/ui-ux-design/skills/frontend-accessibility/SKILL.md +60 -0
- package/ui-ux-design/skills/gstack-design/SKILL.md +53 -0
- package/ui-ux-design/skills/gstack-design/references/consultation.md +30 -0
- package/ui-ux-design/skills/gstack-design/references/html.md +29 -0
- package/ui-ux-design/skills/gstack-design/references/review.md +28 -0
- package/ui-ux-design/skills/gstack-design/references/shotgun.md +33 -0
- package/ui-ux-design/skills/gstack-design/references/upstream-notes.md +23 -0
- package/ui-ux-design/skills/interface-design/ORIGINAL.md +16 -0
- package/ui-ux-design/skills/interface-design/SKILL.md +41 -0
- package/ui-ux-design/skills/interface-design/references/commands/audit.md +40 -0
- package/ui-ux-design/skills/interface-design/references/commands/critique.md +21 -0
- package/ui-ux-design/skills/interface-design/references/commands/extract.md +34 -0
- package/ui-ux-design/skills/interface-design/references/commands/init.md +31 -0
- package/ui-ux-design/skills/interface-design/references/commands/status.md +22 -0
- package/ui-ux-design/skills/interface-design/references/examples/system-precision.md +29 -0
- package/ui-ux-design/skills/interface-design/references/examples/system-warmth.md +29 -0
- package/ui-ux-design/skills/interface-design/references/system-template.md +57 -0
- package/ui-ux-design/skills/shadcn-ui/README.md +244 -0
- package/ui-ux-design/skills/shadcn-ui/SKILL.md +326 -0
- package/ui-ux-design/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
- package/ui-ux-design/skills/shadcn-ui/examples/data-table.tsx +313 -0
- package/ui-ux-design/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
- package/ui-ux-design/skills/shadcn-ui/resources/component-catalog.md +481 -0
- package/ui-ux-design/skills/shadcn-ui/resources/customization-guide.md +516 -0
- package/ui-ux-design/skills/shadcn-ui/resources/migration-guide.md +463 -0
- package/ui-ux-design/skills/shadcn-ui/resources/setup-guide.md +412 -0
- package/ui-ux-design/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
- package/ui-ux-design/skills/ui-ux-design/SKILL.md +77 -0
- package/ui-ux-design/skills/ui-ux-design/references/brand-and-voice.md +72 -0
- package/ui-ux-design/skills/ui-ux-design/references/components-and-states.md +107 -0
- package/ui-ux-design/skills/ui-ux-design/references/delight-and-motion.md +65 -0
- package/ui-ux-design/skills/ui-ux-design/references/foundations.md +144 -0
- package/ui-ux-design/skills/ui-ux-design/references/inclusive-ai-imagery.md +57 -0
- package/ui-ux-design/skills/ui-ux-design/references/kole-jain-uiux-concepts.md +102 -0
- package/ui-ux-design/skills/ui-ux-design/references/openai-frontend-skill.md +139 -0
- package/ui-ux-design/skills/ui-ux-design/references/premium-ui.md +63 -0
- package/ui-ux-design/skills/ui-ux-design/references/research-and-validation.md +78 -0
- package/ui-ux-design/skills/ui-ux-design/references/sam-crawford-premium-websites.md +93 -0
- package/ui-ux-design/skills/ui-ux-design/references/self-made-web-designer-core-skills.md +123 -0
- package/ui-ux-design/skills/ui-ux-design/references/visual-storytelling.md +57 -0
- package/ui-ux-design/skills/vercel-web-design-guidelines/SKILL.md +39 -0
- package/ui-ux-design/skills/web-compliance/SKILL.md +129 -0
- package/ui-ux-design/skills/web-compliance/references/audit-evidence.md +59 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased — lifecycle consumer adoption
|
|
4
|
+
|
|
5
|
+
- Expose narrow `createAgentPluginActivations(required, optional)` composition without
|
|
6
|
+
requiring unrelated network, layout or federation ports.
|
|
7
|
+
- Supply raw transport entries to the optional metadata reader, including servers with
|
|
8
|
+
no declared extension, so hosts can translate legacy fields through the shared validators.
|
|
9
|
+
Malformed declared extensions still exclude the server before translation.
|
|
10
|
+
- Preserve the original lifecycle validation, integrity, streaming, symlink and durability
|
|
11
|
+
rationale alongside the canonical implementations; move the URL-install real-HTTP/ZIP
|
|
12
|
+
integration suite into the package and add paired metadata-translation regression cases.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Unreleased — lifecycle test compilation
|
|
16
|
+
|
|
17
|
+
- Preserve copied test timeouts and conditional skips through Vitest registration.
|
|
18
|
+
- Match the native process signal mock type, retain assertion-based result narrowing, and allow explicitly unset delivery-mode environment fixtures.
|
|
19
|
+
|
|
20
|
+
## 0.4.0 — 2026-10-02
|
|
21
|
+
|
|
22
|
+
### BREAKING
|
|
23
|
+
|
|
24
|
+
- Generic locking moved to platform/fs/file-lock, lifecycle ports use core primitives, and the product-specific theme plugin was evicted. The neutral ui-ux-design plugin remains bundled.
|
|
25
|
+
- Distribution includes runtime output, release documentation and required assets only. Process records and per-job neutrality checks are no longer part of the package surface.
|
|
26
|
+
|
|
27
|
+
## Unreleased — canonical lifecycle effects
|
|
28
|
+
|
|
29
|
+
### BREAKING
|
|
30
|
+
|
|
31
|
+
- Product-specific theme assets are no longer bundled or exported; products own these assets.
|
|
32
|
+
- Remove the local exclusive lock, lock passthroughs/errors/constants from lifecycle, and filesystem/handle wrapper factory/types. Use platform locks directly.
|
|
33
|
+
- Lifecycle accepts native fs/promises operations and FileHandles. Clocks extend core Clock (`nowMs()`), IDs extend IdGenerator (`newId()`) with random().
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- Activation explicitly retains 15000ms timeout and 10000ms staleness through the shared lock; polling is now fixed at 10ms and timeout uses core wall-clock elapsed time.
|
|
38
|
+
- Shared ownership checks bind token and inode/device; release preserves failed critical-section errors.
|
|
39
|
+
- Native liveness treats only ESRCH as death; unknown probe failures never authorize stale-owner eviction.
|
|
40
|
+
- Archive-error specification now matches safe generic transport/body causes and redacted URL diagnostics.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## Unreleased
|
|
44
|
+
|
|
45
|
+
- Add the host-injected plugin lifecycle on `./lifecycle`: archive installation, activation and locks, bundled digests and seeding/retirement, trusted files, reference resolution and local ranking.
|
|
46
|
+
- Add typed Agent Plugins 1.0.0 manifest extension readers on `./manifest`, with a required namespace and optional host metadata translation. Inline transport fields cannot supply reviewed read metadata.
|
|
47
|
+
- Add explicit MCP provisioning ports and helpers. Federation stays in the host; this package has no dependency on `@jini-ai/mcp`.
|
|
48
|
+
- Add opt-in native effects (`./lifecycle/node`) and a yauzl adapter (`./lifecycle/yauzl`) with an optional peer, supplied by the host.
|
|
49
|
+
- Preserve existing exports and the package version. Tests and verification are deferred by owner directive.
|
|
50
|
+
|
|
51
|
+
- Integrate `./manifest`, `./lifecycle`, `./lifecycle/node` and `./lifecycle/yauzl` barrels and runtime metadata; add object structural validators to the root/manifest and an instrumentable node filesystem adapter.
|
|
52
|
+
- Preserve standard object-shaped manifest authors and legacy string authors; remove the malformed optional archive-entry union and module-namespace type.
|
|
53
|
+
- BREAKING (new lifecycle APIs): filesystem and file-handle ports, fetch ports, archive entries/readers, lifecycle error constructors and callbacks now accept required/optional objects. Callers of the unpublished extraction must update their adapters.
|
|
54
|
+
- BREAKING (new lifecycle APIs): optional lifecycle observers/translators, MCP pluginManifest, digest clock overrides and trusted-file query options belong in the second object. Legacy root validator signatures and all existing export names remain available.
|
|
55
|
+
|
|
56
|
+
- Restore ten real-ZIP lifecycle parity cases using the actual optional yauzl peer and a test-only yazl writer; retain injected-reader tests and add malformed-archive coverage.
|
|
57
|
+
- Redact credentials, query strings and fragments from archive failure diagnostics. Unparseable URLs use a fixed placeholder; transport messages/causes use safe text, body transport errors use `REQUEST_FAILED`, and HTTP reason phrases use standard status labels.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for describing the origin of the Work and
|
|
141
|
+
reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Support. While redistributing the Work or
|
|
166
|
+
Derivative Works thereof, You may choose to offer, and charge a
|
|
167
|
+
fee for, acceptance of support, warranty, indemnity, or other
|
|
168
|
+
liability obligations and/or rights consistent with this License.
|
|
169
|
+
However, in accepting such obligations, You may act only on Your
|
|
170
|
+
own behalf and on Your sole responsibility, not on behalf of any
|
|
171
|
+
other Contributor, and only if You agree to indemnify, defend,
|
|
172
|
+
and hold each Contributor harmless for any liability incurred by,
|
|
173
|
+
or claims asserted against, such Contributor by reason of your
|
|
174
|
+
accepting any such warranty or support.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2026 Open Design contributors
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# `@jini-ai/agent-plugins`
|
|
2
|
+
|
|
3
|
+
> **Leon, this is you from the past. Do not try to merge `plugins` and `agent-plugins`.**
|
|
4
|
+
|
|
5
|
+
Support for **Agent Plugins**, an open, vendor-neutral spec (v1.0.0, published 2026-08-06) for
|
|
6
|
+
bundling Agent Skills and MCP servers into one portable directory. Published by a Technical
|
|
7
|
+
Steering Committee with maintainers from Amazon, Cursor, Google, Microsoft, OpenAI, and Vercel.
|
|
8
|
+
Source: https://developers.googleblog.com/agent-plugins-package-your-skills-tools-and-more/
|
|
9
|
+
|
|
10
|
+
If you are an agent reading this cold: this document is written so you don't need the source
|
|
11
|
+
article to understand the shape of a plugin or what this package provides. `PluginManifest` and
|
|
12
|
+
`McpManifest` (exported from the package root) type every field confirmed against the published
|
|
13
|
+
schemas (`AGENT_PLUGINS_SCHEMA_URL`, `AGENT_PLUGINS_MCP_SCHEMA_URL`), not inferred — both still
|
|
14
|
+
carry an index signature in case a future schema revision adds a field neither type has caught up
|
|
15
|
+
to yet.
|
|
16
|
+
|
|
17
|
+
**Extracted 2026-08-18** from `@jini-ai/plugins`, where this content used to live nested under a
|
|
18
|
+
`./agent-plugins` subpath. That package now only reserves the unrelated, unimplemented `./host`
|
|
19
|
+
format (Jini's own host-extension plugin system — a different concept entirely, see "Not this
|
|
20
|
+
package" below) — everything Agent-Plugins-shaped moved here, one level up, since there was no
|
|
21
|
+
longer a second format sharing the namespace to disambiguate against.
|
|
22
|
+
|
|
23
|
+
## The problem this solves
|
|
24
|
+
|
|
25
|
+
Before this spec, shipping the same skill or MCP server to multiple agent clients meant
|
|
26
|
+
maintaining incompatible copies — every client used a different manifest format and directory
|
|
27
|
+
layout ("fork and drift"). Agent Plugins standardizes the packaging format only; each client still
|
|
28
|
+
decides its own install mechanism, permission model, and sandboxing.
|
|
29
|
+
|
|
30
|
+
## What a plugin looks like on disk
|
|
31
|
+
|
|
32
|
+
A plugin is a directory. Example (this package's own bundled plugin, `ui-ux-design/`):
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
ui-ux-design/
|
|
36
|
+
├── plugin.json # manifest — minimally { "$schema": ..., "name": "ui-ux-design" }
|
|
37
|
+
├── mcp.json # MCP server declarations (empty here — example only)
|
|
38
|
+
├── skills/
|
|
39
|
+
│ └── <skill-name>/
|
|
40
|
+
│ ├── SKILL.md # Agent Skills format: frontmatter (name, description) + body
|
|
41
|
+
│ ├── references/ # optional supporting docs the skill body links out to
|
|
42
|
+
│ ├── examples/ # optional
|
|
43
|
+
│ └── scripts/ # optional
|
|
44
|
+
└── com.anthropic.claude-code/ # client extension directory (§8.2) — example only
|
|
45
|
+
└── hooks/
|
|
46
|
+
└── hooks.json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`plugin.json` optional fields beyond `$schema`/`name`: `version`, `description`, `author`
|
|
50
|
+
(`{name, email, url}`), `homepage`, `repository`, `license`, `keywords` (string array), and
|
|
51
|
+
`extensions` — an object keyed by reverse-domain client namespace (e.g. `com.example.client`) for
|
|
52
|
+
client-specific data the schema assigns no semantics to.
|
|
53
|
+
|
|
54
|
+
`mcp.json` declares MCP servers under `mcpServers`, one of three explicit transport shapes — no
|
|
55
|
+
guessing which one a client should assume:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
|
|
60
|
+
"mcpServers": {
|
|
61
|
+
"local-validator": {
|
|
62
|
+
"type": "stdio",
|
|
63
|
+
"command": "./bin/validator",
|
|
64
|
+
"args": ["--data", "${PLUGIN_DATA}/validator"],
|
|
65
|
+
"env": { "CONFIG": "${PLUGIN_ROOT}/config.json" },
|
|
66
|
+
"cwd": "${PLUGIN_ROOT}"
|
|
67
|
+
},
|
|
68
|
+
"deployment-api": {
|
|
69
|
+
"type": "streamable-http",
|
|
70
|
+
"url": "https://deploy.example.com/mcp",
|
|
71
|
+
"headers": { "X-Tenant": "public-tenant" }
|
|
72
|
+
},
|
|
73
|
+
"legacy-events": {
|
|
74
|
+
"type": "sse",
|
|
75
|
+
"url": "https://legacy.example.com/sse"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`ui-ux-design/mcp.json` ships with an empty `mcpServers: {}` — a valid, working
|
|
82
|
+
example of the file's shape, not a real server declaration. Replace it (or delete it — `mcp.json`
|
|
83
|
+
is optional) the moment this plugin actually needs one.
|
|
84
|
+
|
|
85
|
+
A plugin can also have reverse-domain-namespaced directories at its root — §8.2 of the
|
|
86
|
+
specification: "the extension directory for a namespace is the top-level directory named after
|
|
87
|
+
it," contents entirely client-defined, and clients that don't recognize a namespace simply ignore
|
|
88
|
+
it. The spec's own example is `com.example.client/hooks/hooks.json` — using `example.com` the same
|
|
89
|
+
way an RFC does, since the spec assigns no real namespace to any actual client and publishes no
|
|
90
|
+
namespace registry. `ui-ux-design/com.anthropic.claude-code/hooks/hooks.json`
|
|
91
|
+
follows the same shape with a real client substituted in: `com.anthropic.claude-code` is a
|
|
92
|
+
plausible reverse-DNS guess (Anthropic controls `anthropic.com`; Claude Code is the client this
|
|
93
|
+
whole package was built inside), **not** a confirmed or registered identifier — nothing publishes
|
|
94
|
+
one. Content is illustrative only, per the same "no portable semantics" rule.
|
|
95
|
+
|
|
96
|
+
Discovery (how a client finds/installs a plugin in the first place) is explicitly out of scope for
|
|
97
|
+
the packaging spec itself — it lives in separate layers (Agentic Resource Discovery, an AI
|
|
98
|
+
Catalog format) that this package does not implement.
|
|
99
|
+
|
|
100
|
+
## What's in this package
|
|
101
|
+
|
|
102
|
+
| export | runtime | contents |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| `.` (root) | universal | `PluginManifest`/`McpManifest` types, `validatePluginManifest({ value })`/`validateMcpManifest({ value })` structural validators (plus compatible `isPluginManifest(value)`/`isMcpManifest(value)` wrappers), and the known path constants (`PLUGIN_MANIFEST_FILENAME`, `PLUGIN_SKILLS_DIRNAME`, `PLUGIN_MCP_MANIFEST_FILENAME`). No filesystem access, no DOM. |
|
|
105
|
+
| `./manifest` | universal | Strict manifest/MCP parsing and typed namespace readers; object structural validators are also re-exported here. |
|
|
106
|
+
| `./lifecycle` | node | Host-injected installation, activation, locks, digests, bundles, trusted files, reference resolution, ranking and MCP provisioning helpers. |
|
|
107
|
+
| `./lifecycle/node` | node | `createNodeAgentPluginEffects({})` opt-in native effects. |
|
|
108
|
+
| `./lifecycle/yauzl` | node | `createYauzlAgentPluginArchiveReader({ yauzl })`; the host supplies the optional peer library. |
|
|
109
|
+
| `./ui-ux-design/*` | — | Raw files of the bundled `ui-ux-design` plugin — static JSON/Markdown, not run through the TS build. |
|
|
110
|
+
|
|
111
|
+
The universal root handles structural validation. The separate Node lifecycle entry implements
|
|
112
|
+
local archive installation and host-owned activation policy; it does not implement remote catalog discovery.
|
|
113
|
+
|
|
114
|
+
## Not this package: `@jini-ai/plugins` (`./host`)
|
|
115
|
+
|
|
116
|
+
`@jini-ai/plugins` is a **different, sibling package** — Jini's own host-extension plugin format
|
|
117
|
+
(manifest + `setup()` + hooks + activation), unrelated to the third-party Agent Plugins spec this
|
|
118
|
+
package supports. Do not confuse the two — "agent plugins" (this package, a
|
|
119
|
+
public spec) and "Jini plugins" (`@jini-ai/plugins`'s `./host`, Jini's own unbuilt format) share
|
|
120
|
+
the word "plugin" and nothing else.
|
|
121
|
+
|
|
122
|
+
## Bundled plugins
|
|
123
|
+
|
|
124
|
+
Real, install-ready plugin directories shipped alongside the code — not illustrative examples.
|
|
125
|
+
Each lives at the package root under **its own name** (`ui-ux-design/`).
|
|
126
|
+
Plugins live at the package root rather than inside `src/` because `src/` is the TypeScript
|
|
127
|
+
compile root (`rootDir: "src"`, `include: ["src"]`) — a plugin's skill trees can carry files
|
|
128
|
+
(`.tsx` examples, etc.) that are illustrative content, not package code, and putting them under
|
|
129
|
+
`src/` makes `tsc` try to compile them (measured, on `ui-ux-design`: 207 errors from the three
|
|
130
|
+
`shadcn-ui/examples/*.tsx` files alone). Static content and compiler input are kept in separate
|
|
131
|
+
trees on purpose.
|
|
132
|
+
|
|
133
|
+
### `ui-ux-design/`
|
|
134
|
+
|
|
135
|
+
Bundles the AI-Dev-Shop Web Design agent's full skill set (per its `agents/web-design/skills.md`
|
|
136
|
+
persona and the `framework/routing/skills-registry.md` ownership mapping) into one portable plugin:
|
|
137
|
+
|
|
138
|
+
- `ui-ux-design` — design-foundations (tokens, typography, spacing, breakpoints, component state
|
|
139
|
+
matrix) *and* first-impression polish, scanning hierarchy, conversion-focused visual signals —
|
|
140
|
+
one skill, not two. AI-Dev-Shop merged its former separate `ux-design` and `premium-ui` skills
|
|
141
|
+
into this single `ui-ux-design` skill; this sample tracks that merge instead of carrying the two
|
|
142
|
+
predecessor skills as stale copies (see git history for the 2026-08-12 consolidation).
|
|
143
|
+
- `interface-design` — repeatable, memory-consistent visual systems for dashboards/admin panels/apps
|
|
144
|
+
- `gstack-design` — manual four-mode workflow (consultation, shotgun, html, review)
|
|
145
|
+
- `frontend-accessibility` — WCAG 2.1 AA checklist
|
|
146
|
+
- `vercel-web-design-guidelines` — Vercel Web Interface Guidelines auditor
|
|
147
|
+
- `shadcn-ui` — shadcn/ui (Radix + Tailwind) component discovery/integration guidance
|
|
148
|
+
- `web-compliance` — legal/compliance checkpoints for public-facing UX flows
|
|
149
|
+
|
|
150
|
+
Each skill directory is a verbatim copy of the corresponding `AI-Dev-Shop/skills/<name>/` tree —
|
|
151
|
+
copied rather than referenced, because the whole point of a plugin is that it is self-contained and
|
|
152
|
+
portable to a host that has never heard of AI-Dev-Shop. `AI-Dev-Shop/agents/web-design/skills.md`
|
|
153
|
+
itself (the persona that composes these skills into one role) is not bundled — it is ADS-specific
|
|
154
|
+
routing glue, not a portable skill.
|
|
155
|
+
|
|
156
|
+
Consumers may read bundled raw assets through the public wildcard subpath. Product-specific
|
|
157
|
+
plugin assets are owned and shipped by their product, outside this library.
|
|
158
|
+
|
|
159
|
+
## Scripts
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
pnpm --filter @jini-ai/agent-plugins build
|
|
163
|
+
pnpm --filter @jini-ai/agent-plugins typecheck
|
|
164
|
+
pnpm --filter @jini-ai/agent-plugins test
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The build and typecheck include lifecycle test sources. Copied Node test options are
|
|
168
|
+
translated to Vitest registration, preserving per-test timeouts and platform skip conditions.
|
|
169
|
+
|
|
170
|
+
## Adding another bundled plugin
|
|
171
|
+
|
|
172
|
+
1. Create `<plugin-name>/plugin.json` at the package root with at least
|
|
173
|
+
`{ "$schema": AGENT_PLUGINS_SCHEMA_URL, "name": "<plugin-name>" }`. Do **not** put it under
|
|
174
|
+
`src/` — see "Bundled plugins" above for why.
|
|
175
|
+
2. Add `<plugin-name>/skills/<skill-name>/SKILL.md` per skill (plus any `references/`,
|
|
176
|
+
`examples/`, `scripts/` the skill needs).
|
|
177
|
+
3. Register it in `package.json`: an `exports` key `"./<plugin-name>/*": "./<plugin-name>/*"`, a
|
|
178
|
+
matching `jini.entries` key (the R8 guard requires every export to have one), and a
|
|
179
|
+
`files` entry.
|
|
180
|
+
4. Add coverage in `src/__tests__/manifest.test.ts` following the `ui-ux-design plugin` block — assert the manifest validates and the expected skill
|
|
181
|
+
directories exist.
|
|
182
|
+
|
|
183
|
+
## Lifecycle API and ports
|
|
184
|
+
|
|
185
|
+
New public callables use `(requiredArgs, optionalArgs)`, with effects supplied as ports.
|
|
186
|
+
Create and retain one lifecycle per host context:
|
|
187
|
+
|
|
188
|
+
```ts
|
|
189
|
+
import { createAgentPluginLifecycle, createAgentPluginLayout } from '@jini-ai/agent-plugins/lifecycle';
|
|
190
|
+
import { createNodeAgentPluginEffects } from '@jini-ai/agent-plugins/lifecycle/node';
|
|
191
|
+
|
|
192
|
+
const layout = createAgentPluginLayout({ root: pluginRoot });
|
|
193
|
+
const lifecycle = createAgentPluginLifecycle({
|
|
194
|
+
...createNodeAgentPluginEffects({}),
|
|
195
|
+
layout,
|
|
196
|
+
productName,
|
|
197
|
+
extensionNamespace,
|
|
198
|
+
bundledArchiveMagic,
|
|
199
|
+
deliveryMode,
|
|
200
|
+
seededEnabledPluginIds,
|
|
201
|
+
retiredBundledPlugins,
|
|
202
|
+
formatPluginToolPointer,
|
|
203
|
+
mcpProvisioning,
|
|
204
|
+
outboundGuard,
|
|
205
|
+
fetch: ({ url }, options) => fetch(url, options),
|
|
206
|
+
}, { onEvent, readServerMetadata });
|
|
207
|
+
|
|
208
|
+
const downloaded = await lifecycle.fetchAgentPluginArchive({ url }, { signal });
|
|
209
|
+
const installed = await lifecycle.installAgentPlugin({
|
|
210
|
+
archive: downloaded.archive,
|
|
211
|
+
expectedSha256: downloaded.sha256,
|
|
212
|
+
archiveReader,
|
|
213
|
+
layout,
|
|
214
|
+
workspaceId,
|
|
215
|
+
});
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
All names in the example are supplied by the host. There is no default storage root,
|
|
219
|
+
namespace, product name, bundle policy or archive framing. Preserve your existing framing
|
|
220
|
+
when adopting the package. Prefer pinned hashes for remote installations; trust-on-first-use
|
|
221
|
+
is an explicit choice in `installAgentPluginFromUrl`.
|
|
222
|
+
|
|
223
|
+
Filesystem effects use native `node:fs/promises` signatures and native FileHandles. Inject
|
|
224
|
+
instrumented native effects directly through `filesystem`; `createNodeAgentPluginEffects({})`
|
|
225
|
+
provides the default. Clocks extend core `Clock` with `monotonicMs()` and `sleep({ ms })`;
|
|
226
|
+
IDs extend core `IdGenerator` with `random()`.
|
|
227
|
+
|
|
228
|
+
Generic locks are imported directly from `@jini-ai/platform/fs/file-lock`. Lifecycle activation
|
|
229
|
+
uses `withFileLock({ lockPath, run }, { timeoutMs: 15000, staleMs: 10000, pollMs: 10, ...effects })`.
|
|
230
|
+
Lock helpers, errors and constants are no longer members/exports of the lifecycle API.
|
|
231
|
+
|
|
232
|
+
Archive readers implement `entries({ archive })`; file entries expose `openReadStream({})`.
|
|
233
|
+
`createYauzlAgentPluginArchiveReader({ yauzl })` accepts the native library protocol explicitly;
|
|
234
|
+
no peer library is imported by the core. Fetch ports implement `fetch({ url }, requestOptions)`.
|
|
235
|
+
The outbound guard runs before every request and redirect. The host's fetch adapter must
|
|
236
|
+
pin DNS if its security policy requires protection against DNS rebinding.
|
|
237
|
+
|
|
238
|
+
Public callbacks also receive objects: `pluginIdOf({ item })`, `run({ lock })`,
|
|
239
|
+
`isProcessAlive({ pid })`, `onStaleLockRemoved({ holder })`, `onInactive({ plugin })`
|
|
240
|
+
and `now({})`. Lock ownership checks use `lock.assertHeld({})`. Constructors receive
|
|
241
|
+
named fields, for example `new AgentPluginInstallError({ code, message }, { cause })`.
|
|
242
|
+
`recordBundledAgentPluginDigests` accepts the clock override in its second object;
|
|
243
|
+
`findTrustedPluginPackages` accepts `orderByPluginId` and `onInactive` in its second object.
|
|
244
|
+
|
|
245
|
+
`parseAgentPluginMcpConfig({ value, extensionNamespace }, { pluginManifest, readServerMetadata })`
|
|
246
|
+
accepts optional namespace metadata separately. Strict parsing preserves standard object
|
|
247
|
+
shaped authors and older string authors. Inline transport fields never become reviewed-read
|
|
248
|
+
metadata. MCP provisioning helpers delegate to the host and notify only after success;
|
|
249
|
+
filesystem installation and federation remain separate operations with host-owned recovery.
|
|
250
|
+
|
|
251
|
+
The legacy root validators keep their positional shape and behavior. New code can use the
|
|
252
|
+
object-shaped `validatePluginManifest` and `validateMcpManifest` facades. Internal composition
|
|
253
|
+
factories are implementation details and are not package exports.
|
|
254
|
+
|
|
255
|
+
See [integration-extraction.md](integration-extraction.md) for the reconciliation, source mapping,
|
|
256
|
+
rewire ledger and verification commands. All verification is deferred by owner directive.
|
|
257
|
+
|
|
258
|
+
For a host that needs only activation, use `createAgentPluginActivations` with
|
|
259
|
+
`createNodeAgentPluginEffects({})` instead of supplying unused network/provisioning
|
|
260
|
+
ports. Retain one returned object for the process lifetime. See `API.md` for the
|
|
261
|
+
object-shaped reads, filters and optional legacy metadata reader.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { AGENT_PLUGINS_MCP_SCHEMA_URL, AGENT_PLUGINS_SCHEMA_URL, PLUGIN_MANIFEST_FILENAME, PLUGIN_MCP_MANIFEST_FILENAME, PLUGIN_SKILLS_DIRNAME, isMcpManifest, isPluginManifest, validatePluginManifest, validateMcpManifest, } from './manifest.js';
|
|
2
|
+
export type { McpManifest, McpServerEntry, PluginManifest, PluginManifestAuthor } from './manifest.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { AGENT_PLUGINS_MCP_SCHEMA_URL, AGENT_PLUGINS_SCHEMA_URL, PLUGIN_MANIFEST_FILENAME, PLUGIN_MCP_MANIFEST_FILENAME, PLUGIN_SKILLS_DIRNAME, isMcpManifest, isPluginManifest, validatePluginManifest, validateMcpManifest, } from './manifest.js';
|
|
2
|
+
//# sourceMappingURL=index.js.map
|