tachibot-mcp 2.19.2 → 2.19.3
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/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ All notable changes to TachiBot MCP will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.19.3] - 2026-03-21
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **Section header regex** — now matches mixed case + optional dashes (works across all providers, not just Gemini)
|
|
12
|
+
- **Planner 5/1 bug** — `parsePlanSteps` now matches `### Task [T-ID]:` format (was only matching `### Step N:`)
|
|
13
|
+
- **Planner mismatch warning** — surfaces parse failures instead of masking with `Math.max`
|
|
14
|
+
|
|
8
15
|
## [2.19.2] - 2026-03-21
|
|
9
16
|
|
|
10
17
|
### Added
|
|
@@ -1136,11 +1136,13 @@ function generateProgressBar(current, total) {
|
|
|
1136
1136
|
*/
|
|
1137
1137
|
function parsePlanSteps(plan) {
|
|
1138
1138
|
const steps = [];
|
|
1139
|
-
// Try
|
|
1139
|
+
// Try structured step/task headers (### Step 1:, ### Task T1:, 1., Step 1:)
|
|
1140
1140
|
const stepPatterns = [
|
|
1141
1141
|
/###\s*Step\s*\d+[:\s]+([^\n]+)([\s\S]*?)(?=###\s*Step|\n##[^#]|$)/gi,
|
|
1142
|
+
/###\s*Task\s*[^\n:]+:\s*([^\n]+)([\s\S]*?)(?=###\s*Task|\n##[^#]|$)/gi,
|
|
1142
1143
|
/^\s*(\d+)\.\s*([^\n]+)([\s\S]*?)(?=^\s*\d+\.|$)/gm,
|
|
1143
1144
|
/^Step\s*\d+[:\s]+([^\n]+)([\s\S]*?)(?=^Step\s*\d+|$)/gim,
|
|
1145
|
+
/^Task\s*[^\n:]+:\s*([^\n]+)([\s\S]*?)(?=^Task\s*\S+|$)/gim,
|
|
1144
1146
|
];
|
|
1145
1147
|
for (const pattern of stepPatterns) {
|
|
1146
1148
|
const matches = [...plan.matchAll(pattern)];
|
|
@@ -1253,6 +1255,10 @@ Evidence params (unblind the checkpoints):
|
|
|
1253
1255
|
// Parse plan into steps
|
|
1254
1256
|
const steps = parsePlanSteps(plan);
|
|
1255
1257
|
const totalSteps = steps.length;
|
|
1258
|
+
if (completed.length > totalSteps) {
|
|
1259
|
+
lines.push(`⚠️ Plan parse mismatch: ${completed.length} steps completed but only ${totalSteps} parsed. Plan format may have degraded.`);
|
|
1260
|
+
lines.push("");
|
|
1261
|
+
}
|
|
1256
1262
|
if (mode === "start") {
|
|
1257
1263
|
// ═══════════════════════════════════════════════════════════════
|
|
1258
1264
|
// START: Show parsed plan and devlog hint
|
|
@@ -452,8 +452,8 @@ export function stripMarkdown(md, options) {
|
|
|
452
452
|
text = text
|
|
453
453
|
// Markdown headers — strip # prefix (or bold if boldHeaders)
|
|
454
454
|
.replace(/^#{1,6}\s+(.+)$/gm, boldHeaders ? '\x1b[1m$1\x1b[0m' : '$1')
|
|
455
|
-
// Emoji section headers — e.g. "🧠 TYPE SAFETY ───" → rotating pastel bg
|
|
456
|
-
.replace(/^(.{1,2})\s+([A-Z][
|
|
455
|
+
// Emoji section headers — e.g. "🧠 TYPE SAFETY ───" or "🧠 Key Activities" → rotating pastel bg
|
|
456
|
+
.replace(/^(.{1,2})\s+([A-Z][\w\s&,()/-]{2,50}?)\s*─*$/gm, (_match, emoji, header) => {
|
|
457
457
|
if (!boldHeaders)
|
|
458
458
|
return `${emoji} ${header}`;
|
|
459
459
|
const pastels = [146, 182, 152, 187, 116, 180]; // lavender, mauve, powder blue, sand, mint, peach
|
package/package.json
CHANGED