@a5c-ai/extension-mux 5.0.1-staging.04ca6ab00d21
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 +58 -0
- package/dist/binTemplates.d.ts +7 -0
- package/dist/binTemplates.d.ts.map +1 -0
- package/dist/binTemplates.js +292 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +299 -0
- package/dist/compiler.d.ts +15 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +118 -0
- package/dist/diff.d.ts +9 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +183 -0
- package/dist/emit.d.ts +3 -0
- package/dist/emit.d.ts.map +1 -0
- package/dist/emit.js +42 -0
- package/dist/hookRegistration.d.ts +8 -0
- package/dist/hookRegistration.d.ts.map +1 -0
- package/dist/hookRegistration.js +9 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/init.d.ts +17 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +200 -0
- package/dist/installInstructions.d.ts +3 -0
- package/dist/installInstructions.d.ts.map +1 -0
- package/dist/installInstructions.js +150 -0
- package/dist/installSharedGenerator.d.ts +3 -0
- package/dist/installSharedGenerator.d.ts.map +1 -0
- package/dist/installSharedGenerator.js +229 -0
- package/dist/manifestGenerators.d.ts +10 -0
- package/dist/manifestGenerators.d.ts.map +1 -0
- package/dist/manifestGenerators.js +11 -0
- package/dist/marketplaceGenerator.d.ts +3 -0
- package/dist/marketplaceGenerator.d.ts.map +1 -0
- package/dist/marketplaceGenerator.js +46 -0
- package/dist/proxiedHookTemplates.d.ts +10 -0
- package/dist/proxiedHookTemplates.d.ts.map +1 -0
- package/dist/proxiedHookTemplates.js +122 -0
- package/dist/resolve.d.ts +3 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +106 -0
- package/dist/schema.d.ts +231 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +340 -0
- package/dist/sdkConfig.d.ts +20 -0
- package/dist/sdkConfig.d.ts.map +1 -0
- package/dist/sdkConfig.js +41 -0
- package/dist/targets/adapters/base.d.ts +10 -0
- package/dist/targets/adapters/base.d.ts.map +1 -0
- package/dist/targets/adapters/base.js +16 -0
- package/dist/targets/adapters/claude-code.d.ts +9 -0
- package/dist/targets/adapters/claude-code.d.ts.map +1 -0
- package/dist/targets/adapters/claude-code.js +83 -0
- package/dist/targets/adapters/codex.d.ts +13 -0
- package/dist/targets/adapters/codex.d.ts.map +1 -0
- package/dist/targets/adapters/codex.js +103 -0
- package/dist/targets/adapters/cursor.d.ts +9 -0
- package/dist/targets/adapters/cursor.d.ts.map +1 -0
- package/dist/targets/adapters/cursor.js +57 -0
- package/dist/targets/adapters/gemini.d.ts +9 -0
- package/dist/targets/adapters/gemini.d.ts.map +1 -0
- package/dist/targets/adapters/gemini.js +86 -0
- package/dist/targets/adapters/github-copilot.d.ts +9 -0
- package/dist/targets/adapters/github-copilot.d.ts.map +1 -0
- package/dist/targets/adapters/github-copilot.js +61 -0
- package/dist/targets/adapters/hermes.d.ts +13 -0
- package/dist/targets/adapters/hermes.d.ts.map +1 -0
- package/dist/targets/adapters/hermes.js +96 -0
- package/dist/targets/adapters/hooks-utils.d.ts +12 -0
- package/dist/targets/adapters/hooks-utils.d.ts.map +1 -0
- package/dist/targets/adapters/hooks-utils.js +60 -0
- package/dist/targets/adapters/index.d.ts +27 -0
- package/dist/targets/adapters/index.d.ts.map +1 -0
- package/dist/targets/adapters/index.js +64 -0
- package/dist/targets/adapters/interface.d.ts +8 -0
- package/dist/targets/adapters/interface.d.ts.map +1 -0
- package/dist/targets/adapters/interface.js +2 -0
- package/dist/targets/adapters/oh-my-pi.d.ts +11 -0
- package/dist/targets/adapters/oh-my-pi.d.ts.map +1 -0
- package/dist/targets/adapters/oh-my-pi.js +88 -0
- package/dist/targets/adapters/openclaw.d.ts +14 -0
- package/dist/targets/adapters/openclaw.d.ts.map +1 -0
- package/dist/targets/adapters/openclaw.js +165 -0
- package/dist/targets/adapters/opencode.d.ts +10 -0
- package/dist/targets/adapters/opencode.d.ts.map +1 -0
- package/dist/targets/adapters/opencode.js +93 -0
- package/dist/targets/adapters/pi.d.ts +11 -0
- package/dist/targets/adapters/pi.d.ts.map +1 -0
- package/dist/targets/adapters/pi.js +90 -0
- package/dist/targets/index.d.ts +7 -0
- package/dist/targets/index.d.ts.map +1 -0
- package/dist/targets/index.js +77 -0
- package/dist/transform.d.ts +4 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/transform.js +243 -0
- package/dist/transformEmitters.d.ts +8 -0
- package/dist/transformEmitters.d.ts.map +1 -0
- package/dist/transformEmitters.js +340 -0
- package/dist/transformHelpers.d.ts +13 -0
- package/dist/transformHelpers.d.ts.map +1 -0
- package/dist/transformHelpers.js +239 -0
- package/dist/types.d.ts +204 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/utils.d.ts +42 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +187 -0
- package/dist/validate.d.ts +3 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +188 -0
- package/dist/verify.d.ts +6 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +294 -0
- package/package.json +68 -0
package/dist/verify.js
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
// Stage 5: VERIFY - Verify emitted output
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
function getMarketplaceRootDir(marketplacePath) {
|
|
5
|
+
return path.resolve(path.dirname(marketplacePath), '..', '..');
|
|
6
|
+
}
|
|
7
|
+
function resolveMarketplaceSourceCandidates(fullPath, sourceValue, useMarketplaceRootDir) {
|
|
8
|
+
const candidates = new Set();
|
|
9
|
+
const baseDir = path.dirname(fullPath);
|
|
10
|
+
candidates.add(path.resolve(baseDir, sourceValue));
|
|
11
|
+
candidates.add(path.resolve(baseDir, '..', sourceValue));
|
|
12
|
+
candidates.add(path.resolve(baseDir, '..', '..', sourceValue));
|
|
13
|
+
if (useMarketplaceRootDir) {
|
|
14
|
+
candidates.add(path.resolve(getMarketplaceRootDir(fullPath), sourceValue));
|
|
15
|
+
}
|
|
16
|
+
return [...candidates];
|
|
17
|
+
}
|
|
18
|
+
export function verify(outputDir, emittedFiles, options = {}) {
|
|
19
|
+
const diagnostics = [];
|
|
20
|
+
const verificationChecklist = [];
|
|
21
|
+
const resolutionRoots = Array.from(new Set([path.resolve(outputDir), options.outputBaseDir ? path.resolve(options.outputBaseDir) : null]
|
|
22
|
+
.filter((value) => value !== null)));
|
|
23
|
+
const resolvedFiles = new Map();
|
|
24
|
+
const parsedJsonFiles = new Map();
|
|
25
|
+
const addChecklist = (message) => {
|
|
26
|
+
if (!verificationChecklist.includes(message)) {
|
|
27
|
+
verificationChecklist.push(message);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const addDiagnostic = (message, source, level = 'error', suggestion) => {
|
|
31
|
+
diagnostics.push({
|
|
32
|
+
level,
|
|
33
|
+
category: 'verification',
|
|
34
|
+
message,
|
|
35
|
+
source,
|
|
36
|
+
suggestion,
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
const resolveEmittedPath = (filePath) => {
|
|
40
|
+
for (const root of resolutionRoots) {
|
|
41
|
+
const candidate = path.join(root, filePath);
|
|
42
|
+
if (fs.existsSync(candidate)) {
|
|
43
|
+
return candidate;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
};
|
|
48
|
+
const normalizeOutputReference = (reference) => {
|
|
49
|
+
const trimmed = reference.trim();
|
|
50
|
+
if (trimmed.length === 0 ||
|
|
51
|
+
trimmed === '.' ||
|
|
52
|
+
trimmed === './' ||
|
|
53
|
+
/^(?:[a-z]+:)?\/\//i.test(trimmed)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const normalized = trimmed.replace(/^\.\/+/, '').replace(/\/+$/, '');
|
|
57
|
+
return normalized.length > 0 ? normalized : null;
|
|
58
|
+
};
|
|
59
|
+
const verifyPluginReference = (reference, context) => {
|
|
60
|
+
const normalized = normalizeOutputReference(reference);
|
|
61
|
+
if (!normalized) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const resolved = path.join(outputDir, normalized);
|
|
65
|
+
if (!fs.existsSync(resolved)) {
|
|
66
|
+
addDiagnostic(`${context.replace(/ exists$/, ' missing')}: ${normalized}`, resolved);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
addChecklist(`✓ ${context}: ${normalized}`);
|
|
70
|
+
};
|
|
71
|
+
const verifyPackageJson = (filePath, value) => {
|
|
72
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const pkg = value;
|
|
76
|
+
for (const target of Object.values(pkg.bin ?? {})) {
|
|
77
|
+
if (typeof target === 'string') {
|
|
78
|
+
verifyPluginReference(target, `${filePath} bin target exists`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const entry of pkg.files ?? []) {
|
|
82
|
+
if (typeof entry === 'string') {
|
|
83
|
+
verifyPluginReference(entry, `${filePath} publishable path exists`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
for (const command of Object.values(pkg.scripts ?? {})) {
|
|
87
|
+
if (typeof command !== 'string') {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const matches = command.matchAll(/(?:^|\s)(?:node|tsx|ts-node)\s+((?:bin|scripts)\/[^\s'"]+)/g);
|
|
91
|
+
for (const match of matches) {
|
|
92
|
+
verifyPluginReference(match[1], `${filePath} script target exists`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const extensionPath of pkg.pi?.extensions ?? []) {
|
|
96
|
+
if (typeof extensionPath === 'string') {
|
|
97
|
+
verifyPluginReference(extensionPath, `${filePath} pi extension exists`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
for (const skillPath of pkg.pi?.skills ?? []) {
|
|
101
|
+
if (typeof skillPath === 'string') {
|
|
102
|
+
verifyPluginReference(skillPath, `${filePath} pi skill path exists`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
for (const extensionPath of pkg.omp?.extensions ?? []) {
|
|
106
|
+
if (typeof extensionPath === 'string') {
|
|
107
|
+
verifyPluginReference(extensionPath, `${filePath} omp extension exists`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const skillPath of pkg.omp?.skills ?? []) {
|
|
111
|
+
if (typeof skillPath === 'string') {
|
|
112
|
+
verifyPluginReference(skillPath, `${filePath} omp skill path exists`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
for (const extensionPath of pkg.openclaw?.extensions ?? []) {
|
|
116
|
+
if (typeof extensionPath === 'string') {
|
|
117
|
+
verifyPluginReference(extensionPath, `${filePath} openclaw extension exists`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const verifyManifestJson = (filePath, value) => {
|
|
122
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const manifest = value;
|
|
126
|
+
if (typeof manifest.hooks === 'string') {
|
|
127
|
+
verifyPluginReference(manifest.hooks, `${filePath} hooks path exists`);
|
|
128
|
+
}
|
|
129
|
+
else if (manifest.hooks && typeof manifest.hooks === 'object') {
|
|
130
|
+
for (const hookTarget of Object.values(manifest.hooks)) {
|
|
131
|
+
if (typeof hookTarget === 'string' && hookTarget !== 'proxy') {
|
|
132
|
+
verifyPluginReference(hookTarget, `${filePath} hook target exists`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (typeof manifest.commands === 'string') {
|
|
137
|
+
verifyPluginReference(manifest.commands, `${filePath} commands path exists`);
|
|
138
|
+
}
|
|
139
|
+
else if (Array.isArray(manifest.commands)) {
|
|
140
|
+
for (const commandPath of manifest.commands) {
|
|
141
|
+
if (typeof commandPath === 'string') {
|
|
142
|
+
verifyPluginReference(commandPath, `${filePath} command target exists`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (typeof manifest.skills === 'string') {
|
|
147
|
+
verifyPluginReference(manifest.skills, `${filePath} skills path exists`);
|
|
148
|
+
}
|
|
149
|
+
else if (Array.isArray(manifest.skills)) {
|
|
150
|
+
for (const skill of manifest.skills) {
|
|
151
|
+
if (skill && typeof skill === 'object' && typeof skill.file === 'string') {
|
|
152
|
+
verifyPluginReference(skill.file, `${filePath} skill file exists`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (typeof manifest.agents === 'string') {
|
|
157
|
+
verifyPluginReference(manifest.agents, `${filePath} agents path exists`);
|
|
158
|
+
}
|
|
159
|
+
else if (Array.isArray(manifest.agents)) {
|
|
160
|
+
for (const agentPath of manifest.agents) {
|
|
161
|
+
if (typeof agentPath === 'string') {
|
|
162
|
+
verifyPluginReference(agentPath, `${filePath} agent file exists`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (typeof manifest.contextFileName === 'string') {
|
|
167
|
+
verifyPluginReference(manifest.contextFileName, `${filePath} context file exists`);
|
|
168
|
+
}
|
|
169
|
+
if (typeof manifest.extensionManifest === 'string') {
|
|
170
|
+
verifyPluginReference(manifest.extensionManifest, `${filePath} extension manifest exists`);
|
|
171
|
+
}
|
|
172
|
+
if (typeof manifest.entrypoint === 'string') {
|
|
173
|
+
verifyPluginReference(manifest.entrypoint, `${filePath} entrypoint exists`);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const verifyHookRegistrationJson = (filePath, value) => {
|
|
177
|
+
const pathTokenPattern = /(^|[^A-Za-z0-9_.-])((?:hooks|commands|skills|extensions|bin)\/[^"'`\s)]+)/g;
|
|
178
|
+
const visit = (node) => {
|
|
179
|
+
if (typeof node === 'string') {
|
|
180
|
+
for (const match of node.matchAll(pathTokenPattern)) {
|
|
181
|
+
verifyPluginReference(match[2], `${filePath} command target exists`);
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (Array.isArray(node)) {
|
|
186
|
+
for (const item of node) {
|
|
187
|
+
visit(item);
|
|
188
|
+
}
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (node && typeof node === 'object') {
|
|
192
|
+
for (const child of Object.values(node)) {
|
|
193
|
+
visit(child);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
visit(value);
|
|
198
|
+
};
|
|
199
|
+
const verifyMarketplaceJson = (filePath, fullPath, value) => {
|
|
200
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const marketplace = value;
|
|
204
|
+
for (const pluginEntry of marketplace.plugins ?? []) {
|
|
205
|
+
const sourceValue = typeof pluginEntry.source === 'string'
|
|
206
|
+
? pluginEntry.source
|
|
207
|
+
: pluginEntry.source?.path;
|
|
208
|
+
if (typeof sourceValue !== 'string' || sourceValue.trim().length === 0) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const candidates = resolveMarketplaceSourceCandidates(fullPath, sourceValue, typeof pluginEntry.source !== 'string');
|
|
212
|
+
const resolved = candidates.find((candidate) => fs.existsSync(candidate));
|
|
213
|
+
if (!resolved) {
|
|
214
|
+
addDiagnostic(`${filePath} marketplace entry source missing: ${sourceValue}`, candidates[0] ?? path.resolve(path.dirname(fullPath), sourceValue));
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
addChecklist(`✓ ${filePath} marketplace entry source exists: ${sourceValue}`);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
// Check that all emitted files exist
|
|
221
|
+
for (const filePath of emittedFiles) {
|
|
222
|
+
const fullPath = resolveEmittedPath(filePath);
|
|
223
|
+
if (!fullPath) {
|
|
224
|
+
addDiagnostic(`Emitted file does not exist: ${filePath}`, path.join(outputDir, filePath));
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
resolvedFiles.set(filePath, fullPath);
|
|
228
|
+
addChecklist(`✓ File exists: ${filePath}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Verify JSON files are valid JSON
|
|
232
|
+
for (const filePath of emittedFiles) {
|
|
233
|
+
if (filePath.endsWith('.json')) {
|
|
234
|
+
const fullPath = resolvedFiles.get(filePath);
|
|
235
|
+
if (fullPath) {
|
|
236
|
+
try {
|
|
237
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
238
|
+
const value = JSON.parse(content);
|
|
239
|
+
parsedJsonFiles.set(filePath, { fullPath, value });
|
|
240
|
+
addChecklist(`✓ Valid JSON: ${filePath}`);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
addDiagnostic(`Invalid JSON in ${filePath}: ${error.message}`, fullPath);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Verify hook scripts have shebangs
|
|
249
|
+
for (const filePath of emittedFiles) {
|
|
250
|
+
if (filePath.endsWith('.sh') || filePath.endsWith('.js')) {
|
|
251
|
+
const fullPath = resolvedFiles.get(filePath);
|
|
252
|
+
if (fullPath) {
|
|
253
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
254
|
+
if (!content.startsWith('#!')) {
|
|
255
|
+
addDiagnostic(`Hook script missing shebang: ${filePath}`, fullPath, 'warning', 'Add shebang line (#!/bin/bash or #!/usr/bin/env node)');
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
addChecklist(`✓ Shebang present: ${filePath}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Verify SKILL.md files have valid frontmatter
|
|
264
|
+
for (const filePath of emittedFiles) {
|
|
265
|
+
if (filePath.endsWith('SKILL.md')) {
|
|
266
|
+
const fullPath = resolvedFiles.get(filePath);
|
|
267
|
+
if (fullPath) {
|
|
268
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
269
|
+
if (!content.startsWith('---')) {
|
|
270
|
+
addDiagnostic(`SKILL.md missing frontmatter: ${filePath}`, fullPath, 'warning');
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
addChecklist(`✓ Frontmatter present: ${filePath}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
for (const [filePath, parsed] of parsedJsonFiles) {
|
|
279
|
+
if (filePath.endsWith('package.json')) {
|
|
280
|
+
verifyPackageJson(filePath, parsed.value);
|
|
281
|
+
}
|
|
282
|
+
if (filePath.endsWith('plugin.json')
|
|
283
|
+
|| filePath.endsWith('gemini-extension.json')) {
|
|
284
|
+
verifyManifestJson(filePath, parsed.value);
|
|
285
|
+
}
|
|
286
|
+
if (path.basename(filePath) === 'hooks.json') {
|
|
287
|
+
verifyHookRegistrationJson(filePath, parsed.value);
|
|
288
|
+
}
|
|
289
|
+
if (path.basename(filePath) === 'marketplace.json') {
|
|
290
|
+
verifyMarketplaceJson(filePath, parsed.fullPath, parsed.value);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return { diagnostics, verificationChecklist };
|
|
294
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@a5c-ai/extension-mux",
|
|
3
|
+
"version": "5.0.1-staging.04ca6ab00d21",
|
|
4
|
+
"description": "Cross-harness plugin compiler — compiles a single plugin.json manifest into 9 AI coding agent plugin formats",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"extension-mux": "./dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"clean": "rm -rf dist",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"test:watch": "vitest watch",
|
|
16
|
+
"lint": "eslint \"src/**/*.ts\" --max-warnings=0",
|
|
17
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"a5c",
|
|
21
|
+
"plugin",
|
|
22
|
+
"compiler",
|
|
23
|
+
"unified",
|
|
24
|
+
"claude-code",
|
|
25
|
+
"codex",
|
|
26
|
+
"cursor",
|
|
27
|
+
"gemini",
|
|
28
|
+
"copilot",
|
|
29
|
+
"pi"
|
|
30
|
+
],
|
|
31
|
+
"author": "a5c.ai",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/a5c-ai/babysitter.git",
|
|
36
|
+
"directory": "packages/extension-mux"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/a5c-ai/babysitter/tree/main/packages/extension-mux#readme",
|
|
39
|
+
"bugs": {
|
|
40
|
+
"url": "https://github.com/a5c-ai/babysitter/issues"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist/",
|
|
44
|
+
"README.md"
|
|
45
|
+
],
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@a5c-ai/agent-catalog": "5.0.1-staging.04ca6ab00d21"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^22.0.0",
|
|
54
|
+
"typescript": "^5.7.3",
|
|
55
|
+
"vitest": "^4.1.6"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=18.0.0"
|
|
59
|
+
},
|
|
60
|
+
"atlas": {
|
|
61
|
+
"layers": [
|
|
62
|
+
"L6"
|
|
63
|
+
],
|
|
64
|
+
"muxes": [
|
|
65
|
+
"extension-mux"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
}
|