ai-jue 1.2.0 → 1.3.1
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.en.md +1 -1
- package/README.md +5 -77
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/format-rules.d.ts +8 -0
- package/dist/commands/format-rules.js +68 -0
- package/dist/commands/format-rules.js.map +1 -0
- package/dist/commands/format.d.ts +5 -0
- package/dist/commands/format.js +362 -0
- package/dist/commands/format.js.map +1 -0
- package/dist/i18n.js +60 -0
- package/dist/i18n.js.map +1 -1
- package/dist/normalize.d.ts +13 -0
- package/dist/normalize.js +13 -0
- package/dist/normalize.js.map +1 -1
- package/dist/resolver.d.ts +14 -0
- package/dist/resolver.js +31 -0
- package/dist/resolver.js.map +1 -1
- package/package.json +1 -1
package/README.en.md
CHANGED
package/README.md
CHANGED
|
@@ -1,87 +1,15 @@
|
|
|
1
1
|
# ai-jue
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> The AI coding capability management framework.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Part of the [ai-jue](https://github.com/zenHeart/ai-jue) monorepo.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
[](LICENSE)
|
|
9
|
-
|
|
10
|
-
[English](README.en.md) | **简体中文**
|
|
11
|
-
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
## 核心定位
|
|
15
|
-
|
|
16
|
-
`ai-jue` 解决两类问题:
|
|
17
|
-
|
|
18
|
-
1. 配置碎片化:不同 AI 工具配置分散、维护成本高。
|
|
19
|
-
2. 经验碎片化:Prompt/Skills/规则难以结构化沉淀和复用。
|
|
20
|
-
|
|
21
|
-
## 最小可用
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm install -D ai-jue jue-preset-react
|
|
25
|
-
npx jue apply
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
默认可生成:
|
|
29
|
-
|
|
30
|
-
- `CLAUDE.md`
|
|
31
|
-
- `.cursor/rules/*.mdc`
|
|
32
|
-
- `.gemini/settings.json`
|
|
33
|
-
- `.github/copilot-instructions.md`
|
|
34
|
-
- `AGENTS.md`(Cursor 原生消费入口)
|
|
35
|
-
|
|
36
|
-
## 目录与概念(最小知识原则)
|
|
37
|
-
|
|
38
|
-
- 项目根目录 `AGENTS.md`:存在即自动注入全局上下文
|
|
39
|
-
- `AGENTS.md`:全局上下文
|
|
40
|
-
- `skills/`:技能资产
|
|
41
|
-
- `commands/`:命令资产
|
|
42
|
-
- `rules/`:规则资产
|
|
43
|
-
- `agents/`:代理资产(规范名称)
|
|
44
|
-
- `hooks/`:钩子资产
|
|
45
|
-
- `tools/<tool>/`:工具私有配置
|
|
46
|
-
- `.ai/`:本地资产工作区
|
|
47
|
-
- `ai.config.js`:统一配置入口
|
|
48
|
-
|
|
49
|
-
## 预设嵌套
|
|
50
|
-
|
|
51
|
-
- preset 可在自身 `package.json` 中通过 `ai.presets`(或 `jue.presets`)声明依赖 preset。
|
|
52
|
-
- 加载顺序:先依赖、后自身;自身覆盖依赖同名资产。
|
|
53
|
-
- 例如 `internal` 可声明依赖 `base`,用户只需配置 `preset: "internal"`。
|
|
54
|
-
- `AGENTS.md` 采用分层追加而非覆盖:依赖 preset -> 当前 preset -> `.ai/AGENTS.md` -> 根 `AGENTS.md` -> `ai.config.js.context.global`。
|
|
55
|
-
|
|
56
|
-
## 常用命令
|
|
7
|
+
## Installation
|
|
57
8
|
|
|
58
9
|
```bash
|
|
59
|
-
|
|
60
|
-
npx jue apply # 未传参时自动识别 .cursor/.gemini/.claude/.github 等痕迹
|
|
61
|
-
npx jue apply --adapter cursor --adapter gemini # 仅执行白名单适配器
|
|
62
|
-
npx jue apply -a # 执行全部已发现适配器(等同 --all)
|
|
63
|
-
npx jue apply --lang zh # 运行时覆盖语言(等同 AI_JUE_LANG=zh)
|
|
64
|
-
npx jue apply --watch
|
|
65
|
-
npx jue list
|
|
66
|
-
npx jue check
|
|
67
|
-
npx jue validate
|
|
68
|
-
npx jue create-preset <name>
|
|
10
|
+
npm install ai-jue
|
|
69
11
|
```
|
|
70
12
|
|
|
71
|
-
## apply 适配器选择规则
|
|
72
|
-
|
|
73
|
-
- `jue apply`:自动识别当前目录中的工具痕迹,执行匹配适配器
|
|
74
|
-
- 若未检测到任何工具痕迹,进入交互式手动选择适配器
|
|
75
|
-
- `jue apply --adapter ...`:只执行显式指定的适配器
|
|
76
|
-
- `jue apply -a` / `jue apply --all`:执行全部已发现适配器
|
|
77
|
-
- 当未传参且未识别到工具痕迹时,不会盲目执行全部适配器,会提示用户显式选择
|
|
78
|
-
|
|
79
|
-
## 首次初始化体验
|
|
80
|
-
|
|
81
|
-
- 在新项目首次执行 `jue apply` 时,如果未检测到 `ai/jue` 配置文件,会先触发初始化引导。
|
|
82
|
-
- 引导完成后继续执行 apply,减少“小白用户先学命令再配置”的门槛。
|
|
83
|
-
- 该引导流程默认不创建 `.ai` 空目录;`.ai` 仅在后续需要渐进增强资产时再创建。
|
|
84
|
-
|
|
85
13
|
## License
|
|
86
14
|
|
|
87
|
-
|
|
15
|
+
MIT
|
package/dist/cli.js
CHANGED
|
@@ -12,6 +12,7 @@ const create_preset_1 = require("./commands/create-preset");
|
|
|
12
12
|
const check_1 = require("./commands/check");
|
|
13
13
|
const validate_1 = require("./commands/validate");
|
|
14
14
|
const list_1 = require("./commands/list");
|
|
15
|
+
const format_1 = require("./commands/format");
|
|
15
16
|
const logger_1 = require("./logger");
|
|
16
17
|
const i18n_1 = require("./i18n");
|
|
17
18
|
const config_1 = require("./config");
|
|
@@ -67,6 +68,7 @@ async function main() {
|
|
|
67
68
|
.command(check_1.command, (0, i18n_1.t)("commands.check.describe"), check_1.builder, check_1.handler)
|
|
68
69
|
.command(validate_1.command, (0, i18n_1.t)("commands.validate.describe"), validate_1.builder, validate_1.handler)
|
|
69
70
|
.command(list_1.command, (0, i18n_1.t)("commands.list.describe"), list_1.builder, list_1.handler)
|
|
71
|
+
.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)
|
|
70
72
|
.demandCommand(1, (0, i18n_1.t)("common.demand_command", {
|
|
71
73
|
defaultValue: "You need at least one command before moving on",
|
|
72
74
|
}))
|
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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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOOL_PATTERNS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Tool configuration detection patterns
|
|
6
|
+
* Maps tool directories/files to their respective adapters
|
|
7
|
+
*/
|
|
8
|
+
exports.TOOL_PATTERNS = {
|
|
9
|
+
cursor: {
|
|
10
|
+
adapter: "ai-jue-adapter-cursor",
|
|
11
|
+
files: [
|
|
12
|
+
".cursor/rules/*.mdc",
|
|
13
|
+
".cursor/commands/*.md",
|
|
14
|
+
".cursor/skills/*/SKILL.md",
|
|
15
|
+
".cursor/hooks.json",
|
|
16
|
+
".cursor/mcp.json",
|
|
17
|
+
".cursor/agents/*.md",
|
|
18
|
+
".cursor/settings.json",
|
|
19
|
+
"AGENTS.md",
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
gemini: {
|
|
23
|
+
adapter: "ai-jue-adapter-gemini",
|
|
24
|
+
files: [
|
|
25
|
+
".gemini/settings.json",
|
|
26
|
+
".gemini/commands/**/*.toml",
|
|
27
|
+
".gemini/skills/*/SKILL.md",
|
|
28
|
+
"GEMINI.md",
|
|
29
|
+
"AGENTS.md",
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
claude: {
|
|
33
|
+
adapter: "ai-jue-adapter-claude",
|
|
34
|
+
files: [
|
|
35
|
+
".claude/rules/*.md",
|
|
36
|
+
".claude/skills/*/SKILL.md",
|
|
37
|
+
".claude/commands/*.md",
|
|
38
|
+
".claude/agents/*.md",
|
|
39
|
+
".claude/settings.json",
|
|
40
|
+
"CLAUDE.md",
|
|
41
|
+
".mcp.json",
|
|
42
|
+
"AGENTS.md",
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
copilot: {
|
|
46
|
+
adapter: "ai-jue-adapter-copilot",
|
|
47
|
+
files: [
|
|
48
|
+
".github/copilot-instructions.md",
|
|
49
|
+
".github/copilot-settings.json",
|
|
50
|
+
".github/instructions/*.instructions.md",
|
|
51
|
+
".github/prompts/*.prompt.md",
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
trae: {
|
|
55
|
+
adapter: "ai-jue-adapter-claude",
|
|
56
|
+
files: [
|
|
57
|
+
".trae/rules/*.md",
|
|
58
|
+
".trae/skills/*/SKILL.md",
|
|
59
|
+
".trae/config.json",
|
|
60
|
+
".trae/agents/*.md",
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
opencode: {
|
|
64
|
+
adapter: "ai-jue-adapter-claude",
|
|
65
|
+
files: [".opencode/config.json", ".opencode/plugin/*.ts"],
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=format-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-rules.js","sourceRoot":"","sources":["../../src/commands/format-rules.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,aAAa,GAAyD;IACjF,MAAM,EAAE;QACN,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE;YACL,qBAAqB;YACrB,uBAAuB;YACvB,2BAA2B;YAC3B,oBAAoB;YACpB,kBAAkB;YAClB,qBAAqB;YACrB,uBAAuB;YACvB,WAAW;SACZ;KACF;IACD,MAAM,EAAE;QACN,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE;YACL,uBAAuB;YACvB,4BAA4B;YAC5B,2BAA2B;YAC3B,WAAW;YACX,WAAW;SACZ;KACF;IACD,MAAM,EAAE;QACN,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE;YACL,oBAAoB;YACpB,2BAA2B;YAC3B,uBAAuB;YACvB,qBAAqB;YACrB,uBAAuB;YACvB,WAAW;YACX,WAAW;YACX,WAAW;SACZ;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,wBAAwB;QACjC,KAAK,EAAE;YACL,iCAAiC;YACjC,+BAA+B;YAC/B,wCAAwC;YACxC,6BAA6B;SAC9B;KACF;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE;YACL,kBAAkB;YAClB,yBAAyB;YACzB,mBAAmB;YACnB,mBAAmB;SACpB;KACF;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;KAC1D;CACF,CAAC"}
|
|
@@ -0,0 +1,362 @@
|
|
|
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.handler = exports.builder = exports.describe = exports.command = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
10
|
+
const ora_1 = __importDefault(require("ora"));
|
|
11
|
+
const logger_1 = require("../logger");
|
|
12
|
+
const i18n_1 = require("../i18n");
|
|
13
|
+
const format_rules_1 = require("./format-rules");
|
|
14
|
+
exports.command = "format";
|
|
15
|
+
exports.describe = (0, i18n_1.t)("commands.format.describe", {
|
|
16
|
+
defaultValue: "Migrate existing AI tool configs to .ai directory",
|
|
17
|
+
});
|
|
18
|
+
const builder = (yargs) => {
|
|
19
|
+
return yargs
|
|
20
|
+
.option("write", {
|
|
21
|
+
type: "boolean",
|
|
22
|
+
description: (0, i18n_1.t)("commands.format.write_describe", {
|
|
23
|
+
defaultValue: "Execute migration (default: dry-run)",
|
|
24
|
+
}),
|
|
25
|
+
default: false,
|
|
26
|
+
})
|
|
27
|
+
.option("force", {
|
|
28
|
+
type: "boolean",
|
|
29
|
+
description: (0, i18n_1.t)("commands.format.force_describe", {
|
|
30
|
+
defaultValue: "Force overwrite existing files",
|
|
31
|
+
}),
|
|
32
|
+
default: false,
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
exports.builder = builder;
|
|
36
|
+
/**
|
|
37
|
+
* Detect existing tool configurations in the project
|
|
38
|
+
* @param cwd - Current working directory
|
|
39
|
+
* @returns Array of detected tools
|
|
40
|
+
*/
|
|
41
|
+
function detectToolConfigurations(cwd) {
|
|
42
|
+
const detected = [];
|
|
43
|
+
for (const [tool, config] of Object.entries(format_rules_1.TOOL_PATTERNS)) {
|
|
44
|
+
const foundFiles = [];
|
|
45
|
+
for (const pattern of config.files) {
|
|
46
|
+
// Handle glob patterns
|
|
47
|
+
if (pattern.includes("*")) {
|
|
48
|
+
const glob = require("glob");
|
|
49
|
+
const matches = glob.sync(pattern, { cwd, absolute: true });
|
|
50
|
+
foundFiles.push(...matches);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Handle exact file paths
|
|
54
|
+
const fullPath = path_1.default.resolve(cwd, pattern);
|
|
55
|
+
if (fs_1.default.existsSync(fullPath)) {
|
|
56
|
+
foundFiles.push(fullPath);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (foundFiles.length > 0) {
|
|
61
|
+
detected.push({
|
|
62
|
+
tool,
|
|
63
|
+
adapter: config.adapter,
|
|
64
|
+
files: foundFiles,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return detected;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Parse a tool configuration file and extract migration items
|
|
72
|
+
* @param filePath - Path to the configuration file
|
|
73
|
+
* @param tool - Tool name (cursor, gemini, claude, copilot, trae, opencode)
|
|
74
|
+
* @returns Array of migration items
|
|
75
|
+
*/
|
|
76
|
+
function parseToolConfig(filePath, tool) {
|
|
77
|
+
const items = [];
|
|
78
|
+
const basename = path_1.default.basename(filePath);
|
|
79
|
+
// Detect file type and create appropriate migration item
|
|
80
|
+
if (basename === "AGENTS.md" ||
|
|
81
|
+
basename === "CLAUDE.md" ||
|
|
82
|
+
basename === "GEMINI.md" ||
|
|
83
|
+
basename.includes("copilot-instructions")) {
|
|
84
|
+
items.push({
|
|
85
|
+
source: filePath,
|
|
86
|
+
target: ".ai/AGENTS.md",
|
|
87
|
+
type: "agents",
|
|
88
|
+
status: "pending",
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else if (basename.endsWith(".mdc") ||
|
|
92
|
+
basename.includes("rules") ||
|
|
93
|
+
(tool === "trae" && filePath.includes("/rules/"))) {
|
|
94
|
+
// Extract rule name from filename
|
|
95
|
+
const ruleName = basename
|
|
96
|
+
.replace(/\.mdc?$/, "")
|
|
97
|
+
.replace(/\.instructions$/, "");
|
|
98
|
+
items.push({
|
|
99
|
+
source: filePath,
|
|
100
|
+
target: `.ai/rules/${ruleName}.md`,
|
|
101
|
+
type: "rules",
|
|
102
|
+
status: "pending",
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else if (basename.includes("commands") || basename.endsWith(".toml")) {
|
|
106
|
+
const cmdName = basename.replace(/\.toml$/, "").replace(/\.prompt$/, "");
|
|
107
|
+
items.push({
|
|
108
|
+
source: filePath,
|
|
109
|
+
target: `.ai/commands/${cmdName}/prompt.md`,
|
|
110
|
+
type: "commands",
|
|
111
|
+
status: "pending",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
else if (basename.includes("SKILL")) {
|
|
115
|
+
const skillName = path_1.default.basename(path_1.default.dirname(filePath));
|
|
116
|
+
items.push({
|
|
117
|
+
source: filePath,
|
|
118
|
+
target: `.ai/skills/${skillName}/SKILL.md`,
|
|
119
|
+
type: "skills",
|
|
120
|
+
status: "pending",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else if (basename.includes("agents") ||
|
|
124
|
+
(tool === "trae" && filePath.includes("/agents/"))) {
|
|
125
|
+
const agentName = basename.replace(/\.md$/, "");
|
|
126
|
+
items.push({
|
|
127
|
+
source: filePath,
|
|
128
|
+
target: `.ai/agents/${agentName}.md`,
|
|
129
|
+
type: "agents",
|
|
130
|
+
status: "pending",
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else if (basename === "hooks.json" || (tool === "opencode" && filePath.includes("/plugin/"))) {
|
|
134
|
+
const hookName = tool === "opencode" ? basename.replace(/\.ts$/, "") : "hooks";
|
|
135
|
+
items.push({
|
|
136
|
+
source: filePath,
|
|
137
|
+
target: tool === "opencode" ? `.ai/hooks/${hookName}.ts` : ".ai/hooks.json",
|
|
138
|
+
type: "hooks",
|
|
139
|
+
status: "pending",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else if (basename === "mcp.json" ||
|
|
143
|
+
basename.includes("copilot-settings") ||
|
|
144
|
+
basename === "config.json") {
|
|
145
|
+
items.push({
|
|
146
|
+
source: filePath,
|
|
147
|
+
target: `.ai/tools/${tool}/settings.json`,
|
|
148
|
+
type: "config",
|
|
149
|
+
status: "pending",
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return items;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Check for conflicts with existing .ai directory files
|
|
156
|
+
* @param items - Migration items to check
|
|
157
|
+
* @returns Items with conflict status updated
|
|
158
|
+
*/
|
|
159
|
+
function detectConflicts(items) {
|
|
160
|
+
const cwd = process.cwd();
|
|
161
|
+
return items.map((item) => {
|
|
162
|
+
const targetPath = path_1.default.join(cwd, item.target);
|
|
163
|
+
if (fs_1.default.existsSync(targetPath)) {
|
|
164
|
+
// Check if it's the same file (symlink or identical content)
|
|
165
|
+
const sourceContent = fs_1.default.readFileSync(item.source, "utf8");
|
|
166
|
+
const targetContent = fs_1.default.readFileSync(targetPath, "utf8");
|
|
167
|
+
if (sourceContent === targetContent) {
|
|
168
|
+
return { ...item, status: "migrated" };
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
...item,
|
|
172
|
+
status: "conflict",
|
|
173
|
+
conflict: {
|
|
174
|
+
existingTarget: targetPath,
|
|
175
|
+
resolution: "needs_review",
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Check for directory conflicts
|
|
180
|
+
const targetDir = path_1.default.dirname(targetPath);
|
|
181
|
+
if (fs_1.default.existsSync(targetDir)) {
|
|
182
|
+
const stat = fs_1.default.statSync(targetDir);
|
|
183
|
+
if (!stat.isDirectory()) {
|
|
184
|
+
return {
|
|
185
|
+
...item,
|
|
186
|
+
status: "needs_review",
|
|
187
|
+
conflict: {
|
|
188
|
+
existingTarget: targetDir,
|
|
189
|
+
resolution: "needs_review",
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return item;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Generate a migration plan from detected tools
|
|
199
|
+
* @param detectedTools - Array of detected tools
|
|
200
|
+
* @returns Migration plan
|
|
201
|
+
*/
|
|
202
|
+
function generateMigrationPlan(detectedTools) {
|
|
203
|
+
const items = [];
|
|
204
|
+
for (const tool of detectedTools) {
|
|
205
|
+
for (const file of tool.files) {
|
|
206
|
+
const fileItems = parseToolConfig(file, tool.tool);
|
|
207
|
+
items.push(...fileItems);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Detect conflicts
|
|
211
|
+
const itemsWithConflicts = detectConflicts(items);
|
|
212
|
+
// Calculate summary
|
|
213
|
+
const summary = {
|
|
214
|
+
total: itemsWithConflicts.length,
|
|
215
|
+
conflicts: itemsWithConflicts.filter((i) => i.status === "conflict").length,
|
|
216
|
+
needsReview: itemsWithConflicts.filter((i) => i.status === "needs_review").length,
|
|
217
|
+
safeToMigrate: itemsWithConflicts.filter((i) => i.status === "pending").length,
|
|
218
|
+
};
|
|
219
|
+
return {
|
|
220
|
+
detectedTools,
|
|
221
|
+
items: itemsWithConflicts,
|
|
222
|
+
summary,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Print migration plan to console
|
|
227
|
+
* @param plan - Migration plan to print
|
|
228
|
+
*/
|
|
229
|
+
function printMigrationPlan(plan) {
|
|
230
|
+
logger_1.logger.info(picocolors_1.default.bold(picocolors_1.default.blue((0, i18n_1.t)("commands.format.plan_header"))));
|
|
231
|
+
// Print detected tools
|
|
232
|
+
logger_1.logger.info(picocolors_1.default.cyan((0, i18n_1.t)("commands.format.detected_tools_header")));
|
|
233
|
+
for (const tool of plan.detectedTools) {
|
|
234
|
+
logger_1.logger.info(` ${picocolors_1.default.green("✓")} ${tool.tool} (${tool.files.length} files)`);
|
|
235
|
+
}
|
|
236
|
+
// Print summary
|
|
237
|
+
logger_1.logger.info(picocolors_1.default.cyan((0, i18n_1.t)("commands.format.summary_header")));
|
|
238
|
+
logger_1.logger.info((0, i18n_1.t)("commands.format.summary_total", { total: plan.summary.total }));
|
|
239
|
+
logger_1.logger.info(picocolors_1.default.green((0, i18n_1.t)("commands.format.summary_safe", { count: plan.summary.safeToMigrate })));
|
|
240
|
+
if (plan.summary.conflicts > 0) {
|
|
241
|
+
logger_1.logger.info(picocolors_1.default.yellow((0, i18n_1.t)("commands.format.summary_conflicts", { count: plan.summary.conflicts })));
|
|
242
|
+
}
|
|
243
|
+
if (plan.summary.needsReview > 0) {
|
|
244
|
+
logger_1.logger.info(picocolors_1.default.red((0, i18n_1.t)("commands.format.summary_review", { count: plan.summary.needsReview })));
|
|
245
|
+
}
|
|
246
|
+
// Print detailed items
|
|
247
|
+
logger_1.logger.info(picocolors_1.default.cyan((0, i18n_1.t)("commands.format.items_header")));
|
|
248
|
+
const groupedByType = plan.items.reduce((acc, item) => {
|
|
249
|
+
acc[item.type] = acc[item.type] || [];
|
|
250
|
+
acc[item.type].push(item);
|
|
251
|
+
return acc;
|
|
252
|
+
}, {});
|
|
253
|
+
for (const [type, items] of Object.entries(groupedByType)) {
|
|
254
|
+
logger_1.logger.info(picocolors_1.default.bold(`${type.toUpperCase()}:`));
|
|
255
|
+
for (const item of items) {
|
|
256
|
+
const statusIcon = item.status === "pending"
|
|
257
|
+
? picocolors_1.default.blue("○")
|
|
258
|
+
: item.status === "conflict"
|
|
259
|
+
? picocolors_1.default.yellow("⚠")
|
|
260
|
+
: item.status === "needs_review"
|
|
261
|
+
? picocolors_1.default.red("✖")
|
|
262
|
+
: picocolors_1.default.green("✓");
|
|
263
|
+
logger_1.logger.info(` ${statusIcon} ${path_1.default.basename(item.source)} → ${item.target}`);
|
|
264
|
+
if (item.conflict) {
|
|
265
|
+
logger_1.logger.info(picocolors_1.default.dim(` ${(0, i18n_1.t)("commands.format.conflict_label", {
|
|
266
|
+
resolution: item.conflict.resolution,
|
|
267
|
+
})}`));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
logger_1.logger.info("");
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Execute migration plan
|
|
275
|
+
* @param plan - Migration plan to execute
|
|
276
|
+
* @param options - Migration options
|
|
277
|
+
*/
|
|
278
|
+
async function executeMigration(plan, options) {
|
|
279
|
+
const spinner = (0, ora_1.default)((0, i18n_1.t)("commands.format.migrating")).start();
|
|
280
|
+
const cwd = process.cwd();
|
|
281
|
+
try {
|
|
282
|
+
// Create .ai directory structure
|
|
283
|
+
const aiDir = path_1.default.join(cwd, ".ai");
|
|
284
|
+
if (!fs_1.default.existsSync(aiDir)) {
|
|
285
|
+
fs_1.default.mkdirSync(aiDir, { recursive: true });
|
|
286
|
+
}
|
|
287
|
+
for (const item of plan.items) {
|
|
288
|
+
// Skip already migrated
|
|
289
|
+
if (item.status === "migrated")
|
|
290
|
+
continue;
|
|
291
|
+
// Skip conflicts unless force
|
|
292
|
+
if (item.status === "conflict" && !options.force) {
|
|
293
|
+
spinner.warn((0, i18n_1.t)("commands.format.skipped_conflict", { source: item.source }));
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
// Create target directory
|
|
297
|
+
const targetPath = path_1.default.join(cwd, item.target);
|
|
298
|
+
const targetDir = path_1.default.dirname(targetPath);
|
|
299
|
+
if (!fs_1.default.existsSync(targetDir)) {
|
|
300
|
+
fs_1.default.mkdirSync(targetDir, { recursive: true });
|
|
301
|
+
}
|
|
302
|
+
// Read source and transform content if needed
|
|
303
|
+
let content = fs_1.default.readFileSync(item.source, "utf8");
|
|
304
|
+
// Add migration marker
|
|
305
|
+
const migrationHeader = `<!-- Migrated from ${path_1.default.basename(item.source)} by jue format -->\n\n`;
|
|
306
|
+
if (!content.includes("<!-- Migrated from")) {
|
|
307
|
+
content = migrationHeader + content;
|
|
308
|
+
}
|
|
309
|
+
// Write to target
|
|
310
|
+
fs_1.default.writeFileSync(targetPath, content, "utf8");
|
|
311
|
+
spinner.succeed((0, i18n_1.t)("commands.format.migrated_item", {
|
|
312
|
+
source: path_1.default.basename(item.source),
|
|
313
|
+
target: item.target,
|
|
314
|
+
}));
|
|
315
|
+
}
|
|
316
|
+
spinner.succeed(picocolors_1.default.green((0, i18n_1.t)("commands.format.migration_success")));
|
|
317
|
+
logger_1.logger.info(picocolors_1.default.cyan((0, i18n_1.t)("commands.format.next_steps_header")));
|
|
318
|
+
logger_1.logger.info((0, i18n_1.t)("commands.format.next_step_review"));
|
|
319
|
+
logger_1.logger.info((0, i18n_1.t)("commands.format.next_step_config"));
|
|
320
|
+
logger_1.logger.info((0, i18n_1.t)("commands.format.next_step_apply"));
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
spinner.fail(picocolors_1.default.red((0, i18n_1.t)("commands.format.migration_failed", { message: error.message })));
|
|
324
|
+
process.exitCode = 1;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
const handler = async (argv) => {
|
|
328
|
+
const writeMode = Boolean(argv.write);
|
|
329
|
+
const forceMode = Boolean(argv.force);
|
|
330
|
+
logger_1.logger.info(picocolors_1.default.bold(picocolors_1.default.blue((0, i18n_1.t)("commands.format.scanning"))));
|
|
331
|
+
// Detect tool configurations
|
|
332
|
+
const spinner = (0, ora_1.default)((0, i18n_1.t)("commands.format.detecting")).start();
|
|
333
|
+
const detectedTools = detectToolConfigurations(process.cwd());
|
|
334
|
+
if (detectedTools.length === 0) {
|
|
335
|
+
spinner.warn(picocolors_1.default.yellow((0, i18n_1.t)("commands.format.no_configs")));
|
|
336
|
+
logger_1.logger.info(picocolors_1.default.dim((0, i18n_1.t)("commands.format.supported_tools")));
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
spinner.succeed(picocolors_1.default.green((0, i18n_1.t)("commands.format.detected_count", {
|
|
340
|
+
count: detectedTools.length,
|
|
341
|
+
names: detectedTools.map((t) => t.tool).join(", "),
|
|
342
|
+
})));
|
|
343
|
+
// Generate migration plan
|
|
344
|
+
const plan = generateMigrationPlan(detectedTools);
|
|
345
|
+
// Print plan
|
|
346
|
+
printMigrationPlan(plan);
|
|
347
|
+
// If dry-run, stop here
|
|
348
|
+
if (!writeMode) {
|
|
349
|
+
logger_1.logger.info(picocolors_1.default.cyan((0, i18n_1.t)("commands.format.dry_run_hint")));
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
// Check for conflicts
|
|
353
|
+
if (plan.summary.conflicts > 0 && !forceMode) {
|
|
354
|
+
logger_1.logger.warn(picocolors_1.default.yellow((0, i18n_1.t)("commands.format.conflict_warn", { count: plan.summary.conflicts })));
|
|
355
|
+
process.exitCode = 1;
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
// Execute migration
|
|
359
|
+
await executeMigration(plan, { force: forceMode });
|
|
360
|
+
};
|
|
361
|
+
exports.handler = handler;
|
|
362
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/commands/format.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n.js
CHANGED
|
@@ -103,6 +103,36 @@ const resources = {
|
|
|
103
103
|
failed: "Failed to create preset: {{message}}",
|
|
104
104
|
ask_name: "Enter preset name: ",
|
|
105
105
|
},
|
|
106
|
+
format: {
|
|
107
|
+
describe: "Migrate existing AI tool configs to .ai directory",
|
|
108
|
+
write_describe: "Execute migration (default: dry-run)",
|
|
109
|
+
force_describe: "Force overwrite existing files",
|
|
110
|
+
scanning: "🔍 Scanning for AI tool configurations...",
|
|
111
|
+
detecting: "Detecting configurations...",
|
|
112
|
+
no_configs: "No AI tool configurations detected.",
|
|
113
|
+
supported_tools: "Supported tools: cursor, gemini, claude, copilot, trae, opencode",
|
|
114
|
+
detected_count: "Detected {{count}} tool(s): {{names}}",
|
|
115
|
+
plan_header: "\n📋 Migration Plan\n",
|
|
116
|
+
detected_tools_header: "Detected Tools:",
|
|
117
|
+
summary_header: "\nSummary:",
|
|
118
|
+
summary_total: " Total items: {{total}}",
|
|
119
|
+
summary_safe: " Safe to migrate: {{count}}",
|
|
120
|
+
summary_conflicts: " Conflicts: {{count}}",
|
|
121
|
+
summary_review: " Needs manual review: {{count}}",
|
|
122
|
+
items_header: "\nItems to migrate:\n",
|
|
123
|
+
conflict_label: "Conflict: {{resolution}}",
|
|
124
|
+
dry_run_hint: "\n📌 This is a dry-run. Use --write to execute migration.",
|
|
125
|
+
conflict_warn: "\n⚠️ {{count}} conflict(s) detected. Use --force to overwrite, or resolve manually.",
|
|
126
|
+
migrating: "Migrating configurations...",
|
|
127
|
+
migrated_item: "Migrated: {{source}} → {{target}}",
|
|
128
|
+
skipped_conflict: "Skipped (conflict): {{source}}",
|
|
129
|
+
migration_success: "✨ Migration completed!",
|
|
130
|
+
next_steps_header: "\nNext steps:",
|
|
131
|
+
next_step_review: " 1. Review the migrated files in .ai/",
|
|
132
|
+
next_step_config: " 2. Update your ai.config.js to use the new structure",
|
|
133
|
+
next_step_apply: " 3. Run 'npx jue apply' to generate tool-specific configs",
|
|
134
|
+
migration_failed: "Migration failed: {{message}}",
|
|
135
|
+
},
|
|
106
136
|
},
|
|
107
137
|
},
|
|
108
138
|
},
|
|
@@ -200,6 +230,36 @@ const resources = {
|
|
|
200
230
|
failed: "创建预设失败: {{message}}",
|
|
201
231
|
ask_name: "请输入预设名称: ",
|
|
202
232
|
},
|
|
233
|
+
format: {
|
|
234
|
+
describe: "将现有 AI 工具配置迁移到 .ai 目录",
|
|
235
|
+
write_describe: "执行迁移(默认为 dry-run)",
|
|
236
|
+
force_describe: "强制覆盖现有文件",
|
|
237
|
+
scanning: "🔍 正在扫描 AI 工具配置...\n",
|
|
238
|
+
detecting: "正在检测配置...",
|
|
239
|
+
no_configs: "未检测到 AI 工具配置。",
|
|
240
|
+
supported_tools: "支持的工具:cursor, gemini, claude, copilot, trae, opencode",
|
|
241
|
+
detected_count: "检测到 {{count}} 个工具:{{names}}",
|
|
242
|
+
plan_header: "\n📋 迁移计划\n",
|
|
243
|
+
detected_tools_header: "检测到的工具:",
|
|
244
|
+
summary_header: "\n概览:",
|
|
245
|
+
summary_total: " 总计项目:{{total}}",
|
|
246
|
+
summary_safe: " 可安全迁移:{{count}}",
|
|
247
|
+
summary_conflicts: " 冲突项:{{count}}",
|
|
248
|
+
summary_review: " 需人工复核:{{count}}",
|
|
249
|
+
items_header: "\n待迁移项目:\n",
|
|
250
|
+
conflict_label: "冲突:{{resolution}}",
|
|
251
|
+
dry_run_hint: "\n📌 当前为 dry-run 模式。使用 --write 执行实际迁移。",
|
|
252
|
+
conflict_warn: "\n⚠️ 检测到 {{count}} 处冲突。使用 --force 强制覆盖,或手动处理。",
|
|
253
|
+
migrating: "正在迁移配置...",
|
|
254
|
+
migrated_item: "已迁移:{{source}} → {{target}}",
|
|
255
|
+
skipped_conflict: "已跳过(冲突):{{source}}",
|
|
256
|
+
migration_success: "✨ 迁移完成!",
|
|
257
|
+
next_steps_header: "\n后续步骤:",
|
|
258
|
+
next_step_review: " 1. 检查 .ai/ 目录下的迁移文件",
|
|
259
|
+
next_step_config: " 2. 更新 ai.config.js 以启用新结构",
|
|
260
|
+
next_step_apply: " 3. 运行 'npx jue apply' 生成工具特定的配置文件",
|
|
261
|
+
migration_failed: "迁移失败:{{message}}",
|
|
262
|
+
},
|
|
203
263
|
},
|
|
204
264
|
},
|
|
205
265
|
},
|
package/dist/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
|
package/dist/normalize.d.ts
CHANGED
|
@@ -1,2 +1,15 @@
|
|
|
1
1
|
import { MergedConfig } from './config';
|
|
2
|
+
/**
|
|
3
|
+
* Standardizes the configuration object to ensure consistent property access
|
|
4
|
+
* across different adapters and commands.
|
|
5
|
+
*
|
|
6
|
+
* Key transformations:
|
|
7
|
+
* - Ensures all major asset categories (rules, commands, etc.) are objects.
|
|
8
|
+
* - Maps 'content' field to 'prompt' for commands and agents if prompt is missing.
|
|
9
|
+
* - Flattens hook objects to their script strings.
|
|
10
|
+
* - Guarantees context.global is a string.
|
|
11
|
+
*
|
|
12
|
+
* @param config - The raw merged configuration
|
|
13
|
+
* @returns A standardized configuration object
|
|
14
|
+
*/
|
|
2
15
|
export declare function normalizeConfig(config: MergedConfig): MergedConfig;
|
package/dist/normalize.js
CHANGED
|
@@ -4,6 +4,19 @@ exports.normalizeConfig = normalizeConfig;
|
|
|
4
4
|
function toObject(value) {
|
|
5
5
|
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Standardizes the configuration object to ensure consistent property access
|
|
9
|
+
* across different adapters and commands.
|
|
10
|
+
*
|
|
11
|
+
* Key transformations:
|
|
12
|
+
* - Ensures all major asset categories (rules, commands, etc.) are objects.
|
|
13
|
+
* - Maps 'content' field to 'prompt' for commands and agents if prompt is missing.
|
|
14
|
+
* - Flattens hook objects to their script strings.
|
|
15
|
+
* - Guarantees context.global is a string.
|
|
16
|
+
*
|
|
17
|
+
* @param config - The raw merged configuration
|
|
18
|
+
* @returns A standardized configuration object
|
|
19
|
+
*/
|
|
7
20
|
function normalizeConfig(config) {
|
|
8
21
|
const context = toObject(config.context);
|
|
9
22
|
const prompts = toObject(config.prompts);
|
package/dist/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":";;AAmBA,0CAkDC;AAnED,SAAS,QAAQ,CAAC,KAAU;IAC1B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,eAAe,CAAC,MAAoB;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,UAAU,GAAiB;QAC/B,GAAG,MAAM;QACT,OAAO;QACP,OAAO;QACP,KAAK;QACL,MAAM;QACN,QAAQ;QACR,MAAM;QACN,KAAK;QACL,KAAK;KACN,CAAC;IAEF,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3D,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;QACnC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAY,CAAC;QAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvD,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/resolver.d.ts
CHANGED
|
@@ -1,2 +1,16 @@
|
|
|
1
1
|
import { MergedConfig } from './config';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the final configuration by aggregating all sources in the following priority:
|
|
4
|
+
* 1. Base/Dependency Presets
|
|
5
|
+
* 2. Current Preset
|
|
6
|
+
* 3. Local .ai/ directory assets
|
|
7
|
+
* 4. Project root AGENTS.md
|
|
8
|
+
* 5. Extended assets (from 'extends' property)
|
|
9
|
+
* 6. Explicit user configuration in ai.config.js
|
|
10
|
+
*
|
|
11
|
+
* Finally, the configuration is normalized via normalizeConfig.
|
|
12
|
+
*
|
|
13
|
+
* @param userConfig - The initial configuration loaded from ai.config.js
|
|
14
|
+
* @returns The fully resolved and layered configuration
|
|
15
|
+
*/
|
|
2
16
|
export declare function resolveFinalConfig(userConfig: MergedConfig): Promise<MergedConfig>;
|
package/dist/resolver.js
CHANGED
|
@@ -9,6 +9,16 @@ const ai_jue_core_1 = require("ai-jue-core");
|
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
10
|
const fs_1 = __importDefault(require("fs"));
|
|
11
11
|
const normalize_1 = require("./normalize");
|
|
12
|
+
/**
|
|
13
|
+
* Merges two configurations while ensuring the global context (AGENTS.md content)
|
|
14
|
+
* is appended layer by layer instead of being overwritten.
|
|
15
|
+
*
|
|
16
|
+
* Merge order for context: base -> incoming
|
|
17
|
+
*
|
|
18
|
+
* @param base - The existing configuration
|
|
19
|
+
* @param incoming - The new configuration to merge
|
|
20
|
+
* @returns A new MergedConfig with combined context and deep-merged properties
|
|
21
|
+
*/
|
|
12
22
|
function mergeConfigWithLayeredContext(base, incoming) {
|
|
13
23
|
const baseContext = typeof base?.context?.global === 'string' ? base.context.global.trim() : '';
|
|
14
24
|
const incomingContext = typeof incoming?.context?.global === 'string' ? incoming.context.global.trim() : '';
|
|
@@ -20,6 +30,13 @@ function mergeConfigWithLayeredContext(base, incoming) {
|
|
|
20
30
|
}
|
|
21
31
|
return merged;
|
|
22
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Loads external asset files defined in the 'extends' property of ai.config.js.
|
|
35
|
+
*
|
|
36
|
+
* @param extendsConfig - Map of categories to file paths
|
|
37
|
+
* @param rootDir - Root directory for resolving relative paths
|
|
38
|
+
* @returns A partial MergedConfig containing the loaded assets
|
|
39
|
+
*/
|
|
23
40
|
async function loadExtendedAssets(extendsConfig, rootDir) {
|
|
24
41
|
const config = {};
|
|
25
42
|
await Promise.all(Object.entries(extendsConfig).map(async ([key, value]) => {
|
|
@@ -40,6 +57,20 @@ async function loadExtendedAssets(extendsConfig, rootDir) {
|
|
|
40
57
|
}));
|
|
41
58
|
return config;
|
|
42
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolves the final configuration by aggregating all sources in the following priority:
|
|
62
|
+
* 1. Base/Dependency Presets
|
|
63
|
+
* 2. Current Preset
|
|
64
|
+
* 3. Local .ai/ directory assets
|
|
65
|
+
* 4. Project root AGENTS.md
|
|
66
|
+
* 5. Extended assets (from 'extends' property)
|
|
67
|
+
* 6. Explicit user configuration in ai.config.js
|
|
68
|
+
*
|
|
69
|
+
* Finally, the configuration is normalized via normalizeConfig.
|
|
70
|
+
*
|
|
71
|
+
* @param userConfig - The initial configuration loaded from ai.config.js
|
|
72
|
+
* @returns The fully resolved and layered configuration
|
|
73
|
+
*/
|
|
43
74
|
async function resolveFinalConfig(userConfig) {
|
|
44
75
|
let finalConfig = {};
|
|
45
76
|
let presets = [];
|
package/dist/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|