@neobiotechlabs/neobiotech-dev-agent 0.1.39 → 0.1.41
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/dist/doctor.js +33 -3
- package/dist/doctor.js.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/setup-antigravity.js +38 -0
- package/dist/setup-antigravity.js.map +1 -0
- package/dist/setup-codex.js +87 -5
- package/dist/setup-codex.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"source": "npm",
|
|
11
11
|
"package": "@neobiotechlabs/neobiotech-dev-agent",
|
|
12
12
|
"registry": "https://registry.npmjs.org",
|
|
13
|
-
"version": "0.1.
|
|
13
|
+
"version": "0.1.41"
|
|
14
14
|
},
|
|
15
15
|
"description": "의료기기 SW 규제 개발 자동화 (Jira·Confluence·Risk·CVSS·Xray·IEC 62304/62366·MDR·문서 렌더)",
|
|
16
16
|
"category": "medical-device",
|
package/dist/doctor.js
CHANGED
|
@@ -7698,7 +7698,7 @@ var require_cross_spawn = __commonJS({
|
|
|
7698
7698
|
|
|
7699
7699
|
// src/cli/doctor.ts
|
|
7700
7700
|
import { execFile } from "child_process";
|
|
7701
|
-
import { existsSync, readdirSync } from "fs";
|
|
7701
|
+
import { existsSync, readFileSync, readdirSync } from "fs";
|
|
7702
7702
|
import path from "path";
|
|
7703
7703
|
import { promisify } from "util";
|
|
7704
7704
|
import { fileURLToPath } from "url";
|
|
@@ -15054,10 +15054,37 @@ function inspectAssets(pluginRoot) {
|
|
|
15054
15054
|
[
|
|
15055
15055
|
"data/review-criteria.md",
|
|
15056
15056
|
existsSync(path.join(pluginRoot, "data", "review-criteria.md"))
|
|
15057
|
+
],
|
|
15058
|
+
[
|
|
15059
|
+
"skills/gate-parallel-review/SKILL.md",
|
|
15060
|
+
existsSync(path.join(pluginRoot, "skills", "gate-parallel-review", "SKILL.md"))
|
|
15061
|
+
],
|
|
15062
|
+
[
|
|
15063
|
+
"codex-agents/*.toml",
|
|
15064
|
+
directoryHasFiles(path.join(pluginRoot, "codex-agents"), (name) => name.endsWith(".toml"))
|
|
15057
15065
|
]
|
|
15058
15066
|
];
|
|
15059
15067
|
return checks.map(([name, available]) => ({ name, required: true, available }));
|
|
15060
15068
|
}
|
|
15069
|
+
function inspectCodexAgents(pluginRoot, projectDir) {
|
|
15070
|
+
const templatesDir = path.join(pluginRoot, "codex-agents");
|
|
15071
|
+
const targetDir = path.join(projectDir, ".codex", "agents");
|
|
15072
|
+
const expected = existsSync(templatesDir) ? readdirSync(templatesDir).filter((name) => name.endsWith(".toml")).sort() : [];
|
|
15073
|
+
const installed = [];
|
|
15074
|
+
const missing = [];
|
|
15075
|
+
const conflicts = [];
|
|
15076
|
+
for (const name of expected) {
|
|
15077
|
+
const targetPath = path.join(targetDir, name);
|
|
15078
|
+
if (!existsSync(targetPath)) {
|
|
15079
|
+
missing.push(name);
|
|
15080
|
+
} else if (readFileSync(targetPath, "utf8") === readFileSync(path.join(templatesDir, name), "utf8")) {
|
|
15081
|
+
installed.push(name);
|
|
15082
|
+
} else {
|
|
15083
|
+
conflicts.push(name);
|
|
15084
|
+
}
|
|
15085
|
+
}
|
|
15086
|
+
return { expected, installed, missing, conflicts };
|
|
15087
|
+
}
|
|
15061
15088
|
async function probeJava() {
|
|
15062
15089
|
try {
|
|
15063
15090
|
await execFileAsync("java", ["-version"]);
|
|
@@ -15069,6 +15096,7 @@ async function probeJava() {
|
|
|
15069
15096
|
async function runDoctor(options) {
|
|
15070
15097
|
const environment = inspectEnvironment(options.env);
|
|
15071
15098
|
const assets = inspectAssets(options.pluginRoot);
|
|
15099
|
+
const codexAgents = inspectCodexAgents(options.pluginRoot, options.projectDir ?? process.cwd());
|
|
15072
15100
|
const java = await (options.javaProbe ?? probeJava)();
|
|
15073
15101
|
const mcp = {};
|
|
15074
15102
|
try {
|
|
@@ -15084,21 +15112,23 @@ async function runDoctor(options) {
|
|
|
15084
15112
|
mcp.error = error2 instanceof Error ? error2.message : String(error2);
|
|
15085
15113
|
}
|
|
15086
15114
|
return {
|
|
15087
|
-
ok: environment.filter((item) => item.required).every((item) => item.configured) && assets.filter((item) => item.required).every((item) => item.available) && !mcp.error,
|
|
15115
|
+
ok: environment.filter((item) => item.required).every((item) => item.configured) && assets.filter((item) => item.required).every((item) => item.available) && codexAgents.expected.length === 5 && codexAgents.missing.length === 0 && codexAgents.conflicts.length === 0 && !mcp.error,
|
|
15088
15116
|
environment,
|
|
15089
15117
|
assets,
|
|
15090
15118
|
java,
|
|
15119
|
+
codexAgents,
|
|
15091
15120
|
mcp
|
|
15092
15121
|
};
|
|
15093
15122
|
}
|
|
15094
15123
|
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
15095
15124
|
const pluginRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
15096
|
-
const report = await runDoctor({ pluginRoot, env: process.env });
|
|
15125
|
+
const report = await runDoctor({ pluginRoot, projectDir: process.cwd(), env: process.env });
|
|
15097
15126
|
process.stdout.write(`${JSON.stringify(report, null, 2)}
|
|
15098
15127
|
`);
|
|
15099
15128
|
if (!report.ok) process.exitCode = 1;
|
|
15100
15129
|
}
|
|
15101
15130
|
export {
|
|
15131
|
+
inspectCodexAgents,
|
|
15102
15132
|
inspectEnvironment,
|
|
15103
15133
|
runDoctor,
|
|
15104
15134
|
smokeMcpServer
|