instar 0.17.3 → 0.17.6

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 (140) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +77 -1
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/ClaudeCliIntelligenceProvider.d.ts.map +1 -1
  5. package/dist/core/ClaudeCliIntelligenceProvider.js +3 -0
  6. package/dist/core/ClaudeCliIntelligenceProvider.js.map +1 -1
  7. package/dist/core/Config.d.ts.map +1 -1
  8. package/dist/core/Config.js +4 -1
  9. package/dist/core/Config.js.map +1 -1
  10. package/dist/core/InputGuard.d.ts +98 -0
  11. package/dist/core/InputGuard.d.ts.map +1 -0
  12. package/dist/core/InputGuard.js +316 -0
  13. package/dist/core/InputGuard.js.map +1 -0
  14. package/dist/core/SessionManager.d.ts +24 -1
  15. package/dist/core/SessionManager.d.ts.map +1 -1
  16. package/dist/core/SessionManager.js +134 -1
  17. package/dist/core/SessionManager.js.map +1 -1
  18. package/dist/core/types.d.ts +29 -0
  19. package/dist/core/types.d.ts.map +1 -1
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  25. package/dist/messaging/TelegramAdapter.js +10 -2
  26. package/dist/messaging/TelegramAdapter.js.map +1 -1
  27. package/dist/monitoring/QuotaCollector.d.ts +14 -0
  28. package/dist/monitoring/QuotaCollector.d.ts.map +1 -1
  29. package/dist/monitoring/QuotaCollector.js +30 -1
  30. package/dist/monitoring/QuotaCollector.js.map +1 -1
  31. package/dist/monitoring/TelemetryHeartbeat.d.ts +99 -0
  32. package/dist/monitoring/TelemetryHeartbeat.d.ts.map +1 -0
  33. package/dist/monitoring/TelemetryHeartbeat.js +216 -0
  34. package/dist/monitoring/TelemetryHeartbeat.js.map +1 -0
  35. package/dist/server/AgentServer.d.ts +1 -0
  36. package/dist/server/AgentServer.d.ts.map +1 -1
  37. package/dist/server/AgentServer.js +1 -0
  38. package/dist/server/AgentServer.js.map +1 -1
  39. package/dist/server/routes.d.ts +1 -0
  40. package/dist/server/routes.d.ts.map +1 -1
  41. package/dist/server/routes.js +52 -0
  42. package/dist/server/routes.js.map +1 -1
  43. package/dist/threadline/adapters/AutoGenTool.d.ts +42 -0
  44. package/dist/threadline/adapters/AutoGenTool.d.ts.map +1 -0
  45. package/dist/threadline/adapters/AutoGenTool.js +145 -0
  46. package/dist/threadline/adapters/AutoGenTool.js.map +1 -0
  47. package/dist/threadline/adapters/CrewAITool.d.ts +31 -0
  48. package/dist/threadline/adapters/CrewAITool.d.ts.map +1 -0
  49. package/dist/threadline/adapters/CrewAITool.js +112 -0
  50. package/dist/threadline/adapters/CrewAITool.js.map +1 -0
  51. package/dist/threadline/adapters/LangGraphTool.d.ts +48 -0
  52. package/dist/threadline/adapters/LangGraphTool.d.ts.map +1 -0
  53. package/dist/threadline/adapters/LangGraphTool.js +153 -0
  54. package/dist/threadline/adapters/LangGraphTool.js.map +1 -0
  55. package/dist/threadline/adapters/RESTServer.d.ts +74 -0
  56. package/dist/threadline/adapters/RESTServer.d.ts.map +1 -0
  57. package/dist/threadline/adapters/RESTServer.js +291 -0
  58. package/dist/threadline/adapters/RESTServer.js.map +1 -0
  59. package/dist/threadline/adapters/index.d.ts +14 -0
  60. package/dist/threadline/adapters/index.d.ts.map +1 -0
  61. package/dist/threadline/adapters/index.js +10 -0
  62. package/dist/threadline/adapters/index.js.map +1 -0
  63. package/dist/threadline/client/IdentityManager.d.ts +40 -0
  64. package/dist/threadline/client/IdentityManager.d.ts.map +1 -0
  65. package/dist/threadline/client/IdentityManager.js +106 -0
  66. package/dist/threadline/client/IdentityManager.js.map +1 -0
  67. package/dist/threadline/client/MessageEncryptor.d.ts +63 -0
  68. package/dist/threadline/client/MessageEncryptor.d.ts.map +1 -0
  69. package/dist/threadline/client/MessageEncryptor.js +195 -0
  70. package/dist/threadline/client/MessageEncryptor.js.map +1 -0
  71. package/dist/threadline/client/RelayClient.d.ts +77 -0
  72. package/dist/threadline/client/RelayClient.d.ts.map +1 -0
  73. package/dist/threadline/client/RelayClient.js +245 -0
  74. package/dist/threadline/client/RelayClient.js.map +1 -0
  75. package/dist/threadline/client/ThreadlineClient.d.ts +89 -0
  76. package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -0
  77. package/dist/threadline/client/ThreadlineClient.js +182 -0
  78. package/dist/threadline/client/ThreadlineClient.js.map +1 -0
  79. package/dist/threadline/client/index.d.ts +12 -0
  80. package/dist/threadline/client/index.d.ts.map +1 -0
  81. package/dist/threadline/client/index.js +8 -0
  82. package/dist/threadline/client/index.js.map +1 -0
  83. package/dist/threadline/index.d.ts +14 -0
  84. package/dist/threadline/index.d.ts.map +1 -1
  85. package/dist/threadline/index.js +12 -0
  86. package/dist/threadline/index.js.map +1 -1
  87. package/dist/threadline/relay/A2ABridge.d.ts +91 -0
  88. package/dist/threadline/relay/A2ABridge.d.ts.map +1 -0
  89. package/dist/threadline/relay/A2ABridge.js +457 -0
  90. package/dist/threadline/relay/A2ABridge.js.map +1 -0
  91. package/dist/threadline/relay/AbuseDetector.d.ts +131 -0
  92. package/dist/threadline/relay/AbuseDetector.d.ts.map +1 -0
  93. package/dist/threadline/relay/AbuseDetector.js +358 -0
  94. package/dist/threadline/relay/AbuseDetector.js.map +1 -0
  95. package/dist/threadline/relay/AdminServer.d.ts +55 -0
  96. package/dist/threadline/relay/AdminServer.d.ts.map +1 -0
  97. package/dist/threadline/relay/AdminServer.js +215 -0
  98. package/dist/threadline/relay/AdminServer.js.map +1 -0
  99. package/dist/threadline/relay/ConnectionManager.d.ts +76 -0
  100. package/dist/threadline/relay/ConnectionManager.d.ts.map +1 -0
  101. package/dist/threadline/relay/ConnectionManager.js +287 -0
  102. package/dist/threadline/relay/ConnectionManager.js.map +1 -0
  103. package/dist/threadline/relay/MessageRouter.d.ts +46 -0
  104. package/dist/threadline/relay/MessageRouter.d.ts.map +1 -0
  105. package/dist/threadline/relay/MessageRouter.js +138 -0
  106. package/dist/threadline/relay/MessageRouter.js.map +1 -0
  107. package/dist/threadline/relay/OfflineQueue.d.ts +87 -0
  108. package/dist/threadline/relay/OfflineQueue.d.ts.map +1 -0
  109. package/dist/threadline/relay/OfflineQueue.js +137 -0
  110. package/dist/threadline/relay/OfflineQueue.js.map +1 -0
  111. package/dist/threadline/relay/PresenceRegistry.d.ts +62 -0
  112. package/dist/threadline/relay/PresenceRegistry.d.ts.map +1 -0
  113. package/dist/threadline/relay/PresenceRegistry.js +148 -0
  114. package/dist/threadline/relay/PresenceRegistry.js.map +1 -0
  115. package/dist/threadline/relay/RelayMetrics.d.ts +62 -0
  116. package/dist/threadline/relay/RelayMetrics.d.ts.map +1 -0
  117. package/dist/threadline/relay/RelayMetrics.js +149 -0
  118. package/dist/threadline/relay/RelayMetrics.js.map +1 -0
  119. package/dist/threadline/relay/RelayRateLimiter.d.ts +58 -0
  120. package/dist/threadline/relay/RelayRateLimiter.d.ts.map +1 -0
  121. package/dist/threadline/relay/RelayRateLimiter.js +116 -0
  122. package/dist/threadline/relay/RelayRateLimiter.js.map +1 -0
  123. package/dist/threadline/relay/RelayServer.d.ts +68 -0
  124. package/dist/threadline/relay/RelayServer.d.ts.map +1 -0
  125. package/dist/threadline/relay/RelayServer.js +487 -0
  126. package/dist/threadline/relay/RelayServer.js.map +1 -0
  127. package/dist/threadline/relay/index.d.ts +24 -0
  128. package/dist/threadline/relay/index.d.ts.map +1 -0
  129. package/dist/threadline/relay/index.js +15 -0
  130. package/dist/threadline/relay/index.js.map +1 -0
  131. package/dist/threadline/relay/types.d.ts +197 -0
  132. package/dist/threadline/relay/types.d.ts.map +1 -0
  133. package/dist/threadline/relay/types.js +21 -0
  134. package/dist/threadline/relay/types.js.map +1 -0
  135. package/package.json +2 -1
  136. package/src/data/builtin-manifest.json +48 -48
  137. package/src/templates/hooks/session-start.sh +30 -0
  138. package/upgrades/0.17.4.md +27 -0
  139. package/upgrades/0.17.5.md +32 -0
  140. package/upgrades/0.17.6.md +32 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+OH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+7BD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAk8DtE;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;AA+OH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+7BD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAohEtE;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"}
