@wrongstack/tools 0.295.0 → 0.296.2
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/auto-proceed-loop-guard.d.ts +98 -0
- package/dist/auto-proceed-loop-guard.d.ts.map +1 -1
- package/dist/auto-proceed-loop-guard.js +119 -1
- package/dist/auto-proceed-loop-guard.js.map +2 -2
- package/dist/bash.js +92 -41
- package/dist/bash.js.map +2 -2
- package/dist/browser/index.js +17 -7
- package/dist/browser/index.js.map +2 -2
- package/dist/browser/network-guard-proxy.d.ts.map +1 -1
- package/dist/builtin.d.ts +2 -2
- package/dist/builtin.d.ts.map +1 -1
- package/dist/builtin.js +9158 -7302
- package/dist/builtin.js.map +4 -4
- package/dist/codebase-index/background-indexer.d.ts +28 -2
- package/dist/codebase-index/background-indexer.d.ts.map +1 -1
- package/dist/codebase-index/codebase-index-tool.d.ts.map +1 -1
- package/dist/codebase-index/dead-code-scan.d.ts +77 -0
- package/dist/codebase-index/dead-code-scan.d.ts.map +1 -0
- package/dist/codebase-index/generic-parser.d.ts.map +1 -1
- package/dist/codebase-index/index-service.d.ts +4 -3
- package/dist/codebase-index/index-service.d.ts.map +1 -1
- package/dist/codebase-index/index.d.ts +11 -8
- package/dist/codebase-index/index.d.ts.map +1 -1
- package/dist/codebase-index/index.js +5048 -3582
- package/dist/codebase-index/index.js.map +4 -4
- package/dist/codebase-index/indexer.d.ts +2 -0
- package/dist/codebase-index/indexer.d.ts.map +1 -1
- package/dist/codebase-index/parser-dispatch.d.ts +8 -0
- package/dist/codebase-index/parser-dispatch.d.ts.map +1 -0
- package/dist/codebase-index/project-server-cache.d.ts +11 -0
- package/dist/codebase-index/project-server-cache.d.ts.map +1 -0
- package/dist/codebase-index/project-server-client.d.ts +74 -0
- package/dist/codebase-index/project-server-client.d.ts.map +1 -0
- package/dist/codebase-index/project-server-endpoint.d.ts +24 -0
- package/dist/codebase-index/project-server-endpoint.d.ts.map +1 -0
- package/dist/codebase-index/project-server-protocol.d.ts +88 -0
- package/dist/codebase-index/project-server-protocol.d.ts.map +1 -0
- package/dist/codebase-index/project-server.d.ts +11 -0
- package/dist/codebase-index/project-server.d.ts.map +1 -0
- package/dist/codebase-index/project-server.js +5061 -0
- package/dist/codebase-index/project-server.js.map +7 -0
- package/dist/codebase-index/refs-extractor.d.ts +1 -0
- package/dist/codebase-index/refs-extractor.d.ts.map +1 -1
- package/dist/codebase-index/schema.d.ts +11 -0
- package/dist/codebase-index/schema.d.ts.map +1 -1
- package/dist/codebase-index/sqlite-runtime.d.ts +9 -0
- package/dist/codebase-index/sqlite-runtime.d.ts.map +1 -0
- package/dist/codebase-index/ts-parser.d.ts +5 -1
- package/dist/codebase-index/ts-parser.d.ts.map +1 -1
- package/dist/codebase-index/worker-protocol.d.ts +19 -1
- package/dist/codebase-index/worker-protocol.d.ts.map +1 -1
- package/dist/codebase-index/worker.js +3869 -3423
- package/dist/codebase-index/worker.js.map +4 -4
- package/dist/codebase-index/writer-admin.d.ts +16 -0
- package/dist/codebase-index/writer-admin.d.ts.map +1 -0
- package/dist/codebase-index/writer-bulk-insert.d.ts +25 -0
- package/dist/codebase-index/writer-bulk-insert.d.ts.map +1 -0
- package/dist/codebase-index/writer-graph-helpers.d.ts +52 -0
- package/dist/codebase-index/writer-graph-helpers.d.ts.map +1 -0
- package/dist/codebase-index/writer-graph-reader.d.ts +11 -0
- package/dist/codebase-index/writer-graph-reader.d.ts.map +1 -0
- package/dist/codebase-index/writer-helpers.d.ts +15 -0
- package/dist/codebase-index/writer-helpers.d.ts.map +1 -0
- package/dist/codebase-index/writer-pragmas.d.ts +3 -0
- package/dist/codebase-index/writer-pragmas.d.ts.map +1 -0
- package/dist/codebase-index/writer-ref-mapper.d.ts +11 -0
- package/dist/codebase-index/writer-ref-mapper.d.ts.map +1 -0
- package/dist/codebase-index/writer-schema.d.ts +7 -0
- package/dist/codebase-index/writer-schema.d.ts.map +1 -0
- package/dist/codebase-index/writer-search-helpers.d.ts +28 -0
- package/dist/codebase-index/writer-search-helpers.d.ts.map +1 -0
- package/dist/codebase-index/writer-store-pool.d.ts +45 -0
- package/dist/codebase-index/writer-store-pool.d.ts.map +1 -0
- package/dist/codebase-index/writer.d.ts +53 -88
- package/dist/codebase-index/writer.d.ts.map +1 -1
- package/dist/exec.js +92 -41
- package/dist/exec.js.map +2 -2
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +80 -30
- package/dist/glob.js.map +4 -4
- package/dist/grep.d.ts.map +1 -1
- package/dist/grep.js +87 -20
- package/dist/grep.js.map +4 -4
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9610 -7755
- package/dist/index.js.map +4 -4
- package/dist/kanban-board-inputs.d.ts +34 -0
- package/dist/kanban-board-inputs.d.ts.map +1 -0
- package/dist/kanban-decomposition-actions.d.ts +4 -0
- package/dist/kanban-decomposition-actions.d.ts.map +1 -0
- package/dist/kanban-detail-actions.d.ts +3 -0
- package/dist/kanban-detail-actions.d.ts.map +1 -0
- package/dist/kanban-evidence-bridge.d.ts +21 -0
- package/dist/kanban-evidence-bridge.d.ts.map +1 -0
- package/dist/kanban-presence.d.ts +10 -0
- package/dist/kanban-presence.d.ts.map +1 -0
- package/dist/kanban-split-task-handler.d.ts +6 -0
- package/dist/kanban-split-task-handler.d.ts.map +1 -0
- package/dist/kanban-task-inputs.d.ts +73 -0
- package/dist/kanban-task-inputs.d.ts.map +1 -0
- package/dist/kanban-tool-results.d.ts +14 -0
- package/dist/kanban-tool-results.d.ts.map +1 -0
- package/dist/kanban-tool-schema.d.ts +5 -0
- package/dist/kanban-tool-schema.d.ts.map +1 -0
- package/dist/kanban-tool-types.d.ts +135 -0
- package/dist/kanban-tool-types.d.ts.map +1 -0
- package/dist/kanban.d.ts +2 -130
- package/dist/kanban.d.ts.map +1 -1
- package/dist/kanban.js +944 -582
- package/dist/kanban.js.map +4 -4
- package/dist/pack.js +9157 -7302
- package/dist/pack.js.map +4 -4
- package/dist/plan.js +2 -2
- package/dist/plan.js.map +2 -2
- package/dist/process-registry-persistent.d.ts +1 -0
- package/dist/process-registry-persistent.d.ts.map +1 -1
- package/dist/ps-slash.js +92 -41
- package/dist/ps-slash.js.map +2 -2
- package/dist/replace.js +8 -0
- package/dist/replace.js.map +2 -2
- package/dist/session-kanban.d.ts.map +1 -1
- package/dist/session-kanban.js +15 -20
- package/dist/session-kanban.js.map +2 -2
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +48 -6
- package/dist/task.js.map +2 -2
- package/dist/todo.d.ts.map +1 -1
- package/dist/todo.js +47 -5
- package/dist/todo.js.map +2 -2
- package/dist/tool-tier.js +9159 -7303
- package/dist/tool-tier.js.map +4 -4
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +2 -14
- package/dist/tree.js.map +2 -2
- package/dist/win32.d.ts +10 -0
- package/dist/win32.d.ts.map +1 -0
- package/dist/win32.js +67 -0
- package/dist/win32.js.map +7 -0
- package/package.json +9 -5
- package/dist/shim/node-sqlite.d.ts +0 -3
- package/dist/shim/node-sqlite.d.ts.map +0 -1
package/dist/exec.js
CHANGED
|
@@ -1206,6 +1206,7 @@ function emitStructuredLog(level, event, message, error) {
|
|
|
1206
1206
|
}
|
|
1207
1207
|
var HEARTBEAT_INTERVAL_MS = 5e3;
|
|
1208
1208
|
var STALE_THRESHOLD_MS = 3e4;
|
|
1209
|
+
var LOCK_STALE_MS = 3e4;
|
|
1209
1210
|
var LOCKFILE = ".process-registry.lock";
|
|
1210
1211
|
function generateInstanceId() {
|
|
1211
1212
|
const hostname2 = os2.hostname();
|
|
@@ -1234,21 +1235,26 @@ async function acquireLock(lockfilePath, timeoutMs = 5e3) {
|
|
|
1234
1235
|
try {
|
|
1235
1236
|
const content = await fs2.readFile(lockfilePath, "utf-8");
|
|
1236
1237
|
const parts = content.split(":");
|
|
1237
|
-
const
|
|
1238
|
-
const
|
|
1239
|
-
|
|
1238
|
+
const lockPid = parseInt(parts[0] ?? "0", 10);
|
|
1239
|
+
const lockTs = Number(parts[parts.length - 1]);
|
|
1240
|
+
const staleByAge = Number.isFinite(lockTs) && Date.now() - lockTs > LOCK_STALE_MS;
|
|
1241
|
+
let holderDead = false;
|
|
1242
|
+
if (process.platform !== "win32" && Number.isFinite(lockPid) && lockPid > 0) {
|
|
1240
1243
|
try {
|
|
1241
1244
|
process.kill(lockPid, 0);
|
|
1242
1245
|
} catch {
|
|
1243
|
-
|
|
1244
|
-
continue;
|
|
1246
|
+
holderDead = true;
|
|
1245
1247
|
}
|
|
1246
1248
|
}
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1249
|
+
if (holderDead || staleByAge) {
|
|
1250
|
+
await fs2.unlink(lockfilePath).catch(() => {
|
|
1251
|
+
});
|
|
1252
|
+
continue;
|
|
1251
1253
|
}
|
|
1254
|
+
} catch {
|
|
1255
|
+
await fs2.unlink(lockfilePath).catch(() => {
|
|
1256
|
+
});
|
|
1257
|
+
continue;
|
|
1252
1258
|
}
|
|
1253
1259
|
await new Promise((r) => setTimeout(r, 100));
|
|
1254
1260
|
continue;
|
|
@@ -1258,25 +1264,35 @@ async function acquireLock(lockfilePath, timeoutMs = 5e3) {
|
|
|
1258
1264
|
}
|
|
1259
1265
|
throw new Error(`Failed to acquire lock after ${timeoutMs}ms`);
|
|
1260
1266
|
}
|
|
1267
|
+
function freshRegistryData() {
|
|
1268
|
+
return {
|
|
1269
|
+
version: 1,
|
|
1270
|
+
instances: /* @__PURE__ */ new Map(),
|
|
1271
|
+
protectedPatterns: ["wrongstack", "node"],
|
|
1272
|
+
lastCleanup: Date.now()
|
|
1273
|
+
};
|
|
1274
|
+
}
|
|
1261
1275
|
async function readRegistryFile(filePath) {
|
|
1276
|
+
let content;
|
|
1262
1277
|
try {
|
|
1263
|
-
|
|
1264
|
-
const parsed = JSON.parse(content);
|
|
1265
|
-
if (parsed.instances && Array.isArray(parsed.instances)) {
|
|
1266
|
-
parsed.instances = new Map(parsed.instances);
|
|
1267
|
-
}
|
|
1268
|
-
return parsed;
|
|
1278
|
+
content = await fs2.readFile(filePath, "utf-8");
|
|
1269
1279
|
} catch (err) {
|
|
1270
|
-
if (isNodeError(err) && err.code === "ENOENT")
|
|
1271
|
-
return {
|
|
1272
|
-
version: 1,
|
|
1273
|
-
instances: /* @__PURE__ */ new Map(),
|
|
1274
|
-
protectedPatterns: ["wrongstack", "node"],
|
|
1275
|
-
lastCleanup: Date.now()
|
|
1276
|
-
};
|
|
1277
|
-
}
|
|
1280
|
+
if (isNodeError(err) && err.code === "ENOENT") return freshRegistryData();
|
|
1278
1281
|
throw err;
|
|
1279
1282
|
}
|
|
1283
|
+
try {
|
|
1284
|
+
const parsed = JSON.parse(content);
|
|
1285
|
+
if (!parsed || typeof parsed !== "object") return freshRegistryData();
|
|
1286
|
+
const base = freshRegistryData();
|
|
1287
|
+
return {
|
|
1288
|
+
version: 1,
|
|
1289
|
+
instances: Array.isArray(parsed.instances) ? new Map(parsed.instances) : base.instances,
|
|
1290
|
+
protectedPatterns: Array.isArray(parsed.protectedPatterns) ? parsed.protectedPatterns : base.protectedPatterns,
|
|
1291
|
+
lastCleanup: typeof parsed.lastCleanup === "number" ? parsed.lastCleanup : base.lastCleanup
|
|
1292
|
+
};
|
|
1293
|
+
} catch {
|
|
1294
|
+
return freshRegistryData();
|
|
1295
|
+
}
|
|
1280
1296
|
}
|
|
1281
1297
|
async function writeRegistryFile(filePath, data) {
|
|
1282
1298
|
const tmpPath = `${filePath}.tmp.${process.pid}`;
|
|
@@ -1300,7 +1316,11 @@ var PersistentProcessRegistry = class {
|
|
|
1300
1316
|
cleanupRunning = false;
|
|
1301
1317
|
isShuttingDown = false;
|
|
1302
1318
|
onProcessExit = () => {
|
|
1303
|
-
|
|
1319
|
+
this.runInBackground(
|
|
1320
|
+
this.syncToPersistent(),
|
|
1321
|
+
"process_registry.exit_sync_failed",
|
|
1322
|
+
"PersistentProcessRegistry: exit sync failed"
|
|
1323
|
+
);
|
|
1304
1324
|
};
|
|
1305
1325
|
constructor(baseRegistry) {
|
|
1306
1326
|
this.instanceId = generateInstanceId();
|
|
@@ -1320,6 +1340,11 @@ var PersistentProcessRegistry = class {
|
|
|
1320
1340
|
if (!isNodeError(err) || err.code !== "EEXIST") throw err;
|
|
1321
1341
|
}
|
|
1322
1342
|
}
|
|
1343
|
+
runInBackground(operation, event, message) {
|
|
1344
|
+
void operation.catch((err) => {
|
|
1345
|
+
emitStructuredLog("warn", event, message, err);
|
|
1346
|
+
});
|
|
1347
|
+
}
|
|
1323
1348
|
/**
|
|
1324
1349
|
* Start the heartbeat and periodic cleanup tasks.
|
|
1325
1350
|
*/
|
|
@@ -1352,26 +1377,34 @@ var PersistentProcessRegistry = class {
|
|
|
1352
1377
|
this.cleanupInterval = null;
|
|
1353
1378
|
}
|
|
1354
1379
|
process.off("exit", this.onProcessExit);
|
|
1355
|
-
|
|
1380
|
+
this.runInBackground(
|
|
1381
|
+
this.syncToPersistent(),
|
|
1382
|
+
"process_registry.stop_sync_failed",
|
|
1383
|
+
"PersistentProcessRegistry: stop sync failed"
|
|
1384
|
+
);
|
|
1356
1385
|
}
|
|
1357
1386
|
/**
|
|
1358
1387
|
* Register the main WrongStack process as protected.
|
|
1359
1388
|
*/
|
|
1360
1389
|
registerMainProcess() {
|
|
1361
1390
|
const mainPid = process.pid;
|
|
1362
|
-
this.
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1391
|
+
this.runInBackground(
|
|
1392
|
+
this.updatePersistentEntry({
|
|
1393
|
+
pid: mainPid,
|
|
1394
|
+
name: "wrongstack-main",
|
|
1395
|
+
command: process.argv.slice(0, 3).join(" "),
|
|
1396
|
+
startedAt: Date.now(),
|
|
1397
|
+
lastHeartbeat: Date.now(),
|
|
1398
|
+
instanceId: this.instanceId,
|
|
1399
|
+
hostname: os2.hostname(),
|
|
1400
|
+
protected: true,
|
|
1401
|
+
spawnMode: "main",
|
|
1402
|
+
parentPid: process.ppid,
|
|
1403
|
+
platform: process.platform
|
|
1404
|
+
}),
|
|
1405
|
+
"process_registry.main_register_failed",
|
|
1406
|
+
"PersistentProcessRegistry: failed to register main process"
|
|
1407
|
+
);
|
|
1375
1408
|
}
|
|
1376
1409
|
/**
|
|
1377
1410
|
* Register a spawned child process with the persistent registry.
|
|
@@ -1394,7 +1427,11 @@ var PersistentProcessRegistry = class {
|
|
|
1394
1427
|
if (sessionId) {
|
|
1395
1428
|
entry.sessionId = sessionId;
|
|
1396
1429
|
}
|
|
1397
|
-
this.
|
|
1430
|
+
this.runInBackground(
|
|
1431
|
+
this.updatePersistentEntry(entry),
|
|
1432
|
+
"process_registry.child_register_failed",
|
|
1433
|
+
"PersistentProcessRegistry: failed to register child process"
|
|
1434
|
+
);
|
|
1398
1435
|
}
|
|
1399
1436
|
/**
|
|
1400
1437
|
* Update or add an entry in the persistent registry.
|
|
@@ -1438,14 +1475,28 @@ var PersistentProcessRegistry = class {
|
|
|
1438
1475
|
heartbeat() {
|
|
1439
1476
|
if (this.isShuttingDown || this.heartbeatRunning) return;
|
|
1440
1477
|
this.heartbeatRunning = true;
|
|
1441
|
-
void this.syncToPersistent().
|
|
1478
|
+
void this.syncToPersistent().catch((err) => {
|
|
1479
|
+
emitStructuredLog(
|
|
1480
|
+
"warn",
|
|
1481
|
+
"process_registry.heartbeat_failed",
|
|
1482
|
+
"PersistentProcessRegistry: heartbeat failed",
|
|
1483
|
+
err
|
|
1484
|
+
);
|
|
1485
|
+
}).finally(() => {
|
|
1442
1486
|
this.heartbeatRunning = false;
|
|
1443
1487
|
});
|
|
1444
1488
|
}
|
|
1445
1489
|
cleanup() {
|
|
1446
1490
|
if (this.isShuttingDown || this.cleanupRunning) return;
|
|
1447
1491
|
this.cleanupRunning = true;
|
|
1448
|
-
void this.cleanupStaleEntries().
|
|
1492
|
+
void this.cleanupStaleEntries().catch((err) => {
|
|
1493
|
+
emitStructuredLog(
|
|
1494
|
+
"warn",
|
|
1495
|
+
"process_registry.periodic_cleanup_failed",
|
|
1496
|
+
"PersistentProcessRegistry: periodic cleanup failed",
|
|
1497
|
+
err
|
|
1498
|
+
);
|
|
1499
|
+
}).finally(() => {
|
|
1449
1500
|
this.cleanupRunning = false;
|
|
1450
1501
|
});
|
|
1451
1502
|
}
|