@detergent-software/atk 0.12.1-dev.2
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/build/cli.d.ts +3 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +35 -0
- package/build/cli.js.map +1 -0
- package/build/commands/_app.d.ts +3 -0
- package/build/commands/_app.d.ts.map +1 -0
- package/build/commands/_app.js +12 -0
- package/build/commands/_app.js.map +1 -0
- package/build/commands/audit.d.ts +12 -0
- package/build/commands/audit.d.ts.map +1 -0
- package/build/commands/audit.js +78 -0
- package/build/commands/audit.js.map +1 -0
- package/build/commands/browse.d.ts +15 -0
- package/build/commands/browse.d.ts.map +1 -0
- package/build/commands/browse.js +284 -0
- package/build/commands/browse.js.map +1 -0
- package/build/commands/cache.d.ts +13 -0
- package/build/commands/cache.d.ts.map +1 -0
- package/build/commands/cache.js +67 -0
- package/build/commands/cache.js.map +1 -0
- package/build/commands/config.d.ts +13 -0
- package/build/commands/config.d.ts.map +1 -0
- package/build/commands/config.js +62 -0
- package/build/commands/config.js.map +1 -0
- package/build/commands/diff.d.ts +16 -0
- package/build/commands/diff.d.ts.map +1 -0
- package/build/commands/diff.js +158 -0
- package/build/commands/diff.js.map +1 -0
- package/build/commands/doctor.d.ts +11 -0
- package/build/commands/doctor.d.ts.map +1 -0
- package/build/commands/doctor.js +30 -0
- package/build/commands/doctor.js.map +1 -0
- package/build/commands/index.d.ts +3 -0
- package/build/commands/index.d.ts.map +1 -0
- package/build/commands/index.js +30 -0
- package/build/commands/index.js.map +1 -0
- package/build/commands/info.d.ts +25 -0
- package/build/commands/info.d.ts.map +1 -0
- package/build/commands/info.js +198 -0
- package/build/commands/info.js.map +1 -0
- package/build/commands/init.d.ts +17 -0
- package/build/commands/init.d.ts.map +1 -0
- package/build/commands/init.js +504 -0
- package/build/commands/init.js.map +1 -0
- package/build/commands/install.d.ts +18 -0
- package/build/commands/install.d.ts.map +1 -0
- package/build/commands/install.js +186 -0
- package/build/commands/install.js.map +1 -0
- package/build/commands/list.d.ts +20 -0
- package/build/commands/list.d.ts.map +1 -0
- package/build/commands/list.js +61 -0
- package/build/commands/list.js.map +1 -0
- package/build/commands/outdated.d.ts +21 -0
- package/build/commands/outdated.d.ts.map +1 -0
- package/build/commands/outdated.js +81 -0
- package/build/commands/outdated.js.map +1 -0
- package/build/commands/pin.d.ts +22 -0
- package/build/commands/pin.d.ts.map +1 -0
- package/build/commands/pin.js +94 -0
- package/build/commands/pin.js.map +1 -0
- package/build/commands/prune.d.ts +14 -0
- package/build/commands/prune.d.ts.map +1 -0
- package/build/commands/prune.js +203 -0
- package/build/commands/prune.js.map +1 -0
- package/build/commands/publish.d.ts +14 -0
- package/build/commands/publish.d.ts.map +1 -0
- package/build/commands/publish.js +345 -0
- package/build/commands/publish.js.map +1 -0
- package/build/commands/search.d.ts +16 -0
- package/build/commands/search.d.ts.map +1 -0
- package/build/commands/search.js +80 -0
- package/build/commands/search.js.map +1 -0
- package/build/commands/sync.d.ts +15 -0
- package/build/commands/sync.d.ts.map +1 -0
- package/build/commands/sync.js +209 -0
- package/build/commands/sync.js.map +1 -0
- package/build/commands/uninstall.d.ts +18 -0
- package/build/commands/uninstall.d.ts.map +1 -0
- package/build/commands/uninstall.js +304 -0
- package/build/commands/uninstall.js.map +1 -0
- package/build/commands/unpin.d.ts +22 -0
- package/build/commands/unpin.d.ts.map +1 -0
- package/build/commands/unpin.js +79 -0
- package/build/commands/unpin.js.map +1 -0
- package/build/commands/update.d.ts +17 -0
- package/build/commands/update.d.ts.map +1 -0
- package/build/commands/update.js +151 -0
- package/build/commands/update.js.map +1 -0
- package/build/commands/why.d.ts +23 -0
- package/build/commands/why.d.ts.map +1 -0
- package/build/commands/why.js +108 -0
- package/build/commands/why.js.map +1 -0
- package/build/components/AssetDetail.d.ts +32 -0
- package/build/components/AssetDetail.d.ts.map +1 -0
- package/build/components/AssetDetail.js +45 -0
- package/build/components/AssetDetail.js.map +1 -0
- package/build/components/AssetTable.d.ts +25 -0
- package/build/components/AssetTable.d.ts.map +1 -0
- package/build/components/AssetTable.js +96 -0
- package/build/components/AssetTable.js.map +1 -0
- package/build/components/BrowseExpandedBundle.d.ts +26 -0
- package/build/components/BrowseExpandedBundle.d.ts.map +1 -0
- package/build/components/BrowseExpandedBundle.js +59 -0
- package/build/components/BrowseExpandedBundle.js.map +1 -0
- package/build/components/BrowseExpandedRow.d.ts +14 -0
- package/build/components/BrowseExpandedRow.d.ts.map +1 -0
- package/build/components/BrowseExpandedRow.js +9 -0
- package/build/components/BrowseExpandedRow.js.map +1 -0
- package/build/components/BrowseList.d.ts +26 -0
- package/build/components/BrowseList.d.ts.map +1 -0
- package/build/components/BrowseList.js +101 -0
- package/build/components/BrowseList.js.map +1 -0
- package/build/components/BundleDetail.d.ts +7 -0
- package/build/components/BundleDetail.d.ts.map +1 -0
- package/build/components/BundleDetail.js +12 -0
- package/build/components/BundleDetail.js.map +1 -0
- package/build/components/DependencyTree.d.ts +19 -0
- package/build/components/DependencyTree.d.ts.map +1 -0
- package/build/components/DependencyTree.js +21 -0
- package/build/components/DependencyTree.js.map +1 -0
- package/build/components/DiagnosticList.d.ts +19 -0
- package/build/components/DiagnosticList.d.ts.map +1 -0
- package/build/components/DiagnosticList.js +17 -0
- package/build/components/DiagnosticList.js.map +1 -0
- package/build/components/DiffView.d.ts +30 -0
- package/build/components/DiffView.d.ts.map +1 -0
- package/build/components/DiffView.js +32 -0
- package/build/components/DiffView.js.map +1 -0
- package/build/components/DryRunBanner.d.ts +11 -0
- package/build/components/DryRunBanner.d.ts.map +1 -0
- package/build/components/DryRunBanner.js +6 -0
- package/build/components/DryRunBanner.js.map +1 -0
- package/build/components/Field.d.ts +12 -0
- package/build/components/Field.d.ts.map +1 -0
- package/build/components/Field.js +9 -0
- package/build/components/Field.js.map +1 -0
- package/build/components/FilterBar.d.ts +18 -0
- package/build/components/FilterBar.d.ts.map +1 -0
- package/build/components/FilterBar.js +21 -0
- package/build/components/FilterBar.js.map +1 -0
- package/build/components/Header.d.ts +13 -0
- package/build/components/Header.d.ts.map +1 -0
- package/build/components/Header.js +20 -0
- package/build/components/Header.js.map +1 -0
- package/build/components/HelpBar.d.ts +11 -0
- package/build/components/HelpBar.d.ts.map +1 -0
- package/build/components/HelpBar.js +9 -0
- package/build/components/HelpBar.js.map +1 -0
- package/build/components/InstallConfirmBar.d.ts +9 -0
- package/build/components/InstallConfirmBar.d.ts.map +1 -0
- package/build/components/InstallConfirmBar.js +23 -0
- package/build/components/InstallConfirmBar.js.map +1 -0
- package/build/components/InstallSummary.d.ts +29 -0
- package/build/components/InstallSummary.d.ts.map +1 -0
- package/build/components/InstallSummary.js +12 -0
- package/build/components/InstallSummary.js.map +1 -0
- package/build/components/SectionDivider.d.ts +5 -0
- package/build/components/SectionDivider.d.ts.map +1 -0
- package/build/components/SectionDivider.js +11 -0
- package/build/components/SectionDivider.js.map +1 -0
- package/build/components/Spinner.d.ts +13 -0
- package/build/components/Spinner.d.ts.map +1 -0
- package/build/components/Spinner.js +11 -0
- package/build/components/Spinner.js.map +1 -0
- package/build/components/StatusBadge.d.ts +23 -0
- package/build/components/StatusBadge.d.ts.map +1 -0
- package/build/components/StatusBadge.js +43 -0
- package/build/components/StatusBadge.js.map +1 -0
- package/build/components/index.d.ts +20 -0
- package/build/components/index.d.ts.map +1 -0
- package/build/components/index.js +20 -0
- package/build/components/index.js.map +1 -0
- package/build/hooks/useBrowseState.d.ts +122 -0
- package/build/hooks/useBrowseState.d.ts.map +1 -0
- package/build/hooks/useBrowseState.js +315 -0
- package/build/hooks/useBrowseState.js.map +1 -0
- package/build/hooks/useCommand.d.ts +23 -0
- package/build/hooks/useCommand.d.ts.map +1 -0
- package/build/hooks/useCommand.js +43 -0
- package/build/hooks/useCommand.js.map +1 -0
- package/build/lib/adapter.d.ts +40 -0
- package/build/lib/adapter.d.ts.map +1 -0
- package/build/lib/adapter.js +112 -0
- package/build/lib/adapter.js.map +1 -0
- package/build/lib/auth.d.ts +31 -0
- package/build/lib/auth.d.ts.map +1 -0
- package/build/lib/auth.js +101 -0
- package/build/lib/auth.js.map +1 -0
- package/build/lib/breakpoints.d.ts +3 -0
- package/build/lib/breakpoints.d.ts.map +1 -0
- package/build/lib/breakpoints.js +8 -0
- package/build/lib/breakpoints.js.map +1 -0
- package/build/lib/checksum.d.ts +31 -0
- package/build/lib/checksum.d.ts.map +1 -0
- package/build/lib/checksum.js +78 -0
- package/build/lib/checksum.js.map +1 -0
- package/build/lib/config.d.ts +42 -0
- package/build/lib/config.d.ts.map +1 -0
- package/build/lib/config.js +123 -0
- package/build/lib/config.js.map +1 -0
- package/build/lib/detector.d.ts +35 -0
- package/build/lib/detector.d.ts.map +1 -0
- package/build/lib/detector.js +125 -0
- package/build/lib/detector.js.map +1 -0
- package/build/lib/diagnostics.d.ts +10 -0
- package/build/lib/diagnostics.d.ts.map +1 -0
- package/build/lib/diagnostics.js +195 -0
- package/build/lib/diagnostics.js.map +1 -0
- package/build/lib/diff.d.ts +34 -0
- package/build/lib/diff.d.ts.map +1 -0
- package/build/lib/diff.js +78 -0
- package/build/lib/diff.js.map +1 -0
- package/build/lib/fetch-retry.d.ts +43 -0
- package/build/lib/fetch-retry.d.ts.map +1 -0
- package/build/lib/fetch-retry.js +137 -0
- package/build/lib/fetch-retry.js.map +1 -0
- package/build/lib/github.d.ts +57 -0
- package/build/lib/github.d.ts.map +1 -0
- package/build/lib/github.js +96 -0
- package/build/lib/github.js.map +1 -0
- package/build/lib/gitignore.d.ts +37 -0
- package/build/lib/gitignore.d.ts.map +1 -0
- package/build/lib/gitignore.js +142 -0
- package/build/lib/gitignore.js.map +1 -0
- package/build/lib/init.d.ts +100 -0
- package/build/lib/init.d.ts.map +1 -0
- package/build/lib/init.js +295 -0
- package/build/lib/init.js.map +1 -0
- package/build/lib/installer.d.ts +50 -0
- package/build/lib/installer.d.ts.map +1 -0
- package/build/lib/installer.js +435 -0
- package/build/lib/installer.js.map +1 -0
- package/build/lib/lockfile.d.ts +170 -0
- package/build/lib/lockfile.d.ts.map +1 -0
- package/build/lib/lockfile.js +437 -0
- package/build/lib/lockfile.js.map +1 -0
- package/build/lib/markdown.d.ts +9 -0
- package/build/lib/markdown.d.ts.map +1 -0
- package/build/lib/markdown.js +67 -0
- package/build/lib/markdown.js.map +1 -0
- package/build/lib/parse-json.d.ts +34 -0
- package/build/lib/parse-json.d.ts.map +1 -0
- package/build/lib/parse-json.js +52 -0
- package/build/lib/parse-json.js.map +1 -0
- package/build/lib/paths.d.ts +28 -0
- package/build/lib/paths.d.ts.map +1 -0
- package/build/lib/paths.js +68 -0
- package/build/lib/paths.js.map +1 -0
- package/build/lib/publisher.d.ts +49 -0
- package/build/lib/publisher.d.ts.map +1 -0
- package/build/lib/publisher.js +388 -0
- package/build/lib/publisher.js.map +1 -0
- package/build/lib/registry.d.ts +97 -0
- package/build/lib/registry.d.ts.map +1 -0
- package/build/lib/registry.js +248 -0
- package/build/lib/registry.js.map +1 -0
- package/build/lib/resolver.d.ts +50 -0
- package/build/lib/resolver.d.ts.map +1 -0
- package/build/lib/resolver.js +110 -0
- package/build/lib/resolver.js.map +1 -0
- package/build/lib/schemas/adapter.d.ts +33 -0
- package/build/lib/schemas/adapter.d.ts.map +1 -0
- package/build/lib/schemas/adapter.js +27 -0
- package/build/lib/schemas/adapter.js.map +1 -0
- package/build/lib/schemas/bundle.d.ts +38 -0
- package/build/lib/schemas/bundle.d.ts.map +1 -0
- package/build/lib/schemas/bundle.js +19 -0
- package/build/lib/schemas/bundle.js.map +1 -0
- package/build/lib/schemas/config.d.ts +12 -0
- package/build/lib/schemas/config.d.ts.map +1 -0
- package/build/lib/schemas/config.js +14 -0
- package/build/lib/schemas/config.js.map +1 -0
- package/build/lib/schemas/index.d.ts +7 -0
- package/build/lib/schemas/index.d.ts.map +1 -0
- package/build/lib/schemas/index.js +7 -0
- package/build/lib/schemas/index.js.map +1 -0
- package/build/lib/schemas/lockfile.d.ts +102 -0
- package/build/lib/schemas/lockfile.d.ts.map +1 -0
- package/build/lib/schemas/lockfile.js +50 -0
- package/build/lib/schemas/lockfile.js.map +1 -0
- package/build/lib/schemas/manifest.d.ts +91 -0
- package/build/lib/schemas/manifest.d.ts.map +1 -0
- package/build/lib/schemas/manifest.js +42 -0
- package/build/lib/schemas/manifest.js.map +1 -0
- package/build/lib/schemas/registry.d.ts +225 -0
- package/build/lib/schemas/registry.d.ts.map +1 -0
- package/build/lib/schemas/registry.js +59 -0
- package/build/lib/schemas/registry.js.map +1 -0
- package/build/lib/search.d.ts +23 -0
- package/build/lib/search.d.ts.map +1 -0
- package/build/lib/search.js +139 -0
- package/build/lib/search.js.map +1 -0
- package/build/lib/tool-resolver.d.ts +12 -0
- package/build/lib/tool-resolver.d.ts.map +1 -0
- package/build/lib/tool-resolver.js +24 -0
- package/build/lib/tool-resolver.js.map +1 -0
- package/build/lib/uninstaller.d.ts +109 -0
- package/build/lib/uninstaller.d.ts.map +1 -0
- package/build/lib/uninstaller.js +368 -0
- package/build/lib/uninstaller.js.map +1 -0
- package/build/lib/updater.d.ts +68 -0
- package/build/lib/updater.d.ts.map +1 -0
- package/build/lib/updater.js +230 -0
- package/build/lib/updater.js.map +1 -0
- package/build/lib/version.d.ts +13 -0
- package/build/lib/version.d.ts.map +1 -0
- package/build/lib/version.js +30 -0
- package/build/lib/version.js.map +1 -0
- package/build/windows-esm-loader.d.ts +15 -0
- package/build/windows-esm-loader.d.ts.map +1 -0
- package/build/windows-esm-loader.js +11 -0
- package/build/windows-esm-loader.js.map +1 -0
- package/package.json +67 -0
- package/tool-adapters/claude-code.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEhF;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgCzD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Replace all backslashes with forward slashes in a path string.
|
|
5
|
+
* Used to normalize Windows-style paths for consistent lockfile storage.
|
|
6
|
+
*/
|
|
7
|
+
export function normalizeLockfilePath(p) {
|
|
8
|
+
return p.replace(/\\/g, '/');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Convert an absolute path to a project-relative path with forward slashes.
|
|
12
|
+
* Used to store portable paths in the lockfile.
|
|
13
|
+
*/
|
|
14
|
+
export function toRelativePosix(projectDir, absolutePath) {
|
|
15
|
+
return normalizeLockfilePath(relative(projectDir, absolutePath));
|
|
16
|
+
}
|
|
17
|
+
/** Per-process cache keyed by starting directory to avoid repeated filesystem walks. */
|
|
18
|
+
const projectRootCache = new Map();
|
|
19
|
+
/** Project root markers in discovery priority order. */
|
|
20
|
+
const ROOT_MARKERS = ['.atk-lock.json', '.claude', '.git'];
|
|
21
|
+
/**
|
|
22
|
+
* Walk up from `startDir` looking for project root markers.
|
|
23
|
+
*
|
|
24
|
+
* Discovery priority:
|
|
25
|
+
* 1. `.atk-lock.json` file
|
|
26
|
+
* 2. `.claude/` directory
|
|
27
|
+
* 3. `.git/` directory
|
|
28
|
+
* 4. Fallback to the resolved `startDir`
|
|
29
|
+
*
|
|
30
|
+
* Results are cached per starting directory for the lifetime of the process.
|
|
31
|
+
*/
|
|
32
|
+
export function findProjectRoot(startDir) {
|
|
33
|
+
const start = resolve(startDir ?? process.cwd());
|
|
34
|
+
const cached = projectRootCache.get(start);
|
|
35
|
+
if (cached !== undefined) {
|
|
36
|
+
return cached;
|
|
37
|
+
}
|
|
38
|
+
let current = start;
|
|
39
|
+
while (true) {
|
|
40
|
+
for (const marker of ROOT_MARKERS) {
|
|
41
|
+
try {
|
|
42
|
+
if (existsSync(join(current, marker))) {
|
|
43
|
+
projectRootCache.set(start, current);
|
|
44
|
+
return current;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Permission error or other filesystem issue — skip this marker and continue.
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const parent = dirname(current);
|
|
52
|
+
if (parent === current) {
|
|
53
|
+
// Reached the filesystem root without finding a marker — fall back to startDir.
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
current = parent;
|
|
57
|
+
}
|
|
58
|
+
projectRootCache.set(start, start);
|
|
59
|
+
return start;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Clear the project-root cache. Intended for use in tests so each test
|
|
63
|
+
* can control the filesystem layout without stale cached values.
|
|
64
|
+
*/
|
|
65
|
+
export function resetProjectRootCache() {
|
|
66
|
+
projectRootCache.clear();
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7D;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,CAAS;IAC7C,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,YAAoB;IACtE,OAAO,qBAAqB,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,wFAAwF;AACxF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEnD,wDAAwD;AACxD,MAAM,YAAY,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO,IAAI,EAAE,CAAC;QACZ,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;oBACtC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBACrC,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8EAA8E;YAChF,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,gFAAgF;YAChF,MAAM;QACR,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Bundle } from './schemas/bundle.js';
|
|
2
|
+
import type { AssetType, Manifest } from './schemas/manifest.js';
|
|
3
|
+
import type { Registry } from './schemas/registry.js';
|
|
4
|
+
export interface PublishPlan {
|
|
5
|
+
branchName: string;
|
|
6
|
+
checksum: string;
|
|
7
|
+
files: string[];
|
|
8
|
+
isUpdate: boolean;
|
|
9
|
+
prBody: string;
|
|
10
|
+
prTitle: string;
|
|
11
|
+
registryPath: string;
|
|
12
|
+
resolvedVersion: string;
|
|
13
|
+
target: PublishTarget;
|
|
14
|
+
}
|
|
15
|
+
export interface PublishResult {
|
|
16
|
+
branchName: string;
|
|
17
|
+
prUrl: string;
|
|
18
|
+
}
|
|
19
|
+
export interface PublishTarget {
|
|
20
|
+
assetType?: AssetType;
|
|
21
|
+
data: Bundle | Manifest;
|
|
22
|
+
sourceDir: string;
|
|
23
|
+
type: PublishType;
|
|
24
|
+
}
|
|
25
|
+
export type PublishType = 'asset' | 'bundle';
|
|
26
|
+
export interface ValidationResult {
|
|
27
|
+
errors: string[];
|
|
28
|
+
valid: boolean;
|
|
29
|
+
warnings: string[];
|
|
30
|
+
}
|
|
31
|
+
export type VersionCheckResult = {
|
|
32
|
+
latestVersion: string;
|
|
33
|
+
status: 'needs-bump';
|
|
34
|
+
} | {
|
|
35
|
+
latestVersion: string;
|
|
36
|
+
status: 'version-already-bumped';
|
|
37
|
+
} | {
|
|
38
|
+
status: 'new-asset';
|
|
39
|
+
};
|
|
40
|
+
export declare function buildPublishPlan(target: PublishTarget, resolvedVersion: string, isUpdate: boolean, message?: string): Promise<PublishPlan>;
|
|
41
|
+
export declare function bumpVersion(currentVersion: string, bumpType: 'major' | 'minor' | 'patch'): string;
|
|
42
|
+
export declare function checkRegistryVersion(target: PublishTarget, registry: Registry): VersionCheckResult;
|
|
43
|
+
export declare function detectPublishType(directoryPath: string): Promise<PublishTarget>;
|
|
44
|
+
export declare function executePublish(plan: PublishPlan, token: string, progressCallback: (msg: string) => void): Promise<PublishResult>;
|
|
45
|
+
export declare function generatePrBody(target: PublishTarget, name: string, version: string, isUpdate: boolean, files: string[], message?: string): string;
|
|
46
|
+
export declare function mapPublishError(error: unknown): string;
|
|
47
|
+
export declare function updateManifestVersion(sourceDir: string, manifestFile: string, newVersion: string): Promise<void>;
|
|
48
|
+
export declare function validatePublishTarget(target: PublishTarget): Promise<ValidationResult>;
|
|
49
|
+
//# sourceMappingURL=publisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/lib/publisher.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAgBtD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAC/C;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,GAC3D;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAM5B,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CA+BtB;AAMD,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAMjG;AAMD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,CA2BlG;AAMD,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4BrF;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC,aAAa,CAAC,CA4DxB;AAMD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAqFR;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA0BtD;AAMD,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+E5F"}
|
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { cp, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { basename, join } from 'node:path';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
import { compare as semverCompare, inc as semverInc, valid as semverValid } from 'semver';
|
|
8
|
+
import { hashDirectory } from './checksum.js';
|
|
9
|
+
import { DEFAULT_REGISTRY_BRANCH_DEV, DEFAULT_REGISTRY_REPO } from './github.js';
|
|
10
|
+
import { validateAssetName } from './init.js';
|
|
11
|
+
import { parseAndValidate } from './parse-json.js';
|
|
12
|
+
import { findAsset, findBundle } from './registry.js';
|
|
13
|
+
import { BundleSchema } from './schemas/bundle.js';
|
|
14
|
+
import { ManifestSchema } from './schemas/manifest.js';
|
|
15
|
+
const execFileAsync = promisify(execFile);
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Detection
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
export async function buildPublishPlan(target, resolvedVersion, isUpdate, message) {
|
|
20
|
+
const checksum = await hashDirectory(target.sourceDir);
|
|
21
|
+
const name = target.data.name;
|
|
22
|
+
let branchName;
|
|
23
|
+
let registryPath;
|
|
24
|
+
if (target.type === 'asset') {
|
|
25
|
+
const assetType = target.data.type;
|
|
26
|
+
branchName = `asset/${assetType}/${name}/${resolvedVersion}`;
|
|
27
|
+
registryPath = `assets/${assetType}s/${name}/${resolvedVersion}/`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
branchName = `bundle/${name}/${resolvedVersion}`;
|
|
31
|
+
registryPath = `bundles/${name}/${resolvedVersion}/`;
|
|
32
|
+
}
|
|
33
|
+
const files = collectFilesToPublish(target);
|
|
34
|
+
const prTitle = generatePrTitle(target, name, resolvedVersion, isUpdate);
|
|
35
|
+
const prBody = generatePrBody(target, name, resolvedVersion, isUpdate, files, message);
|
|
36
|
+
return {
|
|
37
|
+
branchName,
|
|
38
|
+
checksum,
|
|
39
|
+
files,
|
|
40
|
+
isUpdate,
|
|
41
|
+
prBody,
|
|
42
|
+
prTitle,
|
|
43
|
+
registryPath,
|
|
44
|
+
resolvedVersion,
|
|
45
|
+
target,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Validation
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
export function bumpVersion(currentVersion, bumpType) {
|
|
52
|
+
const result = semverInc(currentVersion, bumpType);
|
|
53
|
+
if (!result) {
|
|
54
|
+
throw new Error(`Failed to bump version '${currentVersion}' with type '${bumpType}'`);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// Version checking
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
export function checkRegistryVersion(target, registry) {
|
|
62
|
+
const name = target.data.name;
|
|
63
|
+
const manifestVersion = target.data.version;
|
|
64
|
+
if (target.type === 'bundle') {
|
|
65
|
+
const existing = findBundle(registry, name);
|
|
66
|
+
if (!existing) {
|
|
67
|
+
return { status: 'new-asset' };
|
|
68
|
+
}
|
|
69
|
+
const cmp = semverCompare(manifestVersion, existing.version);
|
|
70
|
+
if (cmp > 0) {
|
|
71
|
+
return { latestVersion: existing.version, status: 'version-already-bumped' };
|
|
72
|
+
}
|
|
73
|
+
return { latestVersion: existing.version, status: 'needs-bump' };
|
|
74
|
+
}
|
|
75
|
+
const resolved = findAsset(registry, name, target.assetType);
|
|
76
|
+
if (!resolved) {
|
|
77
|
+
return { status: 'new-asset' };
|
|
78
|
+
}
|
|
79
|
+
const cmp = semverCompare(manifestVersion, resolved.asset.latest);
|
|
80
|
+
if (cmp > 0) {
|
|
81
|
+
return { latestVersion: resolved.asset.latest, status: 'version-already-bumped' };
|
|
82
|
+
}
|
|
83
|
+
return { latestVersion: resolved.asset.latest, status: 'needs-bump' };
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Version bumping
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
export async function detectPublishType(directoryPath) {
|
|
89
|
+
const manifestPath = join(directoryPath, 'manifest.json');
|
|
90
|
+
const bundlePath = join(directoryPath, 'bundle.json');
|
|
91
|
+
if (existsSync(manifestPath)) {
|
|
92
|
+
const raw = await readFile(manifestPath, 'utf-8');
|
|
93
|
+
const data = parseAndValidate(raw, ManifestSchema, 'Invalid manifest.json');
|
|
94
|
+
return {
|
|
95
|
+
assetType: data.type,
|
|
96
|
+
data,
|
|
97
|
+
sourceDir: directoryPath,
|
|
98
|
+
type: 'asset',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
if (existsSync(bundlePath)) {
|
|
102
|
+
const raw = await readFile(bundlePath, 'utf-8');
|
|
103
|
+
const data = parseAndValidate(raw, BundleSchema, 'Invalid bundle.json');
|
|
104
|
+
return {
|
|
105
|
+
data,
|
|
106
|
+
sourceDir: directoryPath,
|
|
107
|
+
type: 'bundle',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
throw new Error(`No manifest.json or bundle.json found in ${directoryPath}. Run 'atk init' to scaffold a new asset.`);
|
|
111
|
+
}
|
|
112
|
+
export async function executePublish(plan, token, progressCallback) {
|
|
113
|
+
const tempDir = join(tmpdir(), `atk-publish-${crypto.randomUUID()}`);
|
|
114
|
+
try {
|
|
115
|
+
progressCallback('Cloning registry repository...');
|
|
116
|
+
await execFileAsync('git', [
|
|
117
|
+
'clone',
|
|
118
|
+
'--depth',
|
|
119
|
+
'1',
|
|
120
|
+
'--branch',
|
|
121
|
+
DEFAULT_REGISTRY_BRANCH_DEV,
|
|
122
|
+
`https://x-access-token:${token}@github.com/${DEFAULT_REGISTRY_REPO}.git`,
|
|
123
|
+
tempDir,
|
|
124
|
+
]);
|
|
125
|
+
progressCallback('Creating branch...');
|
|
126
|
+
await execFileAsync('git', ['-C', tempDir, 'checkout', '-b', plan.branchName]);
|
|
127
|
+
progressCallback('Copying files...');
|
|
128
|
+
const targetDir = join(tempDir, plan.registryPath);
|
|
129
|
+
await mkdir(targetDir, { recursive: true });
|
|
130
|
+
for (const file of plan.files) {
|
|
131
|
+
const sourcePath = join(plan.target.sourceDir, file);
|
|
132
|
+
const destPath = join(targetDir, basename(file));
|
|
133
|
+
await cp(sourcePath, destPath);
|
|
134
|
+
}
|
|
135
|
+
progressCallback('Committing changes...');
|
|
136
|
+
await execFileAsync('git', ['-C', tempDir, 'add', '.']);
|
|
137
|
+
await execFileAsync('git', ['-C', tempDir, 'commit', '-m', plan.prTitle]);
|
|
138
|
+
progressCallback('Pushing changes...');
|
|
139
|
+
await execFileAsync('git', ['-C', tempDir, 'push', 'origin', plan.branchName]);
|
|
140
|
+
progressCallback('Creating pull request...');
|
|
141
|
+
const { stdout } = await execFileAsync('gh', [
|
|
142
|
+
'pr',
|
|
143
|
+
'create',
|
|
144
|
+
'--repo',
|
|
145
|
+
DEFAULT_REGISTRY_REPO,
|
|
146
|
+
'--base',
|
|
147
|
+
DEFAULT_REGISTRY_BRANCH_DEV,
|
|
148
|
+
'--head',
|
|
149
|
+
plan.branchName,
|
|
150
|
+
'--title',
|
|
151
|
+
plan.prTitle,
|
|
152
|
+
'--body',
|
|
153
|
+
plan.prBody,
|
|
154
|
+
]);
|
|
155
|
+
const prUrl = stdout.trim();
|
|
156
|
+
return {
|
|
157
|
+
branchName: plan.branchName,
|
|
158
|
+
prUrl,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
await rm(tempDir, { force: true, recursive: true }).catch(() => { });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
// Publish plan
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
export function generatePrBody(target, name, version, isUpdate, files, message) {
|
|
169
|
+
const heading = isUpdate ? `## Updated Asset: ${name}` : `## New Asset: ${name}`;
|
|
170
|
+
const lines = [heading, ''];
|
|
171
|
+
if (target.type === 'asset') {
|
|
172
|
+
const manifest = target.data;
|
|
173
|
+
lines.push(`**Type:** ${manifest.type}`);
|
|
174
|
+
lines.push(`**Version:** ${version}`);
|
|
175
|
+
lines.push(`**Author:** ${manifest.author}`);
|
|
176
|
+
lines.push(`**Trust Level:** ${manifest.trustLevel ?? 'experimental'}`);
|
|
177
|
+
lines.push('');
|
|
178
|
+
lines.push('### Description');
|
|
179
|
+
lines.push('');
|
|
180
|
+
lines.push(manifest.description);
|
|
181
|
+
lines.push('');
|
|
182
|
+
lines.push('### Tool Compatibility');
|
|
183
|
+
lines.push('');
|
|
184
|
+
if (manifest.tools && manifest.tools.length > 0) {
|
|
185
|
+
for (const tool of manifest.tools) {
|
|
186
|
+
lines.push(`- ${tool.tool}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
lines.push('none');
|
|
191
|
+
}
|
|
192
|
+
lines.push('');
|
|
193
|
+
lines.push('### Tags');
|
|
194
|
+
lines.push('');
|
|
195
|
+
lines.push(manifest.tags && manifest.tags.length > 0 ? manifest.tags.join(', ') : 'none');
|
|
196
|
+
lines.push('');
|
|
197
|
+
lines.push('### Dependencies');
|
|
198
|
+
lines.push('');
|
|
199
|
+
if (manifest.dependencies && manifest.dependencies.length > 0) {
|
|
200
|
+
for (const dep of manifest.dependencies) {
|
|
201
|
+
lines.push(`- ${dep.type}:${dep.name}${dep.version ? `@${dep.version}` : ''}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
lines.push('none');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
const bundle = target.data;
|
|
210
|
+
lines.push(`**Version:** ${version}`);
|
|
211
|
+
lines.push(`**Author:** ${bundle.author}`);
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push('### Description');
|
|
214
|
+
lines.push('');
|
|
215
|
+
lines.push(bundle.description);
|
|
216
|
+
lines.push('');
|
|
217
|
+
lines.push('### Tags');
|
|
218
|
+
lines.push('');
|
|
219
|
+
lines.push(bundle.tags && bundle.tags.length > 0 ? bundle.tags.join(', ') : 'none');
|
|
220
|
+
lines.push('');
|
|
221
|
+
lines.push('### Included Assets');
|
|
222
|
+
lines.push('');
|
|
223
|
+
for (const asset of bundle.assets) {
|
|
224
|
+
lines.push(`- ${asset.type}:${asset.name}${asset.version ? `@${asset.version}` : ''}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
lines.push('');
|
|
228
|
+
lines.push('### Files');
|
|
229
|
+
lines.push('');
|
|
230
|
+
for (const file of files) {
|
|
231
|
+
lines.push(`- ${file}`);
|
|
232
|
+
}
|
|
233
|
+
lines.push('');
|
|
234
|
+
lines.push('### Checklist');
|
|
235
|
+
lines.push('');
|
|
236
|
+
lines.push('- [ ] Manifest schema is valid');
|
|
237
|
+
lines.push('- [ ] All referenced files are present');
|
|
238
|
+
lines.push('- [ ] Asset has been tested locally');
|
|
239
|
+
lines.push('- [ ] README.md is included');
|
|
240
|
+
if (message) {
|
|
241
|
+
lines.push('');
|
|
242
|
+
lines.push('### Notes from Author');
|
|
243
|
+
lines.push('');
|
|
244
|
+
lines.push(message);
|
|
245
|
+
}
|
|
246
|
+
lines.push('');
|
|
247
|
+
lines.push('---');
|
|
248
|
+
lines.push('*Published via `atk publish`*');
|
|
249
|
+
return lines.join('\n');
|
|
250
|
+
}
|
|
251
|
+
export function mapPublishError(error) {
|
|
252
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
253
|
+
if (msg.includes('already exists')) {
|
|
254
|
+
return `Branch already exists. A PR may already be open for this version.`;
|
|
255
|
+
}
|
|
256
|
+
if (msg.includes('Authentication') || msg.includes('auth') || msg.includes('403') || msg.includes('401')) {
|
|
257
|
+
return `GitHub authentication failed. Run 'gh auth login' or set GITHUB_TOKEN.`;
|
|
258
|
+
}
|
|
259
|
+
if (msg.includes('not found') || msg.includes('gh')) {
|
|
260
|
+
if (msg.includes('ENOENT') || msg.includes('not recognized') || msg.includes('command not found')) {
|
|
261
|
+
return `GitHub CLI (gh) is required for publishing. Install it from https://cli.github.com`;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (msg.includes('Could not resolve host') || msg.includes('ENOTFOUND') || msg.includes('network')) {
|
|
265
|
+
return `Failed to reach GitHub. Check your internet connection.`;
|
|
266
|
+
}
|
|
267
|
+
if (msg.includes('permission') || msg.includes('denied')) {
|
|
268
|
+
return `Push failed. Check that you have write access to the repository.`;
|
|
269
|
+
}
|
|
270
|
+
return msg;
|
|
271
|
+
}
|
|
272
|
+
// ---------------------------------------------------------------------------
|
|
273
|
+
// PR content generation
|
|
274
|
+
// ---------------------------------------------------------------------------
|
|
275
|
+
export async function updateManifestVersion(sourceDir, manifestFile, newVersion) {
|
|
276
|
+
const filePath = join(sourceDir, manifestFile);
|
|
277
|
+
const raw = await readFile(filePath, 'utf-8');
|
|
278
|
+
const parsed = JSON.parse(raw);
|
|
279
|
+
parsed['version'] = newVersion;
|
|
280
|
+
await writeFile(filePath, JSON.stringify(parsed, null, '\t') + '\n', 'utf-8');
|
|
281
|
+
}
|
|
282
|
+
export async function validatePublishTarget(target) {
|
|
283
|
+
const errors = [];
|
|
284
|
+
const warnings = [];
|
|
285
|
+
if (target.type === 'asset') {
|
|
286
|
+
const manifest = target.data;
|
|
287
|
+
// Entrypoint exists check (skip for mcp-config — fileless type)
|
|
288
|
+
if (manifest.type !== 'mcp-config' && manifest.entrypoint) {
|
|
289
|
+
const entrypointPath = join(target.sourceDir, manifest.entrypoint);
|
|
290
|
+
if (!existsSync(entrypointPath)) {
|
|
291
|
+
errors.push(`Entrypoint file '${manifest.entrypoint}' not found in ${target.sourceDir}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Files array check
|
|
295
|
+
for (const file of manifest.files ?? []) {
|
|
296
|
+
const filePath = join(target.sourceDir, file);
|
|
297
|
+
if (!existsSync(filePath)) {
|
|
298
|
+
errors.push(`File '${file}' referenced in manifest but not found`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Name format validation
|
|
302
|
+
const nameResult = validateAssetName(manifest.name);
|
|
303
|
+
if (!nameResult.valid) {
|
|
304
|
+
errors.push(nameResult.error);
|
|
305
|
+
}
|
|
306
|
+
// Version format validation
|
|
307
|
+
if (!semverValid(manifest.version)) {
|
|
308
|
+
errors.push(`Invalid version '${manifest.version}'. Must be valid semver (e.g., 1.0.0)`);
|
|
309
|
+
}
|
|
310
|
+
// Missing optional fields warnings
|
|
311
|
+
if (!manifest.tags || manifest.tags.length === 0) {
|
|
312
|
+
warnings.push('No tags specified. Adding tags improves discoverability.');
|
|
313
|
+
}
|
|
314
|
+
if (!existsSync(join(target.sourceDir, 'README.md'))) {
|
|
315
|
+
warnings.push('No README.md found. Including a README is recommended.');
|
|
316
|
+
}
|
|
317
|
+
if (!manifest.tools || manifest.tools.length === 0) {
|
|
318
|
+
warnings.push('No tool compatibility specified. Adding tools improves discoverability.');
|
|
319
|
+
}
|
|
320
|
+
if (!manifest.security) {
|
|
321
|
+
warnings.push('No security block specified.');
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
const bundle = target.data;
|
|
326
|
+
// Name format validation
|
|
327
|
+
const nameResult = validateAssetName(bundle.name);
|
|
328
|
+
if (!nameResult.valid) {
|
|
329
|
+
errors.push(nameResult.error);
|
|
330
|
+
}
|
|
331
|
+
// Version format validation
|
|
332
|
+
if (!semverValid(bundle.version)) {
|
|
333
|
+
errors.push(`Invalid version '${bundle.version}'. Must be valid semver (e.g., 1.0.0)`);
|
|
334
|
+
}
|
|
335
|
+
// Missing optional fields warnings
|
|
336
|
+
if (!bundle.tags || bundle.tags.length === 0) {
|
|
337
|
+
warnings.push('No tags specified. Adding tags improves discoverability.');
|
|
338
|
+
}
|
|
339
|
+
if (!existsSync(join(target.sourceDir, 'README.md'))) {
|
|
340
|
+
warnings.push('No README.md found. Including a README is recommended.');
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
errors,
|
|
345
|
+
valid: errors.length === 0,
|
|
346
|
+
warnings,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
// ---------------------------------------------------------------------------
|
|
350
|
+
// Publish execution
|
|
351
|
+
// ---------------------------------------------------------------------------
|
|
352
|
+
function collectFilesToPublish(target) {
|
|
353
|
+
const files = [];
|
|
354
|
+
if (target.type === 'asset') {
|
|
355
|
+
const manifest = target.data;
|
|
356
|
+
files.push('manifest.json');
|
|
357
|
+
if (manifest.entrypoint && existsSync(join(target.sourceDir, manifest.entrypoint))) {
|
|
358
|
+
files.push(manifest.entrypoint);
|
|
359
|
+
}
|
|
360
|
+
for (const file of manifest.files ?? []) {
|
|
361
|
+
if (existsSync(join(target.sourceDir, file))) {
|
|
362
|
+
files.push(file);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
files.push('bundle.json');
|
|
368
|
+
}
|
|
369
|
+
if (existsSync(join(target.sourceDir, 'README.md'))) {
|
|
370
|
+
files.push('README.md');
|
|
371
|
+
}
|
|
372
|
+
return files;
|
|
373
|
+
}
|
|
374
|
+
// ---------------------------------------------------------------------------
|
|
375
|
+
// Error helpers
|
|
376
|
+
// ---------------------------------------------------------------------------
|
|
377
|
+
function generatePrTitle(target, name, version, isUpdate) {
|
|
378
|
+
if (target.type === 'bundle') {
|
|
379
|
+
return isUpdate
|
|
380
|
+
? `feat(registry): update bundle ${name} to ${version}`
|
|
381
|
+
: `feat(registry): add bundle ${name}@${version}`;
|
|
382
|
+
}
|
|
383
|
+
const assetType = target.data.type;
|
|
384
|
+
return isUpdate
|
|
385
|
+
? `feat(registry): update ${assetType} ${name} to ${version}`
|
|
386
|
+
: `feat(registry): add ${assetType} ${name}@${version}`;
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=publisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../src/lib/publisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { type Registry, type RegistryAsset, type RegistryAssetVersion, type RegistryBundle } from './schemas/registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Result of a version-aware asset lookup.
|
|
4
|
+
* Contains the registry asset, the resolved version string, and the version-specific metadata.
|
|
5
|
+
*/
|
|
6
|
+
export interface ResolvedAsset {
|
|
7
|
+
/** The registry asset entry (name, type, tags, versions map, latest). */
|
|
8
|
+
asset: RegistryAsset;
|
|
9
|
+
/** The resolved semver version string. */
|
|
10
|
+
version: string;
|
|
11
|
+
/** The version-specific metadata (author, checksum, dependencies, etc.). */
|
|
12
|
+
versionData: RegistryAssetVersion;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Metadata about the registry cache file.
|
|
16
|
+
*/
|
|
17
|
+
export interface CacheStatus {
|
|
18
|
+
/** Age of the cache in milliseconds (0 if missing). */
|
|
19
|
+
ageMs: number;
|
|
20
|
+
/** Whether the cache file exists. */
|
|
21
|
+
exists: boolean;
|
|
22
|
+
/** Whether the cache has exceeded its TTL. */
|
|
23
|
+
expired: boolean;
|
|
24
|
+
/** Absolute path to the cache file. */
|
|
25
|
+
path: string;
|
|
26
|
+
/** Size in bytes (0 if missing). */
|
|
27
|
+
sizeBytes: number;
|
|
28
|
+
/** Configured TTL in minutes. */
|
|
29
|
+
ttlMinutes: number;
|
|
30
|
+
}
|
|
31
|
+
export declare class RegistryError extends Error {
|
|
32
|
+
constructor(message: string);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Clear the registry cache.
|
|
36
|
+
*/
|
|
37
|
+
export declare function clearCache(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Fetch the registry, using cache when available and not expired.
|
|
40
|
+
*/
|
|
41
|
+
export declare function fetchRegistry(options?: {
|
|
42
|
+
force?: boolean;
|
|
43
|
+
}): Promise<Registry>;
|
|
44
|
+
/**
|
|
45
|
+
* Find an asset in the registry by name and resolve a specific version.
|
|
46
|
+
*
|
|
47
|
+
* Version resolution strategy:
|
|
48
|
+
* - If `version` is omitted or undefined, resolves to the `latest` version.
|
|
49
|
+
* - If `version` is an exact semver string (e.g. "1.2.3"), looks up that exact version.
|
|
50
|
+
* - If `version` is a semver range (e.g. "^1.0.0", ">=2.0.0"), resolves via `semver.maxSatisfying`.
|
|
51
|
+
*
|
|
52
|
+
* @param registry - The registry to search.
|
|
53
|
+
* @param name - Asset name to find.
|
|
54
|
+
* @param type - Optional asset type filter.
|
|
55
|
+
* @param version - Optional semver version or range. Defaults to the asset's `latest` version.
|
|
56
|
+
* @returns The resolved asset with version metadata, or undefined if not found.
|
|
57
|
+
*/
|
|
58
|
+
export declare function findAsset(registry: Registry, name: string, type?: string, version?: string): ResolvedAsset | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Find a bundle in the registry by name.
|
|
61
|
+
*/
|
|
62
|
+
export declare function findBundle(registry: Registry, name: string): RegistryBundle | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Get all assets of a given type from the registry.
|
|
65
|
+
*/
|
|
66
|
+
export declare function getAssetsByType(registry: Registry, type: string): RegistryAsset[];
|
|
67
|
+
/**
|
|
68
|
+
* Get metadata about the registry cache file.
|
|
69
|
+
*/
|
|
70
|
+
export declare function getCacheStatus(): Promise<CacheStatus>;
|
|
71
|
+
/**
|
|
72
|
+
* Extract and sort versions from a resolved registry asset.
|
|
73
|
+
*
|
|
74
|
+
* @param asset - The registry asset to extract versions from.
|
|
75
|
+
* @returns An object with the sorted version list (newest first) and the latest version.
|
|
76
|
+
*/
|
|
77
|
+
export declare function getSortedVersions(asset: RegistryAsset): {
|
|
78
|
+
latest: string;
|
|
79
|
+
versions: string[];
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Check if an asset is deprecated.
|
|
83
|
+
*/
|
|
84
|
+
export declare function isDeprecated(registry: Registry, name: string, type?: string): {
|
|
85
|
+
deprecated: boolean;
|
|
86
|
+
reason?: string;
|
|
87
|
+
replacement?: string;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Resolve a version against an asset's versions map.
|
|
91
|
+
*
|
|
92
|
+
* @param asset - The registry asset to resolve a version for.
|
|
93
|
+
* @param version - Optional semver version or range. Defaults to the asset's `latest` version.
|
|
94
|
+
* @returns The resolved asset with version metadata, or undefined if the version cannot be resolved.
|
|
95
|
+
*/
|
|
96
|
+
export declare function resolveAssetVersion(asset: RegistryAsset, version?: string): ResolvedAsset | undefined;
|
|
97
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EAEpB,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,KAAK,EAAE,aAAa,CAAC;IACrB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAKD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAShD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoBpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,GAAG,SAAS,CAO3B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEvF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAEjF;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAe3D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAY9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAUhE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAkCrG"}
|