@zaowu-labs/plugin 1.0.1

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/README.md ADDED
@@ -0,0 +1,16 @@
1
+ # @zaowu-labs/plugin
2
+
3
+ Local plugin manifest package for ZaoWu.
4
+
5
+ This package validates local plugin manifests and previews install or remove
6
+ operations under `.zaowu/plugins`.
7
+
8
+ Safety:
9
+
10
+ - Install and remove preview by default.
11
+ - Confirmed install refuses to overwrite an existing manifest.
12
+ - Linked `.zaowu` or `.zaowu/plugins` directories are rejected so lifecycle
13
+ operations cannot escape the project plugin directory.
14
+ - Plugin manifests are metadata only; this package does not execute plugin
15
+ commands in the foundation version.
16
+ - There is no public plugin marketplace in this foundation version.
@@ -0,0 +1,56 @@
1
+ import { type DomainDefinition } from '@zaowu-labs/core';
2
+ export interface PluginManifest {
3
+ id: string;
4
+ source: string;
5
+ installedAt: string | null;
6
+ }
7
+ export interface PluginSourceCommand {
8
+ name: string;
9
+ summary?: string;
10
+ }
11
+ export interface PluginSourceManifest {
12
+ schemaVersion?: number;
13
+ id: string;
14
+ name?: string;
15
+ version?: string;
16
+ commands?: PluginSourceCommand[];
17
+ }
18
+ export interface PluginListResult {
19
+ schemaVersion: 1;
20
+ status: 'ok';
21
+ pluginDir: string;
22
+ plugins: PluginManifest[];
23
+ }
24
+ export interface PluginChangeResult {
25
+ schemaVersion: 1;
26
+ status: 'ok' | 'preview';
27
+ pluginDir: string;
28
+ plugin: PluginManifest;
29
+ wroteFile: boolean;
30
+ removedFile?: boolean;
31
+ }
32
+ export interface PluginValidationResult {
33
+ schemaVersion: 1;
34
+ status: 'ok' | 'warning';
35
+ target: string;
36
+ manifestPath?: string;
37
+ manifest?: PluginSourceManifest;
38
+ warnings: string[];
39
+ errors: string[];
40
+ }
41
+ export declare const PLUGIN_DOMAIN: DomainDefinition;
42
+ export declare const validatePluginSource: (target: string) => Promise<PluginValidationResult>;
43
+ export declare const listPlugins: (options?: {
44
+ cwd?: string;
45
+ }) => Promise<PluginListResult>;
46
+ export declare const installPlugin: (id: string, options?: {
47
+ cwd?: string;
48
+ source?: string;
49
+ yes?: boolean;
50
+ installedAt?: string;
51
+ }) => Promise<PluginChangeResult>;
52
+ export declare const removePlugin: (id: string, options?: {
53
+ cwd?: string;
54
+ yes?: boolean;
55
+ }) => Promise<PluginChangeResult>;
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,eAAO,MAAM,aAAa,EAAE,gBA+B3B,CAAC;AA8KF,eAAO,MAAM,oBAAoB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAgDzF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,UAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,KAAG,OAAO,CAAC,gBAAgB,CAwC1F,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,IAAI,MAAM,EACV,UAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,KACnF,OAAO,CAAC,kBAAkB,CAmF5B,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,IAAI,MAAM,EACV,UAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,KAC5C,OAAO,CAAC,kBAAkB,CAmC5B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,365 @@
1
+ import { lstat, mkdir, readFile, readdir, realpath, rm, stat, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { createCapabilityLedger, stripUtf8Bom, ZaoWuError, } from '@zaowu-labs/core';
4
+ export const PLUGIN_DOMAIN = {
5
+ name: 'plugin',
6
+ summary: 'Plugin workflows for listing, installing, and removing extensions',
7
+ capabilities: createCapabilityLedger({
8
+ readsFiles: true,
9
+ writesFiles: true,
10
+ }),
11
+ commands: [
12
+ {
13
+ name: 'list',
14
+ summary: 'List installed or available plugins',
15
+ status: 'available',
16
+ },
17
+ {
18
+ name: 'install',
19
+ summary: 'Install a plugin with compatibility checks',
20
+ status: 'available',
21
+ sensitive: true,
22
+ },
23
+ {
24
+ name: 'remove',
25
+ summary: 'Remove an installed plugin with confirmation',
26
+ status: 'available',
27
+ sensitive: true,
28
+ },
29
+ {
30
+ name: 'validate',
31
+ summary: 'Validate a local plugin manifest or plugin id',
32
+ status: 'available',
33
+ },
34
+ ],
35
+ };
36
+ const PLUGIN_ID_PATTERN = /^[a-z0-9][a-z0-9._-]*$/;
37
+ const SUPPORTED_PLUGIN_SCHEMA_VERSION = 1;
38
+ const getPluginDir = (cwd) => path.join(cwd, '.zaowu', 'plugins');
39
+ const normalizeComparisonPath = (value) => {
40
+ const resolved = path.resolve(value);
41
+ return process.platform === 'win32' ? resolved.toLowerCase() : resolved;
42
+ };
43
+ const throwUnsafePluginPath = (pluginDir) => {
44
+ throw new ZaoWuError({
45
+ code: 'PLUGIN_PATH_UNSAFE',
46
+ message: 'Plugin directory is unsafe.',
47
+ why: `The plugin directory \`${pluginDir}\` is redirected through a symbolic link or junction.`,
48
+ fix: 'Replace the linked `.zaowu` or `.zaowu/plugins` directory with a real directory inside the project.',
49
+ });
50
+ };
51
+ const assertSafePluginDir = async (cwd, pluginDir) => {
52
+ const resolvedCwd = path.resolve(cwd);
53
+ const zaowuDir = path.join(resolvedCwd, '.zaowu');
54
+ for (const candidate of [zaowuDir, pluginDir]) {
55
+ try {
56
+ if ((await lstat(candidate)).isSymbolicLink()) {
57
+ throwUnsafePluginPath(pluginDir);
58
+ }
59
+ }
60
+ catch (error) {
61
+ if (error instanceof ZaoWuError) {
62
+ throw error;
63
+ }
64
+ if (error.code !== 'ENOENT') {
65
+ throw error;
66
+ }
67
+ }
68
+ }
69
+ try {
70
+ const [realCwd, realPluginDir] = await Promise.all([
71
+ realpath(resolvedCwd),
72
+ realpath(pluginDir),
73
+ ]);
74
+ const expectedPluginDir = path.join(realCwd, '.zaowu', 'plugins');
75
+ if (normalizeComparisonPath(realPluginDir) !== normalizeComparisonPath(expectedPluginDir)) {
76
+ throwUnsafePluginPath(pluginDir);
77
+ }
78
+ }
79
+ catch (error) {
80
+ if (error instanceof ZaoWuError) {
81
+ throw error;
82
+ }
83
+ if (error.code !== 'ENOENT') {
84
+ throw error;
85
+ }
86
+ }
87
+ };
88
+ const assertPluginId = (id) => {
89
+ if (!PLUGIN_ID_PATTERN.test(id)) {
90
+ throw new ZaoWuError({
91
+ code: 'PLUGIN_ID_INVALID',
92
+ message: 'Plugin id is invalid.',
93
+ why: 'Plugin ids must start with a lowercase letter or number and may contain lowercase letters, numbers, dots, underscores, and dashes.',
94
+ fix: 'Use an id like `readme-gen` or `team.tools`.',
95
+ });
96
+ }
97
+ };
98
+ const getPluginPath = (pluginDir, id) => path.join(pluginDir, `${id}.json`);
99
+ const fileExists = async (filePath) => {
100
+ try {
101
+ return (await stat(filePath)).isFile();
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ };
107
+ const isPathLike = (target) => target.includes('/') || target.includes('\\') || target.endsWith('.json') || target === '.';
108
+ const readJson = async (filePath) => JSON.parse(stripUtf8Bom(await readFile(filePath, 'utf8')));
109
+ const getManifestPath = async (target) => {
110
+ try {
111
+ const info = await stat(target);
112
+ if (info.isDirectory()) {
113
+ const candidates = [path.join(target, 'zaowu.plugin.json'), path.join(target, 'plugin.json')];
114
+ for (const candidate of candidates) {
115
+ try {
116
+ if ((await stat(candidate)).isFile()) {
117
+ return candidate;
118
+ }
119
+ }
120
+ catch {
121
+ // Try the next manifest candidate.
122
+ }
123
+ }
124
+ return null;
125
+ }
126
+ return info.isFile() ? target : null;
127
+ }
128
+ catch {
129
+ return null;
130
+ }
131
+ };
132
+ const validateSourceManifest = (value) => {
133
+ const errors = [];
134
+ const manifest = value;
135
+ if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest)) {
136
+ return ['Manifest must be a JSON object.'];
137
+ }
138
+ if (typeof manifest.id !== 'string' || !PLUGIN_ID_PATTERN.test(manifest.id)) {
139
+ errors.push('Manifest `id` must be a valid plugin id.');
140
+ }
141
+ if (manifest.schemaVersion !== undefined &&
142
+ manifest.schemaVersion !== SUPPORTED_PLUGIN_SCHEMA_VERSION) {
143
+ errors.push(`Manifest \`schemaVersion\` must be ${SUPPORTED_PLUGIN_SCHEMA_VERSION} when provided.`);
144
+ }
145
+ if (manifest.name !== undefined && typeof manifest.name !== 'string') {
146
+ errors.push('Manifest `name` must be a string when provided.');
147
+ }
148
+ if (manifest.version !== undefined && typeof manifest.version !== 'string') {
149
+ errors.push('Manifest `version` must be a string when provided.');
150
+ }
151
+ if (manifest.commands !== undefined) {
152
+ if (!Array.isArray(manifest.commands)) {
153
+ errors.push('Manifest `commands` must be an array when provided.');
154
+ }
155
+ else {
156
+ const commandNames = new Set();
157
+ manifest.commands.forEach((command, index) => {
158
+ if (!command || typeof command !== 'object' || Array.isArray(command)) {
159
+ errors.push(`Command at index ${index} must be an object.`);
160
+ return;
161
+ }
162
+ if (typeof command.name !== 'string' || !PLUGIN_ID_PATTERN.test(command.name)) {
163
+ errors.push(`Command at index ${index} has an invalid name.`);
164
+ }
165
+ else if (commandNames.has(command.name)) {
166
+ errors.push(`Command \`${command.name}\` is duplicated.`);
167
+ }
168
+ else {
169
+ commandNames.add(command.name);
170
+ }
171
+ if (command.summary !== undefined && typeof command.summary !== 'string') {
172
+ errors.push(`Command \`${command.name ?? index}\` summary must be a string.`);
173
+ }
174
+ });
175
+ }
176
+ }
177
+ return errors;
178
+ };
179
+ export const validatePluginSource = async (target) => {
180
+ const manifestPath = await getManifestPath(target);
181
+ if (!manifestPath) {
182
+ if (!isPathLike(target)) {
183
+ assertPluginId(target);
184
+ return {
185
+ schemaVersion: 1,
186
+ status: 'warning',
187
+ target,
188
+ warnings: ['No local manifest was read; target was treated as a plugin id.'],
189
+ errors: [],
190
+ };
191
+ }
192
+ return {
193
+ schemaVersion: 1,
194
+ status: 'warning',
195
+ target,
196
+ warnings: [],
197
+ errors: ['No `zaowu.plugin.json` or `plugin.json` manifest was found.'],
198
+ };
199
+ }
200
+ try {
201
+ const manifest = (await readJson(manifestPath));
202
+ const errors = validateSourceManifest(manifest);
203
+ return {
204
+ schemaVersion: 1,
205
+ status: errors.length > 0 ? 'warning' : 'ok',
206
+ target,
207
+ manifestPath,
208
+ manifest,
209
+ warnings: [],
210
+ errors,
211
+ };
212
+ }
213
+ catch {
214
+ return {
215
+ schemaVersion: 1,
216
+ status: 'warning',
217
+ target,
218
+ manifestPath,
219
+ warnings: [],
220
+ errors: ['Manifest JSON could not be parsed.'],
221
+ };
222
+ }
223
+ };
224
+ export const listPlugins = async (options = {}) => {
225
+ const cwd = options.cwd ?? process.cwd();
226
+ const pluginDir = getPluginDir(cwd);
227
+ let entries = [];
228
+ await assertSafePluginDir(cwd, pluginDir);
229
+ try {
230
+ entries = await readdir(pluginDir);
231
+ }
232
+ catch {
233
+ return {
234
+ schemaVersion: 1,
235
+ status: 'ok',
236
+ pluginDir,
237
+ plugins: [],
238
+ };
239
+ }
240
+ const plugins = [];
241
+ for (const entry of entries.filter((name) => name.endsWith('.json'))) {
242
+ try {
243
+ plugins.push(JSON.parse(await readFile(path.join(pluginDir, entry), 'utf8')));
244
+ }
245
+ catch {
246
+ plugins.push({
247
+ id: path.basename(entry, '.json'),
248
+ source: 'unreadable',
249
+ installedAt: null,
250
+ });
251
+ }
252
+ }
253
+ return {
254
+ schemaVersion: 1,
255
+ status: 'ok',
256
+ pluginDir,
257
+ plugins,
258
+ };
259
+ };
260
+ export const installPlugin = async (id, options = {}) => {
261
+ assertPluginId(id);
262
+ const cwd = options.cwd ?? process.cwd();
263
+ const pluginDir = getPluginDir(cwd);
264
+ const source = options.source ?? id;
265
+ const pluginPath = getPluginPath(pluginDir, id);
266
+ const sourceValidation = isPathLike(source) ? await validatePluginSource(source) : null;
267
+ await assertSafePluginDir(cwd, pluginDir);
268
+ if (sourceValidation?.errors.length) {
269
+ throw new ZaoWuError({
270
+ code: 'PLUGIN_SOURCE_INVALID',
271
+ message: 'Plugin source is invalid.',
272
+ why: sourceValidation.errors.join(' '),
273
+ fix: 'Fix the plugin manifest, then run `zw plugin validate <path>` again.',
274
+ });
275
+ }
276
+ if (sourceValidation?.manifest?.id && sourceValidation.manifest.id !== id) {
277
+ throw new ZaoWuError({
278
+ code: 'PLUGIN_SOURCE_ID_MISMATCH',
279
+ message: 'Plugin source id does not match install id.',
280
+ why: `The source manifest id is \`${sourceValidation.manifest.id}\`, but the requested install id is \`${id}\`.`,
281
+ fix: `Run \`zw plugin install ${sourceValidation.manifest.id} --source ${source}\` or update the manifest.`,
282
+ });
283
+ }
284
+ const plugin = {
285
+ id,
286
+ source,
287
+ installedAt: options.yes ? (options.installedAt ?? new Date().toISOString()) : null,
288
+ };
289
+ if (options.yes) {
290
+ await mkdir(pluginDir, { recursive: true });
291
+ await assertSafePluginDir(cwd, pluginDir);
292
+ if (await fileExists(pluginPath)) {
293
+ throw new ZaoWuError({
294
+ code: 'PLUGIN_ALREADY_INSTALLED',
295
+ message: 'Plugin is already installed.',
296
+ why: `ZaoWu will not silently overwrite \`${pluginPath}\`.`,
297
+ fix: 'Remove the plugin first with `zw plugin remove <id> --yes`, then install it again.',
298
+ });
299
+ }
300
+ try {
301
+ await writeFile(pluginPath, `${JSON.stringify(plugin, null, 2)}\n`, {
302
+ encoding: 'utf8',
303
+ flag: 'wx',
304
+ });
305
+ }
306
+ catch (error) {
307
+ if (error instanceof ZaoWuError) {
308
+ throw error;
309
+ }
310
+ if (error.code === 'EEXIST') {
311
+ throw new ZaoWuError({
312
+ code: 'PLUGIN_ALREADY_INSTALLED',
313
+ message: 'Plugin is already installed.',
314
+ why: `ZaoWu will not silently overwrite \`${pluginPath}\`.`,
315
+ fix: 'Remove the plugin first with `zw plugin remove <id> --yes`, then install it again.',
316
+ });
317
+ }
318
+ throw new ZaoWuError({
319
+ code: 'PLUGIN_WRITE_FAILED',
320
+ message: 'Could not write plugin manifest.',
321
+ why: `ZaoWu tried to write \`${pluginPath}\`, but the file system rejected the write.`,
322
+ fix: 'Check the plugin directory permissions, then run the command again.',
323
+ });
324
+ }
325
+ }
326
+ return {
327
+ schemaVersion: 1,
328
+ status: options.yes ? 'ok' : 'preview',
329
+ pluginDir,
330
+ plugin,
331
+ wroteFile: Boolean(options.yes),
332
+ };
333
+ };
334
+ export const removePlugin = async (id, options = {}) => {
335
+ assertPluginId(id);
336
+ const cwd = options.cwd ?? process.cwd();
337
+ const pluginDir = getPluginDir(cwd);
338
+ const pluginPath = getPluginPath(pluginDir, id);
339
+ const plugin = {
340
+ id,
341
+ source: id,
342
+ installedAt: null,
343
+ };
344
+ await assertSafePluginDir(cwd, pluginDir);
345
+ if (options.yes) {
346
+ if (!(await fileExists(pluginPath))) {
347
+ throw new ZaoWuError({
348
+ code: 'PLUGIN_NOT_INSTALLED',
349
+ message: 'Plugin is not installed.',
350
+ why: `ZaoWu could not find \`${pluginPath}\`.`,
351
+ fix: 'Run `zw plugin list` to see installed plugin manifests.',
352
+ });
353
+ }
354
+ await rm(pluginPath);
355
+ }
356
+ return {
357
+ schemaVersion: 1,
358
+ status: options.yes ? 'ok' : 'preview',
359
+ pluginDir,
360
+ plugin,
361
+ wroteFile: false,
362
+ removedFile: Boolean(options.yes),
363
+ };
364
+ };
365
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@zaowu-labs/plugin",
3
+ "version": "1.0.1",
4
+ "description": "ZaoWu plugin workflows",
5
+ "type": "module",
6
+ "license": "Apache-2.0",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "build": "tsc -b --pretty false",
24
+ "typecheck": "tsc -b --pretty false",
25
+ "dev": "tsc -b --watch"
26
+ },
27
+ "dependencies": {
28
+ "@zaowu-labs/core": "workspace:*"
29
+ },
30
+ "keywords": [
31
+ "zaowu",
32
+ "plugins"
33
+ ],
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/zaowu-labs/zaowu.git",
37
+ "directory": "packages/plugin"
38
+ },
39
+ "homepage": "https://github.com/zaowu-labs/zaowu",
40
+ "bugs": "https://github.com/zaowu-labs/zaowu/issues"
41
+ }