instar 0.28.44 → 0.28.46

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.
Files changed (83) hide show
  1. package/dashboard/index.html +179 -0
  2. package/dist/cli.js +43 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/ledgerCleanup.d.ts +25 -0
  5. package/dist/commands/ledgerCleanup.d.ts.map +1 -0
  6. package/dist/commands/ledgerCleanup.js +71 -0
  7. package/dist/commands/ledgerCleanup.js.map +1 -0
  8. package/dist/commands/migrate.d.ts +33 -0
  9. package/dist/commands/migrate.d.ts.map +1 -0
  10. package/dist/commands/migrate.js +63 -0
  11. package/dist/commands/migrate.js.map +1 -0
  12. package/dist/commands/server.d.ts.map +1 -1
  13. package/dist/commands/server.js +50 -1
  14. package/dist/commands/server.js.map +1 -1
  15. package/dist/core/BackupManager.d.ts +9 -1
  16. package/dist/core/BackupManager.d.ts.map +1 -1
  17. package/dist/core/BackupManager.js +57 -2
  18. package/dist/core/BackupManager.js.map +1 -1
  19. package/dist/core/CoherenceGate.d.ts +20 -0
  20. package/dist/core/CoherenceGate.d.ts.map +1 -1
  21. package/dist/core/CoherenceGate.js +29 -1
  22. package/dist/core/CoherenceGate.js.map +1 -1
  23. package/dist/core/DispatchExecutor.d.ts +19 -0
  24. package/dist/core/DispatchExecutor.d.ts.map +1 -1
  25. package/dist/core/DispatchExecutor.js +24 -1
  26. package/dist/core/DispatchExecutor.js.map +1 -1
  27. package/dist/core/FileClassifier.d.ts.map +1 -1
  28. package/dist/core/FileClassifier.js +5 -0
  29. package/dist/core/FileClassifier.js.map +1 -1
  30. package/dist/core/LedgerParaphraseDetector.d.ts +54 -0
  31. package/dist/core/LedgerParaphraseDetector.d.ts.map +1 -0
  32. package/dist/core/LedgerParaphraseDetector.js +103 -0
  33. package/dist/core/LedgerParaphraseDetector.js.map +1 -0
  34. package/dist/core/MessagingToneGate.d.ts +24 -0
  35. package/dist/core/MessagingToneGate.d.ts.map +1 -1
  36. package/dist/core/MessagingToneGate.js +12 -1
  37. package/dist/core/MessagingToneGate.js.map +1 -1
  38. package/dist/core/MultiMachineCoordinator.d.ts +9 -0
  39. package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
  40. package/dist/core/MultiMachineCoordinator.js +29 -0
  41. package/dist/core/MultiMachineCoordinator.js.map +1 -1
  42. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  43. package/dist/core/PostUpdateMigrator.js +19 -0
  44. package/dist/core/PostUpdateMigrator.js.map +1 -1
  45. package/dist/core/SharedStateLedger.d.ts +99 -89
  46. package/dist/core/SharedStateLedger.d.ts.map +1 -1
  47. package/dist/core/SharedStateLedger.js +564 -137
  48. package/dist/core/SharedStateLedger.js.map +1 -1
  49. package/dist/core/registerLedgerEmitters.d.ts +26 -0
  50. package/dist/core/registerLedgerEmitters.d.ts.map +1 -0
  51. package/dist/core/registerLedgerEmitters.js +121 -0
  52. package/dist/core/registerLedgerEmitters.js.map +1 -0
  53. package/dist/core/types.d.ts +74 -0
  54. package/dist/core/types.d.ts.map +1 -1
  55. package/dist/messaging/MessageRouter.d.ts.map +1 -1
  56. package/dist/messaging/MessageRouter.js +5 -2
  57. package/dist/messaging/MessageRouter.js.map +1 -1
  58. package/dist/messaging/SessionSummarySentinel.d.ts +7 -1
  59. package/dist/messaging/SessionSummarySentinel.d.ts.map +1 -1
  60. package/dist/messaging/SessionSummarySentinel.js +11 -3
  61. package/dist/messaging/SessionSummarySentinel.js.map +1 -1
  62. package/dist/server/AgentServer.d.ts +2 -0
  63. package/dist/server/AgentServer.d.ts.map +1 -1
  64. package/dist/server/AgentServer.js +1 -0
  65. package/dist/server/AgentServer.js.map +1 -1
  66. package/dist/server/routes.d.ts +2 -0
  67. package/dist/server/routes.d.ts.map +1 -1
  68. package/dist/server/routes.js +76 -0
  69. package/dist/server/routes.js.map +1 -1
  70. package/dist/threadline/ThreadlineRouter.d.ts +30 -1
  71. package/dist/threadline/ThreadlineRouter.d.ts.map +1 -1
  72. package/dist/threadline/ThreadlineRouter.js +68 -2
  73. package/dist/threadline/ThreadlineRouter.js.map +1 -1
  74. package/package.json +1 -1
  75. package/src/data/builtin-manifest.json +93 -93
  76. package/upgrades/{0.28.44.md → 0.28.45.md} +1 -1
  77. package/upgrades/0.28.46.md +27 -0
  78. package/upgrades/side-effects/0.28.44.md +36 -0
  79. package/upgrades/side-effects/0.28.45.md +138 -0
  80. package/upgrades/side-effects/echo-prevention-self-session-exclusion.md +176 -0
  81. package/upgrades/side-effects/integrated-being-ledger-v1.md +138 -0
  82. package/upgrades/0.28.41.md +0 -41
  83. package/upgrades/0.28.42.md +0 -25
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledgerCleanup.d.ts","sourceRoot":"","sources":["../../src/commands/ledgerCleanup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1D;AAED,wBAAsB,aAAa,CACjC,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiEpE"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * `instar ledger cleanup` — deletes orphaned Integrated-Being ledger files
3
+ * when the feature is disabled. Safe to run when enabled — it refuses to
4
+ * delete active ledger data unless --force is passed.
5
+ *
6
+ * Spec: docs/specs/integrated-being-ledger-v1.md §"Rollback plan".
7
+ */
8
+ import fs from 'node:fs';
9
+ import path from 'node:path';
10
+ import pc from 'picocolors';
11
+ import { loadConfig } from '../core/Config.js';
12
+ export async function ledgerCleanup(opts = {}) {
13
+ const cfg = opts._configOverride ?? (() => {
14
+ const c = loadConfig(opts.dir);
15
+ const enabled = c.integratedBeing?.enabled;
16
+ return {
17
+ stateDir: c.stateDir,
18
+ // Default: enabled when undefined
19
+ enabled: enabled === undefined ? true : enabled !== false,
20
+ };
21
+ })();
22
+ // Refuse to run when feature is enabled unless --force
23
+ if (cfg.enabled && !opts.force) {
24
+ console.log(pc.yellow('Integrated-Being ledger is ENABLED. Refusing to delete active ledger data.'));
25
+ console.log(pc.yellow('Either disable it in config (integratedBeing.enabled=false) and re-run, or pass --force.'));
26
+ return { deleted: [], skipped: [], reason: 'feature still enabled' };
27
+ }
28
+ const patterns = [
29
+ 'shared-state.jsonl',
30
+ 'shared-state.jsonl.stats.json',
31
+ 'shared-state.jsonl.prune-lastrun',
32
+ ];
33
+ const stateDir = cfg.stateDir;
34
+ const toDelete = [];
35
+ try {
36
+ const entries = fs.readdirSync(stateDir);
37
+ for (const name of entries) {
38
+ if (patterns.includes(name) || /^shared-state\.jsonl\.\d+$/.test(name)) {
39
+ toDelete.push(name);
40
+ }
41
+ }
42
+ }
43
+ catch {
44
+ return { deleted: [], skipped: [], reason: 'stateDir unreadable' };
45
+ }
46
+ if (toDelete.length === 0) {
47
+ console.log(pc.green('No Integrated-Being ledger files to clean up.'));
48
+ return { deleted: [], skipped: [] };
49
+ }
50
+ if (!opts.yes) {
51
+ console.log(pc.yellow(`Would delete ${toDelete.length} file(s):`));
52
+ for (const f of toDelete)
53
+ console.log(` ${f}`);
54
+ console.log(pc.yellow('Re-run with --yes to actually delete.'));
55
+ return { deleted: [], skipped: toDelete, reason: 'dry-run — use --yes' };
56
+ }
57
+ const deleted = [];
58
+ const skipped = [];
59
+ for (const name of toDelete) {
60
+ try {
61
+ fs.unlinkSync(path.join(stateDir, name));
62
+ deleted.push(name);
63
+ }
64
+ catch {
65
+ skipped.push(name);
66
+ }
67
+ }
68
+ console.log(pc.green(`Deleted ${deleted.length} ledger file(s).`));
69
+ return { deleted, skipped };
70
+ }
71
+ //# sourceMappingURL=ledgerCleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledgerCleanup.js","sourceRoot":"","sources":["../../src/commands/ledgerCleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Migration CLI commands for Integrated-Being v1.
3
+ *
4
+ * `instar migrate sync-session-hook` — overwrites .claude/hooks/instar/session-start.sh
5
+ * with the latest `PostUpdateMigrator.getSessionStartHook()` output. Used by
6
+ * divergent-local-hook agents (e.g., Echo) to pick up the new /shared-state/render
7
+ * injection after an update.
8
+ *
9
+ * Spec: docs/specs/integrated-being-ledger-v1.md §"Session-start injection".
10
+ */
11
+ export interface SyncSessionHookOptions {
12
+ dir?: string;
13
+ /** Overwrite without prompting. */
14
+ force?: boolean;
15
+ /** Test-only override — supplies config instead of reading from disk. */
16
+ _configOverride?: {
17
+ projectDir: string;
18
+ stateDir: string;
19
+ port: number;
20
+ projectName: string;
21
+ hasTelegram?: boolean;
22
+ };
23
+ }
24
+ /**
25
+ * Entry point for `instar migrate sync-session-hook`.
26
+ * Returns { changed, path, reason } for tests / scripting.
27
+ */
28
+ export declare function syncSessionHook(opts?: SyncSessionHookOptions): Promise<{
29
+ changed: boolean;
30
+ path: string;
31
+ reason?: string;
32
+ }>;
33
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yEAAyE;IACzE,eAAe,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACtH;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkD9D"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Migration CLI commands for Integrated-Being v1.
3
+ *
4
+ * `instar migrate sync-session-hook` — overwrites .claude/hooks/instar/session-start.sh
5
+ * with the latest `PostUpdateMigrator.getSessionStartHook()` output. Used by
6
+ * divergent-local-hook agents (e.g., Echo) to pick up the new /shared-state/render
7
+ * injection after an update.
8
+ *
9
+ * Spec: docs/specs/integrated-being-ledger-v1.md §"Session-start injection".
10
+ */
11
+ import fs from 'node:fs';
12
+ import path from 'node:path';
13
+ import pc from 'picocolors';
14
+ import { loadConfig } from '../core/Config.js';
15
+ import { PostUpdateMigrator } from '../core/PostUpdateMigrator.js';
16
+ /**
17
+ * Entry point for `instar migrate sync-session-hook`.
18
+ * Returns { changed, path, reason } for tests / scripting.
19
+ */
20
+ export async function syncSessionHook(opts = {}) {
21
+ const cfg = opts._configOverride ?? (() => {
22
+ const c = loadConfig(opts.dir);
23
+ return {
24
+ projectDir: c.projectDir,
25
+ stateDir: c.stateDir,
26
+ port: c.port,
27
+ projectName: c.projectName,
28
+ hasTelegram: c.messaging?.some((m) => m.type === 'telegram') ?? false,
29
+ };
30
+ })();
31
+ const migrator = new PostUpdateMigrator({
32
+ projectDir: cfg.projectDir,
33
+ stateDir: cfg.stateDir,
34
+ port: cfg.port,
35
+ hasTelegram: cfg.hasTelegram ?? false,
36
+ projectName: cfg.projectName,
37
+ });
38
+ const hookContent = migrator.getSessionStartHook();
39
+ const hookDir = path.join(cfg.projectDir, '.claude', 'hooks', 'instar');
40
+ const hookPath = path.join(hookDir, 'session-start.sh');
41
+ fs.mkdirSync(hookDir, { recursive: true });
42
+ let existing = null;
43
+ try {
44
+ existing = fs.readFileSync(hookPath, 'utf-8');
45
+ }
46
+ catch { /* first install */ }
47
+ if (existing === hookContent) {
48
+ return { changed: false, path: hookPath, reason: 'already up to date' };
49
+ }
50
+ if (existing !== null && !opts.force) {
51
+ // Divergent hook detected — require --force to overwrite
52
+ const divergent = existing.length > 0;
53
+ if (divergent) {
54
+ console.log(pc.yellow(`Existing hook at ${hookPath} differs from the default template.`));
55
+ console.log(pc.yellow(`Re-run with --force to overwrite (your custom changes will be replaced).`));
56
+ return { changed: false, path: hookPath, reason: 'divergent — use --force' };
57
+ }
58
+ }
59
+ fs.writeFileSync(hookPath, hookContent, { mode: 0o755 });
60
+ console.log(pc.green(`Wrote ${hookPath}`));
61
+ return { changed: true, path: hookPath };
62
+ }
63
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2PH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA81CD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkwItE;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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2PH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA81CD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+yItE;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"}
@@ -5209,7 +5209,51 @@ export async function startServer(options) {
5209
5209
  return { content: lines.join('\n'), truncated: false, elapsedMs: Date.now() - start };
5210
5210
  }, { description: 'Feature discovery state and behavioral contract summary' });
