@neobiotechlabs/neobiotech-dev-agent 0.1.23 → 0.1.25

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.
@@ -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.23"
13
+ "version": "0.1.25"
14
14
  },
15
15
  "description": "의료기기 SW 규제 개발 자동화 (Jira·Confluence·Risk·CVSS·Xray·IEC 62304/62366·MDR·문서 렌더)",
16
16
  "category": "medical-device",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neobiotech-dev-agent",
3
- "version": "0.1.23",
3
+ "version": "0.1.25",
4
4
  "displayName": "NeoBiotech Dev Agent (MedDev)",
5
5
  "description": "의료기기 SW 규제 개발 자동화 — Jira·Confluence·Risk·CVSS·Xray·IEC 62304/62366·MDR·문서 렌더",
6
6
  "author": {
package/dist/index.js CHANGED
@@ -159694,10 +159694,12 @@ var RiskClient = class {
159694
159694
  error: "RISK_PLUGIN_ENDPOINT not configured. \uD658\uACBD\uBCC0\uC218 \uB610\uB294 \uCF54\uB4DC \uC815\uC801 \uAE30\uBCF8\uAC12\uC744 \uD655\uC778\uD558\uC138\uC694."
159695
159695
  };
159696
159696
  }
159697
+ const DEFAULT_RMP_AUTHOR = "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077";
159698
+ const finalAuthor = payload.author && payload.author.length > 0 ? payload.author : process.env.RISK_PLUGIN_AUTHOR || DEFAULT_RMP_AUTHOR;
159697
159699
  const fullPayload = {
159698
159700
  ...payload,
159699
159701
  issueKey,
159700
- author: payload.author ?? ""
159702
+ author: finalAuthor
159701
159703
  };
