code-ai-installer 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -80,6 +80,11 @@ code-ai uninstall --target claude --apply
80
80
  - Google Antugravity: `GEMINI.md`
81
81
  - Agent files copied to target-specific agents directory.
82
82
  - Skill files copied to target-specific skills directory.
83
+ - For `gpt-codex`, assets are installed to `agents/` and `.agents/` for native Codex discovery.
84
+ - For `google-antugravity`, assets are installed in antugravity-friendly structure:
85
+ - agents: `.gemini/agents/<agent>/prompt.md` and `.gemini/agents/<agent>/config.json`
86
+ - skills: `.gemini/skills/<skill>.md` and `.gemini/skills/<skill>.py`
87
+ - For `qwen-3.5`, installer also generates `.qwen/settings.json` with model/context defaults.
83
88
  - Markdown content is normalized per target (model-specific hint comments like `codex:` are transformed).
84
89
  - `codex reasoning` is mapped to target-native hints (`copilot reasoning`, `claude thinking`, `qwen reasoning_effort`, `gemini reasoning`).
85
90
 
@@ -26,14 +26,14 @@ const targetLayouts = {
26
26
  orchestratorMirrorFile: "AGENTS.md",
27
27
  agentsDir: ".gemini/agents",
28
28
  skillsDir: ".gemini/skills",
29
- notes: "Uses GEMINI.md convention and .gemini folder for role/skill docs.",
29
+ notes: "Uses GEMINI.md and antugravity-style layout with per-agent folders and script-oriented skills.",
30
30
  },
31
31
  "gpt-codex": {
32
32
  instructionFile: "CODEX.md",
33
33
  orchestratorMirrorFile: "AGENTS.md",
34
- agentsDir: ".codex/agents",
35
- skillsDir: ".codex/skills",
36
- notes: "Uses CODEX.md and .codex folder for role/skill docs.",
34
+ agentsDir: "agents",
35
+ skillsDir: ".agents",
36
+ notes: "Uses AGENTS.md/agents/.agents layout compatible with Codex agent and skills discovery.",
37
37
  },
38
38
  };
39
39
  /**
@@ -100,6 +100,9 @@ function buildAdapter(id, label) {
100
100
  * @returns Planned operations list.
101
101
  */
