@detergent-software/atk 9.2.0-dev.1 → 9.2.0-dev.3
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 +22 -0
- package/README.md +18 -1
- package/build/command-manifest.json +20 -0
- package/build/commands/diff.d.ts +2 -1
- package/build/commands/diff.d.ts.map +1 -1
- package/build/commands/diff.js +15 -5
- package/build/commands/diff.js.map +1 -1
- package/build/commands/drift.d.ts +2 -1
- package/build/commands/drift.d.ts.map +1 -1
- package/build/commands/drift.js +8 -3
- package/build/commands/drift.js.map +1 -1
- package/build/commands/info.d.ts.map +1 -1
- package/build/commands/info.js +18 -2
- package/build/commands/info.js.map +1 -1
- package/build/commands/outdated.d.ts +2 -1
- package/build/commands/outdated.d.ts.map +1 -1
- package/build/commands/outdated.js +11 -1
- package/build/commands/outdated.js.map +1 -1
- package/build/commands/schema.d.ts +1 -1
- package/build/commands/sync.d.ts +2 -1
- package/build/commands/sync.d.ts.map +1 -1
- package/build/commands/sync.js +40 -8
- package/build/commands/sync.js.map +1 -1
- package/build/components/BundleDetail.d.ts +3 -1
- package/build/components/BundleDetail.d.ts.map +1 -1
- package/build/components/BundleDetail.js +4 -2
- package/build/components/BundleDetail.js.map +1 -1
- package/build/components/Field.js +1 -1
- package/build/components/Field.js.map +1 -1
- package/build/lib/atk-api/generated/types.gen.d.ts +8 -8
- package/build/lib/atk-schemas/claude-plugin.d.ts +56 -0
- package/build/lib/atk-schemas/claude-plugin.d.ts.map +1 -0
- package/build/lib/atk-schemas/claude-plugin.js +199 -0
- package/build/lib/atk-schemas/claude-plugin.js.map +1 -0
- package/build/lib/atk-schemas/index.d.ts +3 -0
- package/build/lib/atk-schemas/index.d.ts.map +1 -1
- package/build/lib/atk-schemas/index.js +3 -0
- package/build/lib/atk-schemas/index.js.map +1 -1
- package/package.json +1 -1
package/build/commands/sync.js
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box } from 'ink';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { assetCount, ErrorView, LocalEditsHint, RunStoppedHint, Spinner, SyncAllInSync, SyncDriftedList, SyncNoAssets, UndeclaredRemovedHint, } from '../components/index.js';
|
|
5
5
|
import { useCommand } from '../hooks/useCommand.js';
|
|
6
6
|
import { useResolvedScope } from '../hooks/useResolvedScope.js';
|
|
7
|
+
import { identityKey } from '../lib/lockfile.js';
|
|
7
8
|
import { renderJson, useNonInteractive } from '../lib/output.js';
|
|
8
9
|
import { option } from '../lib/pastel/index.js';
|
|
9
10
|
import { fetchRegistry } from '../lib/registry.js';
|
|
10
11
|
import { loadScopeConfig, scopedCommand, scopeLabel } from '../lib/scope.js';
|
|
11
12
|
import { dryRunSync, syncAssets } from '../lib/sync.js';
|
|
12
13
|
import { resolvePlacingTools } from '../lib/tool-resolver.js';
|
|
14
|
+
import { reportUsageError } from '../lib/usage-error.js';
|
|
13
15
|
export const description = 'Re-apply drifted installed assets, keeping local edits (use --force to re-apply all)';
|
|
14
16
|
export const options = z.object({
|
|
17
|
+
check: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe(option({
|
|
21
|
+
description: "Exit 1 when installed files don't match the lockfile, local edits included; changes nothing (for CI)",
|
|
22
|
+
})),
|
|
15
23
|
dryRun: z
|
|
16
24
|
.boolean()
|
|
17
25
|
.default(false)
|
|
@@ -61,16 +69,20 @@ export const options = z.object({
|
|
|
61
69
|
description: 'Use the user scope (the user root, ~ by default) instead of the project',
|
|
62
70
|
})),
|
|
63
71
|
});
|
|
64
|
-
export default function Sync({ options: { dryRun, force, json, projectRoot, refresh, tool, user } }) {
|
|
72
|
+
export default function Sync({ options: { check, dryRun, force, json, projectRoot, refresh, tool, user } }) {
|
|
65
73
|
const { json: effectiveJson } = useNonInteractive(json);
|
|
66
74
|
const { fields, resolve, resolved } = useResolvedScope({ projectRoot, user });
|
|
67
75
|
const state = useCommand(async (progress) => {
|
|
76
|
+
if (check && force) {
|
|
77
|
+
reportUsageError('error: --check and --force contradict each other: --check changes nothing', effectiveJson);
|
|
78
|
+
}
|
|
68
79
|
const { root: projectDir, scope } = await resolve();
|
|
69
80
|
const tools = await resolvePlacingTools(tool, projectDir);
|
|
70
81
|
progress('Fetching registry...');
|
|
71
|
-
|
|
82
|
+
// The check writes nothing, so a cached registry serves when the API can't be read.
|
|
83
|
+
const registry = await fetchRegistry({ force: refresh, ...(check ? { stale: true } : {}) });
|
|
72
84
|
const projectConfig = await loadScopeConfig(projectDir);
|
|
73
|
-
if (dryRun) {
|
|
85
|
+
if (dryRun || check) {
|
|
74
86
|
const toolResults = await dryRunSync({
|
|
75
87
|
force,
|
|
76
88
|
onProgress: progress,
|
|
@@ -93,7 +105,7 @@ export default function Sync({ options: { dryRun, force, json, projectRoot, refr
|
|
|
93
105
|
});
|
|
94
106
|
const notRunTools = tools.slice(toolResults.length).map((t) => t.tool);
|
|
95
107
|
return { ...(notRunTools.length > 0 ? { notRunTools } : {}), outcome: 'synced', scope, toolResults };
|
|
96
|
-
}, [dryRun, force, projectRoot, refresh, tool, user]);
|
|
108
|
+
}, [check, dryRun, force, projectRoot, refresh, tool, user]);
|
|
97
109
|
if (state.status === 'loading') {
|
|
98
110
|
return _jsx(Spinner, { message: state.message });
|
|
99
111
|
}
|
|
@@ -112,13 +124,15 @@ export default function Sync({ options: { dryRun, force, json, projectRoot, refr
|
|
|
112
124
|
}
|
|
113
125
|
const { data } = state;
|
|
114
126
|
const where = resolved ? scopeLabel(resolved) : undefined;
|
|
115
|
-
const
|
|
116
|
-
|
|
127
|
+
const mismatched = data.outcome === 'dry-run' && check ? mismatchCount(data.toolResults) : 0;
|
|
128
|
+
const outcome = data.outcome === 'dry-run' ? (check ? 'sync-check' : 'sync-dry-run') : liveSyncOutcome(data.toolResults);
|
|
129
|
+
if (outcome === 'failed' || outcome === 'partial' || mismatched > 0) {
|
|
117
130
|
process.exitCode = 1;
|
|
118
131
|
}
|
|
119
132
|
if (effectiveJson) {
|
|
120
133
|
const notRunTools = data.outcome === 'synced' ? data.notRunTools : undefined;
|
|
121
134
|
return renderJson({
|
|
135
|
+
...(check ? { hasFailures: mismatched > 0 } : {}),
|
|
122
136
|
...(notRunTools ? { notRunTools } : {}),
|
|
123
137
|
outcome,
|
|
124
138
|
toolResults: data.toolResults,
|
|
@@ -126,7 +140,8 @@ export default function Sync({ options: { dryRun, force, json, projectRoot, refr
|
|
|
126
140
|
});
|
|
127
141
|
}
|
|
128
142
|
if (data.outcome === 'dry-run') {
|
|
129
|
-
return (
|
|
143
|
+
return (_jsxs(Box, { flexDirection: 'column', children: [data.toolResults.map((result) => (_jsxs(Box, { flexDirection: 'column', children: [_jsx(DryRunToolResult, { result: result, scope: data.scope, where: where }), _jsx(LocalEditsHint, { assets: result.localEdits ?? [], heading: localEditsHeading(result.localEdits?.length ?? 0, data.scope, true) }), _jsx(UndeclaredRemovedHint, { assets: result.wouldRemove ?? [], dryRun: true, tool: result.tool })] }, result.tool))), check &&
|
|
144
|
+
(mismatched > 0 ? (_jsxs(Text, { color: 'red', children: ["\u2717 ", assetCount(mismatched), " ", mismatched === 1 ? "doesn't" : "don't", " match the lockfile."] })) : (_jsx(Text, { color: 'green', children: "\u2713 Installed assets match the lockfile." })))] }));
|
|
130
145
|
}
|
|
131
146
|
const stoppedAt = data.toolResults.find((r) => r.notAttempted);
|
|
132
147
|
return (_jsxs(Box, { flexDirection: 'column', children: [data.toolResults.map((result) => (_jsxs(Box, { flexDirection: 'column', children: [_jsx(LiveToolResult, { result: result, scope: data.scope, where: where }), _jsx(LocalEditsHint, { assets: result.localEdits ?? [], heading: localEditsHeading(result.localEdits?.length ?? 0, data.scope, false) }), _jsx(UndeclaredRemovedHint, { assets: result.removed ?? [], tool: result.tool })] }, result.tool))), stoppedAt?.notAttempted && (_jsx(RunStoppedHint, { notAttempted: stoppedAt.notAttempted, notRunTools: data.notRunTools ?? [] }))] }));
|
|
@@ -174,4 +189,21 @@ function localEditsHeading(count, scope, dryRun) {
|
|
|
174
189
|
const force = scopedCommand('atk sync --force', scope);
|
|
175
190
|
return `${dryRun ? 'Would keep' : 'Kept'} local edits in ${assetCount(count)}, not synced (run ${force} to overwrite them):`;
|
|
176
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* How many assets `--check` fails on, each once across tools: those a sync would re-apply or
|
|
194
|
+
* refuse, those whose edits a sync keeps, and hook copies a sync would remove. Frozen and excluded
|
|
195
|
+
* assets don't count.
|
|
196
|
+
*/
|
|
197
|
+
function mismatchCount(toolResults) {
|
|
198
|
+
const keys = new Set();
|
|
199
|
+
for (const r of toolResults) {
|
|
200
|
+
for (const { asset } of r.toSync)
|
|
201
|
+
keys.add(identityKey(asset));
|
|
202
|
+
for (const a of [...(r.localEdits ?? []), ...(r.wouldRemove ?? [])])
|
|
203
|
+
keys.add(identityKey(a));
|
|
204
|
+
for (const f of r.wouldFail ?? [])
|
|
205
|
+
keys.add(identityKey({ name: f.assetName, org: f.org, type: f.assetType }));
|
|
206
|
+
}
|
|
207
|
+
return keys.size;
|
|
208
|
+
}
|
|
177
209
|
//# sourceMappingURL=sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAc,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,sFAAsF,CAAC;AAElH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,WAAW,EACT,sGAAsG;KACzG,CAAC,CACH;IACH,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,kDAAkD;KAChE,CAAC,CACH;IACH,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,0EAA0E;KACxF,CAAC,CACH;IACH,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,wCAAwC;KACtD,CAAC,CACH;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,iCAAiC;KAC/C,CAAC,CACH;IACH,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,gDAAgD;KAC9D,CAAC,CACH;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,iCAAiC;KAC/C,CAAC,CACH;IACH,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,WAAW,EAAE,yEAAyE;KACvF,CAAC,CACH;CACJ,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAS;IAC/G,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9E,MAAM,KAAK,GAAG,UAAU,CACtB,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjB,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,gBAAgB,CAAC,2EAA2E,EAAE,aAAa,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1D,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACjC,oFAAoF;QACpF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5F,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QAExD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC;gBACnC,KAAK;gBACL,UAAU,EAAE,QAAQ;gBACpB,aAAa;gBACb,UAAU;gBACV,QAAQ;gBACR,KAAK;gBACL,KAAK;aACN,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,SAAkB,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAC7D,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC;YACnC,KAAK;YACL,UAAU,EAAE,QAAQ;YACpB,aAAa;YACb,UAAU;YACV,QAAQ;YACR,KAAK;YACL,KAAK;SACN,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,QAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChH,CAAC,EACD,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CACzD,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAC,OAAO,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7B,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,UAAU,CAAC;gBAChB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,OAAO;gBAChB,GAAG,MAAM;aACV,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3G,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,OAAO,UAAU,CAAC;YAChB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO;YACP,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAChC,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAI,EACrE,KAAC,cAAc,IACb,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,EAC/B,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAC5E,EACF,KAAC,qBAAqB,IAAC,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,QAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAI,KANtD,MAAM,CAAC,IAAI,CAOtC,CACP,CAAC,EACD,KAAK;oBACJ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAChB,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,wBACZ,UAAU,CAAC,UAAU,CAAC,OAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,4BAC7D,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,4DAA8C,CAClE,CAAC,IACA,CACP,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAE/D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAChC,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAI,EACnE,KAAC,cAAc,IACb,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE,EAC/B,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAC7E,EACF,KAAC,qBAAqB,IAAC,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,GAAI,KAN3C,MAAM,CAAC,IAAI,CAOtC,CACP,CAAC,EACD,SAAS,EAAE,YAAY,IAAI,CAC1B,KAAC,cAAc,IAAC,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,GAAI,CAC9F,IACG,CACP,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,SAAS,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAA8D;IAC5G,MAAM,EACJ,aAAa,EACb,eAAe,GAAG,CAAC,EACnB,aAAa,EACb,UAAU,GAAG,EAAE,EACf,OAAO,EACP,IAAI,EACJ,MAAM,EACN,SAAS,GAAG,EAAE,GACf,GAAG,MAAM,CAAC;IAEX,IACE,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,OAAO,KAAK,CAAC;QACb,SAAS,CAAC,MAAM,KAAK,CAAC;QACtB,aAAa,KAAK,CAAC;QACnB,eAAe,KAAK,CAAC;QACrB,UAAU,CAAC,MAAM,KAAK,CAAC,EACvB,CAAC;QACD,OAAO,KAAC,YAAY,IAAC,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IAClF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,CACL,KAAC,aAAa,IACZ,MAAM,QACN,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,CAAC,MAAM,EAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,eAAe,IACd,MAAM,QACN,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,SAAS,EACnB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,SAAS,eAAe,CAAC,WAA6B;IACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACnE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7E,CAAC;AAED,4FAA4F;AAC5F,SAAS,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAA4D;IACxG,MAAM,EACJ,aAAa,EACb,eAAe,GAAG,CAAC,EACnB,QAAQ,EACR,aAAa,EACb,UAAU,GAAG,EAAE,EACf,OAAO,EACP,MAAM,EACN,IAAI,GACL,GAAG,MAAM,CAAC;IAEX,IACE,MAAM,CAAC,MAAM,KAAK,CAAC;QACnB,OAAO,KAAK,CAAC;QACb,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrB,aAAa,KAAK,CAAC;QACnB,eAAe,KAAK,CAAC;QACrB,UAAU,CAAC,MAAM,KAAK,CAAC,EACvB,CAAC;QACD,OAAO,KAAC,YAAY,IAAC,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;IAClF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,CACL,KAAC,aAAa,IACZ,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,CAAC,MAAM,EAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,eAAe,IACd,MAAM,EAAE,KAAK,EACb,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GACZ,CACH,CAAC;AACJ,CAAC;AAED,8GAA8G;AAC9G,SAAS,iBAAiB,CAAC,KAAa,EAAE,KAAY,EAAE,MAAe;IACrE,MAAM,KAAK,GAAG,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACvD,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,mBAAmB,UAAU,CAAC,KAAK,CAAC,qBAAqB,KAAK,sBAAsB,CAAC;AAC/H,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,WAA+B;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { RegistryBundle } from '../lib/schemas/index.js';
|
|
2
2
|
interface BundleDetailProps {
|
|
3
3
|
bundle: RegistryBundle;
|
|
4
|
+
/** The bundle is generated into the claude.ai plugins marketplace */
|
|
5
|
+
claudePlugin?: boolean;
|
|
4
6
|
/** Optional deprecation info */
|
|
5
7
|
deprecation?: {
|
|
6
8
|
deprecated: boolean;
|
|
@@ -13,6 +15,6 @@ interface BundleDetailProps {
|
|
|
13
15
|
readme?: string;
|
|
14
16
|
webUrl?: string;
|
|
15
17
|
}
|
|
16
|
-
export default function BundleDetail({ bundle, deprecation, full, readme, webUrl }: BundleDetailProps): import("react").JSX.Element;
|
|
18
|
+
export default function BundleDetail({ bundle, claudePlugin, deprecation, full, readme, webUrl }: BundleDetailProps): import("react").JSX.Element;
|
|
17
19
|
export {};
|
|
18
20
|
//# sourceMappingURL=BundleDetail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BundleDetail.d.ts","sourceRoot":"","sources":["../../src/components/BundleDetail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"BundleDetail.d.ts","sourceRoot":"","sources":["../../src/components/BundleDetail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAW9D,UAAU,iBAAiB;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gCAAgC;IAChC,WAAW,CAAC,EAAE;QACZ,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,4DAA4D;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,iBAAiB,+BA2FlH"}
|
|
@@ -5,11 +5,13 @@ import Field from './Field.js';
|
|
|
5
5
|
import Link from './Link.js';
|
|
6
6
|
import ReadmeSection from './ReadmeSection.js';
|
|
7
7
|
import SectionDivider from './SectionDivider.js';
|
|
8
|
-
|
|
8
|
+
/** The claude.ai plugins marketplace that flagged bundles are generated into (ATK-538). */
|
|
9
|
+
const ATK_PLUGINS_URL = 'https://github.com/EmergentSoftware/atk-plugins';
|
|
10
|
+
export default function BundleDetail({ bundle, claudePlugin, deprecation, full, readme, webUrl }) {
|
|
9
11
|
const { stdout } = useStdout();
|
|
10
12
|
const terminalWidth = stdout?.columns ?? 120;
|
|
11
13
|
const dividerWidth = Math.max(40, terminalWidth - 6);
|
|
12
14
|
const assets = bundle.assets ?? [];
|
|
13
|
-
return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Box, { borderColor: 'gray', borderStyle: 'round', flexDirection: 'column', paddingX: 1, children: [_jsx(Text, { bold: true, color: 'cyan', children: formatOrgName(bundle.org, bundle.name) }), _jsxs(Text, { dimColor: true, children: ["bundle \u00B7 v", bundle.version, " \u00B7 ", bundle.assetCount, " asset", bundle.assetCount !== 1 ? 's' : ''] })] }), deprecation?.deprecated && (_jsxs(Box, { marginTop: 1, paddingLeft: 2, children: [_jsxs(Text, { bold: true, color: 'red', children: ["DEPRECATED: ", deprecation.reason] }), deprecation.replacement && (_jsxs(Text, { children: [' ', "Use ", _jsx(Text, { bold: true, children: deprecation.replacement }), " instead."] }))] })), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { wrap: 'wrap', children: bundle.description }) }), _jsxs(Box, { flexDirection: 'column', marginTop: 1, paddingLeft: 2, children: [_jsx(Field, { label: 'Author', value: bundle.author }), bundle.tags.length > 0 && (_jsx(Field, { label: 'Tags', children: _jsx(Text, { children: bundle.tags.map((tag, i) => (_jsxs(Text, { children: [i > 0 ? ', ' : '', _jsx(Text, { color: 'blue', children: tag })] }, tag))) }) }))] }), assets.length > 0 && (_jsxs(Box, { flexDirection: 'column', marginTop: 1, children: [_jsx(SectionDivider, { label: `Assets (${assets.length})`, width: dividerWidth }), assets.map((a) => (_jsxs(Text, { children: [' ', formatOrgName(a.org, a.name), " ", _jsxs(Text, { dimColor: true, children: ["(", a.type, ")"] })] }, `${a.org ?? '_'}/${a.type}/${a.name}`)))] })), readme && _jsx(ReadmeSection, { dividerWidth: dividerWidth, full: full, readme: readme }), webUrl && (_jsxs(Box, { marginTop: 1, paddingLeft: 2, children: [_jsx(Text, { dimColor: true, children: "Web: " }), _jsx(Link, { url: webUrl, children: webUrl })] }))] }));
|
|
15
|
+
return (_jsxs(Box, { flexDirection: 'column', children: [_jsxs(Box, { borderColor: 'gray', borderStyle: 'round', flexDirection: 'column', paddingX: 1, children: [_jsx(Text, { bold: true, color: 'cyan', children: formatOrgName(bundle.org, bundle.name) }), _jsxs(Text, { dimColor: true, children: ["bundle \u00B7 v", bundle.version, " \u00B7 ", bundle.assetCount, " asset", bundle.assetCount !== 1 ? 's' : ''] })] }), deprecation?.deprecated && (_jsxs(Box, { marginTop: 1, paddingLeft: 2, children: [_jsxs(Text, { bold: true, color: 'red', children: ["DEPRECATED: ", deprecation.reason] }), deprecation.replacement && (_jsxs(Text, { children: [' ', "Use ", _jsx(Text, { bold: true, children: deprecation.replacement }), " instead."] }))] })), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { wrap: 'wrap', children: bundle.description }) }), _jsxs(Box, { flexDirection: 'column', marginTop: 1, paddingLeft: 2, children: [_jsx(Field, { label: 'Author', value: bundle.author }), bundle.tags.length > 0 && (_jsx(Field, { label: 'Tags', children: _jsx(Text, { children: bundle.tags.map((tag, i) => (_jsxs(Text, { children: [i > 0 ? ', ' : '', _jsx(Text, { color: 'blue', children: tag })] }, tag))) }) })), claudePlugin && (_jsx(Field, { label: 'claude.ai', children: _jsxs(Box, { flexDirection: 'column', children: [_jsxs(Text, { children: ["A plugin for claude.ai chat users: ", _jsx(Link, { url: ATK_PLUGINS_URL, children: ATK_PLUGINS_URL })] }), _jsx(Text, { dimColor: true, wrap: 'wrap', children: "atk users don't need it: it syncs into Claude Code, doubling each skill." })] }) }))] }), assets.length > 0 && (_jsxs(Box, { flexDirection: 'column', marginTop: 1, children: [_jsx(SectionDivider, { label: `Assets (${assets.length})`, width: dividerWidth }), assets.map((a) => (_jsxs(Text, { children: [' ', formatOrgName(a.org, a.name), " ", _jsxs(Text, { dimColor: true, children: ["(", a.type, ")"] })] }, `${a.org ?? '_'}/${a.type}/${a.name}`)))] })), readme && _jsx(ReadmeSection, { dividerWidth: dividerWidth, full: full, readme: readme }), webUrl && (_jsxs(Box, { marginTop: 1, paddingLeft: 2, children: [_jsx(Text, { dimColor: true, children: "Web: " }), _jsx(Link, { url: webUrl, children: webUrl })] }))] }));
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=BundleDetail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BundleDetail.js","sourceRoot":"","sources":["../../src/components/BundleDetail.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAI3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,cAAc,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"BundleDetail.js","sourceRoot":"","sources":["../../src/components/BundleDetail.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAI3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,2FAA2F;AAC3F,MAAM,eAAe,GAAG,iDAAiD,CAAC;AAmB1E,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAqB;IACjH,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,aAAa,GAAG,MAAM,EAAE,OAAO,IAAI,GAAG,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAEzB,MAAC,GAAG,IAAC,WAAW,EAAC,MAAM,EAAC,WAAW,EAAC,OAAO,EAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aAC5E,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YACpB,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAClC,EACP,MAAC,IAAI,IAAC,QAAQ,sCACD,MAAM,CAAC,OAAO,cAAK,MAAM,CAAC,UAAU,YAAQ,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IACpF,IACH,EAGL,WAAW,EAAE,UAAU,IAAI,CAC1B,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,aAC/B,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,KAAK,6BACP,WAAW,CAAC,MAAM,IAC1B,EACN,WAAW,CAAC,WAAW,IAAI,CAC1B,MAAC,IAAI,eACF,GAAG,UACA,KAAC,IAAI,IAAC,IAAI,kBAAE,WAAW,CAAC,WAAW,GAAQ,iBAC1C,CACR,IACG,CACP,EAGD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,YAC/B,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,YAAE,MAAM,CAAC,WAAW,GAAQ,GACzC,EAGN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,aACtD,KAAC,KAAK,IAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAI,EAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,YACjB,KAAC,IAAI,cACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3B,MAAC,IAAI,eACF,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAClB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,GAAG,GAAQ,KAFtB,GAAG,CAGP,CACR,CAAC,GACG,GACD,CACT,EACA,YAAY,IAAI,CACf,KAAC,KAAK,IAAC,KAAK,EAAC,WAAW,YACtB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,sDACgC,KAAC,IAAI,IAAC,GAAG,EAAE,eAAe,YAAG,eAAe,GAAQ,IAClF,EACP,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,MAAM,yFAEnB,IACH,GACA,CACT,IACG,EAGL,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CACpB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,cAAc,IAAC,KAAK,EAAE,WAAW,MAAM,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,YAAY,GAAI,EAC1E,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,MAAC,IAAI,eACF,IAAI,EACJ,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,OAAE,MAAC,IAAI,IAAC,QAAQ,wBAAG,CAAC,CAAC,IAAI,SAAS,KAFtD,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAGzC,CACR,CAAC,IACE,CACP,EAGA,MAAM,IAAI,KAAC,aAAa,IAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAI,EACnF,MAAM,IAAI,CACT,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,aAC/B,KAAC,IAAI,IAAC,QAAQ,4BAAa,EAC3B,KAAC,IAAI,IAAC,GAAG,EAAE,MAAM,YAAG,MAAM,GAAQ,IAC9B,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -4,6 +4,6 @@ import { Box, Text } from 'ink';
|
|
|
4
4
|
* Metadata field with consistent label width alignment.
|
|
5
5
|
*/
|
|
6
6
|
export default function Field({ children, color, dimValue, label, value, }) {
|
|
7
|
-
return (_jsxs(Box, { children: [_jsx(Box, { width: 14, children: _jsxs(Text, { bold: true, children: [label, ":"] }) }), children ?? (_jsx(Text, { color: color, dimColor: dimValue, wrap: 'truncate', children: value }))] }));
|
|
7
|
+
return (_jsxs(Box, { children: [_jsx(Box, { flexShrink: 0, width: 14, children: _jsxs(Text, { bold: true, children: [label, ":"] }) }), children ?? (_jsx(Text, { color: color, dimColor: dimValue, wrap: 'truncate', children: value }))] }));
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=Field.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/components/Field.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,GAON;IACC,OAAO,CACL,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/components/Field.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAC5B,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,GAON;IACC,OAAO,CACL,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,YAC3B,MAAC,IAAI,IAAC,IAAI,mBAAE,KAAK,SAAS,GACtB,EACL,QAAQ,IAAI,CACX,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,UAAU,YACpD,KAAK,GACD,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1458,7 +1458,7 @@ export type PublishPlanErrors = {
|
|
|
1458
1458
|
*/
|
|
1459
1459
|
426: ApiError;
|
|
1460
1460
|
/**
|
|
1461
|
-
* The API's GitHub
|
|
1461
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1462
1462
|
*/
|
|
1463
1463
|
500: ApiError;
|
|
1464
1464
|
/**
|
|
@@ -1506,7 +1506,7 @@ export type PublishErrors = {
|
|
|
1506
1506
|
*/
|
|
1507
1507
|
426: ApiError;
|
|
1508
1508
|
/**
|
|
1509
|
-
* The API's GitHub
|
|
1509
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1510
1510
|
*/
|
|
1511
1511
|
500: ApiError;
|
|
1512
1512
|
/**
|
|
@@ -1554,7 +1554,7 @@ export type UnpublishPlanErrors = {
|
|
|
1554
1554
|
*/
|
|
1555
1555
|
426: ApiError;
|
|
1556
1556
|
/**
|
|
1557
|
-
* The API's GitHub
|
|
1557
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1558
1558
|
*/
|
|
1559
1559
|
500: ApiError;
|
|
1560
1560
|
/**
|
|
@@ -1602,7 +1602,7 @@ export type UnpublishErrors = {
|
|
|
1602
1602
|
*/
|
|
1603
1603
|
426: ApiError;
|
|
1604
1604
|
/**
|
|
1605
|
-
* The API's GitHub
|
|
1605
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1606
1606
|
*/
|
|
1607
1607
|
500: ApiError;
|
|
1608
1608
|
/**
|
|
@@ -1650,7 +1650,7 @@ export type PromotePlanErrors = {
|
|
|
1650
1650
|
*/
|
|
1651
1651
|
426: ApiError;
|
|
1652
1652
|
/**
|
|
1653
|
-
* The API's GitHub
|
|
1653
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1654
1654
|
*/
|
|
1655
1655
|
500: ApiError;
|
|
1656
1656
|
/**
|
|
@@ -1698,7 +1698,7 @@ export type PromoteErrors = {
|
|
|
1698
1698
|
*/
|
|
1699
1699
|
426: ApiError;
|
|
1700
1700
|
/**
|
|
1701
|
-
* The API's GitHub
|
|
1701
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1702
1702
|
*/
|
|
1703
1703
|
500: ApiError;
|
|
1704
1704
|
/**
|
|
@@ -1746,7 +1746,7 @@ export type DeprecatePlanErrors = {
|
|
|
1746
1746
|
*/
|
|
1747
1747
|
426: ApiError;
|
|
1748
1748
|
/**
|
|
1749
|
-
* The API's GitHub
|
|
1749
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1750
1750
|
*/
|
|
1751
1751
|
500: ApiError;
|
|
1752
1752
|
/**
|
|
@@ -1794,7 +1794,7 @@ export type DeprecateErrors = {
|
|
|
1794
1794
|
*/
|
|
1795
1795
|
426: ApiError;
|
|
1796
1796
|
/**
|
|
1797
|
-
* The API's GitHub
|
|
1797
|
+
* The API's GitHub credentials for registry writes are missing or rejected (`server_misconfigured`)
|
|
1798
1798
|
*/
|
|
1799
1799
|
500: ApiError;
|
|
1800
1800
|
/**
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Bundle } from './bundle.ts';
|
|
2
|
+
import type { Manifest } from './manifest.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The rules a bundle flagged `metadata.claudePlugin` must meet to become a claude.ai plugin, and what the plugin holds
|
|
5
|
+
* when it does (ATK-538). One source for both readers of the registry: `@atk/claude-plugins` checks a registry
|
|
6
|
+
* checkout before it generates the plugins, and the API checks its snapshot before a flagged bundle's publish
|
|
7
|
+
* (ATK-747). Every problem names the bundle and the asset. No I/O and no `node:path`, since the CLI vendors this
|
|
8
|
+
* package: the {@link ClaudePluginRegistry} reads, and paths are compared as plain strings.
|
|
9
|
+
*/
|
|
10
|
+
/** The asset types a plugin can hold, and their directories under `assets/`. */
|
|
11
|
+
export declare const CLAUDE_PLUGIN_TYPE_DIRS: {
|
|
12
|
+
readonly 'mcp-config': "mcp-configs";
|
|
13
|
+
readonly skill: "skills";
|
|
14
|
+
};
|
|
15
|
+
export interface ClaudePlugin {
|
|
16
|
+
mcpServers: Record<string, Record<string, unknown>>;
|
|
17
|
+
skills: ClaudePluginSkill[];
|
|
18
|
+
}
|
|
19
|
+
export type ClaudePluginAssetType = keyof typeof CLAUDE_PLUGIN_TYPE_DIRS;
|
|
20
|
+
export interface ClaudePluginProblem {
|
|
21
|
+
/** The index in the bundle's `assets` of the asset it is about; absent for the bundle itself. */
|
|
22
|
+
asset?: number;
|
|
23
|
+
message: string;
|
|
24
|
+
}
|
|
25
|
+
/** A global asset version of the registry, read from a checkout or a snapshot. */
|
|
26
|
+
export interface ClaudePluginRegistry {
|
|
27
|
+
/** Whether the version's directory has `file`, a normalized path relative to it (with /). */
|
|
28
|
+
isFile(type: ClaudePluginAssetType, name: string, version: string, file: string): Promise<boolean>;
|
|
29
|
+
/** The names of the files at the top of the version's directory. */
|
|
30
|
+
listFiles(type: ClaudePluginAssetType, name: string, version: string): Promise<string[]>;
|
|
31
|
+
/** The version's `manifest.json`, or undefined when the registry has no such version. */
|
|
32
|
+
manifest(type: ClaudePluginAssetType, name: string, version: string): Promise<Manifest | undefined>;
|
|
33
|
+
/** A file of the version's directory (a normalized path relative to it), or undefined when it has none. */
|
|
34
|
+
readText(type: ClaudePluginAssetType, name: string, version: string, file: string): Promise<string | undefined>;
|
|
35
|
+
}
|
|
36
|
+
export interface ClaudePluginSkill {
|
|
37
|
+
entrypoint: string;
|
|
38
|
+
/** The files besides the entrypoint, which the plugin places as SKILL.md. */
|
|
39
|
+
files: string[];
|
|
40
|
+
name: string;
|
|
41
|
+
version: string;
|
|
42
|
+
}
|
|
43
|
+
export type ResolvedClaudePlugin = {
|
|
44
|
+
plugin: ClaudePlugin;
|
|
45
|
+
problems: [];
|
|
46
|
+
} | {
|
|
47
|
+
plugin?: undefined;
|
|
48
|
+
problems: ClaudePluginProblem[];
|
|
49
|
+
};
|
|
50
|
+
/** True when the bundle asks to become a claude.ai plugin. */
|
|
51
|
+
export declare function isClaudePlugin(bundle: Pick<Bundle, 'metadata'>): boolean;
|
|
52
|
+
/** Checks the bundle against the plugin rules; `org` is its scope (the bundle's own, or its `bundles/@<org>/` directory). */
|
|
53
|
+
export declare function resolveClaudePlugin(bundle: Pick<Bundle, 'assets' | 'name' | 'version'>, { org }: {
|
|
54
|
+
org: string | undefined;
|
|
55
|
+
}, registry: ClaudePluginRegistry): Promise<ResolvedClaudePlugin>;
|
|
56
|
+
//# sourceMappingURL=claude-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-plugin.d.ts","sourceRoot":"","sources":["../../../src/lib/atk-schemas/claude-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;GAMG;AAEH,gFAAgF;AAChF,eAAO,MAAM,uBAAuB;;;CAA4D,CAAC;AACjG,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,iGAAiG;IACjG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,6FAA6F;IAC7F,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnG,oEAAoE;IACpE,SAAS,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzF,yFAAyF;IACzF,QAAQ,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IACpG,2GAA2G;IAC3G,QAAQ,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACjH;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,oBAAoB,GAC9B;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,EAAE,CAAA;CAAE,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAC;AAMnG,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,OAAO,CAExE;AAED,6HAA6H;AAC7H,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC,EACnD,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EACpC,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA0F/B"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
// GENERATED from packages/schemas by `pnpm sync-cli`. Do not edit.
|
|
2
|
+
import { satisfies, valid } from 'semver';
|
|
3
|
+
/**
|
|
4
|
+
* The rules a bundle flagged `metadata.claudePlugin` must meet to become a claude.ai plugin, and what the plugin holds
|
|
5
|
+
* when it does (ATK-538). One source for both readers of the registry: `@atk/claude-plugins` checks a registry
|
|
6
|
+
* checkout before it generates the plugins, and the API checks its snapshot before a flagged bundle's publish
|
|
7
|
+
* (ATK-747). Every problem names the bundle and the asset. No I/O and no `node:path`, since the CLI vendors this
|
|
8
|
+
* package: the {@link ClaudePluginRegistry} reads, and paths are compared as plain strings.
|
|
9
|
+
*/
|
|
10
|
+
/** The asset types a plugin can hold, and their directories under `assets/`. */
|
|
11
|
+
export const CLAUDE_PLUGIN_TYPE_DIRS = { 'mcp-config': 'mcp-configs', skill: 'skills' };
|
|
12
|
+
const PLACEHOLDER = /\$\{[^}]*\}/;
|
|
13
|
+
// The registry's asset and bundle names (apps/api/src/publish/plan-builder.ts): they become directory names.
|
|
14
|
+
const NAME = /^[a-z][a-z0-9-]*$/;
|
|
15
|
+
/** True when the bundle asks to become a claude.ai plugin. */
|
|
16
|
+
export function isClaudePlugin(bundle) {
|
|
17
|
+
return bundle.metadata?.['claudePlugin'] === true;
|
|
18
|
+
}
|
|
19
|
+
/** Checks the bundle against the plugin rules; `org` is its scope (the bundle's own, or its `bundles/@<org>/` directory). */
|
|
20
|
+
export async function resolveClaudePlugin(bundle, { org }, registry) {
|
|
21
|
+
const problems = [];
|
|
22
|
+
const prefix = `bundle ${bundle.name}@${bundle.version}`;
|
|
23
|
+
if (org !== undefined) {
|
|
24
|
+
problems.push({ message: `${prefix}: is org-scoped (@${org}); every staff member can read the plugins repo` });
|
|
25
|
+
}
|
|
26
|
+
if (!NAME.test(bundle.name)) {
|
|
27
|
+
problems.push({ message: `${prefix}: isn't a kebab-case name, so it can't name a plugin` });
|
|
28
|
+
}
|
|
29
|
+
const skills = [];
|
|
30
|
+
const mcpServers = new Map();
|
|
31
|
+
for (const [asset, ref] of bundle.assets.entries()) {
|
|
32
|
+
const label = `${ref.type} "${ref.name}"${ref.version === undefined ? '' : `@${ref.version}`}`;
|
|
33
|
+
const fail = (message) => problems.push({ asset, message: `${prefix}: ${label} ${message}` });
|
|
34
|
+
if (!NAME.test(ref.name)) {
|
|
35
|
+
fail(`isn't a kebab-case name`);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (ref.org !== undefined) {
|
|
39
|
+
fail(`is org-scoped (@${ref.org}); every staff member can read the plugins repo`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (!isPluginType(ref.type)) {
|
|
43
|
+
fail(`can't be in a claude.ai plugin: only skill and mcp-config assets can`);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (!isExact(ref.version)) {
|
|
47
|
+
fail(`isn't pinned to an exact version, so the plugin could change without a version bump`);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const { name } = ref;
|
|
51
|
+
const type = ref.type;
|
|
52
|
+
const version = ref.version;
|
|
53
|
+
const manifest = await registry.manifest(type, name, version);
|
|
54
|
+
if (manifest === undefined) {
|
|
55
|
+
fail(`isn't in the registry (no assets/${CLAUDE_PLUGIN_TYPE_DIRS[type]}/${name}/${version})`);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (manifest.org !== undefined) {
|
|
59
|
+
fail(`is org-scoped (@${manifest.org}); every staff member can read the plugins repo`);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
for (const message of dependencyProblems(manifest, bundle.assets))
|
|
63
|
+
fail(message);
|
|
64
|
+
if (manifest.files === 'auto') {
|
|
65
|
+
fail(`lists its files as "auto"; a published manifest lists them`);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const entrypoint = manifest.entrypoint ?? (await defaultEntrypoint(registry, type, name, version));
|
|
69
|
+
// The entrypoint is placed as SKILL.md, so a `files` entry naming it again would be a second copy.
|
|
70
|
+
const files = (manifest.files ?? []).filter((file) => normalize(file) !== normalize(entrypoint));
|
|
71
|
+
const outside = [entrypoint, ...files].filter((file) => !isInside(file));
|
|
72
|
+
if (outside.length > 0) {
|
|
73
|
+
fail(`lists files outside its directory: ${outside.join(', ')}`);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (type === 'skill') {
|
|
77
|
+
const missing = [];
|
|
78
|
+
for (const file of [entrypoint, ...files]) {
|
|
79
|
+
if (!(await registry.isFile(type, name, version, normalize(file))))
|
|
80
|
+
missing.push(file);
|
|
81
|
+
}
|
|
82
|
+
if (missing.length > 0) {
|
|
83
|
+
fail(`lists files the registry doesn't have: ${missing.join(', ')}`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (files.some((file) => normalize(file).toLowerCase() === 'skill.md')) {
|
|
87
|
+
fail(`lists a SKILL.md besides its entrypoint ${entrypoint}, which the plugin places as SKILL.md`);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// Normalized, as the registry was asked for them, so the plugin copies the files the check found.
|
|
91
|
+
skills.push({ entrypoint: normalize(entrypoint), files: files.map(normalize), name, version });
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const servers = parseServers(await registry.readText(type, name, version, normalize(entrypoint)), entrypoint);
|
|
95
|
+
if (typeof servers === 'string') {
|
|
96
|
+
fail(servers);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
for (const [server, config] of servers) {
|
|
100
|
+
for (const message of serverProblems(config))
|
|
101
|
+
fail(`server "${server}" ${message}`);
|
|
102
|
+
if (mcpServers.has(server))
|
|
103
|
+
fail(`server "${server}" is also in another mcp-config of the bundle`);
|
|
104
|
+
mcpServers.set(server, config);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return problems.length > 0
|
|
108
|
+
? { problems }
|
|
109
|
+
: { plugin: { mcpServers: Object.fromEntries(mcpServers), skills }, problems: [] };
|
|
110
|
+
}
|
|
111
|
+
// An mcp-config's manifest may leave out its entrypoint: then it is the file the CLI takes for one
|
|
112
|
+
// (apps/cli/src/lib/adapter.ts isEntrypoint). A skill's manifest must name it.
|
|
113
|
+
async function defaultEntrypoint(registry, type, name, version) {
|
|
114
|
+
if (type === 'skill')
|
|
115
|
+
return 'SKILL.md';
|
|
116
|
+
const names = (await registry.listFiles(type, name, version)).sort();
|
|
117
|
+
return names.find((name) => /^(mcp-config|config|index)\.json$/i.test(name)) ?? 'config.json';
|
|
118
|
+
}
|
|
119
|
+
// Each dependency must be in the bundle, pinned: a semver range the bundle doesn't pin would change the plugin
|
|
120
|
+
// without a version bump, and users wouldn't get it. A dependency's own dependencies are checked as its bundle entry.
|
|
121
|
+
function dependencyProblems(manifest, refs) {
|
|
122
|
+
return (manifest.dependencies ?? []).flatMap((dep) => {
|
|
123
|
+
const pinned = refs.find((ref) => ref.name === dep.name && ref.type === dep.type);
|
|
124
|
+
const name = `dependency ${dep.type} "${dep.name}"${dep.version === undefined ? '' : ` (${dep.version})`}`;
|
|
125
|
+
if (pinned === undefined || !isExact(pinned.version)) {
|
|
126
|
+
return [`has ${name}, which the bundle doesn't list with an exact version`];
|
|
127
|
+
}
|
|
128
|
+
if (dep.version !== undefined && !satisfies(pinned.version, dep.version)) {
|
|
129
|
+
return [`has ${name}, which the bundle's ${pinned.version} doesn't satisfy`];
|
|
130
|
+
}
|
|
131
|
+
return [];
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function isExact(version) {
|
|
135
|
+
return version !== undefined && valid(version) === version;
|
|
136
|
+
}
|
|
137
|
+
function isInside(file) {
|
|
138
|
+
const normal = normalize(file);
|
|
139
|
+
return !normal.startsWith('/') && normal !== '..' && !normal.startsWith('../');
|
|
140
|
+
}
|
|
141
|
+
function isPluginType(type) {
|
|
142
|
+
return Object.hasOwn(CLAUDE_PLUGIN_TYPE_DIRS, type);
|
|
143
|
+
}
|
|
144
|
+
function isRecord(value) {
|
|
145
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
146
|
+
}
|
|
147
|
+
/** `path.posix.normalize` after turning backslashes into slashes, for comparing relative paths. */
|
|
148
|
+
function normalize(file) {
|
|
149
|
+
const slashed = file.replaceAll('\\', '/');
|
|
150
|
+
const absolute = slashed.startsWith('/');
|
|
151
|
+
const segments = [];
|
|
152
|
+
for (const segment of slashed.split('/')) {
|
|
153
|
+
if (segment === '' || segment === '.')
|
|
154
|
+
continue;
|
|
155
|
+
if (segment !== '..')
|
|
156
|
+
segments.push(segment);
|
|
157
|
+
else if (segments.length > 0 && segments.at(-1) !== '..')
|
|
158
|
+
segments.pop();
|
|
159
|
+
else if (!absolute)
|
|
160
|
+
segments.push(segment);
|
|
161
|
+
}
|
|
162
|
+
const joined = segments.join('/');
|
|
163
|
+
const normal = absolute ? `/${joined}` : joined || '.';
|
|
164
|
+
return slashed.endsWith('/') && joined !== '' ? `${normal}/` : normal;
|
|
165
|
+
}
|
|
166
|
+
function parseServers(text, entrypoint) {
|
|
167
|
+
if (text === undefined)
|
|
168
|
+
return `has no ${entrypoint}`;
|
|
169
|
+
let config;
|
|
170
|
+
try {
|
|
171
|
+
config = JSON.parse(text);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return `has a ${entrypoint} that isn't JSON`;
|
|
175
|
+
}
|
|
176
|
+
const servers = isRecord(config) ? config['mcpServers'] : undefined;
|
|
177
|
+
const entries = isRecord(servers) ? Object.entries(servers) : [];
|
|
178
|
+
const valid = entries.filter((entry) => isRecord(entry[1]));
|
|
179
|
+
if (entries.length === 0 || valid.length < entries.length)
|
|
180
|
+
return `has no mcpServers in ${entrypoint}`;
|
|
181
|
+
return valid;
|
|
182
|
+
}
|
|
183
|
+
// Chat runs remote servers only, and can't fill environment variables.
|
|
184
|
+
function serverProblems(server) {
|
|
185
|
+
const problems = [];
|
|
186
|
+
const { headers, type, url } = server;
|
|
187
|
+
if (type !== 'http' && type !== 'sse') {
|
|
188
|
+
const kind = type === undefined ? 'has no type, so it is stdio' : `is ${JSON.stringify(type)}`;
|
|
189
|
+
problems.push(`${kind}; claude.ai runs only http and sse servers`);
|
|
190
|
+
}
|
|
191
|
+
if (typeof url !== 'string')
|
|
192
|
+
problems.push(`has no url`);
|
|
193
|
+
const values = [url, ...(isRecord(headers) ? Object.values(headers) : [])];
|
|
194
|
+
if (values.some((value) => typeof value === 'string' && PLACEHOLDER.test(value))) {
|
|
195
|
+
problems.push(`has a \${…} placeholder in its url or headers, which claude.ai can't fill`);
|
|
196
|
+
}
|
|
197
|
+
return problems;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=claude-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-plugin.js","sourceRoot":"","sources":["../../../src/lib/atk-schemas/claude-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,15 @@
|
|
|
8
8
|
* - The CLI vendors them (`pnpm sync-cli` → apps/cli/src/lib/atk-schemas/) and
|
|
9
9
|
* re-exports them from its schemas barrel, so `scripts/export-schemas.ts` (and
|
|
10
10
|
* through it the .NET API's vendored JSON Schemas) still exports them.
|
|
11
|
+
* - `resolveClaudePlugin` is the claude.ai plugin rules, which `@atk/claude-plugins`
|
|
12
|
+
* and the API's bundle publish both apply (ATK-747).
|
|
11
13
|
* - `withoutNullOptionals` (and `withNullOptionalsAsAbsent`, a schema that
|
|
12
14
|
* applies it) is how the API, the API client and the CLI read a published
|
|
13
15
|
* registry file (`registry.json`, `bundle.json`, an asset's `manifest.json`):
|
|
14
16
|
* a `null` optional object property reads as absent.
|
|
15
17
|
*/
|
|
16
18
|
export { type Bundle, BundleAssetRef, BundleSchema } from './bundle.ts';
|
|
19
|
+
export { CLAUDE_PLUGIN_TYPE_DIRS, type ClaudePlugin, type ClaudePluginAssetType, type ClaudePluginProblem, type ClaudePluginRegistry, type ClaudePluginSkill, isClaudePlugin, resolveClaudePlugin, type ResolvedClaudePlugin, } from './claude-plugin.ts';
|
|
17
20
|
export { AssetDependency, AssetType as AssetTypeSchema, HookConfig, HookEventBinding, type Manifest, ManifestSchema, SecurityBlock, } from './manifest.ts';
|
|
18
21
|
export { withNullOptionalsAsAbsent, withoutNullOptionals } from './null-optionals.ts';
|
|
19
22
|
export { DeprecatedEntry, type Registry, RegistryAsset, type RegistryAssetVersion, RegistryAssetVersionSchema, type RegistryAssetVersionsMap, RegistryAssetVersionsMapSchema, RegistryBundle, RegistrySchema, } from './registry.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/atk-schemas/index.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/atk-schemas/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EACL,uBAAuB,EACvB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,cAAc,EACd,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,SAAS,IAAI,eAAe,EAC5B,UAAU,EACV,gBAAgB,EAChB,KAAK,QAAQ,EACb,cAAc,EACd,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACL,eAAe,EACf,KAAK,QAAQ,EACb,aAAa,EACb,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|