159702
159704
  try {
159703
159705
  const resp = await fetch(endpoint, {
@@ -160133,7 +160135,7 @@ var RISK_MODELS = {
160133
160135
  options: {
160134
160136
  improvable: "7e044b34-25c4-ffae-5237-48eebb190358",
160135
160137
  remote: "58257cb8-59e2-5ec7-dd1d-9e966fb13589",
160136
- occasional: "6cf5ebce-3b07-69b1-b093-9e0ef9def95c",
160138
+ occasional: "6cf5ebce-3b07-69b1-b093-9f0ef9def95c",
160137
160139
  probable: "bbcbfdd1-0c02-6105-e8e4-f60ae6cacb5c",
160138
160140
  frequent: "e35de539-93d5-f854-c6ed-50067ad8599b"
160139
160141
  }
@@ -160153,7 +160155,7 @@ var RISK_MODELS = {
160153
160155
  id: "fec8bdcd-0c55-4ab3-87e3-cfd7176aefd5",
160154
160156
  options: {
160155
160157
  negligible: "a87a6249-03e4-5419-d50e-0818d824e8cb",
160156
- minor: "f0f50906-1516-0826-8e82-009813ce7ff7",
160158
+ minor: "c7b527ee-3282-3248-de94-1c8c40f7d152",
160157
160159
  serious: "15f87aeb-28ec-98ea-7310-4ad04b294127",
160158
160160
  critical: "bf9cf219-e342-12ef-4305-2963f930138d",
160159
160161
  catastrophic: "e04cdc89-ffae-6001-4c06-d14b9fea0eee"
@@ -160243,12 +160245,57 @@ function planSetRisk(model, riskSet, classifierOptions, issueKey) {
160243
160245
  if (!m3) return { items: [], skipped: [{ classifier: "*", optionName: model }] };
160244
160246
  const setId = m3.riskSets[riskSet];
160245
160247
  if (!setId) return { items: [], skipped: [{ classifier: "*", optionName: `riskSet.${riskSet}` }] };
160246
- const author = process.env.JIRA_EMAIL;
160247
- if (!author) return { items: [], skipped: [{ classifier: "*", optionName: "JIRA_EMAIL missing" }] };
160248
+ const DEFAULT_RMP_AUTHOR = "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077";
160249
+ const author = process.env.RISK_PLUGIN_AUTHOR || DEFAULT_RMP_AUTHOR;
160250
+ if (!author) return { items: [], skipped: [{ classifier: "*", optionName: "RISK_PLUGIN_AUTHOR missing" }] };
160248
160251
  const items = [];
160249
160252
  const skipped = [];
160253
+ if (model === "cia" && m3.ciaWrapper) {
160254
+ const wrapperClassifiers = ["confidentiality", "availability", "integrity"];
160255
+ const wrapperValues = [];
160256
+ const wrapperSkipped = [];
160257
+ for (const cname of wrapperClassifiers) {
160258
+ const opt = classifierOptions[cname];
160259
+ if (!opt) continue;
160260
+ const cls = m3.classifiers[cname];
160261
+ if (!cls) {
160262
+ wrapperSkipped.push({ classifier: cname, optionName: opt });
160263
+ continue;
160264
+ }
160265
+ const optionId = cls.options[opt];
160266
+ if (!optionId) {
160267
+ wrapperSkipped.push({ classifier: cname, optionName: opt });
160268
+ continue;
160269
+ }
160270
+ wrapperValues.push({ classifierId: cls.id, optionId });
160271
+ }
160272
+ if (wrapperValues.length > 0) {
160273
+ const wrapperPayload = {
160274
+ issueKey,
160275
+ author,
160276
+ riskModelKey: m3.modelKey,
160277
+ riskSetId: setId,
160278
+ classifierValuePayload: {
160279
+ classifierId: m3.ciaWrapper.id,
160280
+ riskModelKey: m3.ciaWrapper.riskModelKey,
160281
+ classifierValues: wrapperValues
160282
+ }
160283
+ };
160284
+ items.push({
160285
+ model,
160286
+ riskSet,
160287
+ classifierName: "cia_wrapper",
160288
+ optionName: wrapperValues.map((v2) => v2.classifierId.slice(0, 8)).join(","),
160289
+ payload: wrapperPayload
160290
+ });
160291
+ }
160292
+ skipped.push(...wrapperSkipped);
160293
+ }
160250
160294
  for (const [classifierName, optionName] of Object.entries(classifierOptions)) {
160251
160295
  if (!optionName) continue;
160296
+ if (model === "cia" && m3.ciaWrapper && (classifierName === "confidentiality" || classifierName === "availability" || classifierName === "integrity")) {
160297
+ continue;
160298
+ }
160252
160299
  const cls = m3.classifiers[classifierName];
160253
160300
  if (!cls) {
160254
160301
  skipped.push({ classifier: classifierName, optionName });
@@ -160330,7 +160377,7 @@ async function runSetPlans(riskStub, plans) {
160330
160377
  out.details.push({
160331
160378
  model: p.name,
160332
160379
  classifier: classifierFromId(p.model, payload.classifierValuePayload.classifierId),
160333
- optionName: payload.classifierValuePayload.optionId,
160380
+ optionName: payload.classifierValuePayload.optionId ?? `wrapper(${payload.classifierValuePayload.classifierValues?.length ?? 0})`,
160334
160381
  result: r2
160335
160382
  });
160336
160383
  }
@@ -184978,7 +185025,7 @@ var xrayClientSecret = process.env.XRAY_CLIENT_SECRET || "";
184978
185025
  var xray = xrayClientId && xrayClientSecret ? new XrayClient(xrayClientId, xrayClientSecret, jiraUrl, jiraEmail, jiraToken) : null;
184979
185026
  var server = new McpServer({
184980
185027
  name: "jira-confluence",
184981
- version: "0.1.23"
185028
+ version: "0.1.25"
184982
185029
  });
184983
185030
  var ctx = { server, jira, confluence, risk, xray };
184984
185031
  registerJiraCrudTools(ctx);