@kontextmind/kxm 0.7.207 → 0.7.209
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/CHANGELOG.md +24 -4
- package/docs/reference/workflow-catalog.md +107 -106
- package/package.json +8 -8
- package/plugins/kxm/.claude-plugin/plugin.json +1 -1
- package/plugins/kxm/dist/cli.js +261 -19
- package/plugins/kxm/dist/extension.js +240 -5
- package/plugins/kxm/dist/mcp-server.js +1 -1
- package/plugins/kxm/package.json +1 -1
- package/plugins/kxm/src/init-guide-setup.ts +15 -14
- package/plugins/kxm/src/mcp-server.ts +1 -1
|
@@ -35592,6 +35592,15 @@ var McpServer = class {
|
|
|
35592
35592
|
this._promptHandlersInitialized = false;
|
|
35593
35593
|
this.server = new Server(serverInfo, options);
|
|
35594
35594
|
this._maxToolInputElements = resolveMaxToolInputElements(options?.maxToolInputElements);
|
|
35595
|
+
if (options?.capabilities?.tools) {
|
|
35596
|
+
this.setToolRequestHandlers();
|
|
35597
|
+
}
|
|
35598
|
+
if (options?.capabilities?.resources) {
|
|
35599
|
+
this.setResourceRequestHandlers();
|
|
35600
|
+
}
|
|
35601
|
+
if (options?.capabilities?.prompts) {
|
|
35602
|
+
this.setPromptRequestHandlers();
|
|
35603
|
+
}
|
|
35595
35604
|
}
|
|
35596
35605
|
/**
|
|
35597
35606
|
* Access experimental features.
|
|
@@ -41883,6 +41892,9 @@ function detectCapabilitiesFromEnvironment(tmuxForwardsHyperlink) {
|
|
|
41883
41892
|
if (termProgram === "herdr") {
|
|
41884
41893
|
return { images: "kitty", trueColor: hasTrueColorHint, hyperlinks: true };
|
|
41885
41894
|
}
|
|
41895
|
+
if (termProgram === "rex") {
|
|
41896
|
+
return { images: "kitty", trueColor: true, hyperlinks: true };
|
|
41897
|
+
}
|
|
41886
41898
|
if (process.env.KITTY_WINDOW_ID || termProgram === "kitty") {
|
|
41887
41899
|
return { images: "kitty", trueColor: true, hyperlinks: true };
|
|
41888
41900
|
}
|
|
@@ -42249,6 +42261,26 @@ var TuiBase = class _TuiBase extends Container {
|
|
|
42249
42261
|
}
|
|
42250
42262
|
afterTerminalStop(_options) {
|
|
42251
42263
|
}
|
|
42264
|
+
/** Mode resets written before the terminal's own resets when the process exits without stop(). */
|
|
42265
|
+
getExitRestorePrefix() {
|
|
42266
|
+
return `${this.terminalColorSchemeNotificationsEnabled ? "\x1B[?2031l" : ""}\x1B[?25h`;
|
|
42267
|
+
}
|
|
42268
|
+
/** Mode resets written after the terminal's own resets when the process exits without stop(). */
|
|
42269
|
+
getExitRestoreSuffix() {
|
|
42270
|
+
return "";
|
|
42271
|
+
}
|
|
42272
|
+
/**
|
|
42273
|
+
* Last-resort restore for exit paths that skip stop(), e.g. a direct process.exit() (#11170).
|
|
42274
|
+
* Hard kills and native aborts run no JavaScript and cannot be covered.
|
|
42275
|
+
*/
|
|
42276
|
+
exitRestoreHandler = () => {
|
|
42277
|
+
if (this.stopped)
|
|
42278
|
+
return;
|
|
42279
|
+
try {
|
|
42280
|
+
this.terminal.restoreOnExit?.(this.getExitRestorePrefix(), this.getExitRestoreSuffix());
|
|
42281
|
+
} catch {
|
|
42282
|
+
}
|
|
42283
|
+
};
|
|
42252
42284
|
get fullRedraws() {
|
|
42253
42285
|
return this.fullRedrawCount;
|
|
42254
42286
|
}
|
|
@@ -42565,6 +42597,8 @@ var TuiBase = class _TuiBase extends Container {
|
|
|
42565
42597
|
}
|
|
42566
42598
|
start() {
|
|
42567
42599
|
this.stopped = false;
|
|
42600
|
+
process.off("exit", this.exitRestoreHandler);
|
|
42601
|
+
process.on("exit", this.exitRestoreHandler);
|
|
42568
42602
|
this.beforeTerminalStart();
|
|
42569
42603
|
this.terminal.start((data) => this.handleTerminalInput(data), () => this.requestRender());
|
|
42570
42604
|
this.afterTerminalStart();
|
|
@@ -42607,6 +42641,7 @@ var TuiBase = class _TuiBase extends Container {
|
|
|
42607
42641
|
}
|
|
42608
42642
|
stop(options = {}) {
|
|
42609
42643
|
this.stopped = true;
|
|
42644
|
+
process.off("exit", this.exitRestoreHandler);
|
|
42610
42645
|
this.cancelRenderTimer();
|
|
42611
42646
|
if (this.terminalColorSchemeNotificationsEnabled) {
|
|
42612
42647
|
this.terminal.write("\x1B[?2031l");
|
|
@@ -44096,6 +44131,183 @@ var Input = class {
|
|
|
44096
44131
|
}
|
|
44097
44132
|
};
|
|
44098
44133
|
|
|
44134
|
+
// node_modules/marked-cjk-friendly/dist/index.js
|
|
44135
|
+
var CJK = "\\u1100-\\u11ff\\u20a9\\u2329-\\u232a\\u2630-\\u2637\\u268a-\\u268f\\u2e80-\\u2e99\\u2e9b-\\u2ef3\\u2f00-\\u2fd5\\u2ff0-\\u303e\\u3041-\\u3096\\u3099-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u3190-\\u31e5\\u31ef-\\u321e\\u3220-\\u3247\\u3250-\\ua48c\\ua490-\\ua4c6\\ua960-\\ua97c\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufaff\\ufe10-\\ufe19\\ufe30-\\ufe52\\ufe54-\\ufe66\\ufe68-\\ufe6b\\uff01-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\\uffe0-\\uffe6\\uffe8-\\uffee\\u{16fe0}-\\u{16fe4}\\u{16ff0}-\\u{16ff6}\\u{17000}-\\u{18cda}\\u{18cff}-\\u{18d20}\\u{18d80}-\\u{18df2}\\u{18e00}-\\u{19191}\\u{191a0}-\\u{191d2}\\u{1aff0}-\\u{1aff3}\\u{1aff5}-\\u{1affb}\\u{1affd}-\\u{1affe}\\u{1b000}-\\u{1b128}\\u{1b132}\\u{1b150}-\\u{1b152}\\u{1b155}\\u{1b164}-\\u{1b168}\\u{1b170}-\\u{1b2fb}\\u{1d300}-\\u{1d356}\\u{1d360}-\\u{1d376}\\u{1f1ae}\\u{1f200}\\u{1f202}\\u{1f210}-\\u{1f219}\\u{1f21b}-\\u{1f22e}\\u{1f230}-\\u{1f231}\\u{1f237}\\u{1f23b}\\u{1f240}-\\u{1f248}\\u{1f260}-\\u{1f265}\\u{1f7da}\\u{20000}-\\u{3fffd}";
|
|
44136
|
+
var cjkTest = new RegExp(`[${CJK}]`, "u");
|
|
44137
|
+
var punctuationCjk = new RegExp(`^((?![*_])[\\s\\p{P}\\p{S}${CJK}])`, "u");
|
|
44138
|
+
function buildRDelimAst(punct, punctSpace, notPunctSpace) {
|
|
44139
|
+
return new RegExp(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)${punct}(\\*+)(?=[\\s]|$)|${notPunctSpace}(\\*+)(?!\\*)(?=${punctSpace}|$)|(?!\\*)${punctSpace}(\\*+)(?=${notPunctSpace})|[\\s](\\*+)(?!\\*)(?=${punct})|(?!\\*)${punct}(\\*+)(?!\\*)(?=${punct})|${notPunctSpace}(\\*+)(?=${notPunctSpace})`, "gu");
|
|
44140
|
+
}
|
|
44141
|
+
function buildRDelimUnd(punct, punctSpace, notPunctSpace) {
|
|
44142
|
+
return new RegExp(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)${punct}(_+)(?=[\\s]|$)|${notPunctSpace}(_+)(?!_)(?=${punctSpace}|$)|(?!_)${punctSpace}(_+)(?=${notPunctSpace})|[\\s](_+)(?!_)(?=${punct})|(?!_)${punct}(_+)(?!_)(?=${punct})`, "gu");
|
|
44143
|
+
}
|
|
44144
|
+
function buildRDelimDel(punct, punctSpace, notPunctSpace) {
|
|
44145
|
+
return new RegExp(`^[^~]+(?=[^~])|(?!~)${punct}(~~?)(?=[\\s]|$)|${notPunctSpace}(~~?)(?!~)(?=${punctSpace}|$)|(?!~)${punctSpace}(~~?)(?=${notPunctSpace})|[\\s](~~?)(?!~)(?=${punct})|(?!~)${punct}(~~?)(?!~)(?=${punct})|${notPunctSpace}(~~?)(?=${notPunctSpace})`, "gu");
|
|
44146
|
+
}
|
|
44147
|
+
var cjkPunct = `[\\p{P}\\p{S}${CJK}]`;
|
|
44148
|
+
var cjkPunctSpace = `[\\s\\p{P}\\p{S}${CJK}]`;
|
|
44149
|
+
var cjkNotPunctSpace = `[^\\s\\p{P}\\p{S}${CJK}]`;
|
|
44150
|
+
var cjkDelPunct = `(?![*_])[\\p{P}\\p{S}${CJK}]`;
|
|
44151
|
+
var cjkDelPunctSpace = `(?![*_])[\\s\\p{P}\\p{S}${CJK}]`;
|
|
44152
|
+
var cjkDelNotPunctSpace = `(?:[^\\s\\p{P}\\p{S}${CJK}]|[*_])`;
|
|
44153
|
+
var cjkPunctGfm = `(?!~)[\\p{P}\\p{S}${CJK}]`;
|
|
44154
|
+
var cjkPunctSpaceGfm = `(?!~)[\\s\\p{P}\\p{S}${CJK}]`;
|
|
44155
|
+
var cjkNotPunctSpaceGfm = `(?:[^\\s\\p{P}\\p{S}${CJK}]|~)`;
|
|
44156
|
+
var emStrongRDelimAstCjk = buildRDelimAst(cjkPunct, cjkPunctSpace, cjkNotPunctSpace);
|
|
44157
|
+
var emStrongRDelimAstCjkGfm = buildRDelimAst(cjkPunctGfm, cjkPunctSpaceGfm, cjkNotPunctSpaceGfm);
|
|
44158
|
+
var emStrongRDelimUndCjk = buildRDelimUnd(cjkPunct, cjkPunctSpace, cjkNotPunctSpace);
|
|
44159
|
+
var delRDelimCjk = buildRDelimDel(cjkDelPunct, cjkDelPunctSpace, cjkDelNotPunctSpace);
|
|
44160
|
+
function isPrevCharCjk(prevChar, maskedSrc, src) {
|
|
44161
|
+
let prevIsCjk = punctuationCjk.test(prevChar);
|
|
44162
|
+
if (!prevIsCjk && prevChar) {
|
|
44163
|
+
const prevIdx = maskedSrc.length - src.length;
|
|
44164
|
+
if (prevIdx >= 1) {
|
|
44165
|
+
let idx = prevIdx - 1;
|
|
44166
|
+
let code = maskedSrc.charCodeAt(idx);
|
|
44167
|
+
if (code >= 65024 && code <= 65038 && idx >= 1) {
|
|
44168
|
+
idx--;
|
|
44169
|
+
code = maskedSrc.charCodeAt(idx);
|
|
44170
|
+
}
|
|
44171
|
+
if ((code & 64512) === 56320 && idx >= 1) {
|
|
44172
|
+
const cp = maskedSrc.codePointAt(idx - 1);
|
|
44173
|
+
if (cp !== void 0 && cp > 65535) {
|
|
44174
|
+
if (cp >= 917760 && cp <= 917999) prevIsCjk = true;
|
|
44175
|
+
else prevIsCjk = cjkTest.test(String.fromCodePoint(cp));
|
|
44176
|
+
}
|
|
44177
|
+
} else prevIsCjk = cjkTest.test(String.fromCharCode(code));
|
|
44178
|
+
}
|
|
44179
|
+
}
|
|
44180
|
+
return prevIsCjk;
|
|
44181
|
+
}
|
|
44182
|
+
function isCjkAdjacentToDelimiter(rightMatch, clippedMaskedSrc) {
|
|
44183
|
+
if (!(rightMatch[1] || rightMatch[2] || rightMatch[3] || rightMatch[4])) return false;
|
|
44184
|
+
const charBefore = String.fromCodePoint(rightMatch[0].codePointAt(0));
|
|
44185
|
+
const afterPos = rightMatch.index + rightMatch[0].length;
|
|
44186
|
+
const charAfter = afterPos < clippedMaskedSrc.length ? String.fromCodePoint(clippedMaskedSrc.codePointAt(afterPos)) : "";
|
|
44187
|
+
return cjkTest.test(charBefore) || cjkTest.test(charAfter);
|
|
44188
|
+
}
|
|
44189
|
+
function usesModernEmStrongLayout(match) {
|
|
44190
|
+
return match.length >= 5;
|
|
44191
|
+
}
|
|
44192
|
+
function hasEmStrongLeadContent(match) {
|
|
44193
|
+
return Boolean(match[1] || match[2] || match[3] || match[4]);
|
|
44194
|
+
}
|
|
44195
|
+
function isEmStrongUnderscoreWordChar(match) {
|
|
44196
|
+
return usesModernEmStrongLayout(match) ? Boolean(match[4]) : Boolean(match[3]);
|
|
44197
|
+
}
|
|
44198
|
+
function getEmStrongOpeningPunctuation(match) {
|
|
44199
|
+
if (usesModernEmStrongLayout(match)) return match[1] || match[3] || "";
|
|
44200
|
+
return match[1] || match[2] || "";
|
|
44201
|
+
}
|
|
44202
|
+
function markedCjkFriendly() {
|
|
44203
|
+
return { tokenizer: {
|
|
44204
|
+
emStrong(src, maskedSrc, prevChar = "") {
|
|
44205
|
+
const { rules } = this;
|
|
44206
|
+
const match = rules.inline.emStrongLDelim.exec(src);
|
|
44207
|
+
if (!match) return false;
|
|
44208
|
+
const modernEmStrongLayout = usesModernEmStrongLayout(match);
|
|
44209
|
+
if (modernEmStrongLayout && !hasEmStrongLeadContent(match)) return;
|
|
44210
|
+
if (isEmStrongUnderscoreWordChar(match) && prevChar.match(rules.other.unicodeAlphaNumeric)) return false;
|
|
44211
|
+
const nextChar = getEmStrongOpeningPunctuation(match);
|
|
44212
|
+
const prevIsCjk = isPrevCharCjk(prevChar, maskedSrc, src);
|
|
44213
|
+
if (!nextChar || !prevChar || rules.inline.punctuation.exec(prevChar) || prevIsCjk || cjkTest.test(nextChar)) {
|
|
44214
|
+
const lLength = [...match[0]].length - 1;
|
|
44215
|
+
let rDelim;
|
|
44216
|
+
let rLength;
|
|
44217
|
+
let delimTotal = lLength;
|
|
44218
|
+
let midDelimTotal = 0;
|
|
44219
|
+
const prevCharIsSameDelimiter = modernEmStrongLayout && prevChar === match[0][0];
|
|
44220
|
+
const isGfm = rules.inline.emStrongRDelimAst.source.includes("(?!~)");
|
|
44221
|
+
let endReg;
|
|
44222
|
+
if (match[0][0] === "*") endReg = isGfm ? emStrongRDelimAstCjkGfm : emStrongRDelimAstCjk;
|
|
44223
|
+
else endReg = emStrongRDelimUndCjk;
|
|
44224
|
+
endReg.lastIndex = 0;
|
|
44225
|
+
const clippedMaskedSrc = maskedSrc.slice(-1 * src.length + lLength);
|
|
44226
|
+
let rMatch;
|
|
44227
|
+
while ((rMatch = endReg.exec(clippedMaskedSrc)) != null) {
|
|
44228
|
+
rDelim = rMatch[1] || rMatch[2] || rMatch[3] || rMatch[4] || rMatch[5] || rMatch[6];
|
|
44229
|
+
if (!rDelim) continue;
|
|
44230
|
+
rLength = [...rDelim].length;
|
|
44231
|
+
const isCjkAdjacent = isCjkAdjacentToDelimiter(rMatch, clippedMaskedSrc);
|
|
44232
|
+
const isLeftOnly = Boolean(rMatch[3] || rMatch[4]);
|
|
44233
|
+
const isBoth = Boolean(rMatch[5] || rMatch[6]);
|
|
44234
|
+
if (isLeftOnly && !isCjkAdjacent) {
|
|
44235
|
+
delimTotal += rLength;
|
|
44236
|
+
continue;
|
|
44237
|
+
}
|
|
44238
|
+
if (isBoth || isCjkAdjacent) {
|
|
44239
|
+
if (lLength % 3 && !((lLength + rLength) % 3)) {
|
|
44240
|
+
midDelimTotal += rLength;
|
|
44241
|
+
continue;
|
|
44242
|
+
}
|
|
44243
|
+
if (prevCharIsSameDelimiter && isBoth) break;
|
|
44244
|
+
}
|
|
44245
|
+
delimTotal -= rLength;
|
|
44246
|
+
if (delimTotal > 0) continue;
|
|
44247
|
+
rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);
|
|
44248
|
+
const lastCharLength = rMatch[0].codePointAt(0) > 65535 ? 2 : 1;
|
|
44249
|
+
const raw = src.slice(0, lLength + rMatch.index + lastCharLength + rLength);
|
|
44250
|
+
if (Math.min(lLength, rLength) % 2) {
|
|
44251
|
+
const text2 = raw.slice(1, -1);
|
|
44252
|
+
return {
|
|
44253
|
+
type: "em",
|
|
44254
|
+
raw,
|
|
44255
|
+
text: text2,
|
|
44256
|
+
tokens: this.lexer.inlineTokens(text2)
|
|
44257
|
+
};
|
|
44258
|
+
}
|
|
44259
|
+
const text = raw.slice(2, -2);
|
|
44260
|
+
return {
|
|
44261
|
+
type: "strong",
|
|
44262
|
+
raw,
|
|
44263
|
+
text,
|
|
44264
|
+
tokens: this.lexer.inlineTokens(text)
|
|
44265
|
+
};
|
|
44266
|
+
}
|
|
44267
|
+
}
|
|
44268
|
+
},
|
|
44269
|
+
del(src, maskedSrc, prevChar = "") {
|
|
44270
|
+
const { rules } = this;
|
|
44271
|
+
const match = rules.inline.delLDelim.exec(src);
|
|
44272
|
+
if (!match) return false;
|
|
44273
|
+
const nextChar = match[1] || "";
|
|
44274
|
+
const prevIsCjk = isPrevCharCjk(prevChar, maskedSrc, src);
|
|
44275
|
+
if (!nextChar || !prevChar || rules.inline.punctuation.exec(prevChar) || prevIsCjk || cjkTest.test(nextChar)) {
|
|
44276
|
+
const lLength = [...match[0]].length - 1;
|
|
44277
|
+
let rDelim;
|
|
44278
|
+
let rLength;
|
|
44279
|
+
let delimTotal = lLength;
|
|
44280
|
+
delRDelimCjk.lastIndex = 0;
|
|
44281
|
+
const clippedMaskedSrc = maskedSrc.slice(-1 * src.length + lLength);
|
|
44282
|
+
let rMatch;
|
|
44283
|
+
while ((rMatch = delRDelimCjk.exec(clippedMaskedSrc)) != null) {
|
|
44284
|
+
rDelim = rMatch[1] || rMatch[2] || rMatch[3] || rMatch[4] || rMatch[5] || rMatch[6];
|
|
44285
|
+
if (!rDelim) continue;
|
|
44286
|
+
rLength = [...rDelim].length;
|
|
44287
|
+
if (rLength !== lLength) continue;
|
|
44288
|
+
const isCjkAdjacent = isCjkAdjacentToDelimiter(rMatch, clippedMaskedSrc);
|
|
44289
|
+
if ((rMatch[3] || rMatch[4]) && !isCjkAdjacent) {
|
|
44290
|
+
delimTotal += rLength;
|
|
44291
|
+
continue;
|
|
44292
|
+
}
|
|
44293
|
+
delimTotal -= rLength;
|
|
44294
|
+
if (delimTotal > 0) continue;
|
|
44295
|
+
rLength = Math.min(rLength, rLength + delimTotal);
|
|
44296
|
+
const lastCharLength = rMatch[0].codePointAt(0) > 65535 ? 2 : 1;
|
|
44297
|
+
const raw = src.slice(0, lLength + rMatch.index + lastCharLength + rLength);
|
|
44298
|
+
const text = raw.slice(lLength, -lLength);
|
|
44299
|
+
return {
|
|
44300
|
+
type: "del",
|
|
44301
|
+
raw,
|
|
44302
|
+
text,
|
|
44303
|
+
tokens: this.lexer.inlineTokens(text)
|
|
44304
|
+
};
|
|
44305
|
+
}
|
|
44306
|
+
}
|
|
44307
|
+
}
|
|
44308
|
+
} };
|
|
44309
|
+
}
|
|
44310
|
+
|
|
44099
44311
|
// node_modules/@earendil-works/pi-tui/dist/components/markdown.js
|
|
44100
44312
|
var STRICT_STRIKETHROUGH_REGEX = /^(~~)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/;
|
|
44101
44313
|
var StrictStrikethroughTokenizer = class extends y {
|
|
@@ -44166,21 +44378,32 @@ function tokenizeInlineLatex(source) {
|
|
|
44166
44378
|
const raw = source.slice(0, closingIndex + closing.length);
|
|
44167
44379
|
return { type: "latex", raw, text };
|
|
44168
44380
|
}
|
|
44381
|
+
var TABLE_DELIMITER_ROW_REGEX = /^ {0,3}\|?[ \t]*:?-+:?[ \t]*(?:\|[ \t]*:?-+:?[ \t]*)*\|?[ \t]*$/;
|
|
44382
|
+
function containsTableStart(source) {
|
|
44383
|
+
const lines = source.split("\n");
|
|
44384
|
+
for (let index = 0; index < lines.length - 1; index++) {
|
|
44385
|
+
const delimiterRow = lines[index + 1];
|
|
44386
|
+
if ((delimiterRow.includes("|") || lines[index].includes("|")) && TABLE_DELIMITER_ROW_REGEX.test(delimiterRow)) {
|
|
44387
|
+
return true;
|
|
44388
|
+
}
|
|
44389
|
+
}
|
|
44390
|
+
return false;
|
|
44391
|
+
}
|
|
44169
44392
|
function tokenizeBlockLatex(source) {
|
|
44170
44393
|
const dollarMatch = /^ {0,3}\$\$[ \t]*(?:\n)?([\s\S]*?)\$\$[ \t]*(?:\n|$)/.exec(source);
|
|
44171
|
-
if (dollarMatch?.[1]) {
|
|
44394
|
+
if (dollarMatch?.[1] && !containsTableStart(dollarMatch[1])) {
|
|
44172
44395
|
return { type: "latexBlock", raw: dollarMatch[0], text: dollarMatch[1].trim() };
|
|
44173
44396
|
}
|
|
44174
44397
|
const bracketMatch = /^ {0,3}\\\[[ \t]*(?:\n)?([\s\S]*?)\\\][ \t]*(?:\n|$)/.exec(source);
|
|
44175
|
-
if (bracketMatch?.[1]) {
|
|
44398
|
+
if (bracketMatch?.[1] && !containsTableStart(bracketMatch[1])) {
|
|
44176
44399
|
return { type: "latexBlock", raw: bracketMatch[0], text: bracketMatch[1].trim() };
|
|
44177
44400
|
}
|
|
44178
44401
|
const pendingBracket = /^ {0,3}\\\[[ \t]*(?:\n)?([\s\S]*)$/.exec(source);
|
|
44179
|
-
if (pendingBracket) {
|
|
44402
|
+
if (pendingBracket?.[1] && !containsTableStart(pendingBracket[1])) {
|
|
44180
44403
|
return { type: "latexBlock", raw: pendingBracket[0], text: pendingBracket[1], pending: true };
|
|
44181
44404
|
}
|
|
44182
44405
|
const pendingDollar = /^ {0,3}\$\$[ \t]*(?:\n)?([\s\S]*)$/.exec(source);
|
|
44183
|
-
if (pendingDollar?.[1] && looksLikePendingDollarMath(pendingDollar[1])) {
|
|
44406
|
+
if (pendingDollar?.[1] && looksLikePendingDollarMath(pendingDollar[1]) && !containsTableStart(pendingDollar[1])) {
|
|
44184
44407
|
return { type: "latexBlock", raw: pendingDollar[0], text: pendingDollar[1], pending: true };
|
|
44185
44408
|
}
|
|
44186
44409
|
return void 0;
|
|
@@ -44209,7 +44432,10 @@ var markdownParser = new Z();
|
|
|
44209
44432
|
markdownParser.setOptions({
|
|
44210
44433
|
tokenizer: new StrictStrikethroughTokenizer()
|
|
44211
44434
|
});
|
|
44212
|
-
markdownParser.use({
|
|
44435
|
+
markdownParser.use({
|
|
44436
|
+
tokenizer: { emStrong: markedCjkFriendly().tokenizer?.emStrong },
|
|
44437
|
+
extensions: [...LATEX_MARKDOWN_EXTENSIONS]
|
|
44438
|
+
});
|
|
44213
44439
|
|
|
44214
44440
|
// node_modules/@earendil-works/pi-tui/dist/components/scroll-view.js
|
|
44215
44441
|
var ScrollView = class extends Container {
|
|
@@ -45369,6 +45595,15 @@ var TuiAltScreen = class extends TuiBase {
|
|
|
45369
45595
|
this.savedCapabilities = void 0;
|
|
45370
45596
|
}
|
|
45371
45597
|
}
|
|
45598
|
+
getExitRestorePrefix() {
|
|
45599
|
+
const prefix = super.getExitRestorePrefix();
|
|
45600
|
+
if (!this.altScreenActive)
|
|
45601
|
+
return prefix;
|
|
45602
|
+
return `${END_SYNCHRONIZED_OUTPUT}${this.mouseEnabled ? DISABLE_MOUSE : ""}${ENABLE_AUTOWRAP}${prefix}`;
|
|
45603
|
+
}
|
|
45604
|
+
getExitRestoreSuffix() {
|
|
45605
|
+
return `${super.getExitRestoreSuffix()}${this.altScreenActive ? `${EXIT_ALT_SCREEN}\x1B[?25h` : ""}`;
|
|
45606
|
+
}
|
|
45372
45607
|
deleteKittyImages() {
|
|
45373
45608
|
return this.imageProtocol === "kitty" ? deleteAllKittyImages() : "";
|
|
45374
45609
|
}
|
|
@@ -25462,7 +25462,7 @@ function sessionTokenFixHint(policy) {
|
|
|
25462
25462
|
}
|
|
25463
25463
|
|
|
25464
25464
|
// plugins/kxm/src/mcp-server.ts
|
|
25465
|
-
var VERSION = "0.7.
|
|
25465
|
+
var VERSION = "0.7.209";
|
|
25466
25466
|
var CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
|
|
25467
25467
|
var inbox = /* @__PURE__ */ new Map();
|
|
25468
25468
|
var notifiedInbox = /* @__PURE__ */ new Set();
|
package/plugins/kxm/package.json
CHANGED
|
@@ -61,9 +61,10 @@ export interface GuideWorkflow {
|
|
|
61
61
|
const ADMITTED_GUIDE_BINDINGS: Readonly<Record<string, AgentBinding>> = Object.freeze({
|
|
62
62
|
"anthropic/claude-fable-5.1": { harness: "claude", provider: "anthropic", model: "fable" },
|
|
63
63
|
"anthropic/fable": { harness: "claude", provider: "anthropic", model: "fable" },
|
|
64
|
+
"openai/gpt-6.1-sol": { harness: "codex", provider: "openai", model: "gpt-6.1-sol" },
|
|
64
65
|
"openai/gpt-5.6-sol": { harness: "codex", provider: "openai", model: "gpt-5.6-sol" },
|
|
65
|
-
"x-ai/grok-4.
|
|
66
|
-
"xai/grok-4.
|
|
66
|
+
"x-ai/grok-4.7": { harness: "grok", provider: "xai", model: "grok-4.7" },
|
|
67
|
+
"xai/grok-4.7": { harness: "grok", provider: "xai", model: "grok-4.7" },
|
|
67
68
|
"qwen/qwen3.7-plus": { harness: "pi", provider: "openrouter", model: "qwen/qwen3.7-plus" },
|
|
68
69
|
});
|
|
69
70
|
|
|
@@ -84,7 +85,7 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
84
85
|
{ vendor: "anthropic", model: "claude-fable-5.1" },
|
|
85
86
|
{ vendor: "deepseek", model: "deepseek-v4-pro-0813" },
|
|
86
87
|
{ vendor: "openai", model: "gpt-6-astra-pro" },
|
|
87
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
88
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
88
89
|
{ vendor: "qwen", model: "qwen3.8-max-0902" },
|
|
89
90
|
],
|
|
90
91
|
},
|
|
@@ -107,11 +108,11 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
107
108
|
role: "scaffold-build-specialist",
|
|
108
109
|
domain: "Provisions monorepo workspace topologies, linters, Docker multi-stage builds, and CI pipelines.",
|
|
109
110
|
candidates: [
|
|
110
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
111
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
111
112
|
{ vendor: "mistralai", model: "devstral-2512" },
|
|
112
113
|
{ vendor: "qwen", model: "qwen3.7-plus" },
|
|
113
114
|
{ vendor: "openai", model: "gpt-5.3-codex" },
|
|
114
|
-
{ vendor: "
|
|
115
|
+
{ vendor: "qwen", model: "qwen3-coder" },
|
|
115
116
|
],
|
|
116
117
|
},
|
|
117
118
|
{
|
|
@@ -120,11 +121,11 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
120
121
|
role: "backend-data-implementer",
|
|
121
122
|
domain: "Implements domain entities, SQL queries/migrations, ORM persistence, concurrency primitives, and transactional boundaries.",
|
|
122
123
|
candidates: [
|
|
123
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
124
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
124
125
|
{ vendor: "qwen", model: "qwen3.7-plus" },
|
|
125
126
|
{ vendor: "deepseek", model: "deepseek-v4-pro-0813" },
|
|
126
127
|
{ vendor: "openai", model: "gpt-5.3-codex" },
|
|
127
|
-
{ vendor: "
|
|
128
|
+
{ vendor: "qwen", model: "qwen3-coder" },
|
|
128
129
|
],
|
|
129
130
|
},
|
|
130
131
|
{
|
|
@@ -135,7 +136,7 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
135
136
|
candidates: [
|
|
136
137
|
{ vendor: "anthropic", model: "claude-sonnet-5" },
|
|
137
138
|
{ vendor: "google", model: "gemini-3.8-flash" },
|
|
138
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
139
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
139
140
|
{ vendor: "bytedance-seed", model: "seed-2.0-code" },
|
|
140
141
|
{ vendor: "openai", model: "gpt-5.3-codex" },
|
|
141
142
|
],
|
|
@@ -147,7 +148,7 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
147
148
|
domain: "Wires external APIs, authentication flows (OAuth2/OIDC), webhook validation, cloud SDKs, and async worker queues.",
|
|
148
149
|
candidates: [
|
|
149
150
|
{ vendor: "openai", model: "gpt-5.6-sol" },
|
|
150
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
151
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
151
152
|
{ vendor: "qwen", model: "qwen3.7-plus" },
|
|
152
153
|
{ vendor: "deepseek", model: "deepseek-v4-pro-0813" },
|
|
153
154
|
{ vendor: "google", model: "gemini-3.8-flash" },
|
|
@@ -180,7 +181,7 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
180
181
|
role: "code-transform-implementer",
|
|
181
182
|
domain: "Executes surgical multi-file edits, applying design patterns while preserving comments and formatting.",
|
|
182
183
|
candidates: [
|
|
183
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
184
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
184
185
|
{ vendor: "relace", model: "relace-apply-3" },
|
|
185
186
|
{ vendor: "openai", model: "gpt-5.3-codex" },
|
|
186
187
|
{ vendor: "morph", model: "morph-v3-large" },
|
|
@@ -193,8 +194,8 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
193
194
|
role: "semantic-equivalence-verifier",
|
|
194
195
|
domain: "Critic-with-gate: reviews public contract compliance and behavioral equivalence; deterministic checks remain the fixed witness gate and are never delegated to an LLM.",
|
|
195
196
|
candidates: [
|
|
197
|
+
{ vendor: "openai", model: "gpt-6.1-sol" },
|
|
196
198
|
{ vendor: "openai", model: "gpt-5.6-sol" },
|
|
197
|
-
{ vendor: "openai", model: "o3-mini-high" },
|
|
198
199
|
{ vendor: "deepseek", model: "deepseek-v4-pro-0813" },
|
|
199
200
|
{ vendor: "anthropic", model: "claude-opus-5" },
|
|
200
201
|
{ vendor: "mistralai", model: "devstral-2512" },
|
|
@@ -252,7 +253,7 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
252
253
|
{ vendor: "openai", model: "gpt-6-astra-pro" },
|
|
253
254
|
{ vendor: "anthropic", model: "claude-fable-5.1" },
|
|
254
255
|
{ vendor: "qwen", model: "qwen3.8-2.4t-a95b" },
|
|
255
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
256
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
256
257
|
],
|
|
257
258
|
},
|
|
258
259
|
{
|
|
@@ -274,7 +275,7 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
274
275
|
role: "iac-cloud-topology-engineer",
|
|
275
276
|
domain: "Generates declarative Terraform/OpenTofu, Pulumi, Kubernetes CRDs, and VPC networking definitions.",
|
|
276
277
|
candidates: [
|
|
277
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
278
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
278
279
|
{ vendor: "qwen", model: "qwen3.7-plus" },
|
|
279
280
|
{ vendor: "openai", model: "gpt-5.3-codex" },
|
|
280
281
|
{ vendor: "google", model: "gemini-3.8-flash" },
|
|
@@ -334,7 +335,7 @@ export const GUIDE_WORKFLOWS: readonly GuideWorkflow[] = [
|
|
|
334
335
|
role: "documentation-writer",
|
|
335
336
|
domain: "Authors concise, accurate developer and operator documentation with clear terminology, correct command flags, and consistent formatting without marketing drift.",
|
|
336
337
|
candidates: [
|
|
337
|
-
{ vendor: "x-ai", model: "grok-4.
|
|
338
|
+
{ vendor: "x-ai", model: "grok-4.7" },
|
|
338
339
|
{ vendor: "qwen", model: "qwen3.7-plus" },
|
|
339
340
|
{ vendor: "anthropic", model: "claude-sonnet-5" },
|
|
340
341
|
{ vendor: "openai", model: "gpt-5.3-codex" },
|
|
@@ -11,7 +11,7 @@ import { deliverInboxNotification } from "./inbox.ts";
|
|
|
11
11
|
import type { HubEvent, MessageRecord } from "./protocol.ts";
|
|
12
12
|
import { sessionTokenFixHint } from "./session-token-hint.ts";
|
|
13
13
|
|
|
14
|
-
const VERSION = "0.7.
|
|
14
|
+
const VERSION = "0.7.209";
|
|
15
15
|
const CONFIGURE_PLUGIN = "/plugin configure kxm@kxm";
|
|
16
16
|
const inbox = new Map<string, MessageRecord>();
|
|
17
17
|
const notifiedInbox = new Set<string>();
|