5211
5211
  }
5212
- const server = new AgentServer({ config, sessionManager, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, semanticMemory, activitySentinel, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, unifiedTrust, liveConfig });
5212
+ // ── Integrated-Being ledger (v1) ──────────────────────────────────
5213
+ // Spec: docs/specs/integrated-being-ledger-v1.md
5214
+ let sharedStateLedger;
5215
+ {
5216
+ const ibConfig = config.integratedBeing ?? {};
5217
+ const ibEnabled = ibConfig.enabled === undefined ? true : ibConfig.enabled !== false;
5218
+ if (ibEnabled) {
5219
+ const { SharedStateLedger } = await import('../core/SharedStateLedger.js');
5220
+ const { randomBytes } = await import('node:crypto');
5221
+ // Generate salt on first use — persisted via LiveConfig.
5222
+ let salt = ibConfig.counterpartyHashSalt ?? '';
5223
+ if (!salt) {
5224
+ salt = randomBytes(32).toString('hex');
5225
+ try {
5226
+ if (liveConfig)
5227
+ liveConfig.set('integratedBeing.counterpartyHashSalt', salt);
5228
+ }
5229
+ catch { /* best effort */ }
5230
+ }
5231
+ sharedStateLedger = new SharedStateLedger({
5232
+ stateDir: config.stateDir,
5233
+ config: ibConfig,
5234
+ salt,
5235
+ degradationReporter,
5236
+ });
5237
+ // Wire emitters (single call-site; revert = delete this block).
5238
+ const { registerLedgerEmitters } = await import('../core/registerLedgerEmitters.js');
5239
+ // Note: dispatchExecutor is scoped inside the dispatches.enabled block.
5240
+ // AutoDispatcher wraps it; the emitter sink is set via
5241
+ // autoDispatcher.executor.setLedgerEventSink(). We access it through
5242
+ // autoDispatcher — if dispatches are disabled, no emitter is installed.
5243
+ const dispatchExec = autoDispatcher
5244
+ ? autoDispatcher.executor
5245
+ : undefined;
5246
+ registerLedgerEmitters(sharedStateLedger, {
5247
+ threadlineRouter: threadlineRouter ?? undefined,
5248
+ dispatchExecutor: dispatchExec ?? undefined,
5249
+ coherenceGate: responseReviewGate ?? undefined,
5250
+ config: ibConfig,
5251
+ instance: config.projectName ?? 'server',
5252
+ });
5253
+ console.log(pc.green(' Integrated-Being ledger: enabled'));
5254
+ }
5255
+ }
5256
+ const server = new AgentServer({ config, sessionManager, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, semanticMemory, activitySentinel, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, whatsapp: whatsappAdapter, slack: slackAdapter, imessage: imessageAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, unifiedTrust, liveConfig, sharedStateLedger });
5213
5257
  await server.start();
5214
5258
  // Connect DegradationReporter downstream systems now that everything is initialized.
5215
5259
  // Any degradation events queued during startup will drain to feedback + telegram.
@@ -5513,6 +5557,11 @@ export async function startServer(options) {
5513
5557
  // when better-sqlite3 destructors fire during process teardown.
5514
5558
  topicMemory?.close();
5515
5559
  semanticMemory?.close();
5560
+ // Integrated-Being v1 — flush stats sidecar (coalesces pending writes).
5561
+ try {
5562
+ sharedStateLedger?.shutdown();
5563
+ }
5564
+ catch { /* best effort */ }
5516
5565
  await server.stop();
5517
5566
  process.exit(0);
5518
5567
  };