redmine-devrelay-client 0.4.1 → 0.5.0
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 +3 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/textile.d.ts +6 -0
- package/dist/textile.js +37 -0
- package/dist/textile.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
[redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay) MCP 서버가 사용하는 Redmine REST 클라이언트입니다.
|
|
4
4
|
|
|
5
|
-
- **버전:** `0.
|
|
5
|
+
- **버전:** `0.5.0` (MCP 서버와 맞춤)
|
|
6
6
|
- **GitHub:** https://github.com/HuijungYoon/devrelay
|
|
7
7
|
- **MCP 서버:** [redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay)
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install redmine-devrelay-client@0.
|
|
10
|
+
npm install redmine-devrelay-client@0.5.0
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## 지원 기능
|
|
@@ -19,6 +19,7 @@ npm install redmine-devrelay-client@0.4.1
|
|
|
19
19
|
- HTML 본문 포맷
|
|
20
20
|
- `formatDescriptionForRedmine` — 평문 줄 → `<p>…</p>`
|
|
21
21
|
- `formatNotesForRedmine` — `\n` → `<br />`
|
|
22
|
+
- `detectNotesMarkup` — Textile/Markdown 감지 (MCP notes 차단용)
|
|
22
23
|
- 첨부: `inspectAttachments` / `uploadFile` / `addIssueAttachments` (최대 5개·10MiB)
|
|
23
24
|
|
|
24
25
|
## License
|
package/dist/index.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export { searchUsers, normalizeListedUser } from "./users.js";
|
|
|
9
9
|
export { listProjectMembers, matchMemberByName } from "./memberships.js";
|
|
10
10
|
export { inspectAttachments, uploadAttachments, uploadFile, } from "./attachments.js";
|
|
11
11
|
export { ATTACHMENT_MAX_BYTES, ATTACHMENT_MAX_FILES, } from "./types.js";
|
|
12
|
-
export { formatNotesForRedmine, formatDescriptionForRedmine } from "./textile.js";
|
|
12
|
+
export { detectNotesMarkup, formatNotesForRedmine, formatDescriptionForRedmine, } from "./textile.js";
|
|
13
13
|
export type * from "./types.js";
|
package/dist/index.js
CHANGED
|
@@ -9,5 +9,5 @@ export { searchUsers, normalizeListedUser } from "./users.js";
|
|
|
9
9
|
export { listProjectMembers, matchMemberByName } from "./memberships.js";
|
|
10
10
|
export { inspectAttachments, uploadAttachments, uploadFile, } from "./attachments.js";
|
|
11
11
|
export { ATTACHMENT_MAX_BYTES, ATTACHMENT_MAX_FILES, } from "./types.js";
|
|
12
|
-
export { formatNotesForRedmine, formatDescriptionForRedmine } from "./textile.js";
|
|
12
|
+
export { detectNotesMarkup, formatNotesForRedmine, formatDescriptionForRedmine, } from "./textile.js";
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,cAAc,CAAC"}
|
package/dist/textile.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This Redmine instance stores issue bodies as HTML (not Textile).
|
|
3
3
|
* Plain-text newlines are collapsed; convert to HTML so multi-line text renders.
|
|
4
|
+
* Journal notes must stay plain text — no Textile/Markdown markup.
|
|
4
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Returns labels of Textile/Markdown patterns found in notes.
|
|
8
|
+
* Empty array = plain text OK. Issue refs like `#123` mid-line are allowed.
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectNotesMarkup(notes: string): string[];
|
|
5
11
|
/**
|
|
6
12
|
* Comments/journals: append <br /> per line (works when notes accept HTML breaks).
|
|
7
13
|
* Idempotent if a line already ends with <br>.
|
package/dist/textile.js
CHANGED
|
@@ -1,10 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* This Redmine instance stores issue bodies as HTML (not Textile).
|
|
3
3
|
* Plain-text newlines are collapsed; convert to HTML so multi-line text renders.
|
|
4
|
+
* Journal notes must stay plain text — no Textile/Markdown markup.
|
|
4
5
|
*/
|
|
5
6
|
function normalizeNewlines(text) {
|
|
6
7
|
return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
7
8
|
}
|
|
9
|
+
const NOTES_MARKUP_RULES = [
|
|
10
|
+
{ label: "h1.", test: (l) => /^h1\.\s/i.test(l) },
|
|
11
|
+
{ label: "h2.", test: (l) => /^h2\.\s/i.test(l) },
|
|
12
|
+
{ label: "h3.", test: (l) => /^h3\.\s/i.test(l) },
|
|
13
|
+
{ label: "h4.", test: (l) => /^h4\.\s/i.test(l) },
|
|
14
|
+
{ label: "h5.", test: (l) => /^h5\.\s/i.test(l) },
|
|
15
|
+
{ label: "h6.", test: (l) => /^h6\.\s/i.test(l) },
|
|
16
|
+
{ label: "bq.", test: (l) => /^bq\.\s/i.test(l) },
|
|
17
|
+
{ label: "fn.", test: (l) => /^fn\d+\.\s/i.test(l) },
|
|
18
|
+
{ label: "** ", test: (l) => /^\*\*\s/.test(l) },
|
|
19
|
+
{ label: "* ", test: (l) => /^\*\s/.test(l) },
|
|
20
|
+
// Markdown ATX / Textile numbered list — not issue refs like "#23839"
|
|
21
|
+
{ label: "# ", test: (l) => /^#{1,6}\s+\S/.test(l) },
|
|
22
|
+
{ label: "- ", test: (l) => /^-\s+\S/.test(l) },
|
|
23
|
+
{ label: "**bold**", test: (l) => /\*\*[^*\n]+\*\*/.test(l) },
|
|
24
|
+
{
|
|
25
|
+
label: "*italic*",
|
|
26
|
+
test: (l) => /(^|[\s(])\*[^*\s][^*\n]*\*(?=[\s).,!?:;]|$)/.test(l),
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Returns labels of Textile/Markdown patterns found in notes.
|
|
31
|
+
* Empty array = plain text OK. Issue refs like `#123` mid-line are allowed.
|
|
32
|
+
*/
|
|
33
|
+
export function detectNotesMarkup(notes) {
|
|
34
|
+
const normalized = normalizeNewlines(notes);
|
|
35
|
+
const found = new Set();
|
|
36
|
+
for (const line of normalized.split("\n")) {
|
|
37
|
+
const trimmed = line.trimStart();
|
|
38
|
+
for (const rule of NOTES_MARKUP_RULES) {
|
|
39
|
+
if (rule.test(trimmed))
|
|
40
|
+
found.add(rule.label);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [...found];
|
|
44
|
+
}
|
|
8
45
|
function looksLikeHtml(text) {
|
|
9
46
|
return /<\/?[a-z][\s\S]*>/i.test(text.trim());
|
|
10
47
|
}
|
package/dist/textile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textile.js","sourceRoot":"","sources":["../src/textile.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"textile.js","sourceRoot":"","sources":["../src/textile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED