@autonav/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +115 -0
- package/dist/adapter/claude-adapter.d.ts +136 -0
- package/dist/adapter/claude-adapter.d.ts.map +1 -0
- package/dist/adapter/claude-adapter.js +340 -0
- package/dist/adapter/claude-adapter.js.map +1 -0
- package/dist/adapter/index.d.ts +7 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +7 -0
- package/dist/adapter/index.js.map +1 -0
- package/dist/cli/autonav.d.ts +11 -0
- package/dist/cli/autonav.d.ts.map +1 -0
- package/dist/cli/autonav.js +79 -0
- package/dist/cli/autonav.js.map +1 -0
- package/dist/cli/nav-chat.d.ts +3 -0
- package/dist/cli/nav-chat.d.ts.map +1 -0
- package/dist/cli/nav-chat.js +151 -0
- package/dist/cli/nav-chat.js.map +1 -0
- package/dist/cli/nav-init.d.ts +3 -0
- package/dist/cli/nav-init.d.ts.map +1 -0
- package/dist/cli/nav-init.js +366 -0
- package/dist/cli/nav-init.js.map +1 -0
- package/dist/cli/nav-query.d.ts +3 -0
- package/dist/cli/nav-query.d.ts.map +1 -0
- package/dist/cli/nav-query.js +217 -0
- package/dist/cli/nav-query.js.map +1 -0
- package/dist/conversation/App.d.ts +14 -0
- package/dist/conversation/App.d.ts.map +1 -0
- package/dist/conversation/App.js +229 -0
- package/dist/conversation/App.js.map +1 -0
- package/dist/conversation/index.d.ts +29 -0
- package/dist/conversation/index.d.ts.map +1 -0
- package/dist/conversation/index.js +44 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/prompts.d.ts +9 -0
- package/dist/conversation/prompts.d.ts.map +1 -0
- package/dist/conversation/prompts.js +47 -0
- package/dist/conversation/prompts.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/interview/App.d.ts +14 -0
- package/dist/interview/App.d.ts.map +1 -0
- package/dist/interview/App.js +159 -0
- package/dist/interview/App.js.map +1 -0
- package/dist/interview/index.d.ts +30 -0
- package/dist/interview/index.d.ts.map +1 -0
- package/dist/interview/index.js +52 -0
- package/dist/interview/index.js.map +1 -0
- package/dist/interview/prompts.d.ts +36 -0
- package/dist/interview/prompts.d.ts.map +1 -0
- package/dist/interview/prompts.js +116 -0
- package/dist/interview/prompts.js.map +1 -0
- package/dist/pack-installer/github.d.ts +41 -0
- package/dist/pack-installer/github.d.ts.map +1 -0
- package/dist/pack-installer/github.js +294 -0
- package/dist/pack-installer/github.js.map +1 -0
- package/dist/pack-installer/index.d.ts +57 -0
- package/dist/pack-installer/index.d.ts.map +1 -0
- package/dist/pack-installer/index.js +257 -0
- package/dist/pack-installer/index.js.map +1 -0
- package/dist/plugins/config-schema.d.ts +32 -0
- package/dist/plugins/config-schema.d.ts.map +1 -0
- package/dist/plugins/config-schema.js +26 -0
- package/dist/plugins/config-schema.js.map +1 -0
- package/dist/plugins/implementations/file-watcher/index.d.ts +110 -0
- package/dist/plugins/implementations/file-watcher/index.d.ts.map +1 -0
- package/dist/plugins/implementations/file-watcher/index.js +212 -0
- package/dist/plugins/implementations/file-watcher/index.js.map +1 -0
- package/dist/plugins/implementations/github/index.d.ts +201 -0
- package/dist/plugins/implementations/github/index.d.ts.map +1 -0
- package/dist/plugins/implementations/github/index.js +337 -0
- package/dist/plugins/implementations/github/index.js.map +1 -0
- package/dist/plugins/implementations/slack/index.d.ts +153 -0
- package/dist/plugins/implementations/slack/index.d.ts.map +1 -0
- package/dist/plugins/implementations/slack/index.js +221 -0
- package/dist/plugins/implementations/slack/index.js.map +1 -0
- package/dist/plugins/index.d.ts +23 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +35 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/plugin-manager.d.ts +66 -0
- package/dist/plugins/plugin-manager.d.ts.map +1 -0
- package/dist/plugins/plugin-manager.js +198 -0
- package/dist/plugins/plugin-manager.js.map +1 -0
- package/dist/plugins/types.d.ts +102 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +38 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/plugins/utils/security.d.ts +43 -0
- package/dist/plugins/utils/security.d.ts.map +1 -0
- package/dist/plugins/utils/security.js +115 -0
- package/dist/plugins/utils/security.js.map +1 -0
- package/dist/query-engine/index.d.ts +10 -0
- package/dist/query-engine/index.d.ts.map +1 -0
- package/dist/query-engine/index.js +10 -0
- package/dist/query-engine/index.js.map +1 -0
- package/dist/query-engine/navigator-loader.d.ts +37 -0
- package/dist/query-engine/navigator-loader.d.ts.map +1 -0
- package/dist/query-engine/navigator-loader.js +167 -0
- package/dist/query-engine/navigator-loader.js.map +1 -0
- package/dist/query-engine/output-formatter.d.ts +55 -0
- package/dist/query-engine/output-formatter.d.ts.map +1 -0
- package/dist/query-engine/output-formatter.js +165 -0
- package/dist/query-engine/output-formatter.js.map +1 -0
- package/dist/query-engine/response-validator.d.ts +55 -0
- package/dist/query-engine/response-validator.d.ts.map +1 -0
- package/dist/query-engine/response-validator.js +92 -0
- package/dist/query-engine/response-validator.js.map +1 -0
- package/dist/templates/.gitignore.template +23 -0
- package/dist/templates/CLAUDE-pack.md.template +32 -0
- package/dist/templates/CLAUDE.md.template +128 -0
- package/dist/templates/README.md.template +174 -0
- package/dist/templates/config-pack.json.template +16 -0
- package/dist/templates/config.json.template +11 -0
- package/dist/templates/index.d.ts +22 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +32 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/plugins.json.template +33 -0
- package/dist/templates/system-configuration.md.template +66 -0
- package/dist/tools/handler.d.ts +20 -0
- package/dist/tools/handler.d.ts.map +1 -0
- package/dist/tools/handler.js +202 -0
- package/dist/tools/handler.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/response.d.ts +30 -0
- package/dist/tools/response.d.ts.map +1 -0
- package/dist/tools/response.js +68 -0
- package/dist/tools/response.js.map +1 -0
- package/dist/tools/self-config.d.ts +54 -0
- package/dist/tools/self-config.d.ts.map +1 -0
- package/dist/tools/self-config.js +84 -0
- package/dist/tools/self-config.js.map +1 -0
- package/dist/validation/index.d.ts +19 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +91 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
/**
|
|
5
|
+
* Parse a GitHub folder URL into components
|
|
6
|
+
*
|
|
7
|
+
* Supports formats:
|
|
8
|
+
* - https://github.com/owner/repo/tree/main/path/to/folder
|
|
9
|
+
* - https://github.com/owner/repo/tree/v1.0.0/path/to/folder
|
|
10
|
+
* - github:owner/repo/path/to/folder (defaults to main branch)
|
|
11
|
+
* - github:owner/repo/path/to/folder@v1.0.0
|
|
12
|
+
* - git@github.com:owner/repo/path/to/folder (SSH)
|
|
13
|
+
* - git@github.com:owner/repo/path/to/folder@v1.0.0 (SSH with ref)
|
|
14
|
+
*
|
|
15
|
+
* @param url - GitHub URL to parse
|
|
16
|
+
* @returns Parsed URL components or null if not a valid GitHub URL
|
|
17
|
+
*/
|
|
18
|
+
export function parseGitHubUrl(url) {
|
|
19
|
+
// Handle SSH URLs: git@github.com:owner/repo/path/to/folder[@ref]
|
|
20
|
+
if (url.startsWith("git@github.com:")) {
|
|
21
|
+
const sshPart = url.slice(15); // Remove "git@github.com:"
|
|
22
|
+
// Check for @ref suffix (but not in the middle of a path)
|
|
23
|
+
const atIndex = sshPart.lastIndexOf("@");
|
|
24
|
+
let pathPart;
|
|
25
|
+
let ref = "main";
|
|
26
|
+
if (atIndex > 0) {
|
|
27
|
+
pathPart = sshPart.slice(0, atIndex);
|
|
28
|
+
ref = sshPart.slice(atIndex + 1);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
pathPart = sshPart;
|
|
32
|
+
}
|
|
33
|
+
// Remove .git suffix if present
|
|
34
|
+
pathPart = pathPart.replace(/\.git$/, "");
|
|
35
|
+
// Split into owner/repo/path
|
|
36
|
+
const parts = pathPart.split("/");
|
|
37
|
+
if (parts.length < 2) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const owner = parts[0];
|
|
41
|
+
const repo = parts[1];
|
|
42
|
+
const folderPath = parts.slice(2).join("/");
|
|
43
|
+
if (!owner || !repo) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return { owner, repo, ref, path: folderPath, useSsh: true };
|
|
47
|
+
}
|
|
48
|
+
// Handle github: shorthand
|
|
49
|
+
if (url.startsWith("github:")) {
|
|
50
|
+
const shorthand = url.slice(7); // Remove "github:"
|
|
51
|
+
// Check for @ref suffix
|
|
52
|
+
const atIndex = shorthand.lastIndexOf("@");
|
|
53
|
+
let pathPart;
|
|
54
|
+
let ref = "main";
|
|
55
|
+
if (atIndex > 0) {
|
|
56
|
+
pathPart = shorthand.slice(0, atIndex);
|
|
57
|
+
ref = shorthand.slice(atIndex + 1);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
pathPart = shorthand;
|
|
61
|
+
}
|
|
62
|
+
// Split into owner/repo/path
|
|
63
|
+
const parts = pathPart.split("/");
|
|
64
|
+
if (parts.length < 2) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const owner = parts[0];
|
|
68
|
+
const repo = parts[1];
|
|
69
|
+
const folderPath = parts.slice(2).join("/");
|
|
70
|
+
if (!owner || !repo) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return { owner, repo, ref, path: folderPath, useSsh: false };
|
|
74
|
+
}
|
|
75
|
+
// Handle full GitHub URLs
|
|
76
|
+
// https://github.com/owner/repo/tree/ref/path/to/folder
|
|
77
|
+
const treeMatch = url.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/tree\/([^/]+)(?:\/(.*))?$/);
|
|
78
|
+
if (treeMatch) {
|
|
79
|
+
const [, owner, repo, ref, folderPath] = treeMatch;
|
|
80
|
+
if (!owner || !repo || !ref) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
owner,
|
|
85
|
+
repo,
|
|
86
|
+
ref,
|
|
87
|
+
path: folderPath || "",
|
|
88
|
+
useSsh: false,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Handle repo root URLs (no tree/ref)
|
|
92
|
+
// https://github.com/owner/repo
|
|
93
|
+
const repoMatch = url.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/?$/);
|
|
94
|
+
if (repoMatch) {
|
|
95
|
+
const [, owner, repo] = repoMatch;
|
|
96
|
+
if (!owner || !repo) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
owner,
|
|
101
|
+
repo,
|
|
102
|
+
ref: "main",
|
|
103
|
+
path: "",
|
|
104
|
+
useSsh: false,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if a string is a GitHub URL
|
|
111
|
+
*/
|
|
112
|
+
export function isGitHubUrl(url) {
|
|
113
|
+
return (url.startsWith("github:") ||
|
|
114
|
+
url.startsWith("git@github.com:") ||
|
|
115
|
+
url.startsWith("https://github.com/") ||
|
|
116
|
+
url.startsWith("http://github.com/"));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Fetch contents of a GitHub folder using git sparse-checkout (SSH or HTTPS)
|
|
120
|
+
*
|
|
121
|
+
* @param info - Parsed GitHub URL info
|
|
122
|
+
* @param targetDir - Directory to write files to
|
|
123
|
+
* @param onProgress - Optional progress callback
|
|
124
|
+
*/
|
|
125
|
+
async function fetchGitHubFolderViaGit(info, targetDir, onProgress) {
|
|
126
|
+
const { owner, repo, ref, path: folderPath, useSsh } = info;
|
|
127
|
+
// Build the git remote URL
|
|
128
|
+
const repoUrl = useSsh
|
|
129
|
+
? `git@github.com:${owner}/${repo}.git`
|
|
130
|
+
: `https://github.com/${owner}/${repo}.git`;
|
|
131
|
+
onProgress?.(`Cloning via ${useSsh ? "SSH" : "HTTPS"} from ${owner}/${repo}@${ref}`);
|
|
132
|
+
// Create a temp directory for the git clone
|
|
133
|
+
const gitTempDir = fs.mkdtempSync(path.join(targetDir, ".git-clone-"));
|
|
134
|
+
try {
|
|
135
|
+
// Clone with sparse checkout (minimal download)
|
|
136
|
+
execSync(`git clone --depth 1 --filter=blob:none --sparse "${repoUrl}" "${gitTempDir}" --branch "${ref}"`, { stdio: "pipe" });
|
|
137
|
+
// If we have a specific path, use sparse-checkout to get only that folder
|
|
138
|
+
if (folderPath) {
|
|
139
|
+
execSync(`git -C "${gitTempDir}" sparse-checkout set "${folderPath}"`, {
|
|
140
|
+
stdio: "pipe",
|
|
141
|
+
});
|
|
142
|
+
onProgress?.(`Checked out ${folderPath}`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Get everything
|
|
146
|
+
execSync(`git -C "${gitTempDir}" sparse-checkout disable`, {
|
|
147
|
+
stdio: "pipe",
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Copy files from the cloned folder to target directory
|
|
151
|
+
const sourceDir = folderPath
|
|
152
|
+
? path.join(gitTempDir, folderPath)
|
|
153
|
+
: gitTempDir;
|
|
154
|
+
if (!fs.existsSync(sourceDir)) {
|
|
155
|
+
throw new Error(`Path "${folderPath}" not found in repository`);
|
|
156
|
+
}
|
|
157
|
+
// Copy all files except .git
|
|
158
|
+
const entries = fs.readdirSync(sourceDir, { withFileTypes: true });
|
|
159
|
+
for (const entry of entries) {
|
|
160
|
+
if (entry.name === ".git")
|
|
161
|
+
continue;
|
|
162
|
+
const srcPath = path.join(sourceDir, entry.name);
|
|
163
|
+
const destPath = path.join(targetDir, entry.name);
|
|
164
|
+
if (entry.isDirectory()) {
|
|
165
|
+
copyDirectoryRecursive(srcPath, destPath);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
fs.copyFileSync(srcPath, destPath);
|
|
169
|
+
}
|
|
170
|
+
onProgress?.(`Copied ${entry.name}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
// Clean up git clone
|
|
175
|
+
fs.rmSync(gitTempDir, { recursive: true, force: true });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Recursively copy a directory
|
|
180
|
+
*/
|
|
181
|
+
function copyDirectoryRecursive(src, dest) {
|
|
182
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
183
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
184
|
+
for (const entry of entries) {
|
|
185
|
+
const srcPath = path.join(src, entry.name);
|
|
186
|
+
const destPath = path.join(dest, entry.name);
|
|
187
|
+
if (entry.isDirectory()) {
|
|
188
|
+
copyDirectoryRecursive(srcPath, destPath);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
fs.copyFileSync(srcPath, destPath);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Fetch contents of a GitHub folder recursively
|
|
197
|
+
*
|
|
198
|
+
* Uses git sparse-checkout for SSH URLs (or when API fails),
|
|
199
|
+
* otherwise uses GitHub Contents API for HTTPS.
|
|
200
|
+
*
|
|
201
|
+
* @param info - Parsed GitHub URL info
|
|
202
|
+
* @param targetDir - Directory to write files to
|
|
203
|
+
* @param onProgress - Optional progress callback
|
|
204
|
+
*/
|
|
205
|
+
export async function fetchGitHubFolder(info, targetDir, onProgress) {
|
|
206
|
+
const { owner, repo, ref, path: folderPath, useSsh } = info;
|
|
207
|
+
// Use git for SSH URLs (required for auth) or if explicitly requested
|
|
208
|
+
if (useSsh) {
|
|
209
|
+
return fetchGitHubFolderViaGit(info, targetDir, onProgress);
|
|
210
|
+
}
|
|
211
|
+
// Try API first for HTTPS (faster for small repos, no git dependency)
|
|
212
|
+
onProgress?.(`Fetching from github.com/${owner}/${repo}/${folderPath || "(root)"}@${ref}`);
|
|
213
|
+
// Use GitHub Contents API
|
|
214
|
+
const apiUrl = folderPath
|
|
215
|
+
? `https://api.github.com/repos/${owner}/${repo}/contents/${folderPath}?ref=${ref}`
|
|
216
|
+
: `https://api.github.com/repos/${owner}/${repo}/contents?ref=${ref}`;
|
|
217
|
+
await fetchContentsRecursive(apiUrl, targetDir, "", onProgress);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Recursively fetch contents from GitHub API
|
|
221
|
+
*/
|
|
222
|
+
async function fetchContentsRecursive(apiUrl, targetDir, relativePath, onProgress) {
|
|
223
|
+
const headers = {
|
|
224
|
+
Accept: "application/vnd.github.v3+json",
|
|
225
|
+
"User-Agent": "autonav-cli",
|
|
226
|
+
};
|
|
227
|
+
// Use GITHUB_TOKEN if available for higher rate limits
|
|
228
|
+
const token = process.env.GITHUB_TOKEN;
|
|
229
|
+
if (token) {
|
|
230
|
+
headers.Authorization = `Bearer ${token}`;
|
|
231
|
+
}
|
|
232
|
+
const response = await fetch(apiUrl, { headers });
|
|
233
|
+
if (!response.ok) {
|
|
234
|
+
if (response.status === 404) {
|
|
235
|
+
throw new Error(`GitHub path not found. Check that the repository, branch, and path exist.`);
|
|
236
|
+
}
|
|
237
|
+
if (response.status === 403) {
|
|
238
|
+
const rateLimitRemaining = response.headers.get("x-ratelimit-remaining");
|
|
239
|
+
if (rateLimitRemaining === "0") {
|
|
240
|
+
throw new Error("GitHub API rate limit exceeded. Set GITHUB_TOKEN environment variable for higher limits.");
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
|
|
244
|
+
}
|
|
245
|
+
const rawContents = await response.json();
|
|
246
|
+
// Handle single file response (when path points to a file, not directory)
|
|
247
|
+
if (!Array.isArray(rawContents)) {
|
|
248
|
+
throw new Error("GitHub path is a file, not a directory. Knowledge packs must be directories.");
|
|
249
|
+
}
|
|
250
|
+
const contents = rawContents;
|
|
251
|
+
for (const item of contents) {
|
|
252
|
+
const itemRelativePath = relativePath
|
|
253
|
+
? `${relativePath}/${item.name}`
|
|
254
|
+
: item.name;
|
|
255
|
+
const targetPath = path.join(targetDir, itemRelativePath);
|
|
256
|
+
if (item.type === "dir") {
|
|
257
|
+
// Create directory and recurse
|
|
258
|
+
fs.mkdirSync(targetPath, { recursive: true });
|
|
259
|
+
// Fetch subdirectory contents
|
|
260
|
+
const subApiUrl = `https://api.github.com/repos/${extractRepoFromUrl(apiUrl)}/contents/${item.path}?ref=${extractRefFromUrl(apiUrl)}`;
|
|
261
|
+
await fetchContentsRecursive(subApiUrl, targetDir, itemRelativePath, onProgress);
|
|
262
|
+
}
|
|
263
|
+
else if (item.type === "file" && item.download_url) {
|
|
264
|
+
// Download file
|
|
265
|
+
const fileResponse = await fetch(item.download_url);
|
|
266
|
+
if (!fileResponse.ok) {
|
|
267
|
+
throw new Error(`Failed to download ${item.path}: ${fileResponse.status}`);
|
|
268
|
+
}
|
|
269
|
+
const content = await fileResponse.text();
|
|
270
|
+
// Ensure parent directory exists
|
|
271
|
+
const parentDir = path.dirname(targetPath);
|
|
272
|
+
if (!fs.existsSync(parentDir)) {
|
|
273
|
+
fs.mkdirSync(parentDir, { recursive: true });
|
|
274
|
+
}
|
|
275
|
+
fs.writeFileSync(targetPath, content);
|
|
276
|
+
onProgress?.(`Downloaded ${itemRelativePath}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Extract owner/repo from API URL
|
|
282
|
+
*/
|
|
283
|
+
function extractRepoFromUrl(apiUrl) {
|
|
284
|
+
const match = apiUrl.match(/repos\/([^/]+\/[^/]+)/);
|
|
285
|
+
return match?.[1] ?? "";
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Extract ref from API URL query string
|
|
289
|
+
*/
|
|
290
|
+
function extractRefFromUrl(apiUrl) {
|
|
291
|
+
const match = apiUrl.match(/ref=([^&]+)/);
|
|
292
|
+
return match?.[1] ?? "main";
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/pack-installer/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Knowledge pack metadata schema
|
|
4
|
+
*/
|
|
5
|
+
declare const PackMetadataSchema: z.ZodObject<{
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
version: z.ZodString;
|
|
8
|
+
description: z.ZodOptional<z.ZodString>;
|
|
9
|
+
files: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
name: string;
|
|
12
|
+
version: string;
|
|
13
|
+
description?: string | undefined;
|
|
14
|
+
files?: string[] | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
name: string;
|
|
17
|
+
version: string;
|
|
18
|
+
description?: string | undefined;
|
|
19
|
+
files?: string[] | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type PackMetadata = z.infer<typeof PackMetadataSchema>;
|
|
22
|
+
/**
|
|
23
|
+
* Pack installation result
|
|
24
|
+
*/
|
|
25
|
+
export interface PackInstallResult {
|
|
26
|
+
metadata: PackMetadata;
|
|
27
|
+
installedFiles: string[];
|
|
28
|
+
systemConfigPath: string | null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Options for pack installation
|
|
32
|
+
*/
|
|
33
|
+
export interface PackInstallOptions {
|
|
34
|
+
packName?: string;
|
|
35
|
+
packServer?: string;
|
|
36
|
+
packFile?: string;
|
|
37
|
+
targetDir: string;
|
|
38
|
+
onProgress?: (message: string) => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Install a knowledge pack from a local file
|
|
42
|
+
*/
|
|
43
|
+
export declare function installPackFromFile(packFilePath: string, targetDir: string, onProgress?: (message: string) => void): Promise<PackInstallResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Install a knowledge pack from a remote server
|
|
46
|
+
*/
|
|
47
|
+
export declare function installPackFromServer(packName: string, targetDir: string, serverUrl?: string, onProgress?: (message: string) => void): Promise<PackInstallResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Install a knowledge pack from a GitHub folder
|
|
50
|
+
*/
|
|
51
|
+
export declare function installPackFromGitHub(githubUrl: string, targetDir: string, onProgress?: (message: string) => void): Promise<PackInstallResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Install a knowledge pack based on options
|
|
54
|
+
*/
|
|
55
|
+
export declare function installPack(options: PackInstallOptions): Promise<PackInstallResult>;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pack-installer/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;GAEG;AACH,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;EAKtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAOD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,iBAAiB,CAAC,CAqC5B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,iBAAiB,CAAC,CAyC5B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,iBAAiB,CAAC,CA4C5B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAwB5B"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as tar from "tar";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { isGitHubUrl, parseGitHubUrl, fetchGitHubFolder, } from "./github.js";
|
|
6
|
+
/**
|
|
7
|
+
* Knowledge pack metadata schema
|
|
8
|
+
*/
|
|
9
|
+
const PackMetadataSchema = z.object({
|
|
10
|
+
name: z.string(),
|
|
11
|
+
version: z.string(),
|
|
12
|
+
description: z.string().optional(),
|
|
13
|
+
files: z.array(z.string()).optional(),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Default pack server URL (TBD - will be configured later)
|
|
17
|
+
*/
|
|
18
|
+
const DEFAULT_PACK_SERVER = "https://packs.autonav.dev";
|
|
19
|
+
/**
|
|
20
|
+
* Install a knowledge pack from a local file
|
|
21
|
+
*/
|
|
22
|
+
export async function installPackFromFile(packFilePath, targetDir, onProgress) {
|
|
23
|
+
onProgress?.(`Extracting pack from ${path.basename(packFilePath)}`);
|
|
24
|
+
// Create temp directory for extraction
|
|
25
|
+
const tempDir = fs.mkdtempSync(path.join(targetDir, ".pack-temp-"));
|
|
26
|
+
try {
|
|
27
|
+
// Extract tarball to temp directory
|
|
28
|
+
await tar.extract({
|
|
29
|
+
file: packFilePath,
|
|
30
|
+
cwd: tempDir,
|
|
31
|
+
});
|
|
32
|
+
// Validate pack structure
|
|
33
|
+
const metadata = validatePackStructure(tempDir);
|
|
34
|
+
onProgress?.(`Validated pack: ${metadata.name} v${metadata.version}`);
|
|
35
|
+
// Install pack files to target directory
|
|
36
|
+
const installedFiles = installPackFiles(tempDir, targetDir, onProgress);
|
|
37
|
+
// Clean up temp directory
|
|
38
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
39
|
+
return {
|
|
40
|
+
metadata,
|
|
41
|
+
installedFiles,
|
|
42
|
+
systemConfigPath: fs.existsSync(path.join(targetDir, "system-configuration.md"))
|
|
43
|
+
? "./system-configuration.md"
|
|
44
|
+
: null,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
// Clean up on error
|
|
49
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Install a knowledge pack from a remote server
|
|
55
|
+
*/
|
|
56
|
+
export async function installPackFromServer(packName, targetDir, serverUrl, onProgress) {
|
|
57
|
+
const server = serverUrl || DEFAULT_PACK_SERVER;
|
|
58
|
+
const packUrl = `${server}/packs/${packName}/latest`;
|
|
59
|
+
onProgress?.(`Downloading pack from ${server}`);
|
|
60
|
+
try {
|
|
61
|
+
// Download pack (using native fetch)
|
|
62
|
+
const response = await fetch(packUrl);
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
if (response.status === 404) {
|
|
65
|
+
throw new Error(`Knowledge pack '${packName}' not found on server ${server}`);
|
|
66
|
+
}
|
|
67
|
+
throw new Error(`Failed to download pack: ${response.status} ${response.statusText}`);
|
|
68
|
+
}
|
|
69
|
+
// Save to temp file
|
|
70
|
+
const tempFile = path.join(targetDir, `.pack-${packName}-temp.tar.gz`);
|
|
71
|
+
const buffer = await response.arrayBuffer();
|
|
72
|
+
fs.writeFileSync(tempFile, Buffer.from(buffer));
|
|
73
|
+
onProgress?.(`Downloaded ${(buffer.byteLength / 1024).toFixed(1)} KB`);
|
|
74
|
+
// Install from the downloaded file
|
|
75
|
+
const result = await installPackFromFile(tempFile, targetDir, onProgress);
|
|
76
|
+
// Clean up temp file
|
|
77
|
+
fs.unlinkSync(tempFile);
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (error instanceof Error) {
|
|
82
|
+
throw new Error(`Failed to install pack from server: ${error.message}`);
|
|
83
|
+
}
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Install a knowledge pack from a GitHub folder
|
|
89
|
+
*/
|
|
90
|
+
export async function installPackFromGitHub(githubUrl, targetDir, onProgress) {
|
|
91
|
+
const urlInfo = parseGitHubUrl(githubUrl);
|
|
92
|
+
if (!urlInfo) {
|
|
93
|
+
throw new Error(`Invalid GitHub URL: ${githubUrl}\n` +
|
|
94
|
+
`Supported formats:\n` +
|
|
95
|
+
` - https://github.com/owner/repo/tree/main/path/to/pack\n` +
|
|
96
|
+
` - github:owner/repo/path/to/pack\n` +
|
|
97
|
+
` - github:owner/repo/path/to/pack@v1.0.0`);
|
|
98
|
+
}
|
|
99
|
+
// Create temp directory for GitHub download
|
|
100
|
+
const tempDir = fs.mkdtempSync(path.join(targetDir, ".github-pack-temp-"));
|
|
101
|
+
try {
|
|
102
|
+
// Fetch files from GitHub
|
|
103
|
+
await fetchGitHubFolder(urlInfo, tempDir, onProgress);
|
|
104
|
+
// Validate pack structure
|
|
105
|
+
const metadata = validatePackStructure(tempDir);
|
|
106
|
+
onProgress?.(`Validated pack: ${metadata.name} v${metadata.version}`);
|
|
107
|
+
// Install pack files to target directory
|
|
108
|
+
const installedFiles = installPackFiles(tempDir, targetDir, onProgress);
|
|
109
|
+
// Clean up temp directory
|
|
110
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
111
|
+
return {
|
|
112
|
+
metadata,
|
|
113
|
+
installedFiles,
|
|
114
|
+
systemConfigPath: fs.existsSync(path.join(targetDir, "system-configuration.md"))
|
|
115
|
+
? "./system-configuration.md"
|
|
116
|
+
: null,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
// Clean up on error
|
|
121
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Install a knowledge pack based on options
|
|
127
|
+
*/
|
|
128
|
+
export async function installPack(options) {
|
|
129
|
+
const { packName, packServer, packFile, targetDir, onProgress } = options;
|
|
130
|
+
// Ensure target directory exists
|
|
131
|
+
if (!fs.existsSync(targetDir)) {
|
|
132
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
133
|
+
}
|
|
134
|
+
if (packFile) {
|
|
135
|
+
// Install from local file
|
|
136
|
+
if (!fs.existsSync(packFile)) {
|
|
137
|
+
throw new Error(`Pack file not found: ${packFile}`);
|
|
138
|
+
}
|
|
139
|
+
return installPackFromFile(packFile, targetDir, onProgress);
|
|
140
|
+
}
|
|
141
|
+
else if (packName) {
|
|
142
|
+
// Check if it's a GitHub URL
|
|
143
|
+
if (isGitHubUrl(packName)) {
|
|
144
|
+
return installPackFromGitHub(packName, targetDir, onProgress);
|
|
145
|
+
}
|
|
146
|
+
// Install from server
|
|
147
|
+
return installPackFromServer(packName, targetDir, packServer, onProgress);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
throw new Error("Either packName or packFile must be provided");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Validate pack structure and return metadata
|
|
155
|
+
*/
|
|
156
|
+
function validatePackStructure(packDir) {
|
|
157
|
+
// Check for metadata.json
|
|
158
|
+
const metadataPath = path.join(packDir, "metadata.json");
|
|
159
|
+
if (!fs.existsSync(metadataPath)) {
|
|
160
|
+
throw new Error("Invalid pack structure: missing metadata.json. Knowledge packs must include a metadata.json file.");
|
|
161
|
+
}
|
|
162
|
+
// Parse and validate metadata
|
|
163
|
+
const metadataContent = fs.readFileSync(metadataPath, "utf-8");
|
|
164
|
+
let metadata;
|
|
165
|
+
try {
|
|
166
|
+
metadata = JSON.parse(metadataContent);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
throw new Error(`Invalid metadata.json: ${error instanceof Error ? error.message : String(error)}`);
|
|
170
|
+
}
|
|
171
|
+
const validationResult = PackMetadataSchema.safeParse(metadata);
|
|
172
|
+
if (!validationResult.success) {
|
|
173
|
+
throw new Error(`Invalid pack metadata: ${validationResult.error.message}`);
|
|
174
|
+
}
|
|
175
|
+
// Check for required files
|
|
176
|
+
const hasSystemConfig = fs.existsSync(path.join(packDir, "system-configuration.md"));
|
|
177
|
+
const hasKnowledge = fs.existsSync(path.join(packDir, "knowledge"));
|
|
178
|
+
if (!hasSystemConfig && !hasKnowledge) {
|
|
179
|
+
throw new Error("Invalid pack structure: must contain either system-configuration.md or knowledge/ directory");
|
|
180
|
+
}
|
|
181
|
+
return validationResult.data;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Install pack files to target directory
|
|
185
|
+
*/
|
|
186
|
+
function installPackFiles(packDir, targetDir, onProgress) {
|
|
187
|
+
const installedFiles = [];
|
|
188
|
+
// Copy system-configuration.md if it exists
|
|
189
|
+
const systemConfigPath = path.join(packDir, "system-configuration.md");
|
|
190
|
+
if (fs.existsSync(systemConfigPath)) {
|
|
191
|
+
const targetPath = path.join(targetDir, "system-configuration.md");
|
|
192
|
+
fs.copyFileSync(systemConfigPath, targetPath);
|
|
193
|
+
installedFiles.push("system-configuration.md");
|
|
194
|
+
onProgress?.("Installed system-configuration.md");
|
|
195
|
+
}
|
|
196
|
+
// Copy knowledge directory if it exists
|
|
197
|
+
const knowledgeDir = path.join(packDir, "knowledge");
|
|
198
|
+
if (fs.existsSync(knowledgeDir)) {
|
|
199
|
+
const targetKnowledgeDir = path.join(targetDir, "knowledge");
|
|
200
|
+
copyDirectoryRecursive(knowledgeDir, targetKnowledgeDir);
|
|
201
|
+
// Count files
|
|
202
|
+
const files = countFilesRecursive(targetKnowledgeDir);
|
|
203
|
+
installedFiles.push(...files.map((f) => `knowledge/${f}`));
|
|
204
|
+
onProgress?.(`Installed ${files.length} knowledge file${files.length !== 1 ? "s" : ""}`);
|
|
205
|
+
}
|
|
206
|
+
// Copy plugins.json if it exists
|
|
207
|
+
const pluginsPath = path.join(packDir, "plugins.json");
|
|
208
|
+
if (fs.existsSync(pluginsPath)) {
|
|
209
|
+
const targetPluginsDir = path.join(targetDir, ".claude");
|
|
210
|
+
if (!fs.existsSync(targetPluginsDir)) {
|
|
211
|
+
fs.mkdirSync(targetPluginsDir, { recursive: true });
|
|
212
|
+
}
|
|
213
|
+
const targetPath = path.join(targetPluginsDir, "plugins.json");
|
|
214
|
+
fs.copyFileSync(pluginsPath, targetPath);
|
|
215
|
+
installedFiles.push(".claude/plugins.json");
|
|
216
|
+
onProgress?.("Installed plugins configuration");
|
|
217
|
+
}
|
|
218
|
+
return installedFiles;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Recursively copy directory
|
|
222
|
+
*/
|
|
223
|
+
function copyDirectoryRecursive(src, dest) {
|
|
224
|
+
if (!fs.existsSync(dest)) {
|
|
225
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
226
|
+
}
|
|
227
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
228
|
+
for (const entry of entries) {
|
|
229
|
+
const srcPath = path.join(src, entry.name);
|
|
230
|
+
const destPath = path.join(dest, entry.name);
|
|
231
|
+
if (entry.isDirectory()) {
|
|
232
|
+
copyDirectoryRecursive(srcPath, destPath);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
fs.copyFileSync(srcPath, destPath);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Count files recursively in directory
|
|
241
|
+
*/
|
|
242
|
+
function countFilesRecursive(dir, relativeTo) {
|
|
243
|
+
const base = relativeTo || dir;
|
|
244
|
+
const files = [];
|
|
245
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
246
|
+
for (const entry of entries) {
|
|
247
|
+
const fullPath = path.join(dir, entry.name);
|
|
248
|
+
if (entry.isDirectory()) {
|
|
249
|
+
files.push(...countFilesRecursive(fullPath, base));
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
files.push(path.relative(base, fullPath));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return files;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pack-installer/index.ts"],"names":[],"mappings":"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"}
|