102
102
  function planForLayout(layout, catalog, destinationDir, selectedAgents, selectedSkills, target) {
103
+ if (target === "google-antugravity") {
104
+ return planForGeminiLayout(layout, catalog, destinationDir, selectedAgents, selectedSkills, target);
105
+ }
103
106
  const operations = [];
104
107
  operations.push({
105
108
  sourcePath: catalog.orchestratorPath,
@@ -117,6 +120,14 @@ function planForLayout(layout, catalog, destinationDir, selectedAgents, selected
117
120
  generated: true,
118
121
  content: instructionContent,
119
122
  });
123
+ if (target === "qwen-3.5") {
124
+ operations.push({
125
+ sourcePath: "<generated>",
126
+ destinationPath: path.join(destinationDir, ".qwen", "settings.json"),
127
+ generated: true,
128
+ content: renderQwenSettings(),
129
+ });
130
+ }
120
131
  for (const agentName of selectedAgents) {
121
132
  const sourcePath = catalog.agentFiles[agentName];
122
133
  if (!sourcePath) {
@@ -149,6 +160,78 @@ function planForLayout(layout, catalog, destinationDir, selectedAgents, selected
149
160
  }
150
161
  return operations;
151
162
  }
163
+ /**
164
+ * Plans google-antugravity specific layout with per-agent folders and script-first skills.
165
+ * @param layout Platform layout.
166
+ * @param catalog Source catalog.
167
+ * @param destinationDir Destination root.
168
+ * @param selectedAgents Selected agent names.
169
+ * @param selectedSkills Selected skill names.
170
+ * @param target Target id.
171
+ * @returns Planned operations list.
172
+ */
173
+ function planForGeminiLayout(layout, catalog, destinationDir, selectedAgents, selectedSkills, target) {
174
+ const operations = [];
175
+ operations.push({
176
+ sourcePath: catalog.orchestratorPath,
177
+ destinationPath: path.join(destinationDir, layout.orchestratorMirrorFile),
178
+ generated: false,
179
+ transform: {
180
+ target,
181
+ assetType: "orchestrator",
182
+ },
183
+ });
184
+ const instructionContent = renderInstructionFile(target, selectedAgents, selectedSkills);
185
+ operations.push({
186
+ sourcePath: "<generated>",
187
+ destinationPath: path.join(destinationDir, layout.instructionFile),
188
+ generated: true,
189
+ content: instructionContent,
190
+ });
191
+ for (const agentName of selectedAgents) {
192
+ const sourcePath = catalog.agentFiles[agentName];
193
+ if (!sourcePath) {
194
+ continue;
195
+ }
196
+ operations.push({
197
+ sourcePath,
198
+ destinationPath: path.join(destinationDir, layout.agentsDir, agentName, "prompt.md"),
199
+ generated: false,
200
+ transform: {
201
+ target,
202
+ assetType: "agent",
203
+ },
204
+ });
205
+ operations.push({
206
+ sourcePath: "<generated>",
207
+ destinationPath: path.join(destinationDir, layout.agentsDir, agentName, "config.json"),
208
+ generated: true,
209
+ content: renderGeminiAgentConfig(agentName),
210
+ });
211
+ }
212
+ for (const skillName of selectedSkills) {
213
+ const sourcePath = catalog.skillFiles[skillName];
214
+ if (!sourcePath) {
215
+ continue;
216
+ }
217
+ operations.push({
218
+ sourcePath,
219
+ destinationPath: path.join(destinationDir, layout.skillsDir, `${skillName}.md`),
220
+ generated: false,
221
+ transform: {
222
+ target,
223
+ assetType: "skill",
224
+ },
225
+ });
226
+ operations.push({
227
+ sourcePath: "<generated>",
228
+ destinationPath: path.join(destinationDir, layout.skillsDir, `${skillName}.py`),
229
+ generated: true,
230
+ content: renderGeminiSkillStub(skillName),
231
+ });
232
+ }
233
+ return operations;
234
+ }
152
235
  /**
153
236
  * Renders a platform-level instruction file with selected assets.
154
237
  * @param target Target id.
@@ -178,3 +261,39 @@ function renderInstructionFile(target, selectedAgents, selectedSkills) {
178
261
  lines.push("- Skills: see platform-specific skills directory.");
179
262
  return `${lines.join("\n")}\n`;
180
263
  }
264
+ /**
265
+ * Renders default antugravity agent config file.
266
+ * @param agentName Agent identifier.
267
+ * @returns Config JSON.
268
+ */
269
+ function renderGeminiAgentConfig(agentName) {
270
+ return `${JSON.stringify({
271
+ name: agentName,
272
+ model: "gemini-2.5-pro",
273
+ promptFile: "prompt.md",
274
+ reasoning: "medium",
275
+ temperature: 0.2,
276
+ }, null, 2)}\n`;
277
+ }
278
+ /**
279
+ * Renders python stub for gemini skill file.
280
+ * @param skillName Skill identifier.
281
+ * @returns Python source code.
282
+ */
283
+ function renderGeminiSkillStub(skillName) {
284
+ return `\"\"\"Auto-generated skill stub for ${skillName}.\\nSee ${skillName}.md for behavior details.\"\"\"\\n\\n\\ndef run(input_text: str) -> str:\\n \"\"\"Execute ${skillName} skill logic.\"\"\"\\n return f\"${skillName}: {input_text}\"\\n`;
285
+ }
286
+ /**
287
+ * Renders default Qwen settings.json.
288
+ * @returns Qwen settings JSON.
289
+ */
290
+ function renderQwenSettings() {
291
+ return `${JSON.stringify({
292
+ model: {
293
+ name: "qwen3-coder-plus",
294
+ },
295
+ context: {
296
+ fileName: ["QWEN.md", "AGENTS.md"],
297
+ },
298
+ }, null, 2)}\n`;
299
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-ai-installer",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "Production-ready CLI to install code-ai agents and skills for multiple AI coding assistants.",
5
5
  "type": "module",
6
6
  "files": [