@ulpi/cli 0.1.4 → 0.1.6
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/LICENSE +21 -0
- package/dist/{auth-PN7TMQHV-2W4ICG64.js → auth-FWM7MM4Q-VZC3U2XZ.js} +1 -1
- package/dist/{auth-ECQ3IB4E.js → auth-HDK7ECJL.js} +2 -1
- package/dist/{chunk-3SBPZRB5.js → chunk-3BCW6ABU.js} +402 -142
- package/dist/{chunk-JGBXM5NC.js → chunk-3WB5CXH4.js} +180 -5
- package/dist/{chunk-2HEE5OKX.js → chunk-4UCJIAOU.js} +2 -2
- package/dist/chunk-4XTHZVDS.js +109 -0
- package/dist/chunk-4ZPOZULQ.js +6522 -0
- package/dist/{chunk-SIAQVRKG.js → chunk-5MI5GIXM.js} +48 -2
- package/dist/{chunk-KLEASXUR.js → chunk-6ZL6NXMV.js} +1 -1
- package/dist/chunk-76D3BYJD.js +221 -0
- package/dist/{chunk-ZLYRPD7I.js → chunk-AWOSRA5F.js} +1 -1
- package/dist/{chunk-PDR55ZNW.js → chunk-BFEKZZHM.js} +274 -57
- package/dist/chunk-C7CLUQI6.js +1286 -0
- package/dist/{chunk-7AL4DOEJ.js → chunk-E3B5NROU.js} +7 -7
- package/dist/chunk-EJ7TW77N.js +1418 -0
- package/dist/{chunk-5J6NLQUN.js → chunk-IV6MWETF.js} +383 -168
- package/dist/chunk-IZPJHSPX.js +1478 -0
- package/dist/chunk-JLHNLM3C.js +228 -0
- package/dist/{chunk-BZL5H4YQ.js → chunk-KYYI23AQ.js} +2 -2
- package/dist/{chunk-2CLNOKPA.js → chunk-RSFJ6QSR.js} +18 -0
- package/dist/chunk-S6ANCSYO.js +1271 -0
- package/dist/chunk-SEU7WWNQ.js +1251 -0
- package/dist/chunk-SNQ7NAIS.js +453 -0
- package/dist/{ulpi-RMMCUAGP-JCJ273T6.js → chunk-TSLDGT5O.js} +73 -35
- package/dist/{chunk-SPOI23SB.js → chunk-UXHCHOWQ.js} +83 -62
- package/dist/chunk-V2H5D6Y3.js +146 -0
- package/dist/{chunk-QJ5GSMEC.js → chunk-VVEDXI7E.js} +2 -1
- package/dist/chunk-VXH5Y4FO.js +6761 -0
- package/dist/chunk-WED4LM5N.js +322 -0
- package/dist/{chunk-74WVVWJ4.js → chunk-YOKL7RB5.js} +184 -15
- package/dist/chunk-Z53CAR7G.js +298 -0
- package/dist/ci-X3U2W4HC.js +854 -0
- package/dist/cloud-2F3NLVHN.js +274 -0
- package/dist/{codemap-RKSD4MIE.js → codemap-XNGMAF3F.js} +37 -37
- package/dist/codex-MB5YTMRT.js +132 -0
- package/dist/{config-EGAXXCGL.js → config-OOELBYTH.js} +1 -1
- package/dist/dist-2BJYR5EI.js +59 -0
- package/dist/dist-2K7IEVTA.js +43 -0
- package/dist/dist-3EIQTZHT.js +1380 -0
- package/dist/{dist-YA2BWZB2.js → dist-4U5L2X2C.js} +2 -2
- package/dist/{dist-UKMCJBB2.js → dist-54KAMNLO.js} +16 -15
- package/dist/dist-6M4MZWZW.js +58 -0
- package/dist/dist-6X576SU2.js +27 -0
- package/dist/dist-7QOEYLFX.js +103 -0
- package/dist/dist-AYBGHEDY.js +2541 -0
- package/dist/dist-EK45QNEM.js +45 -0
- package/dist/{dist-CS2VKNYS.js → dist-FKFEJRPX.js} +16 -15
- package/dist/dist-GTEJUBBT.js +66 -0
- package/dist/dist-HA74OKJZ.js +40 -0
- package/dist/dist-HU5RZAON.js +48 -0
- package/dist/dist-IYE3OBRB.js +374 -0
- package/dist/{dist-GJYT2OQV.js → dist-JLU26AB6.js} +12 -9
- package/dist/{dist-6G7JC2RA.js → dist-KUCI6JFE.js} +49 -9
- package/dist/dist-NUEMFZFL.js +33 -0
- package/dist/{dist-RKOGLK7R.js → dist-NUXMDXZ3.js} +31 -3
- package/dist/{dist-QAU3LGJN.js → dist-YCNWHSLN.js} +15 -5
- package/dist/{dist-CB5D5LMO.js → dist-YFFG2ZD6.js} +9 -16
- package/dist/dist-ZG4OKCSR.js +15 -0
- package/dist/doctor-SI4LLLDZ.js +345 -0
- package/dist/{export-import-4A5MWLIA.js → export-import-JFQH4KSJ.js} +1 -1
- package/dist/{history-3MOBX4MA.js → history-5NE46ZAH.js} +7 -7
- package/dist/hooks-installer-UN5JZLDQ.js +19 -0
- package/dist/index.js +395 -619
- package/dist/{init-6CH4HV5T.js → init-5FK3VKRT.js} +79 -13
- package/dist/job-HIDMAFW2.js +376 -0
- package/dist/jobs.memory-PLMMSFHB-VBECCTHN.js +33 -0
- package/dist/kiro-VMUHDFGK.js +153 -0
- package/dist/{launchd-LF2QMSKZ.js → launchd-6AWT54HR.js} +9 -17
- package/dist/mcp-PDUD7SGP.js +249 -0
- package/dist/mcp-installer-PQU3XOGO.js +259 -0
- package/dist/mcp-setup-OA7IB3H3.js +263 -0
- package/dist/{memory-Y6OZTXJ2.js → memory-ZNAEAK3B.js} +17 -17
- package/dist/{ollama-3XCUZMZT-FYKHW4TZ.js → ollama-3XCUZMZT-4JMH6B7P.js} +1 -1
- package/dist/{openai-E7G2YAHU-UYY4ZWON.js → openai-E7G2YAHU-T3HMBPH7.js} +2 -2
- package/dist/portal-JYWVHXDU.js +210 -0
- package/dist/prd-Q4J5NVAR.js +408 -0
- package/dist/repos-WWZXNN3P.js +271 -0
- package/dist/review-integration-5WHEJU2A.js +14 -0
- package/dist/{rules-E427DKYJ.js → rules-Y4VSOY5Y.js} +3 -3
- package/dist/run-VPNXEIBY.js +687 -0
- package/dist/server-COL4AXKU-P7S7NNF6.js +11 -0
- package/dist/server-KKSETHDV-XSSLEENT.js +20 -0
- package/dist/{skills-CX73O3IV.js → skills-QEYU2N27.js} +4 -2
- package/dist/start-JYOEL7AJ.js +303 -0
- package/dist/{status-4DFHDJMN.js → status-BHQYYGAL.js} +2 -2
- package/dist/{templates-U7T6MARD.js → templates-CBRUJ66V.js} +4 -3
- package/dist/tui-DP7736EX.js +61 -0
- package/dist/ulpi-5EN6JCAS-LFE3WSL4.js +10 -0
- package/dist/{uninstall-6SW35IK4.js → uninstall-ICUV6DDV.js} +3 -3
- package/dist/{update-M6IBJNYP.js → update-7ZMAYRBH.js} +3 -3
- package/dist/{version-checker-Q6YTYAGP.js → version-checker-4ZFMZA7Y.js} +2 -2
- package/package.json +39 -31
- package/dist/chunk-2MZER6ND.js +0 -415
- package/dist/chunk-2VYFVYJL.js +0 -4273
- package/dist/chunk-6OCEY7JY.js +0 -422
- package/dist/chunk-7LXY5UVC.js +0 -330
- package/dist/chunk-B55DDP24.js +0 -136
- package/dist/chunk-JWUUVXIV.js +0 -13694
- package/dist/chunk-MIAQVCFW.js +0 -39
- package/dist/chunk-YM2HV4IA.js +0 -505
- package/dist/ci-STSL2LSP.js +0 -370
- package/dist/mcp-installer-NQCGKQ23.js +0 -124
- package/dist/projects-ATHDD3D6.js +0 -271
- package/dist/review-ADUPV3PN.js +0 -152
- package/dist/server-USLHY6GH-AEOJC5ST.js +0 -18
- package/dist/server-X5P6WH2M-7K2RY34N.js +0 -11
- package/dist/skills/ulpi-generate-guardian/SKILL.md +0 -750
- package/dist/skills/ulpi-generate-guardian/references/framework-rules.md +0 -849
- package/dist/skills/ulpi-generate-guardian/references/language-rules.md +0 -591
- package/dist/ui-OWXZ3YSR.js +0 -167
- package/dist/ui.html +0 -698
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import {
|
|
2
|
+
installKiroSkill
|
|
3
|
+
} from "./chunk-IZPJHSPX.js";
|
|
4
|
+
import {
|
|
5
|
+
BUNDLED_SKILLS
|
|
6
|
+
} from "./chunk-4ZPOZULQ.js";
|
|
7
|
+
import {
|
|
8
|
+
getBinaryPath
|
|
9
|
+
} from "./chunk-C7CLUQI6.js";
|
|
10
|
+
|
|
11
|
+
// ../../packages/agent-installer/dist/index.js
|
|
12
|
+
import * as fs from "fs";
|
|
13
|
+
import * as path from "path";
|
|
14
|
+
import * as os from "os";
|
|
15
|
+
import * as fs2 from "fs";
|
|
16
|
+
import * as path2 from "path";
|
|
17
|
+
function buildMcpServers() {
|
|
18
|
+
const binary = getBinaryPath();
|
|
19
|
+
return {
|
|
20
|
+
"ulpi-codemap": {
|
|
21
|
+
command: binary,
|
|
22
|
+
args: ["codemap", "serve"],
|
|
23
|
+
transportType: "stdio"
|
|
24
|
+
},
|
|
25
|
+
"ulpi-memory": {
|
|
26
|
+
command: binary,
|
|
27
|
+
args: ["memory", "serve"],
|
|
28
|
+
transportType: "stdio"
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function kiroAgentsDir() {
|
|
33
|
+
return path.join(os.homedir(), ".kiro", "agents");
|
|
34
|
+
}
|
|
35
|
+
function kiroAgentPath(name) {
|
|
36
|
+
return path.join(kiroAgentsDir(), `${name}.json`);
|
|
37
|
+
}
|
|
38
|
+
function kiroSkillsDir(projectDir) {
|
|
39
|
+
return path.join(projectDir, ".kiro", "skills");
|
|
40
|
+
}
|
|
41
|
+
function buildHooks() {
|
|
42
|
+
const binary = getBinaryPath();
|
|
43
|
+
return {
|
|
44
|
+
agentSpawn: [{ command: `${binary} session-start` }],
|
|
45
|
+
preToolUse: [{ matcher: "*", command: `${binary} pre-tool` }],
|
|
46
|
+
postToolUse: [{ matcher: "*", command: `${binary} post-tool` }],
|
|
47
|
+
stop: [{ command: `${binary} stop` }]
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function generateAgentConfig() {
|
|
51
|
+
return {
|
|
52
|
+
name: "ulpi-governance",
|
|
53
|
+
description: "ULPI-governed coding agent. Enforces rules from .ulpi/guards.yml, tracks sessions, captures memory, and provides CodeMap semantic search.",
|
|
54
|
+
tools: ["read", "write", "shell"],
|
|
55
|
+
allowedTools: ["read"],
|
|
56
|
+
hooks: buildHooks(),
|
|
57
|
+
resources: [
|
|
58
|
+
"skill://.kiro/skills/*/SKILL.md",
|
|
59
|
+
"file://.ulpi/guards.yml"
|
|
60
|
+
],
|
|
61
|
+
mcpServers: buildMcpServers()
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function installKiroHooks(mode) {
|
|
65
|
+
if (mode === "agent") {
|
|
66
|
+
const agentConfig = generateAgentConfig();
|
|
67
|
+
const agentPath = kiroAgentPath("ulpi-governance");
|
|
68
|
+
const dir2 = path.dirname(agentPath);
|
|
69
|
+
fs.mkdirSync(dir2, { recursive: true });
|
|
70
|
+
fs.writeFileSync(agentPath, JSON.stringify(agentConfig, null, 2) + "\n", "utf-8");
|
|
71
|
+
return { file: agentPath, agent: "ulpi-governance" };
|
|
72
|
+
}
|
|
73
|
+
const defaultPath = kiroAgentPath("kiro_default");
|
|
74
|
+
let config = {};
|
|
75
|
+
if (fs.existsSync(defaultPath)) {
|
|
76
|
+
try {
|
|
77
|
+
config = JSON.parse(fs.readFileSync(defaultPath, "utf-8"));
|
|
78
|
+
} catch {
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
config.hooks = buildHooks();
|
|
82
|
+
config.mcpServers = { ...config.mcpServers ?? {}, ...buildMcpServers() };
|
|
83
|
+
const dir = path.dirname(defaultPath);
|
|
84
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
85
|
+
fs.writeFileSync(defaultPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
86
|
+
return { file: defaultPath, agent: "kiro_default" };
|
|
87
|
+
}
|
|
88
|
+
function installKiroSkills(projectDir) {
|
|
89
|
+
let count = 0;
|
|
90
|
+
for (const skillInfo of BUNDLED_SKILLS) {
|
|
91
|
+
const skill = {
|
|
92
|
+
name: skillInfo.id,
|
|
93
|
+
path: skillInfo.filename,
|
|
94
|
+
source: "bundled",
|
|
95
|
+
description: skillInfo.description
|
|
96
|
+
};
|
|
97
|
+
const dirName = `ulpi-${skillInfo.id}`;
|
|
98
|
+
const skillDir = path.join(kiroSkillsDir(projectDir), dirName);
|
|
99
|
+
const skillPath = path.join(skillDir, "SKILL.md");
|
|
100
|
+
if (fs.existsSync(skillPath)) continue;
|
|
101
|
+
installKiroSkill(skill, projectDir, "repo");
|
|
102
|
+
count++;
|
|
103
|
+
}
|
|
104
|
+
return count;
|
|
105
|
+
}
|
|
106
|
+
function uninstallKiro(projectDir) {
|
|
107
|
+
let agentRemoved = false;
|
|
108
|
+
let skillsRemoved = 0;
|
|
109
|
+
let agentsRemoved = 0;
|
|
110
|
+
const agentPath = kiroAgentPath("ulpi-governance");
|
|
111
|
+
if (fs.existsSync(agentPath)) {
|
|
112
|
+
fs.unlinkSync(agentPath);
|
|
113
|
+
agentRemoved = true;
|
|
114
|
+
}
|
|
115
|
+
const skillsDir = kiroSkillsDir(projectDir);
|
|
116
|
+
if (fs.existsSync(skillsDir)) {
|
|
117
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
118
|
+
for (const entry of entries) {
|
|
119
|
+
if (entry.isDirectory() && entry.name.startsWith("ulpi-")) {
|
|
120
|
+
fs.rmSync(path.join(skillsDir, entry.name), { recursive: true, force: true });
|
|
121
|
+
skillsRemoved++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const claudeAgentsDir = path.join(projectDir, ".claude", "agents");
|
|
126
|
+
const kiroAgentsBase = path.join(projectDir, ".kiro", "agents");
|
|
127
|
+
if (fs.existsSync(claudeAgentsDir) && fs.existsSync(kiroAgentsBase)) {
|
|
128
|
+
const claudeEntries = fs.readdirSync(claudeAgentsDir);
|
|
129
|
+
for (const file of claudeEntries) {
|
|
130
|
+
if (!file.endsWith(".md")) continue;
|
|
131
|
+
const agentName = file.replace(/\.md$/, "");
|
|
132
|
+
const kiroJson = path.join(kiroAgentsBase, `${agentName}.json`);
|
|
133
|
+
const kiroPromptDir = path.join(kiroAgentsBase, agentName);
|
|
134
|
+
if (fs.existsSync(kiroJson)) {
|
|
135
|
+
fs.unlinkSync(kiroJson);
|
|
136
|
+
agentsRemoved++;
|
|
137
|
+
}
|
|
138
|
+
if (fs.existsSync(kiroPromptDir)) {
|
|
139
|
+
fs.rmSync(kiroPromptDir, { recursive: true, force: true });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return { agentRemoved, skillsRemoved, agentsRemoved };
|
|
144
|
+
}
|
|
145
|
+
function getKiroStatus(projectDir) {
|
|
146
|
+
const agentPath = kiroAgentPath("ulpi-governance");
|
|
147
|
+
const agentInstalled = fs.existsSync(agentPath);
|
|
148
|
+
let skillCount = 0;
|
|
149
|
+
let convertedSkillCount = 0;
|
|
150
|
+
const skillsDir = kiroSkillsDir(projectDir);
|
|
151
|
+
if (fs.existsSync(skillsDir)) {
|
|
152
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
153
|
+
for (const e of entries) {
|
|
154
|
+
if (!e.isDirectory()) continue;
|
|
155
|
+
if (e.name.startsWith("ulpi-")) {
|
|
156
|
+
skillCount++;
|
|
157
|
+
} else {
|
|
158
|
+
convertedSkillCount++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
let convertedAgentCount = 0;
|
|
163
|
+
const claudeAgentsDir = path.join(projectDir, ".claude", "agents");
|
|
164
|
+
const kiroAgentsBase = path.join(projectDir, ".kiro", "agents");
|
|
165
|
+
if (fs.existsSync(claudeAgentsDir) && fs.existsSync(kiroAgentsBase)) {
|
|
166
|
+
const claudeEntries = fs.readdirSync(claudeAgentsDir);
|
|
167
|
+
for (const file of claudeEntries) {
|
|
168
|
+
if (!file.endsWith(".md")) continue;
|
|
169
|
+
const agentName = file.replace(/\.md$/, "");
|
|
170
|
+
if (fs.existsSync(path.join(kiroAgentsBase, `${agentName}.json`))) {
|
|
171
|
+
convertedAgentCount++;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const mcpPath = path.join(projectDir, ".kiro", "settings", "mcp.json");
|
|
176
|
+
let mcpConfigured = false;
|
|
177
|
+
if (fs.existsSync(mcpPath)) {
|
|
178
|
+
try {
|
|
179
|
+
const mcpConfig = JSON.parse(fs.readFileSync(mcpPath, "utf-8"));
|
|
180
|
+
const servers = mcpConfig.mcpServers;
|
|
181
|
+
mcpConfigured = !!(servers?.["ulpi-codemap"] || servers?.["ulpi-memory"]);
|
|
182
|
+
} catch {
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { agentInstalled, agentPath, skillCount, convertedSkillCount, convertedAgentCount, mcpConfigured };
|
|
186
|
+
}
|
|
187
|
+
function installCodexMcpServers(projectDir) {
|
|
188
|
+
const configPath = path2.join(projectDir, ".codex", "config.toml");
|
|
189
|
+
let content = "";
|
|
190
|
+
if (fs2.existsSync(configPath)) {
|
|
191
|
+
content = fs2.readFileSync(configPath, "utf-8");
|
|
192
|
+
}
|
|
193
|
+
const servers = buildMcpServers();
|
|
194
|
+
let added = 0;
|
|
195
|
+
for (const [name, entry] of Object.entries(servers)) {
|
|
196
|
+
const actualHeader = `[mcp_servers.${name}]`;
|
|
197
|
+
if (content.includes(actualHeader)) continue;
|
|
198
|
+
const argsToml = entry.args.map((a) => `"${a}"`).join(", ");
|
|
199
|
+
content += `
|
|
200
|
+
${actualHeader}
|
|
201
|
+
command = "${entry.command}"
|
|
202
|
+
args = [${argsToml}]
|
|
203
|
+
`;
|
|
204
|
+
added++;
|
|
205
|
+
}
|
|
206
|
+
if (added > 0) {
|
|
207
|
+
const dir = path2.dirname(configPath);
|
|
208
|
+
fs2.mkdirSync(dir, { recursive: true });
|
|
209
|
+
fs2.writeFileSync(configPath, content, "utf-8");
|
|
210
|
+
}
|
|
211
|
+
return added;
|
|
212
|
+
}
|
|
213
|
+
function uninstallCodex(projectDir) {
|
|
214
|
+
let agentsRemoved = 0;
|
|
215
|
+
let skillsRemoved = 0;
|
|
216
|
+
let mcpRemoved = false;
|
|
217
|
+
const claudeAgentsDir = path2.join(projectDir, ".claude", "agents");
|
|
218
|
+
const codexAgentsBase = path2.join(projectDir, ".codex", "agents");
|
|
219
|
+
if (fs2.existsSync(claudeAgentsDir) && fs2.existsSync(codexAgentsBase)) {
|
|
220
|
+
const claudeEntries = fs2.readdirSync(claudeAgentsDir);
|
|
221
|
+
for (const file of claudeEntries) {
|
|
222
|
+
if (!file.endsWith(".md")) continue;
|
|
223
|
+
const agentName = file.replace(/\.md$/, "");
|
|
224
|
+
const codexToml = path2.join(codexAgentsBase, `${agentName}.toml`);
|
|
225
|
+
const codexInstructionsDir = path2.join(codexAgentsBase, agentName);
|
|
226
|
+
if (fs2.existsSync(codexToml)) {
|
|
227
|
+
fs2.unlinkSync(codexToml);
|
|
228
|
+
agentsRemoved++;
|
|
229
|
+
}
|
|
230
|
+
if (fs2.existsSync(codexInstructionsDir)) {
|
|
231
|
+
fs2.rmSync(codexInstructionsDir, { recursive: true, force: true });
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const claudeSkillsDir = path2.join(projectDir, ".claude", "skills");
|
|
236
|
+
const codexSkillsDir = path2.join(projectDir, ".codex", "skills");
|
|
237
|
+
if (fs2.existsSync(claudeSkillsDir) && fs2.existsSync(codexSkillsDir)) {
|
|
238
|
+
const claudeEntries = fs2.readdirSync(claudeSkillsDir, { withFileTypes: true });
|
|
239
|
+
for (const entry of claudeEntries) {
|
|
240
|
+
if (!entry.isDirectory()) continue;
|
|
241
|
+
const codexSkillDir = path2.join(codexSkillsDir, entry.name);
|
|
242
|
+
if (fs2.existsSync(codexSkillDir)) {
|
|
243
|
+
fs2.rmSync(codexSkillDir, { recursive: true, force: true });
|
|
244
|
+
skillsRemoved++;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const configPath = path2.join(projectDir, ".codex", "config.toml");
|
|
249
|
+
if (fs2.existsSync(configPath)) {
|
|
250
|
+
let content = fs2.readFileSync(configPath, "utf-8");
|
|
251
|
+
const originalLen = content.length;
|
|
252
|
+
for (const name of ["ulpi-codemap", "ulpi-memory"]) {
|
|
253
|
+
const sectionRegex = new RegExp(
|
|
254
|
+
`\\n?\\[mcp_servers\\.${name.replace(/-/g, "\\-")}\\]\\n(?:[^\\[]*?)(?=\\n\\[|$)`,
|
|
255
|
+
"s"
|
|
256
|
+
);
|
|
257
|
+
content = content.replace(sectionRegex, "");
|
|
258
|
+
}
|
|
259
|
+
if (fs2.existsSync(claudeAgentsDir)) {
|
|
260
|
+
const claudeEntries = fs2.readdirSync(claudeAgentsDir);
|
|
261
|
+
for (const file of claudeEntries) {
|
|
262
|
+
if (!file.endsWith(".md")) continue;
|
|
263
|
+
const agentName = file.replace(/\.md$/, "");
|
|
264
|
+
const sectionRegex = new RegExp(
|
|
265
|
+
`\\n?\\[agents\\.${agentName}\\]\\n(?:[^\\[]*?)(?=\\n\\[|$)`,
|
|
266
|
+
"s"
|
|
267
|
+
);
|
|
268
|
+
content = content.replace(sectionRegex, "");
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (content.length !== originalLen) {
|
|
272
|
+
mcpRemoved = true;
|
|
273
|
+
fs2.writeFileSync(configPath, content.trim() + "\n", "utf-8");
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return { agentsRemoved, skillsRemoved, mcpRemoved };
|
|
277
|
+
}
|
|
278
|
+
function getCodexStatus(projectDir) {
|
|
279
|
+
let convertedAgentCount = 0;
|
|
280
|
+
let convertedSkillCount = 0;
|
|
281
|
+
const claudeAgentsDir = path2.join(projectDir, ".claude", "agents");
|
|
282
|
+
const codexAgentsBase = path2.join(projectDir, ".codex", "agents");
|
|
283
|
+
if (fs2.existsSync(claudeAgentsDir) && fs2.existsSync(codexAgentsBase)) {
|
|
284
|
+
const claudeEntries = fs2.readdirSync(claudeAgentsDir);
|
|
285
|
+
for (const file of claudeEntries) {
|
|
286
|
+
if (!file.endsWith(".md")) continue;
|
|
287
|
+
const agentName = file.replace(/\.md$/, "");
|
|
288
|
+
if (fs2.existsSync(path2.join(codexAgentsBase, `${agentName}.toml`))) {
|
|
289
|
+
convertedAgentCount++;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
const claudeSkillsDir = path2.join(projectDir, ".claude", "skills");
|
|
294
|
+
const codexSkillsDir = path2.join(projectDir, ".codex", "skills");
|
|
295
|
+
if (fs2.existsSync(claudeSkillsDir) && fs2.existsSync(codexSkillsDir)) {
|
|
296
|
+
const claudeEntries = fs2.readdirSync(claudeSkillsDir, { withFileTypes: true });
|
|
297
|
+
for (const entry of claudeEntries) {
|
|
298
|
+
if (!entry.isDirectory()) continue;
|
|
299
|
+
if (fs2.existsSync(path2.join(codexSkillsDir, entry.name, "SKILL.md"))) {
|
|
300
|
+
convertedSkillCount++;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const configPath = path2.join(projectDir, ".codex", "config.toml");
|
|
305
|
+
let mcpConfigured = false;
|
|
306
|
+
if (fs2.existsSync(configPath)) {
|
|
307
|
+
const content = fs2.readFileSync(configPath, "utf-8");
|
|
308
|
+
mcpConfigured = content.includes("[mcp_servers.ulpi-codemap]") || content.includes("[mcp_servers.ulpi-memory]");
|
|
309
|
+
}
|
|
310
|
+
return { convertedAgentCount, convertedSkillCount, mcpConfigured };
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export {
|
|
314
|
+
buildMcpServers,
|
|
315
|
+
installKiroHooks,
|
|
316
|
+
installKiroSkills,
|
|
317
|
+
uninstallKiro,
|
|
318
|
+
getKiroStatus,
|
|
319
|
+
installCodexMcpServers,
|
|
320
|
+
uninstallCodex,
|
|
321
|
+
getCodexStatus
|
|
322
|
+
};
|
|
@@ -136,9 +136,9 @@ var PlanStatusSchema = external_exports.enum([
|
|
|
136
136
|
"executing",
|
|
137
137
|
"completed"
|
|
138
138
|
]);
|
|
139
|
-
var
|
|
140
|
-
var
|
|
141
|
-
provider:
|
|
139
|
+
var EmbeddingProviderSchema = external_exports.enum(["openai", "ollama", "ulpi"]);
|
|
140
|
+
var EmbeddingConfigSchema = external_exports.object({
|
|
141
|
+
provider: EmbeddingProviderSchema.default("ulpi"),
|
|
142
142
|
model: external_exports.string().max(100).default("code"),
|
|
143
143
|
dimensions: external_exports.number().int().positive().max(4096).default(1024),
|
|
144
144
|
baseUrl: external_exports.string().url().max(200).optional()
|
|
@@ -175,13 +175,15 @@ var CodemapHybridConfigSchema = external_exports.object({
|
|
|
175
175
|
weights: CodemapHybridWeightsSchema.default({})
|
|
176
176
|
});
|
|
177
177
|
var CodemapConfigSchema = external_exports.object({
|
|
178
|
-
embedding:
|
|
178
|
+
embedding: EmbeddingConfigSchema.default({}),
|
|
179
179
|
chunking: CodemapChunkingConfigSchema.default({}),
|
|
180
180
|
batch: CodemapBatchConfigSchema.default({}),
|
|
181
181
|
hybrid: CodemapHybridConfigSchema.default({}),
|
|
182
182
|
deny: external_exports.array(external_exports.string().max(500)).max(200).default(["**/.env*", "**/secrets/**", "**/certs/**"]),
|
|
183
183
|
maxFileSize: external_exports.number().int().positive().default(1048576),
|
|
184
184
|
// 1MB
|
|
185
|
+
searchTimeoutMs: external_exports.number().int().positive().default(15e3),
|
|
186
|
+
// Search embed timeout
|
|
185
187
|
autoExport: external_exports.boolean().default(true),
|
|
186
188
|
// Export to shadow branch on push / session-end
|
|
187
189
|
autoImport: external_exports.boolean().default(true)
|
|
@@ -256,12 +258,6 @@ var MemoryEntrySchema = external_exports.object({
|
|
|
256
258
|
lastAccessedAt: external_exports.string().optional(),
|
|
257
259
|
supersededBy: external_exports.string().max(64).optional()
|
|
258
260
|
});
|
|
259
|
-
var MemoryEmbeddingConfigSchema = external_exports.object({
|
|
260
|
-
provider: external_exports.enum(["openai", "ollama", "ulpi"]).default("ulpi"),
|
|
261
|
-
model: external_exports.string().max(100).default("code"),
|
|
262
|
-
dimensions: external_exports.number().int().positive().max(4096).default(1024),
|
|
263
|
-
baseUrl: external_exports.string().url().max(200).optional()
|
|
264
|
-
});
|
|
265
261
|
var MemoryClassifierConfigSchema = external_exports.object({
|
|
266
262
|
enabled: external_exports.boolean().default(true),
|
|
267
263
|
model: external_exports.string().max(100).default("claude-sonnet-4-20250514"),
|
|
@@ -294,7 +290,7 @@ var MemoryConfigSchema = external_exports.object({
|
|
|
294
290
|
captureMode: CaptureModeSchema.default("continuous"),
|
|
295
291
|
surfaceOnStart: external_exports.boolean().default(true),
|
|
296
292
|
surfaceLimit: external_exports.number().int().positive().max(20).default(5),
|
|
297
|
-
embedding:
|
|
293
|
+
embedding: EmbeddingConfigSchema.default({ model: "memory" }),
|
|
298
294
|
classifier: MemoryClassifierConfigSchema.default({}),
|
|
299
295
|
retention: MemoryRetentionConfigSchema.default({}),
|
|
300
296
|
ranking: MemoryRankingConfigSchema.default({}),
|
|
@@ -328,6 +324,159 @@ var DepgraphConfigSchema = external_exports.object({
|
|
|
328
324
|
excludeUnranked: external_exports.boolean().default(false),
|
|
329
325
|
excludeUnrankedThreshold: external_exports.number().nonnegative().default(1e-4)
|
|
330
326
|
});
|
|
327
|
+
var TrackerTaskStatusSchema = external_exports.enum([
|
|
328
|
+
"open",
|
|
329
|
+
"in_progress",
|
|
330
|
+
"done",
|
|
331
|
+
"failed",
|
|
332
|
+
"skipped"
|
|
333
|
+
]);
|
|
334
|
+
var TaskPrioritySchema = external_exports.union([
|
|
335
|
+
external_exports.literal(0),
|
|
336
|
+
external_exports.literal(1),
|
|
337
|
+
external_exports.literal(2),
|
|
338
|
+
external_exports.literal(3),
|
|
339
|
+
external_exports.literal(4)
|
|
340
|
+
]);
|
|
341
|
+
var TrackerTaskSchema = external_exports.object({
|
|
342
|
+
id: external_exports.string(),
|
|
343
|
+
title: external_exports.string(),
|
|
344
|
+
status: TrackerTaskStatusSchema,
|
|
345
|
+
priority: TaskPrioritySchema,
|
|
346
|
+
description: external_exports.string().optional(),
|
|
347
|
+
labels: external_exports.array(external_exports.string()).optional(),
|
|
348
|
+
type: external_exports.string().optional(),
|
|
349
|
+
parentId: external_exports.string().optional(),
|
|
350
|
+
dependsOn: external_exports.array(external_exports.string()).optional(),
|
|
351
|
+
blocks: external_exports.array(external_exports.string()).optional(),
|
|
352
|
+
assignee: external_exports.string().optional(),
|
|
353
|
+
createdAt: external_exports.string().optional(),
|
|
354
|
+
updatedAt: external_exports.string().optional(),
|
|
355
|
+
metadata: external_exports.record(external_exports.unknown()).optional()
|
|
356
|
+
});
|
|
357
|
+
var TaskFilterSchema = external_exports.object({
|
|
358
|
+
status: external_exports.union([TrackerTaskStatusSchema, external_exports.array(TrackerTaskStatusSchema)]).optional(),
|
|
359
|
+
priority: external_exports.union([TaskPrioritySchema, external_exports.array(TaskPrioritySchema)]).optional(),
|
|
360
|
+
labels: external_exports.array(external_exports.string()).optional(),
|
|
361
|
+
assignee: external_exports.string().optional(),
|
|
362
|
+
type: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]).optional(),
|
|
363
|
+
parentId: external_exports.string().optional(),
|
|
364
|
+
ready: external_exports.boolean().optional(),
|
|
365
|
+
limit: external_exports.number().int().positive().optional(),
|
|
366
|
+
offset: external_exports.number().int().nonnegative().optional(),
|
|
367
|
+
excludeIds: external_exports.array(external_exports.string()).optional()
|
|
368
|
+
});
|
|
369
|
+
var TaskCompletionResultSchema = external_exports.object({
|
|
370
|
+
taskId: external_exports.string(),
|
|
371
|
+
status: TrackerTaskStatusSchema,
|
|
372
|
+
summary: external_exports.string(),
|
|
373
|
+
filesChanged: external_exports.array(external_exports.string()).optional(),
|
|
374
|
+
commitSha: external_exports.string().optional()
|
|
375
|
+
});
|
|
376
|
+
var AgentPluginMetaSchema = external_exports.object({
|
|
377
|
+
name: external_exports.string(),
|
|
378
|
+
version: external_exports.string(),
|
|
379
|
+
description: external_exports.string(),
|
|
380
|
+
cliCommand: external_exports.string(),
|
|
381
|
+
supportsHooks: external_exports.boolean(),
|
|
382
|
+
supportsSkills: external_exports.boolean(),
|
|
383
|
+
supportsStreaming: external_exports.boolean(),
|
|
384
|
+
supportsSubagentTracing: external_exports.boolean()
|
|
385
|
+
});
|
|
386
|
+
var ExecuteOptionsSchema = external_exports.object({
|
|
387
|
+
prompt: external_exports.string(),
|
|
388
|
+
workingDir: external_exports.string(),
|
|
389
|
+
timeout: external_exports.number().positive().optional(),
|
|
390
|
+
env: external_exports.record(external_exports.string()).optional(),
|
|
391
|
+
sandboxConfig: external_exports.record(external_exports.unknown()).optional()
|
|
392
|
+
});
|
|
393
|
+
var ExecuteResultSchema = external_exports.object({
|
|
394
|
+
exitCode: external_exports.number(),
|
|
395
|
+
stdout: external_exports.string(),
|
|
396
|
+
stderr: external_exports.string(),
|
|
397
|
+
duration: external_exports.number(),
|
|
398
|
+
tokenUsage: external_exports.object({
|
|
399
|
+
input: external_exports.number().optional(),
|
|
400
|
+
output: external_exports.number().optional()
|
|
401
|
+
}).optional()
|
|
402
|
+
});
|
|
403
|
+
var TrackerPluginMetaSchema = external_exports.object({
|
|
404
|
+
id: external_exports.string(),
|
|
405
|
+
name: external_exports.string(),
|
|
406
|
+
description: external_exports.string(),
|
|
407
|
+
version: external_exports.string(),
|
|
408
|
+
supportsBidirectionalSync: external_exports.boolean(),
|
|
409
|
+
supportsHierarchy: external_exports.boolean(),
|
|
410
|
+
supportsDependencies: external_exports.boolean()
|
|
411
|
+
});
|
|
412
|
+
var SyncResultSchema = external_exports.object({
|
|
413
|
+
success: external_exports.boolean(),
|
|
414
|
+
message: external_exports.string(),
|
|
415
|
+
added: external_exports.number().optional(),
|
|
416
|
+
updated: external_exports.number().optional(),
|
|
417
|
+
removed: external_exports.number().optional(),
|
|
418
|
+
error: external_exports.string().optional(),
|
|
419
|
+
syncedAt: external_exports.string()
|
|
420
|
+
});
|
|
421
|
+
var McpConfigFieldSchema = external_exports.object({
|
|
422
|
+
type: external_exports.enum(["string", "number", "boolean"]).default("string"),
|
|
423
|
+
format: external_exports.enum(["env-ref", "plain"]).optional(),
|
|
424
|
+
required: external_exports.boolean().default(false),
|
|
425
|
+
sensitive: external_exports.boolean().default(false),
|
|
426
|
+
description: external_exports.string().optional(),
|
|
427
|
+
default: external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean()]).optional()
|
|
428
|
+
});
|
|
429
|
+
var McpTransportSchema = external_exports.enum(["stdio", "sse", "http"]).default("stdio");
|
|
430
|
+
var McpCategorySchema = external_exports.enum([
|
|
431
|
+
"database",
|
|
432
|
+
"api",
|
|
433
|
+
"devtools",
|
|
434
|
+
"comms",
|
|
435
|
+
"analytics",
|
|
436
|
+
"cloud",
|
|
437
|
+
"ai",
|
|
438
|
+
"search",
|
|
439
|
+
"monitoring",
|
|
440
|
+
"project-management",
|
|
441
|
+
"design",
|
|
442
|
+
"custom"
|
|
443
|
+
]).default("custom");
|
|
444
|
+
var McpSourceSchema = external_exports.enum(["catalog", "manual"]).default("manual");
|
|
445
|
+
var McpDetectSignalsSchema = external_exports.object({
|
|
446
|
+
dependencies: external_exports.array(external_exports.string()).default([]),
|
|
447
|
+
env_vars: external_exports.array(external_exports.string()).default([]),
|
|
448
|
+
docker_services: external_exports.array(external_exports.string()).default([]),
|
|
449
|
+
config_files: external_exports.array(external_exports.string()).default([])
|
|
450
|
+
}).partial();
|
|
451
|
+
var McpDefinitionSchema = external_exports.object({
|
|
452
|
+
name: external_exports.string().min(1).max(128),
|
|
453
|
+
display_name: external_exports.string().max(256).optional(),
|
|
454
|
+
description: external_exports.string().max(1024).optional(),
|
|
455
|
+
command: external_exports.string().min(1).max(256),
|
|
456
|
+
args: external_exports.array(external_exports.string()).default([]),
|
|
457
|
+
transport: McpTransportSchema,
|
|
458
|
+
category: McpCategorySchema,
|
|
459
|
+
config_schema: external_exports.record(external_exports.string(), McpConfigFieldSchema).optional(),
|
|
460
|
+
tags: external_exports.array(external_exports.string()).default([]),
|
|
461
|
+
source: McpSourceSchema,
|
|
462
|
+
added_at: external_exports.string().optional()
|
|
463
|
+
});
|
|
464
|
+
var McpLibrarySchema = external_exports.object({
|
|
465
|
+
mcps: external_exports.record(external_exports.string(), McpDefinitionSchema).default({})
|
|
466
|
+
});
|
|
467
|
+
var McpActivationSchema = external_exports.object({
|
|
468
|
+
enabled: external_exports.boolean().default(true),
|
|
469
|
+
config: external_exports.record(external_exports.string(), external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean()])).default({})
|
|
470
|
+
});
|
|
471
|
+
var McpRepoConfigSchema = external_exports.object({
|
|
472
|
+
mcps: external_exports.record(external_exports.string(), McpActivationSchema).default({})
|
|
473
|
+
});
|
|
474
|
+
var McpCatalogEntrySchema = McpDefinitionSchema.extend({
|
|
475
|
+
detect_signals: McpDetectSignalsSchema.optional()
|
|
476
|
+
});
|
|
477
|
+
var McpCatalogSchema = external_exports.object({
|
|
478
|
+
catalog: external_exports.array(McpCatalogEntrySchema).default([])
|
|
479
|
+
});
|
|
331
480
|
|
|
332
481
|
export {
|
|
333
482
|
BlockTypeSchema,
|
|
@@ -349,8 +498,8 @@ export {
|
|
|
349
498
|
ReviewDecisionSchema,
|
|
350
499
|
RepoInfoSchema,
|
|
351
500
|
PlanStatusSchema,
|
|
352
|
-
|
|
353
|
-
|
|
501
|
+
EmbeddingProviderSchema,
|
|
502
|
+
EmbeddingConfigSchema,
|
|
354
503
|
CodemapChunkingStrategySchema,
|
|
355
504
|
CodemapChunkingConfigSchema,
|
|
356
505
|
CodemapBatchConfigSchema,
|
|
@@ -363,7 +512,6 @@ export {
|
|
|
363
512
|
CaptureModeSchema,
|
|
364
513
|
MemorySourceSchema,
|
|
365
514
|
MemoryEntrySchema,
|
|
366
|
-
MemoryEmbeddingConfigSchema,
|
|
367
515
|
MemoryClassifierConfigSchema,
|
|
368
516
|
MemoryRetentionConfigSchema,
|
|
369
517
|
MemoryRankingConfigSchema,
|
|
@@ -371,5 +519,26 @@ export {
|
|
|
371
519
|
ClassificationResultSchema,
|
|
372
520
|
DepgraphPersonalizationConfigSchema,
|
|
373
521
|
DepgraphPagerankConfigSchema,
|
|
374
|
-
DepgraphConfigSchema
|
|
522
|
+
DepgraphConfigSchema,
|
|
523
|
+
TrackerTaskStatusSchema,
|
|
524
|
+
TaskPrioritySchema,
|
|
525
|
+
TrackerTaskSchema,
|
|
526
|
+
TaskFilterSchema,
|
|
527
|
+
TaskCompletionResultSchema,
|
|
528
|
+
AgentPluginMetaSchema,
|
|
529
|
+
ExecuteOptionsSchema,
|
|
530
|
+
ExecuteResultSchema,
|
|
531
|
+
TrackerPluginMetaSchema,
|
|
532
|
+
SyncResultSchema,
|
|
533
|
+
McpConfigFieldSchema,
|
|
534
|
+
McpTransportSchema,
|
|
535
|
+
McpCategorySchema,
|
|
536
|
+
McpSourceSchema,
|
|
537
|
+
McpDetectSignalsSchema,
|
|
538
|
+
McpDefinitionSchema,
|
|
539
|
+
McpLibrarySchema,
|
|
540
|
+
McpActivationSchema,
|
|
541
|
+
McpRepoConfigSchema,
|
|
542
|
+
McpCatalogEntrySchema,
|
|
543
|
+
McpCatalogSchema
|
|
375
544
|
};
|