instar 0.23.9 → 0.23.10
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/cli.js +0 -0
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +42 -9
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +16 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/core/ResponseReviewGate.d.ts +182 -0
- package/dist/core/ResponseReviewGate.d.ts.map +1 -0
- package/dist/core/ResponseReviewGate.js +956 -0
- package/dist/core/ResponseReviewGate.js.map +1 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +8 -0
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/knowledge/TreeGenerator.d.ts.map +1 -1
- package/dist/knowledge/TreeGenerator.js +13 -0
- package/dist/knowledge/TreeGenerator.js.map +1 -1
- package/dist/knowledge/TreeTriage.js +1 -1
- package/dist/knowledge/TreeTriage.js.map +1 -1
- package/dist/lifeline/TelegramLifeline.d.ts +9 -0
- package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
- package/dist/lifeline/TelegramLifeline.js +123 -10
- package/dist/lifeline/TelegramLifeline.js.map +1 -1
- package/dist/memory/MemoryIndex.d.ts.map +1 -1
- package/dist/memory/MemoryIndex.js +1 -0
- package/dist/memory/MemoryIndex.js.map +1 -1
- package/dist/memory/SemanticMemory.d.ts +5 -0
- package/dist/memory/SemanticMemory.d.ts.map +1 -1
- package/dist/memory/SemanticMemory.js +13 -0
- package/dist/memory/SemanticMemory.js.map +1 -1
- package/dist/memory/TopicMemory.d.ts +5 -0
- package/dist/memory/TopicMemory.d.ts.map +1 -1
- package/dist/memory/TopicMemory.js +13 -0
- package/dist/memory/TopicMemory.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +7 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +53 -14
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/threadline/relay/RegistryStore.d.ts.map +1 -1
- package/dist/threadline/relay/RegistryStore.js +1 -0
- package/dist/threadline/relay/RegistryStore.js.map +1 -1
- package/dist/tunnel/TunnelManager.d.ts +22 -1
- package/dist/tunnel/TunnelManager.d.ts.map +1 -1
- package/dist/tunnel/TunnelManager.js +118 -1
- package/dist/tunnel/TunnelManager.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +5 -5
- package/upgrades/0.23.10.md +19 -0
- package/upgrades/0.23.8.md +38 -0
- package/upgrades/0.23.9.md +21 -24
- package/upgrades/NEXT.md +35 -0
package/dist/cli.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwPH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA8gCD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwPH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA8gCD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAk3EtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
|
package/dist/commands/server.js
CHANGED
|
@@ -2511,6 +2511,15 @@ export async function startServer(options) {
|
|
|
2511
2511
|
const sleepWakeDetector = new SleepWakeDetector();
|
|
2512
2512
|
sleepWakeDetector.on('wake', async (event) => {
|
|
2513
2513
|
console.log(`[SleepWake] Wake detected after ~${event.sleepDurationSeconds}s sleep`);
|
|
2514
|
+
// Checkpoint SQLite WAL files to flush stale locks from pre-sleep connections
|
|
2515
|
+
try {
|
|
2516
|
+
topicMemory?.checkpoint();
|
|
2517
|
+
}
|
|
2518
|
+
catch { /* non-critical */ }
|
|
2519
|
+
try {
|
|
2520
|
+
semanticMemory?.checkpoint();
|
|
2521
|
+
}
|
|
2522
|
+
catch { /* non-critical */ }
|
|
2514
2523
|
// Re-validate tmux sessions
|
|
2515
2524
|
try {
|
|
2516
2525
|
const tmuxPath = detectTmuxPath();
|
|
@@ -2523,17 +2532,24 @@ export async function startServer(options) {
|
|
|
2523
2532
|
catch {
|
|
2524
2533
|
console.warn('[SleepWake] tmux check failed after wake');
|
|
2525
2534
|
}
|
|
2526
|
-
// Restart tunnel if configured
|
|
2535
|
+
// Restart tunnel if configured — use forceStop to handle zombie cloudflared
|
|
2536
|
+
// processes that may be hung after sleep. Race with a 15s overall timeout
|
|
2537
|
+
// to prevent the wake handler itself from blocking indefinitely.
|
|
2527
2538
|
if (tunnel) {
|
|
2528
2539
|
try {
|
|
2529
|
-
await
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2540
|
+
await Promise.race([
|
|
2541
|
+
(async () => {
|
|
2542
|
+
await tunnel.forceStop(5000);
|
|
2543
|
+
const tunnelUrl = await tunnel.start();
|
|
2544
|
+
console.log(`[SleepWake] Tunnel restarted: ${tunnelUrl}`);
|
|
2545
|
+
// Re-broadcast dashboard URL after tunnel restart (quick tunnels get new URL)
|
|
2546
|
+
if (telegram && tunnelUrl) {
|
|
2547
|
+
const tunnelType = config.tunnel?.type || 'quick';
|
|
2548
|
+
await telegram.broadcastDashboardUrl(tunnelUrl, tunnelType).catch(() => { });
|
|
2549
|
+
}
|
|
2550
|
+
})(),
|
|
2551
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Tunnel restart timed out after 15s')), 15_000)),
|
|
2552
|
+
]);
|
|
2537
2553
|
}
|
|
2538
2554
|
catch (err) {
|
|
2539
2555
|
console.error(`[SleepWake] Tunnel restart failed:`, err);
|
|
@@ -3109,6 +3125,7 @@ export async function startServer(options) {
|
|
|
3109
3125
|
}
|
|
3110
3126
|
// Start tunnel AFTER server is listening (with retry on failure)
|
|
3111
3127
|
if (tunnel) {
|
|
3128
|
+
tunnel.enableAutoReconnect();
|
|
3112
3129
|
const maxRetries = 5;
|
|
3113
3130
|
let tunnelStarted = false;
|
|
3114
3131
|
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
@@ -3319,6 +3336,22 @@ export async function startServer(options) {
|
|
|
3319
3336
|
};
|
|
3320
3337
|
process.on('SIGINT', shutdown);
|
|
3321
3338
|
process.on('SIGTERM', shutdown);
|
|
3339
|
+
// Last-resort SQLite cleanup — if the process crashes from an uncaught exception
|
|
3340
|
+
// (e.g., cloudflared crash cascade during sleep/wake), close databases to prevent
|
|
3341
|
+
// the "mutex lock failed" error on next start. This doesn't prevent the crash,
|
|
3342
|
+
// but ensures the next boot is clean.
|
|
3343
|
+
process.on('uncaughtException', (err) => {
|
|
3344
|
+
console.error('[FATAL] Uncaught exception — closing databases before crash:', err.message);
|
|
3345
|
+
try {
|
|
3346
|
+
topicMemory?.close();
|
|
3347
|
+
}
|
|
3348
|
+
catch { /* best effort */ }
|
|
3349
|
+
try {
|
|
3350
|
+
semanticMemory?.close();
|
|
3351
|
+
}
|
|
3352
|
+
catch { /* best effort */ }
|
|
3353
|
+
process.exit(1);
|
|
3354
|
+
});
|
|
3322
3355
|
// Wire the ForegroundRestartWatcher to the graceful shutdown function.
|
|
3323
3356
|
// This ensures auto-update restarts close all resources (especially SQLite
|
|
3324
3357
|
// databases) before exiting, preventing the "mutex lock failed" crash.
|