@neobiotechlabs/neobiotech-dev-agent 0.1.35 → 0.1.36

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.35"
13
+ "version": "0.1.36"
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.35",
3
+ "version": "0.1.36",
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
@@ -160094,7 +160094,8 @@ var registerJiraCrudTools = (ctx2) => {
160094
160094
  // src/tools/confluence.ts
160095
160095
  init_markdown();
160096
160096
  import { readFileSync } from "fs";
160097
- import { resolve as resolve2 } from "path";
160097
+ import { resolve as resolve2, dirname as dirname2 } from "path";
160098
+ import { fileURLToPath as fileURLToPath2 } from "url";
160098
160099
 
160099
160100
  // src/utils/plantuml-renderer.ts
160100
160101
  import { spawn } from "child_process";
@@ -160197,10 +160198,12 @@ async function renderPlantUml(source, opts = {}) {
160197
160198
  // src/tools/confluence.ts
160198
160199
  function readPluginVersion() {
160199
160200
  try {
160200
- const pkg = JSON.parse(readFileSync(resolve2(process.cwd(), "package.json"), "utf8"));
160201
- return pkg.version || "unknown";
160202
- } catch {
160203
- return "unknown-read-failed";
160201
+ const here = dirname2(fileURLToPath2(import.meta.url));
160202
+ const pkgPath = resolve2(here, "package.json");
160203
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
160204
+ return pkg.version || "unknown-no-version";
160205
+ } catch (err) {
160206
+ return "unknown-read-failed: " + (err?.message ?? String(err));
160204
160207
  }
160205
160208
  }
160206
160209
  var PLUGIN_VERSION = readPluginVersion();
@@ -160327,19 +160330,27 @@ var registerConfluenceTools = (ctx2) => {
160327
160330
  currentVersion = result?.version?.number ?? 1;
160328
160331
  }
160329
160332
  let finalStorage = storage;
160333
+ renderTrace.push(`round2 entry: renderedDiagrams.size=${renderedDiagrams.size}`);
160330
160334
  if (render_diagrams && renderedDiagrams.size > 0) {
160335
+ let attIter = 0;
160331
160336
  for (const [id, diag] of renderedDiagrams) {
160337
+ attIter++;
160332
160338
  const filename = `diagram-${id}.${diag.format}`;
160333
160339
  try {
160334
160340
  await confluence2.addAttachment(currentPageId, filename, diag.buffer, diag.contentType);
160341
+ renderTrace.push(`attach ${attIter}/${renderedDiagrams.size}: ${filename} OK`);
160335
160342
  } catch (err) {
160343
+ renderTrace.push(`attach ${attIter}/${renderedDiagrams.size}: ${filename} FAIL \u2014 ${err?.message ?? err}`);
160336
160344
  console.error(`[confluence_publish_doc] attachment upload failed for ${id}: ${err?.message ?? err}`);
160337
160345
  renderedDiagrams.delete(id);
160338
160346
  diagramStats.rendered--;
160339
160347
  }
160340
160348
  }
160349
+ renderTrace.push(`round2 pre-replace: renderedDiagrams.size=${renderedDiagrams.size}`);
160341
160350
  finalStorage = replacePumlMarkers(storage, renderedDiagrams, pumlRegistry);
160351
+ renderTrace.push(`round2 post-replace: finalStorage.length=${finalStorage.length}, contains-image=${finalStorage.includes("<ac:image")}`);
160342
160352
  result = await confluence2.updatePage(currentPageId, title, finalStorage, currentVersion);
160353
+ renderTrace.push(`round2 update: v${result?.version?.number}, body_chars=${finalStorage.length}`);
160343
160354
  versionsUsed = 2;
160344
160355
  }
160345
160356
  const pageIdOut = result?.id ?? currentPageId;
@@ -162114,7 +162125,7 @@ var registerInitTools = ({ server: server2 }) => {
162114
162125
 
162115
162126
  // src/tools/doc-render.ts
162116
162127
  import { readFileSync as readFileSync3 } from "fs";
162117
- import { fileURLToPath as fileURLToPath2 } from "url";
162128
+ import { fileURLToPath as fileURLToPath3 } from "url";
162118
162129
  import path from "path";
162119
162130
 
162120
162131
  // src/utils/doc-render.ts
@@ -162179,7 +162190,7 @@ var TEMPLATE_VERSION = "17d0c4e";
162179
162190
 
162180
162191
  // src/tools/doc-render.ts
162181
162192
  init_adf();
162182
- var __dirname2 = path.dirname(fileURLToPath2(import.meta.url));
162193
+ var __dirname2 = path.dirname(fileURLToPath3(import.meta.url));
162183
162194
  var TEMPLATE_DIR = path.resolve(__dirname2, "../vendor/dev-docs-templates/templates");
162184
162195
  var registerDocRenderTools = (ctx2) => {
162185
162196
  const { server: server2, jira: jira2 } = ctx2;
@@ -184326,13 +184337,13 @@ init_marked_esm();
184326
184337
 
184327
184338
  // src/utils/pdf-fonts.ts
184328
184339
  import { existsSync as existsSync3 } from "fs";
184329
- import { join as join4, dirname as dirname2 } from "path";
184330
- import { fileURLToPath as fileURLToPath3 } from "url";
184340
+ import { join as join4, dirname as dirname3 } from "path";
184341
+ import { fileURLToPath as fileURLToPath4 } from "url";
184331
184342
  var BUNDLED_FONT_FAMILY = "BodyFont";
184332
184343
  var BUNDLED_FONT_FAMILY_BOLD = "BodyFont-Bold";
184333
184344
  var DEFAULT_FAMILY = "BodyFont";
184334
184345
  function bundledFontPaths() {
184335
- const here = typeof __dirname !== "undefined" ? __dirname : dirname2(fileURLToPath3(import.meta.url));
184346
+ const here = typeof __dirname !== "undefined" ? __dirname : dirname3(fileURLToPath4(import.meta.url));
184336
184347
  const rootFromSrc = join4(here, "..", "..");
184337
184348
  const candidates = [join4(here, "fonts"), join4(rootFromSrc, "dist", "fonts")];
184338
184349
  const fontsDir = candidates.find(
@@ -185503,9 +185514,9 @@ var registerExpertTools = (ctx2) => {
185503
185514
 
185504
185515
  // src/tools/review-criteria.ts
185505
185516
  import { readFileSync as readFileSync5 } from "fs";
185506
- import { fileURLToPath as fileURLToPath4 } from "url";
185517
+ import { fileURLToPath as fileURLToPath5 } from "url";
185507
185518
  import path2 from "path";
185508
- var __dirname3 = path2.dirname(fileURLToPath4(import.meta.url));
185519
+ var __dirname3 = path2.dirname(fileURLToPath5(import.meta.url));
185509
185520
  var CRITERIA_PATH = path2.resolve(__dirname3, "../data/review-criteria.md");
185510
185521
  var registerReviewCriteriaTools = (ctx2) => {
185511
185522
  ctx2.server.tool(
@@ -185552,7 +185563,7 @@ var xrayClientSecret = process.env.XRAY_CLIENT_SECRET || "";
185552
185563
  var xray = xrayClientId && xrayClientSecret ? new XrayClient(xrayClientId, xrayClientSecret, jiraUrl, jiraEmail, jiraToken) : null;
185553
185564
  var server = new McpServer({
185554
185565
  name: "jira-confluence",
185555
- version: "0.1.35"
185566
+ version: "0.1.36"
185556
185567
  });
185557
185568
  var ctx = { server, jira, confluence, risk, xray };
185558
185569
  registerJiraCrudTools(ctx);