ai-jue 1.3.2 → 1.5.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/dist/capability-source/index.d.ts +26 -0
- package/dist/capability-source/index.js +290 -0
- package/dist/capability-source/index.js.map +1 -0
- package/dist/cli.js +12 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +2 -0
- package/dist/commands/apply.js +68 -22
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/capability.d.ts +16 -0
- package/dist/commands/capability.js +77 -0
- package/dist/commands/capability.js.map +1 -0
- package/dist/commands/create-preset.js +15 -2
- package/dist/commands/create-preset.js.map +1 -1
- package/dist/commands/extension.d.ts +41 -0
- package/dist/commands/extension.js +132 -0
- package/dist/commands/extension.js.map +1 -0
- package/dist/commands/format-rules.js +0 -19
- package/dist/commands/format-rules.js.map +1 -1
- package/dist/commands/format.js +3 -8
- package/dist/commands/format.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/inspect.d.ts +44 -0
- package/dist/commands/inspect.js +118 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/config.d.ts +1359 -403
- package/dist/config.js +36 -75
- package/dist/config.js.map +1 -1
- package/dist/core-apply.d.ts +32 -0
- package/dist/core-apply.js +104 -0
- package/dist/core-apply.js.map +1 -0
- package/dist/extension-loader.d.ts +25 -0
- package/dist/extension-loader.js +143 -0
- package/dist/extension-loader.js.map +1 -0
- package/dist/i18n.js +100 -6
- package/dist/i18n.js.map +1 -1
- package/dist/normalize.js +37 -1
- package/dist/normalize.js.map +1 -1
- package/dist/preset.d.ts +14 -1
- package/dist/preset.js +183 -47
- package/dist/preset.js.map +1 -1
- package/dist/resolver.d.ts +2 -1
- package/dist/resolver.js +26 -5
- package/dist/resolver.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { CapabilityRef } from 'ai-jue-core';
|
|
2
|
+
import { MergedConfig } from '../config';
|
|
3
|
+
export interface CapabilityLockEntry {
|
|
4
|
+
type: CapabilityRef['type'];
|
|
5
|
+
contentHash: string;
|
|
6
|
+
locatorHash: string;
|
|
7
|
+
sourceType: 'file' | 'npm' | 'github';
|
|
8
|
+
}
|
|
9
|
+
export interface CapabilitySourceOptions {
|
|
10
|
+
cacheDir?: string;
|
|
11
|
+
fetch?: typeof fetch;
|
|
12
|
+
frozen?: boolean;
|
|
13
|
+
mirrorDir?: string;
|
|
14
|
+
/** `true` forces every Capability to bypass the cache; a name set scopes the bypass to those Capabilities only. */
|
|
15
|
+
forceRefresh?: boolean | ReadonlySet<string>;
|
|
16
|
+
}
|
|
17
|
+
export interface LoadedCapabilities {
|
|
18
|
+
config: MergedConfig;
|
|
19
|
+
lock: {
|
|
20
|
+
version: 1;
|
|
21
|
+
capabilities: Record<string, CapabilityLockEntry>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function capabilityCacheDestination(ref: Pick<CapabilityRef, 'source' | 'ref' | 'path'>, cacheRoot: string): string;
|
|
25
|
+
export declare function loadCapabilityRefs(refs: unknown, baseDir: string, userLanguage?: string, options?: CapabilitySourceOptions): Promise<LoadedCapabilities>;
|
|
26
|
+
export declare function mergeCapabilityLocks(...locks: Array<LoadedCapabilities['lock']>): LoadedCapabilities['lock'];
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.capabilityCacheDestination = capabilityCacheDestination;
|
|
7
|
+
exports.loadCapabilityRefs = loadCapabilityRefs;
|
|
8
|
+
exports.mergeCapabilityLocks = mergeCapabilityLocks;
|
|
9
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const ai_jue_core_1 = require("ai-jue-core");
|
|
15
|
+
const merge_1 = require("../merge");
|
|
16
|
+
const preset_1 = require("../preset");
|
|
17
|
+
const SAFE_ARCHIVE_ENTRY = /^(?!\/)(?!.*(?:^|\/)\.\.(?:\/|$)).+$/;
|
|
18
|
+
function sha256(value) {
|
|
19
|
+
return crypto_1.default.createHash('sha256').update(value).digest('hex');
|
|
20
|
+
}
|
|
21
|
+
function sourceType(source) {
|
|
22
|
+
return source.slice(0, source.indexOf(':'));
|
|
23
|
+
}
|
|
24
|
+
function capabilityCacheDestination(ref, cacheRoot) {
|
|
25
|
+
return path_1.default.join(cacheRoot, sourceType(ref.source), sha256(`${ref.source}\0${ref.ref || ''}\0${ref.path || ''}`));
|
|
26
|
+
}
|
|
27
|
+
function extractedRoot(destination) {
|
|
28
|
+
const entries = fs_1.default
|
|
29
|
+
.readdirSync(destination, { withFileTypes: true })
|
|
30
|
+
.filter((entry) => entry.name !== 'source.tgz');
|
|
31
|
+
return entries.length === 1 && entries[0].isDirectory()
|
|
32
|
+
? path_1.default.join(destination, entries[0].name)
|
|
33
|
+
: destination;
|
|
34
|
+
}
|
|
35
|
+
function isPopulated(destination) {
|
|
36
|
+
return fs_1.default.existsSync(destination) && fs_1.default.readdirSync(destination).length > 0;
|
|
37
|
+
}
|
|
38
|
+
function safeChild(baseDir, relativePath) {
|
|
39
|
+
const base = path_1.default.resolve(baseDir);
|
|
40
|
+
const target = path_1.default.resolve(base, relativePath);
|
|
41
|
+
if (target !== base && !target.startsWith(`${base}${path_1.default.sep}`)) {
|
|
42
|
+
throw new Error(`Capability path must stay inside its source: ${relativePath}`);
|
|
43
|
+
}
|
|
44
|
+
return target;
|
|
45
|
+
}
|
|
46
|
+
function runTar(args, cwd) {
|
|
47
|
+
const result = (0, child_process_1.spawnSync)('tar', args, {
|
|
48
|
+
cwd,
|
|
49
|
+
encoding: 'utf8',
|
|
50
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
51
|
+
});
|
|
52
|
+
if (result.status !== 0) {
|
|
53
|
+
throw new Error(`Unable to read Capability archive: ${result.stderr.trim()}`);
|
|
54
|
+
}
|
|
55
|
+
return result.stdout;
|
|
56
|
+
}
|
|
57
|
+
function extractArchive(archivePath, destination) {
|
|
58
|
+
const entries = runTar(['-tzf', archivePath])
|
|
59
|
+
.split('\n')
|
|
60
|
+
.map((entry) => entry.trim())
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
if (entries.length === 0 || entries.some((entry) => !SAFE_ARCHIVE_ENTRY.test(entry))) {
|
|
63
|
+
throw new Error('Capability archive contains an invalid or unsafe path');
|
|
64
|
+
}
|
|
65
|
+
const verboseEntries = runTar(['-tvzf', archivePath]).split('\n').filter(Boolean);
|
|
66
|
+
if (verboseEntries.some((entry) => /^[lh]/.test(entry))) {
|
|
67
|
+
throw new Error('Capability archive must not contain symbolic or hard links');
|
|
68
|
+
}
|
|
69
|
+
// Extract into a sibling temp directory and only rename it into place once
|
|
70
|
+
// extraction fully succeeds. If the process dies mid-extraction (Ctrl-C, CI
|
|
71
|
+
// timeout, OOM), `destination` itself is never created/touched, so a later
|
|
72
|
+
// run's cache-hit check correctly treats it as missing instead of silently
|
|
73
|
+
// trusting a truncated result forever.
|
|
74
|
+
const tmpDestination = `${destination}.tmp-${process.pid}-${Date.now()}`;
|
|
75
|
+
fs_1.default.mkdirSync(tmpDestination, { recursive: true });
|
|
76
|
+
try {
|
|
77
|
+
runTar(['-xzf', archivePath, '-C', tmpDestination]);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
fs_1.default.rmSync(tmpDestination, { recursive: true, force: true });
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
fs_1.default.rmSync(destination, { recursive: true, force: true });
|
|
84
|
+
fs_1.default.renameSync(tmpDestination, destination);
|
|
85
|
+
return extractedRoot(destination);
|
|
86
|
+
}
|
|
87
|
+
function hashDirectory(rootDir) {
|
|
88
|
+
const hash = crypto_1.default.createHash('sha256');
|
|
89
|
+
const visit = (dir) => {
|
|
90
|
+
for (const entry of fs_1.default.readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
|
|
91
|
+
const absolute = path_1.default.join(dir, entry.name);
|
|
92
|
+
const relative = path_1.default.relative(rootDir, absolute).split(path_1.default.sep).join('/');
|
|
93
|
+
hash.update(entry.isDirectory() ? `d:${relative}\0` : `f:${relative}\0`);
|
|
94
|
+
if (entry.isDirectory())
|
|
95
|
+
visit(absolute);
|
|
96
|
+
if (entry.isFile())
|
|
97
|
+
hash.update(fs_1.default.readFileSync(absolute));
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
visit(rootDir);
|
|
101
|
+
return hash.digest('hex');
|
|
102
|
+
}
|
|
103
|
+
function resolveFile(ref, baseDir) {
|
|
104
|
+
const locator = ref.source.slice('file:'.length);
|
|
105
|
+
if (!locator)
|
|
106
|
+
throw new Error('file: Capability source must include a path');
|
|
107
|
+
const resolved = path_1.default.resolve(baseDir, locator);
|
|
108
|
+
if (!fs_1.default.existsSync(resolved)) {
|
|
109
|
+
throw new Error('file: Capability source does not exist');
|
|
110
|
+
}
|
|
111
|
+
return resolved;
|
|
112
|
+
}
|
|
113
|
+
function resolveLocalNpmArchive(ref, baseDir, cacheDir) {
|
|
114
|
+
const locator = ref.source.slice('npm:'.length);
|
|
115
|
+
if (!locator.startsWith('file:'))
|
|
116
|
+
return null;
|
|
117
|
+
const archivePath = path_1.default.resolve(baseDir, locator.slice('file:'.length));
|
|
118
|
+
if (!fs_1.default.existsSync(archivePath) || !archivePath.endsWith('.tgz')) {
|
|
119
|
+
throw new Error('Local npm Capability source must reference an existing .tgz file');
|
|
120
|
+
}
|
|
121
|
+
return extractArchive(archivePath, cacheDir);
|
|
122
|
+
}
|
|
123
|
+
function assertExactNpmSpecifier(specifier) {
|
|
124
|
+
const match = specifier.match(/^(?:@[^/]+\/[^@]+|[^@/]+)@([^@]+)$/);
|
|
125
|
+
if (!match || !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(match[1])) {
|
|
126
|
+
throw new Error('npm: Capability source must include an exact version');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function resolveNpm(ref, baseDir, cacheDir, options) {
|
|
130
|
+
const local = resolveLocalNpmArchive(ref, baseDir, cacheDir);
|
|
131
|
+
if (local)
|
|
132
|
+
return local;
|
|
133
|
+
const specifier = ref.source.slice('npm:'.length);
|
|
134
|
+
assertExactNpmSpecifier(specifier);
|
|
135
|
+
if (!options.forceRefresh && isPopulated(cacheDir)) {
|
|
136
|
+
return extractedRoot(cacheDir);
|
|
137
|
+
}
|
|
138
|
+
const packDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'ai-jue-npm-pack-'));
|
|
139
|
+
try {
|
|
140
|
+
const result = (0, child_process_1.spawnSync)('npm', ['pack', specifier, '--ignore-scripts', '--json', '--pack-destination', packDir], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
|
|
141
|
+
if (result.status !== 0) {
|
|
142
|
+
throw new Error(`Unable to pack npm Capability: ${result.stderr.trim()}`);
|
|
143
|
+
}
|
|
144
|
+
const output = JSON.parse(result.stdout);
|
|
145
|
+
const filename = output?.[0]?.filename;
|
|
146
|
+
if (typeof filename !== 'string') {
|
|
147
|
+
throw new Error('npm pack did not return an archive filename');
|
|
148
|
+
}
|
|
149
|
+
return extractArchive(path_1.default.join(packDir, filename), cacheDir);
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
fs_1.default.rmSync(packDir, { recursive: true, force: true });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async function resolveGithub(name, ref, cacheDir, options) {
|
|
156
|
+
const repository = ref.source.slice('github:'.length);
|
|
157
|
+
if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(repository)) {
|
|
158
|
+
throw new Error('github: Capability source must use owner/repository');
|
|
159
|
+
}
|
|
160
|
+
if (!ref.ref) {
|
|
161
|
+
if (options.frozen) {
|
|
162
|
+
throw new Error('Frozen resolution requires github: Capability sources to declare ref');
|
|
163
|
+
}
|
|
164
|
+
console.warn('[WARN] A github: Capability has no pinned ref; resolving against the '
|
|
165
|
+
+ 'floating default branch. Pin a ref or run `jue apply --frozen` in CI.');
|
|
166
|
+
}
|
|
167
|
+
const unpackedDir = path_1.default.join(cacheDir, 'unpacked');
|
|
168
|
+
if (!options.forceRefresh && isPopulated(unpackedDir)) {
|
|
169
|
+
return extractedRoot(unpackedDir);
|
|
170
|
+
}
|
|
171
|
+
const revision = ref.ref || 'HEAD';
|
|
172
|
+
const fetchImpl = options.fetch || globalThis.fetch;
|
|
173
|
+
if (typeof fetchImpl !== 'function') {
|
|
174
|
+
throw new Error('github: Capability resolution requires a fetch implementation');
|
|
175
|
+
}
|
|
176
|
+
const response = await fetchImpl(`https://codeload.github.com/${repository}/tar.gz/${encodeURIComponent(revision)}`, { method: 'GET', redirect: 'error' });
|
|
177
|
+
if (!response.ok) {
|
|
178
|
+
throw new Error(`Unable to fetch github: Capability archive (${response.status})`);
|
|
179
|
+
}
|
|
180
|
+
const archive = Buffer.from(await response.arrayBuffer());
|
|
181
|
+
const archivePath = path_1.default.join(cacheDir, 'source.tgz');
|
|
182
|
+
fs_1.default.mkdirSync(cacheDir, { recursive: true });
|
|
183
|
+
fs_1.default.writeFileSync(archivePath, archive);
|
|
184
|
+
return extractArchive(archivePath, path_1.default.join(cacheDir, 'unpacked'));
|
|
185
|
+
}
|
|
186
|
+
async function resolveSource(name, ref, baseDir, options) {
|
|
187
|
+
// `AI_JUE_CACHE_DIR` mirrors `AI_JUE_SOURCE_MIRROR_DIR`: without it, a test
|
|
188
|
+
// run using an offline mirror (synthetic/stub archives) still extracts
|
|
189
|
+
// into the real, globally-shared `~/.cache/ai-jue`, keyed only by
|
|
190
|
+
// sha256(source+ref+path) — a real npm/github locator used by a stubbed
|
|
191
|
+
// test run would then permanently shadow the real content for every
|
|
192
|
+
// future real resolution of that same locator on this machine.
|
|
193
|
+
const cacheRoot = options.cacheDir || process.env.AI_JUE_CACHE_DIR || path_1.default.join(os_1.default.homedir(), '.cache', 'ai-jue');
|
|
194
|
+
const destination = capabilityCacheDestination(ref, cacheRoot);
|
|
195
|
+
const mirrorDir = options.mirrorDir || process.env.AI_JUE_SOURCE_MIRROR_DIR;
|
|
196
|
+
const mirrorArchive = mirrorDir
|
|
197
|
+
? path_1.default.join(mirrorDir, `${path_1.default.basename(destination)}.tgz`)
|
|
198
|
+
: '';
|
|
199
|
+
let root;
|
|
200
|
+
if (mirrorArchive && fs_1.default.existsSync(mirrorArchive)) {
|
|
201
|
+
root = extractArchive(mirrorArchive, destination);
|
|
202
|
+
}
|
|
203
|
+
else if (ref.source.startsWith('file:')) {
|
|
204
|
+
root = resolveFile(ref, baseDir);
|
|
205
|
+
}
|
|
206
|
+
else if (ref.source.startsWith('npm:')) {
|
|
207
|
+
root = resolveNpm(ref, baseDir, destination, options);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
root = await resolveGithub(name, ref, destination, options);
|
|
211
|
+
}
|
|
212
|
+
const selected = ref.path ? safeChild(root, ref.path) : root;
|
|
213
|
+
if (!fs_1.default.existsSync(selected)) {
|
|
214
|
+
throw new Error('Capability source path does not exist');
|
|
215
|
+
}
|
|
216
|
+
return selected;
|
|
217
|
+
}
|
|
218
|
+
async function loadMcpCapability({ name, ref, sourceDir }) {
|
|
219
|
+
const manifestPath = fs_1.default.existsSync(path_1.default.join(sourceDir, 'mcp.json'))
|
|
220
|
+
? path_1.default.join(sourceDir, 'mcp.json')
|
|
221
|
+
: path_1.default.join(sourceDir, 'package.json');
|
|
222
|
+
if (!fs_1.default.existsSync(manifestPath)) {
|
|
223
|
+
throw new Error(`mcp Capability "${name}" is missing mcp.json or package.json`);
|
|
224
|
+
}
|
|
225
|
+
const manifest = JSON.parse(fs_1.default.readFileSync(manifestPath, 'utf8'));
|
|
226
|
+
const declared = manifest.servers || manifest.mcp?.servers || manifest.ai?.mcp?.servers;
|
|
227
|
+
const server = declared?.[name] ||
|
|
228
|
+
(manifest.bin
|
|
229
|
+
? {
|
|
230
|
+
command: 'npx',
|
|
231
|
+
args: ['-y', manifest.name],
|
|
232
|
+
...(ref.config || {}),
|
|
233
|
+
}
|
|
234
|
+
: null);
|
|
235
|
+
if (!server || typeof server.command !== 'string') {
|
|
236
|
+
throw new Error(`mcp Capability "${name}" has no valid server declaration`);
|
|
237
|
+
}
|
|
238
|
+
(0, ai_jue_core_1.assertNoLiteralCredentials)(server, `mcp Capability "${name}"`);
|
|
239
|
+
return { mcp: { servers: { [name]: server } } };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* One loader per Canonical leaf type. A lookup table (rather than an
|
|
243
|
+
* if/else chain) keeps adding a type a single-line change and makes the
|
|
244
|
+
* "one CapabilityRef -> one leaf Capability" mapping visible at a glance.
|
|
245
|
+
*/
|
|
246
|
+
const CAPABILITY_LOADERS = {
|
|
247
|
+
skill: ({ name, sourceDir, userLanguage }) => (0, preset_1.loadSkillFromDir)(name, sourceDir, userLanguage),
|
|
248
|
+
rule: ({ name, sourceDir, userLanguage }) => (0, preset_1.loadRuleFromDir)(name, sourceDir, userLanguage),
|
|
249
|
+
command: ({ name, sourceDir, userLanguage }) => (0, preset_1.loadCommandFromDir)(name, sourceDir, userLanguage),
|
|
250
|
+
agent: ({ name, sourceDir, userLanguage }) => (0, preset_1.loadAgentFromDir)(name, sourceDir, userLanguage),
|
|
251
|
+
hook: ({ name, sourceDir, userLanguage }) => (0, preset_1.loadHookFromDir)(name, sourceDir, userLanguage),
|
|
252
|
+
mcp: loadMcpCapability,
|
|
253
|
+
};
|
|
254
|
+
function convertCapability(name, ref, sourceDir, userLanguage) {
|
|
255
|
+
return CAPABILITY_LOADERS[ref.type]({ name, ref, sourceDir, userLanguage });
|
|
256
|
+
}
|
|
257
|
+
async function loadCapabilityRefs(refs, baseDir, userLanguage, options = {}) {
|
|
258
|
+
if (refs === undefined) {
|
|
259
|
+
return { config: {}, lock: { version: 1, capabilities: {} } };
|
|
260
|
+
}
|
|
261
|
+
if (!refs || typeof refs !== 'object' || Array.isArray(refs)) {
|
|
262
|
+
throw new Error('ai.capabilities must be an object');
|
|
263
|
+
}
|
|
264
|
+
let config = {};
|
|
265
|
+
const capabilities = {};
|
|
266
|
+
for (const name of Object.keys(refs).sort()) {
|
|
267
|
+
const value = refs[name];
|
|
268
|
+
(0, ai_jue_core_1.assertCapabilityRef)(name, value);
|
|
269
|
+
const forceRefresh = options.forceRefresh instanceof Set
|
|
270
|
+
? options.forceRefresh.has(name)
|
|
271
|
+
: Boolean(options.forceRefresh);
|
|
272
|
+
const resolved = await resolveSource(name, value, baseDir, { ...options, forceRefresh });
|
|
273
|
+
const converted = await convertCapability(name, value, resolved, userLanguage);
|
|
274
|
+
config = (0, merge_1.mergeConfigWithLayeredContext)(config, converted);
|
|
275
|
+
capabilities[name] = {
|
|
276
|
+
type: value.type,
|
|
277
|
+
contentHash: hashDirectory(resolved),
|
|
278
|
+
locatorHash: sha256(`${value.source}\0${value.ref || ''}\0${value.path || ''}`),
|
|
279
|
+
sourceType: sourceType(value.source),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
return { config, lock: { version: 1, capabilities } };
|
|
283
|
+
}
|
|
284
|
+
function mergeCapabilityLocks(...locks) {
|
|
285
|
+
return {
|
|
286
|
+
version: 1,
|
|
287
|
+
capabilities: Object.assign({}, ...locks.map((lock) => lock.capabilities)),
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capability-source/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -13,6 +13,9 @@ const check_1 = require("./commands/check");
|
|
|
13
13
|
const validate_1 = require("./commands/validate");
|
|
14
14
|
const list_1 = require("./commands/list");
|
|
15
15
|
const format_1 = require("./commands/format");
|
|
16
|
+
const capability_1 = require("./commands/capability");
|
|
17
|
+
const extension_1 = require("./commands/extension");
|
|
18
|
+
const inspect_1 = require("./commands/inspect");
|
|
16
19
|
const logger_1 = require("./logger");
|
|
17
20
|
const i18n_1 = require("./i18n");
|
|
18
21
|
const config_1 = require("./config");
|
|
@@ -69,6 +72,15 @@ async function main() {
|
|
|
69
72
|
.command(validate_1.command, (0, i18n_1.t)("commands.validate.describe"), validate_1.builder, validate_1.handler)
|
|
70
73
|
.command(list_1.command, (0, i18n_1.t)("commands.list.describe"), list_1.builder, list_1.handler)
|
|
71
74
|
.command(format_1.command, (0, i18n_1.t)("commands.format.describe", { defaultValue: "Migrate AI tool configs to .ai directory" }), format_1.builder, format_1.handler)
|
|
75
|
+
.command(capability_1.command, (0, i18n_1.t)("commands.capability.describe", {
|
|
76
|
+
defaultValue: "Manage ai.capabilities Capability Source references",
|
|
77
|
+
}), capability_1.builder, capability_1.handler)
|
|
78
|
+
.command(extension_1.command, (0, i18n_1.t)("commands.extension.describe", {
|
|
79
|
+
defaultValue: "Author commands for Extension packages",
|
|
80
|
+
}), extension_1.builder, extension_1.handler)
|
|
81
|
+
.command(inspect_1.command, (0, i18n_1.t)("commands.inspect.describe", {
|
|
82
|
+
defaultValue: "Read-only inspection of Presets, Capabilities, Adapters, and Artifacts",
|
|
83
|
+
}), inspect_1.builder, inspect_1.handler)
|
|
72
84
|
.demandCommand(1, (0, i18n_1.t)("common.demand_command", {
|
|
73
85
|
defaultValue: "You need at least one command before moving on",
|
|
74
86
|
}))
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/apply.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ import { Arguments, CommandBuilder } from "yargs";
|
|
|
2
2
|
export declare const command = "apply";
|
|
3
3
|
export declare const describe = "";
|
|
4
4
|
export declare const builder: CommandBuilder;
|
|
5
|
+
export declare function resolveAdapterAlias(name: string): string;
|
|
6
|
+
export declare function parseRequestedAdapters(raw: unknown): string[];
|
|
5
7
|
export declare const handler: (argv: Arguments) => Promise<void>;
|
package/dist/commands/apply.js
CHANGED
|
@@ -37,6 +37,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.handler = exports.builder = exports.describe = exports.command = void 0;
|
|
40
|
+
exports.resolveAdapterAlias = resolveAdapterAlias;
|
|
41
|
+
exports.parseRequestedAdapters = parseRequestedAdapters;
|
|
40
42
|
const path_1 = __importDefault(require("path"));
|
|
41
43
|
const fs_1 = __importDefault(require("fs"));
|
|
42
44
|
const chokidar_1 = __importDefault(require("chokidar"));
|
|
@@ -50,6 +52,7 @@ const promises_1 = require("readline/promises");
|
|
|
50
52
|
const logger_1 = require("../logger");
|
|
51
53
|
const i18n_1 = require("../i18n");
|
|
52
54
|
const init_1 = require("./init");
|
|
55
|
+
const core_apply_1 = require("../core-apply");
|
|
53
56
|
exports.command = "apply";
|
|
54
57
|
exports.describe = ""; // Managed in cli.ts for dynamic translation
|
|
55
58
|
const builder = (yargs) => {
|
|
@@ -75,35 +78,62 @@ const builder = (yargs) => {
|
|
|
75
78
|
type: "boolean",
|
|
76
79
|
description: (0, i18n_1.t)("commands.apply.all_describe"),
|
|
77
80
|
default: false,
|
|
81
|
+
})
|
|
82
|
+
.option("frozen", {
|
|
83
|
+
type: "boolean",
|
|
84
|
+
description: "Require immutable Capability Source references",
|
|
85
|
+
default: false,
|
|
86
|
+
})
|
|
87
|
+
.option("dry-run", {
|
|
88
|
+
type: "boolean",
|
|
89
|
+
description: (0, i18n_1.t)("commands.apply.dry_run_describe"),
|
|
90
|
+
default: false,
|
|
91
|
+
})
|
|
92
|
+
.option("check", {
|
|
93
|
+
type: "boolean",
|
|
94
|
+
description: (0, i18n_1.t)("commands.apply.check_describe"),
|
|
95
|
+
default: false,
|
|
78
96
|
});
|
|
79
97
|
};
|
|
80
98
|
exports.builder = builder;
|
|
81
99
|
const ADAPTER_ALIAS_MAP = {
|
|
100
|
+
codex: "ai-jue-adapter-codex",
|
|
82
101
|
claude: "ai-jue-adapter-claude",
|
|
83
102
|
"claude-code": "ai-jue-adapter-claude",
|
|
84
103
|
cursor: "ai-jue-adapter-cursor",
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
openclaw: "ai-jue-adapter-openclaw",
|
|
105
|
+
hermes: "ai-jue-adapter-hermes",
|
|
87
106
|
};
|
|
88
107
|
const KNOWN_ADAPTERS = [...new Set(Object.values(ADAPTER_ALIAS_MAP))];
|
|
89
108
|
const ADAPTER_INDICATORS = {
|
|
109
|
+
"ai-jue-adapter-codex": [
|
|
110
|
+
"AGENTS.md",
|
|
111
|
+
".agents/skills",
|
|
112
|
+
".codex",
|
|
113
|
+
],
|
|
90
114
|
"ai-jue-adapter-cursor": [
|
|
91
115
|
".cursor",
|
|
92
116
|
],
|
|
93
|
-
"ai-jue-adapter-gemini": [
|
|
94
|
-
".gemini",
|
|
95
|
-
".gemini/settings.json",
|
|
96
|
-
"GEMINI.md",
|
|
97
|
-
],
|
|
98
117
|
"ai-jue-adapter-claude": [
|
|
99
118
|
".claude",
|
|
100
119
|
"CLAUDE.md",
|
|
101
120
|
],
|
|
102
|
-
"ai-jue-adapter-
|
|
103
|
-
".
|
|
104
|
-
|
|
121
|
+
"ai-jue-adapter-openclaw": [
|
|
122
|
+
"openclaw.json",
|
|
123
|
+
],
|
|
124
|
+
"ai-jue-adapter-hermes": [
|
|
125
|
+
// Not `config.yaml`: that filename is common across many unrelated
|
|
126
|
+
// tools (Docusaurus, mkdocs, Ansible, Serverless, etc.) and would
|
|
127
|
+
// false-positive-detect Hermes on unrelated projects, silently
|
|
128
|
+
// triggering an `npm install -D ai-jue-adapter-hermes` and an apply
|
|
129
|
+
// run against files it was never meant to read. `MEMORY.md` matches
|
|
130
|
+
// the specificity of the other Adapters' indicators (e.g. `CLAUDE.md`).
|
|
131
|
+
"MEMORY.md",
|
|
105
132
|
],
|
|
106
133
|
};
|
|
134
|
+
function resolveAdapterAlias(name) {
|
|
135
|
+
return ADAPTER_ALIAS_MAP[name.toLowerCase()] || name;
|
|
136
|
+
}
|
|
107
137
|
const CONFIG_SEARCH_PATHS = [
|
|
108
138
|
"ai.config.js",
|
|
109
139
|
"ai.config.cjs",
|
|
@@ -124,7 +154,7 @@ function parseRequestedAdapters(raw) {
|
|
|
124
154
|
.flatMap((item) => String(item).split(","))
|
|
125
155
|
.map((item) => item.trim())
|
|
126
156
|
.filter(Boolean)
|
|
127
|
-
.map((item) =>
|
|
157
|
+
.map((item) => resolveAdapterAlias(item));
|
|
128
158
|
return [...new Set(expanded)];
|
|
129
159
|
}
|
|
130
160
|
function autoDetectAdapters(discoveredAdapters, cwd) {
|
|
@@ -158,8 +188,10 @@ function parseManualSelection(raw, discoveredAdapters) {
|
|
|
158
188
|
return discoveredAdapters[idx];
|
|
159
189
|
}
|
|
160
190
|
const normalized = token.toLowerCase();
|
|
161
|
-
|
|
162
|
-
|
|
191
|
+
const aliased = resolveAdapterAlias(normalized);
|
|
192
|
+
return (aliased !== normalized
|
|
193
|
+
? aliased
|
|
194
|
+
: discoveredAdapters.find((name) => name === token || toAdapterShortName(name) === normalized));
|
|
163
195
|
})
|
|
164
196
|
.filter((item) => Boolean(item));
|
|
165
197
|
return [...new Set(resolved)];
|
|
@@ -342,13 +374,22 @@ function discoverAvailableAdapters(discoveredAdapters) {
|
|
|
342
374
|
const resolvableKnownAdapters = KNOWN_ADAPTERS.filter((name) => canResolveAdapter(name));
|
|
343
375
|
return [...new Set([...discoveredAdapters, ...resolvableKnownAdapters])];
|
|
344
376
|
}
|
|
345
|
-
async function runSingleAdapter(adapterName, config, outputDir) {
|
|
377
|
+
async function runSingleAdapter(adapterName, config, outputDir, coreOptions = {}) {
|
|
346
378
|
const adapterSpinner = (0, ora_1.default)((0, i18n_1.t)("commands.apply.running_adapter", { name: adapterName })).start();
|
|
347
379
|
try {
|
|
348
380
|
const adapterPath = require.resolve(adapterName, {
|
|
349
381
|
paths: [process.cwd(), __dirname],
|
|
350
382
|
});
|
|
351
383
|
const adapter = require(adapterPath);
|
|
384
|
+
if ((0, core_apply_1.isCoreCapableAdapter)(adapter)) {
|
|
385
|
+
adapterSpinner.stop();
|
|
386
|
+
await (0, core_apply_1.runCoreAdapter)(adapterName, adapter, config, outputDir, coreOptions);
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
if (coreOptions.dryRun || coreOptions.check) {
|
|
390
|
+
adapterSpinner.warn(picocolors_1.default.yellow((0, i18n_1.t)("commands.apply.core_unsupported", { name: adapterName })));
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
352
393
|
if (adapter.generate && typeof adapter.generate === "function") {
|
|
353
394
|
await adapter.generate(config, outputDir);
|
|
354
395
|
adapterSpinner.succeed(picocolors_1.default.green((0, i18n_1.t)("commands.apply.adapter_success", { name: adapterName })));
|
|
@@ -365,7 +406,7 @@ async function runSingleAdapter(adapterName, config, outputDir) {
|
|
|
365
406
|
process.exitCode = 1;
|
|
366
407
|
}
|
|
367
408
|
}
|
|
368
|
-
async function runAdapterList(adapterNames, config, outputDir) {
|
|
409
|
+
async function runAdapterList(adapterNames, config, outputDir, coreOptions = {}) {
|
|
369
410
|
const readyAdapters = await ensureAdaptersInstalled(adapterNames);
|
|
370
411
|
if (readyAdapters.length === 0) {
|
|
371
412
|
logger_1.logger.warn(picocolors_1.default.yellow((0, i18n_1.t)("commands.apply.no_adapter_selected")));
|
|
@@ -373,10 +414,11 @@ async function runAdapterList(adapterNames, config, outputDir) {
|
|
|
373
414
|
return;
|
|
374
415
|
}
|
|
375
416
|
for (const adapterName of readyAdapters) {
|
|
376
|
-
await runSingleAdapter(adapterName, config, outputDir);
|
|
417
|
+
await runSingleAdapter(adapterName, config, outputDir, coreOptions);
|
|
377
418
|
}
|
|
378
419
|
}
|
|
379
420
|
async function runAdapters(config, outputDir, options) {
|
|
421
|
+
const coreOptions = { dryRun: options.dryRun, check: options.check };
|
|
380
422
|
const spinner = (0, ora_1.default)((0, i18n_1.t)("commands.apply.finding_adapters")).start();
|
|
381
423
|
const discoveredAdapters = await findAdapters();
|
|
382
424
|
const availableAdapters = discoverAvailableAdapters(discoveredAdapters);
|
|
@@ -389,7 +431,7 @@ async function runAdapters(config, outputDir, options) {
|
|
|
389
431
|
count: footprintDetected.length,
|
|
390
432
|
names: footprintDetected.join(", "),
|
|
391
433
|
})));
|
|
392
|
-
await runAdapterList(footprintDetected, config, outputDir);
|
|
434
|
+
await runAdapterList(footprintDetected, config, outputDir, coreOptions);
|
|
393
435
|
return;
|
|
394
436
|
}
|
|
395
437
|
const manualSelected = await promptManualAdapterSelection(KNOWN_ADAPTERS);
|
|
@@ -401,15 +443,15 @@ async function runAdapters(config, outputDir, options) {
|
|
|
401
443
|
count: manualSelected.length,
|
|
402
444
|
names: manualSelected.join(", "),
|
|
403
445
|
})));
|
|
404
|
-
await runAdapterList(manualSelected, config, outputDir);
|
|
446
|
+
await runAdapterList(manualSelected, config, outputDir, coreOptions);
|
|
405
447
|
return;
|
|
406
448
|
}
|
|
407
449
|
if (options.requestedAdapters.length > 0) {
|
|
408
|
-
await runAdapterList(options.requestedAdapters, config, outputDir);
|
|
450
|
+
await runAdapterList(options.requestedAdapters, config, outputDir, coreOptions);
|
|
409
451
|
return;
|
|
410
452
|
}
|
|
411
453
|
if (options.all) {
|
|
412
|
-
await runAdapterList(KNOWN_ADAPTERS, config, outputDir);
|
|
454
|
+
await runAdapterList(KNOWN_ADAPTERS, config, outputDir, coreOptions);
|
|
413
455
|
return;
|
|
414
456
|
}
|
|
415
457
|
return;
|
|
@@ -469,7 +511,7 @@ async function runAdapters(config, outputDir, options) {
|
|
|
469
511
|
names: runnableAdapters.join(", "),
|
|
470
512
|
})));
|
|
471
513
|
for (const adapterName of runnableAdapters) {
|
|
472
|
-
await runSingleAdapter(adapterName, config, outputDir);
|
|
514
|
+
await runSingleAdapter(adapterName, config, outputDir, coreOptions);
|
|
473
515
|
}
|
|
474
516
|
}
|
|
475
517
|
const handler = async (argv) => {
|
|
@@ -485,6 +527,8 @@ const handler = async (argv) => {
|
|
|
485
527
|
const applyOptions = {
|
|
486
528
|
all: Boolean(argv.all),
|
|
487
529
|
requestedAdapters: mergedRequestedAdapters,
|
|
530
|
+
dryRun: Boolean(argv["dry-run"]),
|
|
531
|
+
check: Boolean(argv.check),
|
|
488
532
|
};
|
|
489
533
|
const runApply = async () => {
|
|
490
534
|
logger_1.logger.info(picocolors_1.default.bold(picocolors_1.default.blue((0, i18n_1.t)("commands.apply.running"))));
|
|
@@ -518,7 +562,9 @@ const handler = async (argv) => {
|
|
|
518
562
|
config.language = runtimeLang;
|
|
519
563
|
}
|
|
520
564
|
logger_1.logger.debug(picocolors_1.default.dim((0, i18n_1.t)("commands.apply.loaded_config")));
|
|
521
|
-
const finalConfig = await (0, resolver_1.resolveFinalConfig)(config
|
|
565
|
+
const finalConfig = await (0, resolver_1.resolveFinalConfig)(config, {
|
|
566
|
+
frozen: Boolean(argv.frozen),
|
|
567
|
+
});
|
|
522
568
|
await runAdapters(finalConfig, process.cwd(), applyOptions);
|
|
523
569
|
logger_1.logger.success(picocolors_1.default.bold(picocolors_1.default.green((0, i18n_1.t)("commands.apply.finished"))));
|
|
524
570
|
}
|