bigpowers 2.88.7 → 2.88.9
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/.gemini/extensions/bigpowers/gemini-extension.json +1 -1
- package/.pi/package.json +1 -1
- package/CHANGELOG.md +14 -0
- package/package.json +1 -1
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
- package/scripts/lib/golden-suite-gates.sh +1 -0
- package/scripts/mcp-server.js +34 -14
package/.pi/package.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.88.9](https://github.com/danielvm-git/bigpowers/compare/v2.88.8...v2.88.9) (2026-09-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **gates:** wire test-resolve-repo-root.sh into golden suite (g13 orphan) ([#133](https://github.com/danielvm-git/bigpowers/issues/133)) ([de9a38e](https://github.com/danielvm-git/bigpowers/commit/de9a38ebda27fb964e9cfc6232d51458640d9a03)), closes [#131](https://github.com/danielvm-git/bigpowers/issues/131) [#130](https://github.com/danielvm-git/bigpowers/issues/130)
|
|
7
|
+
|
|
8
|
+
## [2.88.8](https://github.com/danielvm-git/bigpowers/compare/v2.88.7...v2.88.8) (2026-09-21)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **mcp:** switch stdio transport to newline-delimited JSON per MCP spec ([#132](https://github.com/danielvm-git/bigpowers/issues/132)) ([2e07b81](https://github.com/danielvm-git/bigpowers/commit/2e07b81e6a19ee8cad12001114193e22cf224511)), closes [#131](https://github.com/danielvm-git/bigpowers/issues/131)
|
|
14
|
+
|
|
1
15
|
## [2.88.7](https://github.com/danielvm-git/bigpowers/compare/v2.88.6...v2.88.7) (2026-09-17)
|
|
2
16
|
|
|
3
17
|
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -55,6 +55,7 @@ GOLDEN_GATES=(
|
|
|
55
55
|
"adapter-render:bash scripts/test-adapter-render.sh:false"
|
|
56
56
|
"adapters:bash scripts/test-adapters.sh:false"
|
|
57
57
|
# Previously orphaned: present in scripts/ but reachable from no gate.
|
|
58
|
+
"resolve-repo-root:bash scripts/test-resolve-repo-root.sh:false"
|
|
58
59
|
"tombstone-mechanism:bash scripts/test-tombstone-mechanism.sh:false"
|
|
59
60
|
"trace-strict:bash scripts/test-trace-strict.sh:false"
|
|
60
61
|
"trace-matrix-size:bash scripts/test-trace-matrix-size.sh:false"
|
package/scripts/mcp-server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// bigpowers MCP server — exposes 68 skills as MCP tools via stdio transport
|
|
3
|
-
// Zero dependencies — raw JSON-RPC over stdio
|
|
3
|
+
// Zero dependencies — raw JSON-RPC over stdio (newline-delimited, per MCP spec)
|
|
4
4
|
|
|
5
5
|
'use strict';
|
|
6
6
|
|
|
@@ -154,6 +154,7 @@ const TOOLS = {
|
|
|
154
154
|
// ─── MCP stdio transport ──────────────────────────────────────────────────────
|
|
155
155
|
|
|
156
156
|
let inputBuffer = Buffer.alloc(0);
|
|
157
|
+
let useLspFraming = false;
|
|
157
158
|
|
|
158
159
|
process.stdin.on('data', chunk => {
|
|
159
160
|
inputBuffer = Buffer.concat([inputBuffer, chunk]);
|
|
@@ -163,28 +164,47 @@ process.stdin.on('data', chunk => {
|
|
|
163
164
|
process.stdin.on('end', () => process.exit(0));
|
|
164
165
|
|
|
165
166
|
function processBuffer() {
|
|
166
|
-
while (
|
|
167
|
-
|
|
168
|
-
if (
|
|
167
|
+
while (inputBuffer.length) {
|
|
168
|
+
// Legacy: LSP-style Content-Length framing (kept for backwards compatibility)
|
|
169
|
+
if (/^\s*Content-Length:/i.test(inputBuffer.toString('utf8', 0, Math.min(inputBuffer.length, 20)))) {
|
|
170
|
+
const headerEnd = inputBuffer.indexOf('\r\n\r\n');
|
|
171
|
+
if (headerEnd === -1) break;
|
|
169
172
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
+
const header = inputBuffer.slice(0, headerEnd).toString();
|
|
174
|
+
const match = header.match(/Content-Length:\s*(\d+)/i);
|
|
175
|
+
if (!match) { inputBuffer = inputBuffer.slice(headerEnd + 4); continue; }
|
|
173
176
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
+
const contentLength = parseInt(match[1], 10);
|
|
178
|
+
const bodyStart = headerEnd + 4;
|
|
179
|
+
if (inputBuffer.length < bodyStart + contentLength) break;
|
|
177
180
|
|
|
178
|
-
|
|
179
|
-
|
|
181
|
+
const body = inputBuffer.slice(bodyStart, bodyStart + contentLength).toString();
|
|
182
|
+
inputBuffer = inputBuffer.slice(bodyStart + contentLength);
|
|
180
183
|
|
|
181
|
-
|
|
184
|
+
useLspFraming = true;
|
|
185
|
+
try { handleMessage(JSON.parse(body)); } catch (_) {}
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// MCP stdio standard: newline-delimited JSON
|
|
190
|
+
const nl = inputBuffer.indexOf('\n');
|
|
191
|
+
if (nl === -1) break;
|
|
192
|
+
|
|
193
|
+
const line = inputBuffer.slice(0, nl).toString().trim();
|
|
194
|
+
inputBuffer = inputBuffer.slice(nl + 1);
|
|
195
|
+
|
|
196
|
+
useLspFraming = false;
|
|
197
|
+
if (line) try { handleMessage(JSON.parse(line)); } catch (_) {}
|
|
182
198
|
}
|
|
183
199
|
}
|
|
184
200
|
|
|
185
201
|
function send(msg) {
|
|
186
202
|
const body = JSON.stringify(msg);
|
|
187
|
-
|
|
203
|
+
if (useLspFraming) {
|
|
204
|
+
process.stdout.write(`Content-Length: ${Buffer.byteLength(body, 'utf8')}\r\n\r\n${body}`);
|
|
205
|
+
} else {
|
|
206
|
+
process.stdout.write(body + '\n');
|
|
207
|
+
}
|
|
188
208
|
}
|
|
189
209
|
|
|
190
210
|
function handleInitialize(id) {
|