@@ -1343,6 +1343,27 @@ export async function startServer(options) {
1343
1343
  }
1344
1344
  }
1345
1345
  const sessionManager = new SessionManager(config.sessions, state);
1346
+ // Input Guard — cross-topic injection defense (Layer 1 + 1.5 + 2)
1347
+ if (config.inputGuard?.enabled !== false) {
1348
+ const guardConfig = config.inputGuard ?? { enabled: true };
1349
+ const anthropicKey = process.env['ANTHROPIC_API_KEY']?.trim();
1350
+ const { InputGuard } = await import('../core/InputGuard.js');
1351
+ const inputGuard = new InputGuard({
1352
+ config: {
1353
+ enabled: true,
1354
+ provenanceCheck: guardConfig.provenanceCheck ?? true,
1355
+ injectionPatterns: guardConfig.injectionPatterns ?? true,
1356
+ topicCoherenceReview: guardConfig.topicCoherenceReview ?? true,
1357
+ action: guardConfig.action ?? 'warn',
1358
+ reviewTimeout: guardConfig.reviewTimeout ?? 3000,
1359
+ },
1360
+ stateDir: config.stateDir,
1361
+ apiKey: anthropicKey,
1362
+ });
1363
+ const registryPath = path.join(config.stateDir, 'topic-session-registry.json');
1364
+ sessionManager.setInputGuard(inputGuard, registryPath);
1365
+ console.log(pc.green(` Input Guard: enabled (action: ${guardConfig.action ?? 'warn'})`));
1366
+ }
1346
1367
  // TopicResumeMap: persist Claude session UUIDs across session restarts.
