@cat-factory/kernel 0.159.1 → 0.161.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/dist/domain/catalog.d.ts +10 -1
- package/dist/domain/catalog.d.ts.map +1 -1
- package/dist/domain/catalog.js +13 -2
- package/dist/domain/catalog.js.map +1 -1
- package/dist/domain/change-class.d.ts +60 -0
- package/dist/domain/change-class.d.ts.map +1 -0
- package/dist/domain/change-class.js +306 -0
- package/dist/domain/change-class.js.map +1 -0
- package/dist/domain/types.d.ts +1 -1
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/domain/workspace-cascade.d.ts +1 -1
- package/dist/domain/workspace-cascade.d.ts.map +1 -1
- package/dist/domain/workspace-cascade.js +2 -0
- package/dist/domain/workspace-cascade.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/ports/index.d.ts +4 -1
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +1 -0
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/issue-writeback.d.ts +55 -0
- package/dist/ports/issue-writeback.d.ts.map +1 -1
- package/dist/ports/merge-track-record-repositories.d.ts +45 -0
- package/dist/ports/merge-track-record-repositories.d.ts.map +1 -0
- package/dist/ports/merge-track-record-repositories.js +2 -0
- package/dist/ports/merge-track-record-repositories.js.map +1 -0
- package/dist/ports/repo-files.d.ts +10 -0
- package/dist/ports/repo-files.d.ts.map +1 -1
- package/dist/ports/review-question-post-repositories.d.ts +71 -0
- package/dist/ports/review-question-post-repositories.d.ts.map +1 -0
- package/dist/ports/review-question-post-repositories.js +33 -0
- package/dist/ports/review-question-post-repositories.js.map +1 -0
- package/dist/shared/host-markdown.logic.d.ts +51 -0
- package/dist/shared/host-markdown.logic.d.ts.map +1 -0
- package/dist/shared/host-markdown.logic.js +202 -0
- package/dist/shared/host-markdown.logic.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// The TEXT BOUNDARY for anything this platform writes onto a VCS/tracker host.
|
|
3
|
+
//
|
|
4
|
+
// A pull-request description — or an issue comment — is NOT an inert string sink. The host
|
|
5
|
+
// parses it: `#123` becomes an issue link, `@name` notifies a real person, a closing keyword
|
|
6
|
+
// in front of an issue reference CLOSES that issue when the PR merges, a newline ends a
|
|
7
|
+
// markdown table row, and an unbalanced code fence swallows everything after it — including
|
|
8
|
+
// the machine-readable JSON block external tooling ingests.
|
|
9
|
+
//
|
|
10
|
+
// Almost everything we splice into such a body is written by an agent or a human (a task
|
|
11
|
+
// title, a tester summary, a merge rationale, a provisioner's stderr, a requirements
|
|
12
|
+
// reviewer's question), so all of those are live hazards rather than theoretical ones: "This
|
|
13
|
+
// closes #42" is idiomatic prose for a merge rationale to emit, and it must not close issue
|
|
14
|
+
// 42; "@alice should decide the rounding rule" is idiomatic for a reviewer finding, and it
|
|
15
|
+
// must not page whoever owns that handle.
|
|
16
|
+
//
|
|
17
|
+
// This module is the single place that turns untrusted text into something safe to send to a
|
|
18
|
+
// host. It lives in kernel because it has TWO consumers on opposite sides of the architecture
|
|
19
|
+
// — the PR verification report (orchestration) and the tracker-issue writebacks
|
|
20
|
+
// (integrations) — and a second copy of these escapes is exactly how one of them would drift
|
|
21
|
+
// into notifying real accounts. It is deliberately separate from the composers (which decide
|
|
22
|
+
// WHAT to say) and from the marker splice in `domain/pr-report.ts` (which decides WHERE it
|
|
23
|
+
// goes).
|
|
24
|
+
//
|
|
25
|
+
// Adding a field to any host-bound body means picking one of {@link inline}, {@link cell} or
|
|
26
|
+
// {@link prose} for it — never a bare template hole.
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
/** Free-text prose (a tester summary, a merge rationale) is capped at this many characters. */
|
|
29
|
+
export const MAX_PROSE_CHARS = 4_000;
|
|
30
|
+
/** A single markdown table cell is capped at this many characters. */
|
|
31
|
+
export const MAX_CELL_CHARS = 300;
|
|
32
|
+
/** Any rendered list/table in the report is capped at this many rows. */
|
|
33
|
+
export const MAX_LIST_ITEMS = 50;
|
|
34
|
+
/**
|
|
35
|
+
* Hard ceiling for the whole rendered section. GitHub rejects a PR body over 65,536
|
|
36
|
+
* characters with a 422, and the body also has to hold the agent's own description, so the
|
|
37
|
+
* managed region keeps well clear of the limit. With the per-field caps above this is
|
|
38
|
+
* unreachable for realistic runs; it exists so that pathological data degrades visibly
|
|
39
|
+
* instead of making every publish fail silently forever.
|
|
40
|
+
*/
|
|
41
|
+
export const MAX_SECTION_CHARS = 50_000;
|
|
42
|
+
/** Marks where a value was cut, so a reader never mistakes a truncation for the whole story. */
|
|
43
|
+
const TRUNCATION_NOTE = '… (truncated)';
|
|
44
|
+
/**
|
|
45
|
+
* The host's closing keywords. A PR body carrying one of these in front of an issue reference
|
|
46
|
+
* closes that issue on merge — a side effect the engine must never trigger on the agent's
|
|
47
|
+
* behalf. Same list on GitHub and GitLab.
|
|
48
|
+
*/
|
|
49
|
+
const CLOSING_KEYWORDS = 'close[sd]?|closing|fix|fixe[sd]|fixing|resolve[sd]?|resolving|implement(?:s|ed)?|implementing';
|
|
50
|
+
/** An issue/MR URL on either host, in the form a closing keyword can reference. */
|
|
51
|
+
const ISSUE_URL = String.raw `https?://\S+?/(?:issues|-/issues|merge_requests|pull)/\d+`;
|
|
52
|
+
/**
|
|
53
|
+
* Every auto-linking trigger, in ONE alternation.
|
|
54
|
+
*
|
|
55
|
+
* Deliberately a single pass rather than chained `.replace()` calls: each escape EMITS a `#`,
|
|
56
|
+
* so a later rule would re-escape the output of an earlier one (`@` → `@` → `@`).
|
|
57
|
+
* One regex means the replacement text is never rescanned.
|
|
58
|
+
*/
|
|
59
|
+
const AUTO_LINK_TRIGGERS = new RegExp([
|
|
60
|
+
// A closing keyword in front of an issue/MR URL. The URL form survives the character
|
|
61
|
+
// escapes below (nothing in it is a trigger), so the KEYWORD is what gets defused.
|
|
62
|
+
String.raw `(?<keyword>\b(?:${CLOSING_KEYWORDS}))(?=\s*:?\s+${ISSUE_URL})`,
|
|
63
|
+
// `@name` / `@org/team` — a mention notifies a real account.
|
|
64
|
+
String.raw `(?<at>@(?=[A-Za-z0-9]))`,
|
|
65
|
+
// `#123` and `owner/repo#123` — an issue/PR cross-reference.
|
|
66
|
+
String.raw `(?<hash>#(?=\d))`,
|
|
67
|
+
// `!123` — GitLab's merge-request reference.
|
|
68
|
+
String.raw `(?<bang>!(?=\d))`,
|
|
69
|
+
].join('|'), 'gi');
|
|
70
|
+
/**
|
|
71
|
+
* Neutralise the host's auto-linking triggers in ONE line of untrusted text, leaving inline
|
|
72
|
+
* code spans alone (the host does not auto-link inside them, so escaping there would only
|
|
73
|
+
* show the reader a literal `#`).
|
|
74
|
+
*
|
|
75
|
+
* The escapes are numeric HTML entities, which render as the original character but are
|
|
76
|
+
* invisible to the reference parser — so the reader sees exactly what the agent wrote while
|
|
77
|
+
* the mention/close side effects are defused.
|
|
78
|
+
*/
|
|
79
|
+
function inertLine(line) {
|
|
80
|
+
return mapOutsideCodeSpans(line, (text) => text.replace(AUTO_LINK_TRIGGERS, (match, ...args) => {
|
|
81
|
+
const groups = args[args.length - 1];
|
|
82
|
+
// Entity-escaping the FIRST character is enough to break the parser's match while
|
|
83
|
+
// rendering identically — which matters most for the keyword, whose remaining letters
|
|
84
|
+
// are ordinary prose the reader should still see.
|
|
85
|
+
return `&#${match.charCodeAt(0)};${groups.keyword ? match.slice(1) : ''}`;
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Apply `fn` to the parts of `line` that are NOT inline code spans. Code spans are matched by
|
|
90
|
+
* a backtick run and its matching closer, which is CommonMark's rule and — more to the point
|
|
91
|
+
* — the rule the host renderer applies when deciding where to auto-link.
|
|
92
|
+
*/
|
|
93
|
+
function mapOutsideCodeSpans(line, fn) {
|
|
94
|
+
const out = [];
|
|
95
|
+
let index = 0;
|
|
96
|
+
const span = /(`+)[\s\S]*?\1/g;
|
|
97
|
+
let match;
|
|
98
|
+
while ((match = span.exec(line)) !== null) {
|
|
99
|
+
out.push(fn(line.slice(index, match.index)), match[0]);
|
|
100
|
+
index = match.index + match[0].length;
|
|
101
|
+
}
|
|
102
|
+
return out.join('') + fn(line.slice(index));
|
|
103
|
+
}
|
|
104
|
+
/** A line that opens or closes a fenced code block, with the fence it uses. */
|
|
105
|
+
function fenceAt(line) {
|
|
106
|
+
const match = /^ {0,3}(`{3,}|~{3,})(.*)$/.exec(line);
|
|
107
|
+
if (!match)
|
|
108
|
+
return null;
|
|
109
|
+
const fence = match[1];
|
|
110
|
+
// A ``` fence's info string may not contain a backtick (CommonMark), which is what stops an
|
|
111
|
+
// inline span from being read as a fence.
|
|
112
|
+
if (fence.startsWith('`') && match[2].includes('`'))
|
|
113
|
+
return null;
|
|
114
|
+
return { char: fence[0], length: fence.length, info: match[2].trim().length > 0 };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Walk `lines`, tracking fenced-code state, and hand each line to `visit` together with
|
|
118
|
+
* whether it sits INSIDE a fenced block. Returns the fence still open at the end, if any.
|
|
119
|
+
*
|
|
120
|
+
* One shared walker so the two things that care about fences — leaving code untouched, and
|
|
121
|
+
* closing what the text left open — can never disagree about where a block starts and ends.
|
|
122
|
+
*/
|
|
123
|
+
function walkFences(lines, visit) {
|
|
124
|
+
let open = null;
|
|
125
|
+
for (const line of lines) {
|
|
126
|
+
const fence = fenceAt(line);
|
|
127
|
+
// The fence line itself belongs to the code block, so it is never rewritten.
|
|
128
|
+
visit(line, open !== null || fence !== null);
|
|
129
|
+
if (!fence)
|
|
130
|
+
continue;
|
|
131
|
+
if (!open)
|
|
132
|
+
open = { char: fence.char, length: fence.length };
|
|
133
|
+
else if (fence.char === open.char && fence.length >= open.length && !fence.info)
|
|
134
|
+
open = null;
|
|
135
|
+
}
|
|
136
|
+
return open;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Close any code fence the text leaves open.
|
|
140
|
+
*
|
|
141
|
+
* An unbalanced fence in agent prose — an interrupted transcript, a truncated tool dump — would
|
|
142
|
+
* otherwise swallow every section rendered after it, including the fenced JSON block that is
|
|
143
|
+
* the report's machine-readable contract. Balancing preserves the agent's own formatting
|
|
144
|
+
* (unlike escaping the fences) while guaranteeing the enclosing document stays well-formed.
|
|
145
|
+
*/
|
|
146
|
+
export function balanceFences(text) {
|
|
147
|
+
const open = walkFences(text.split('\n'), () => { });
|
|
148
|
+
return open ? `${text}\n${open.char.repeat(open.length)}` : text;
|
|
149
|
+
}
|
|
150
|
+
/** Cut `value` to `max` characters, marking the cut. Prefers a line boundary when one is near. */
|
|
151
|
+
function truncate(value, max) {
|
|
152
|
+
if (value.length <= max)
|
|
153
|
+
return value;
|
|
154
|
+
const head = value.slice(0, max);
|
|
155
|
+
const lastNewline = head.lastIndexOf('\n');
|
|
156
|
+
const body = lastNewline > max * 0.6 ? head.slice(0, lastNewline) : head;
|
|
157
|
+
return `${body.trimEnd()}\n\n${TRUNCATION_NOTE}`;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Render untrusted multi-line prose as a safe markdown block: auto-link triggers defused,
|
|
161
|
+
* length capped, and any code fence the value leaves open closed again.
|
|
162
|
+
*
|
|
163
|
+
* `max` lets a caller with a tighter budget than a PR body (a tracker comment renders many of
|
|
164
|
+
* these into one payload, and Jira rejects an oversized comment outright) cut to ITS limit —
|
|
165
|
+
* the cut happens BEFORE the escapes, so an entity can never be sliced in half.
|
|
166
|
+
*/
|
|
167
|
+
export function prose(value, max = MAX_PROSE_CHARS) {
|
|
168
|
+
const capped = truncate(value.replace(/\r\n?/g, '\n'), max);
|
|
169
|
+
const rewritten = [];
|
|
170
|
+
const open = walkFences(capped.split('\n'), (line, insideFence) => {
|
|
171
|
+
rewritten.push(insideFence ? line : inertLine(line));
|
|
172
|
+
});
|
|
173
|
+
const text = rewritten.join('\n');
|
|
174
|
+
return open ? `${text}\n${open.char.repeat(open.length)}` : text;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Render untrusted text as ONE markdown table cell: newlines folded to `<br>` (a raw newline
|
|
178
|
+
* ends the row and spills the rest of the value into the document as loose prose), pipes
|
|
179
|
+
* escaped so a value cannot open a new column, auto-link triggers defused, and the whole thing
|
|
180
|
+
* capped so a stack trace cannot dominate the table.
|
|
181
|
+
*/
|
|
182
|
+
export function cell(value) {
|
|
183
|
+
const flattened = truncate(value.replace(/\r\n?/g, '\n'), MAX_CELL_CHARS)
|
|
184
|
+
.replaceAll('|', '\\|')
|
|
185
|
+
.replace(/\n+/g, '<br>');
|
|
186
|
+
return inertLine(flattened);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Render untrusted text INLINE (a title, a label — not a table cell, so pipes are harmless).
|
|
190
|
+
* Newlines are folded to spaces because the surrounding line has its own meaning. `max` caps
|
|
191
|
+
* to a caller's own budget, before the escapes, exactly as in {@link prose}.
|
|
192
|
+
*/
|
|
193
|
+
export function inline(value, max = MAX_CELL_CHARS) {
|
|
194
|
+
return inertLine(truncate(value.replace(/\s+/g, ' '), max));
|
|
195
|
+
}
|
|
196
|
+
/** Cap a list at {@link MAX_LIST_ITEMS}, returning the kept rows plus how many were dropped. */
|
|
197
|
+
export function capList(items) {
|
|
198
|
+
if (items.length <= MAX_LIST_ITEMS)
|
|
199
|
+
return { items: [...items], dropped: 0 };
|
|
200
|
+
return { items: items.slice(0, MAX_LIST_ITEMS), dropped: items.length - MAX_LIST_ITEMS };
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=host-markdown.logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-markdown.logic.js","sourceRoot":"","sources":["../../src/shared/host-markdown.logic.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/kernel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.161.0",
|
|
4
4
|
"description": "Shared vocabulary, pure logic, and port interfaces for the Agent Architecture Board.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ai": "^7.0.35",
|
|
28
28
|
"yaml": "^2.9.0",
|
|
29
|
-
"@cat-factory/contracts": "0.
|
|
29
|
+
"@cat-factory/contracts": "0.167.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@vitest/coverage-v8": "^4.1.10",
|