gm-plugkit 2.0.1231 → 2.0.1233
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/package.json +1 -1
- package/plugkit-wasm-wrapper.js +51 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm-plugkit",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1233",
|
|
4
4
|
"description": "Bootstrap and daemon-spawn tool for gm plugkit binary. Downloads the correct platform binary, verifies SHA256, and starts the spool watcher daemon. Includes plugkit-wasm-wrapper for WASM-based spool watching.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
package/plugkit-wasm-wrapper.js
CHANGED
|
@@ -477,6 +477,11 @@ function readCurrentSess() {
|
|
|
477
477
|
return __sessCache.value;
|
|
478
478
|
}
|
|
479
479
|
|
|
480
|
+
// iter13: dedup set for host_vec_embed.failed event emissions — we only
|
|
481
|
+
// want one event per distinct failure-reason per process, not one per
|
|
482
|
+
// embed call.
|
|
483
|
+
const _hostVecEmbedFailKeys = new Set();
|
|
484
|
+
|
|
480
485
|
function logEvent(sub, event, fields) {
|
|
481
486
|
if (process.env.GM_LOG_DISABLE) return;
|
|
482
487
|
try {
|
|
@@ -913,7 +918,17 @@ function getOrCreateBrowserSession(cwd, claudeSessionId, pw) {
|
|
|
913
918
|
'--no-default-browser-check',
|
|
914
919
|
'--disable-features=Translate',
|
|
915
920
|
];
|
|
916
|
-
|
|
921
|
+
// Chrome itself is GUI but its remote-debugging port creates conhost
|
|
922
|
+
// when launched from a console-attached parent. CREATE_NO_WINDOW
|
|
923
|
+
// (0x08000000) | DETACHED_PROCESS (0x00000008) prevents the helper
|
|
924
|
+
// processes (sandbox, GPU, network service) from allocating consoles.
|
|
925
|
+
// Inherited by the entire chrome subprocess tree on Windows.
|
|
926
|
+
const child = spawn(chrome, chromeArgs, {
|
|
927
|
+
detached: true,
|
|
928
|
+
stdio: 'ignore',
|
|
929
|
+
windowsHide: true,
|
|
930
|
+
...(process.platform === 'win32' ? { creationFlags: 0x08000000 | 0x00000008 } : {}),
|
|
931
|
+
});
|
|
917
932
|
const chromePid = child.pid;
|
|
918
933
|
child.unref();
|
|
919
934
|
const deadline = Date.now() + 10000;
|
|
@@ -1461,13 +1476,42 @@ function makeHostFunctions(instanceRef) {
|
|
|
1461
1476
|
if (!text) return 0n;
|
|
1462
1477
|
const body = JSON.stringify({ model: EMBED_MODEL_DEFAULT, input: text });
|
|
1463
1478
|
const result = spawnSync(process.execPath, ['-e', `
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1479
|
+
(async () => {
|
|
1480
|
+
try {
|
|
1481
|
+
const r = await fetch('${ACPTOAPI_URL}/v1/embeddings', { method: 'POST', headers: { 'content-type': 'application/json' }, body: ${JSON.stringify(body)} });
|
|
1482
|
+
if (!r.ok) {
|
|
1483
|
+
const errBody = await r.text();
|
|
1484
|
+
throw new Error('HTTP ' + r.status + ': ' + errBody.slice(0, 300));
|
|
1485
|
+
}
|
|
1486
|
+
const t = await r.text();
|
|
1487
|
+
process.stdout.write(t);
|
|
1488
|
+
} catch (e) {
|
|
1489
|
+
process.stderr.write('embed-error: ' + e.message);
|
|
1490
|
+
process.exit(2);
|
|
1491
|
+
}
|
|
1492
|
+
})();
|
|
1493
|
+
`], { encoding: 'utf-8', timeout: 30000, windowsHide: true });
|
|
1469
1494
|
if (result.status !== 0 || !result.stdout) {
|
|
1470
|
-
|
|
1495
|
+
// iter13: failures here had been silently returning 0n which surfaced
|
|
1496
|
+
// as auto_recall.count=0 with no diagnostic. acptoapi 1.0.102+
|
|
1497
|
+
// returns 410 Gone on /v1/embeddings (embeddings now live in
|
|
1498
|
+
// rs-learn natively). Log a structured event so the failure is
|
|
1499
|
+
// visible in gmsniff. Dedup on the (status, reason) key so we
|
|
1500
|
+
// don't spam — only the first occurrence per process per reason.
|
|
1501
|
+
const reason = (result.stderr || 'no response').slice(0, 300);
|
|
1502
|
+
const key = String(result.status) + '|' + reason;
|
|
1503
|
+
if (!_hostVecEmbedFailKeys.has(key)) {
|
|
1504
|
+
_hostVecEmbedFailKeys.add(key);
|
|
1505
|
+
try {
|
|
1506
|
+
logEvent('plugkit', 'host_vec_embed.failed', {
|
|
1507
|
+
status: result.status,
|
|
1508
|
+
reason,
|
|
1509
|
+
text_len: text.length,
|
|
1510
|
+
hint: 'acptoapi 1.0.102+ returns 410 on /v1/embeddings — embeddings are served by rs-learn natively. Once rs-learn-embed sidecar is wired into host_vec_embed, this event will stop firing.',
|
|
1511
|
+
});
|
|
1512
|
+
} catch (_) {}
|
|
1513
|
+
}
|
|
1514
|
+
console.error('[plugkit-wasm] host_vec_embed FAILED:', reason);
|
|
1471
1515
|
return 0n;
|
|
1472
1516
|
}
|
|
1473
1517
|
return writeWasmStr(instanceRef.value, result.stdout);
|