1347
1368
  // When a session is killed/restarted, we save its UUID so the next spawn
1348
1369
  // can use --resume to reattach to the existing conversation context.
@@ -1412,6 +1433,14 @@ export async function startServer(options) {
1412
1433
  });
1413
1434
  console.log(pc.green(` Quota tracking enabled (${quotaFile})`));
1414
1435
  }
1436
+ // Set up opt-in telemetry heartbeat
1437
+ let telemetryHeartbeat;
1438
+ if (config.monitoring?.telemetry?.enabled) {
1439
+ const { TelemetryHeartbeat } = await import('../monitoring/TelemetryHeartbeat.js');
1440
+ telemetryHeartbeat = new TelemetryHeartbeat(config.monitoring.telemetry, config.stateDir, config.projectDir, config.version || 'unknown');
1441
+ telemetryHeartbeat.start();
1442
+ console.log(pc.green(` Telemetry: enabled (${config.monitoring.telemetry.level || 'basic'} level, every ${Math.round((config.monitoring.telemetry.intervalMs || 21600000) / 3600000)}h)`));
1443
+ }
1415
1444
  let scheduler;
1416
1445
  if (config.scheduler.enabled && coordinator.isAwake) {
1417
1446
  scheduler = new JobScheduler(config.scheduler, sessionManager, state, config.stateDir);
@@ -1842,6 +1871,16 @@ export async function startServer(options) {
1842
1871
  sessionManager.on('sessionComplete', (session) => {
1843
1872
  scheduler.processQueue();
1844
1873
  scheduler.notifyJobComplete(session.id, session.tmuxSession);
1874
+ // Record telemetry events
1875
+ if (telemetryHeartbeat && session.jobSlug) {
1876
+ telemetryHeartbeat.recordJobRun();
1877
+ }
1878
+ });
1879
+ }
1880
+ // Wire telemetry counters
1881
+ if (telemetryHeartbeat) {
1882
+ sessionManager.on('sessionStart', () => {
1883
+ telemetryHeartbeat.recordSessionSpawned();
1845
1884
  });
1846
1885
  }
1847
1886
  // Auto-summarize topics on session completion.
@@ -2406,8 +2445,45 @@ export async function startServer(options) {
2406
2445
  return null; // Normal messages pass through
2407
2446
  };
2408
2447
  telegram.onSentinelKillSession = (sessionName) => {
2448
+ // Save resume UUID before killing so respawn can --resume
2449
+ if (_topicResumeMap) {
2450
+ try {
2451
+ const uuid = _topicResumeMap.findUuidForSession(sessionName);
2452
+ if (uuid) {
2453
+ // Find the topic ID for this session
2454
+ const topicSessions = telegram.getAllTopicSessions();
2455
+ for (const [topicId, sessName] of topicSessions) {
2456
+ if (sessName === sessionName) {
2457
+ _topicResumeMap.save(topicId, uuid, sessionName);
2458
+ console.log(`[sentinel] Saved resume UUID ${uuid} for topic ${topicId} before kill`);
2459
+ break;
2460
+ }
2461
+ }
2462
+ }
2463
+ }
2464
+ catch { /* best effort */ }
2465
+ }
2409
2466
  return sessionManager.killSession(sessionName);
2410
2467
  };
2468
+ telegram.onSentinelPauseSession = (sessionName) => {
2469
+ // Save resume UUID so if the session dies during pause, respawn can --resume
2470
+ if (_topicResumeMap) {
2471
+ try {
2472
+ const uuid = _topicResumeMap.findUuidForSession(sessionName);
2473
+ if (uuid) {
2474
+ const topicSessions = telegram.getAllTopicSessions();
2475
+ for (const [topicId, sessName] of topicSessions) {
2476
+ if (sessName === sessionName) {
2477
+ _topicResumeMap.save(topicId, uuid, sessionName);
2478
+ console.log(`[sentinel] Saved resume UUID ${uuid} for topic ${topicId} on pause`);
2479
+ break;
2480
+ }
2481
+ }
2482
+ }
2483
+ }
2484
+ catch { /* best effort */ }
2485
+ }
2486
+ };
2411
2487
  console.log(pc.green(' Sentinel wired into Telegram message flow'));
2412
2488
  }
2413
2489
  // Inter-Agent Messaging — structured communication between sessions
@@ -2656,7 +2732,7 @@ export async function startServer(options) {
2656
2732
  console.warn(pc.yellow(` Response review pipeline: configured but ANTHROPIC_API_KEY not set`));
2657
2733
  }
2658
2734
  }
2659
- 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, topicResumeMap: _topicResumeMap ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, whatsapp: whatsappAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, responseReviewGate });
2735
+ 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, topicResumeMap: _topicResumeMap ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, whatsapp: whatsappAdapter, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, responseReviewGate, telemetryHeartbeat });
2660
2736
  await server.start();
2661
2737
  // Connect DegradationReporter downstream systems now that everything is initialized.
2662
2738
  // Any degradation events queued during startup will drain to feedback + telegram.