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.
Files changed (44) hide show
  1. package/dist/capability-source/index.d.ts +26 -0
  2. package/dist/capability-source/index.js +290 -0
  3. package/dist/capability-source/index.js.map +1 -0
  4. package/dist/cli.js +12 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/apply.d.ts +2 -0
  7. package/dist/commands/apply.js +68 -22
  8. package/dist/commands/apply.js.map +1 -1
  9. package/dist/commands/capability.d.ts +16 -0
  10. package/dist/commands/capability.js +77 -0
  11. package/dist/commands/capability.js.map +1 -0
  12. package/dist/commands/create-preset.js +15 -2
  13. package/dist/commands/create-preset.js.map +1 -1
  14. package/dist/commands/extension.d.ts +41 -0
  15. package/dist/commands/extension.js +132 -0
  16. package/dist/commands/extension.js.map +1 -0
  17. package/dist/commands/format-rules.js +0 -19
  18. package/dist/commands/format-rules.js.map +1 -1
  19. package/dist/commands/format.js +3 -8
  20. package/dist/commands/format.js.map +1 -1
  21. package/dist/commands/init.js +1 -1
  22. package/dist/commands/inspect.d.ts +44 -0
  23. package/dist/commands/inspect.js +118 -0
  24. package/dist/commands/inspect.js.map +1 -0
  25. package/dist/config.d.ts +1359 -403
  26. package/dist/config.js +36 -75
  27. package/dist/config.js.map +1 -1
  28. package/dist/core-apply.d.ts +32 -0
  29. package/dist/core-apply.js +104 -0
  30. package/dist/core-apply.js.map +1 -0
  31. package/dist/extension-loader.d.ts +25 -0
  32. package/dist/extension-loader.js +143 -0
  33. package/dist/extension-loader.js.map +1 -0
  34. package/dist/i18n.js +100 -6
  35. package/dist/i18n.js.map +1 -1
  36. package/dist/normalize.js +37 -1
  37. package/dist/normalize.js.map +1 -1
  38. package/dist/preset.d.ts +14 -1
  39. package/dist/preset.js +183 -47
  40. package/dist/preset.js.map +1 -1
  41. package/dist/resolver.d.ts +2 -1
  42. package/dist/resolver.js +26 -5
  43. package/dist/resolver.js.map +1 -1
  44. 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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"}
@@ -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>;
@@ -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
- gemini: "ai-jue-adapter-gemini",
86
- copilot: "ai-jue-adapter-copilot",
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-copilot": [
103
- ".github/copilot-instructions.md",
104
- ".github/copilot-settings.json",
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) => ADAPTER_ALIAS_MAP[item.toLowerCase()] || 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
- return (ADAPTER_ALIAS_MAP[normalized] ||
162
- discoveredAdapters.find((name) => name === token || toAdapterShortName(name) === normalized));
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
  }