instar 1.3.32 → 1.3.33

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 (36) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +47 -1
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/types.d.ts +16 -0
  5. package/dist/core/types.d.ts.map +1 -1
  6. package/dist/core/types.js.map +1 -1
  7. package/dist/feedback-factory/dryrun/dryRunCompare.d.ts +82 -0
  8. package/dist/feedback-factory/dryrun/dryRunCompare.d.ts.map +1 -0
  9. package/dist/feedback-factory/dryrun/dryRunCompare.js +88 -0
  10. package/dist/feedback-factory/dryrun/dryRunCompare.js.map +1 -0
  11. package/dist/feedback-factory/processor/parity.d.ts +111 -0
  12. package/dist/feedback-factory/processor/parity.d.ts.map +1 -0
  13. package/dist/feedback-factory/processor/parity.js +118 -0
  14. package/dist/feedback-factory/processor/parity.js.map +1 -0
  15. package/dist/feedback-factory/store/ReadOnlyShadowStore.d.ts +59 -0
  16. package/dist/feedback-factory/store/ReadOnlyShadowStore.d.ts.map +1 -0
  17. package/dist/feedback-factory/store/ReadOnlyShadowStore.js +88 -0
  18. package/dist/feedback-factory/store/ReadOnlyShadowStore.js.map +1 -0
  19. package/dist/monitoring/StopNotifier.d.ts +88 -0
  20. package/dist/monitoring/StopNotifier.d.ts.map +1 -0
  21. package/dist/monitoring/StopNotifier.js +105 -0
  22. package/dist/monitoring/StopNotifier.js.map +1 -0
  23. package/dist/server/AgentServer.d.ts +2 -0
  24. package/dist/server/AgentServer.d.ts.map +1 -1
  25. package/dist/server/AgentServer.js +1 -0
  26. package/dist/server/AgentServer.js.map +1 -1
  27. package/dist/server/routes.d.ts +4 -0
  28. package/dist/server/routes.d.ts.map +1 -1
  29. package/dist/server/routes.js +13 -0
  30. package/dist/server/routes.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/data/builtin-manifest.json +47 -47
  33. package/upgrades/1.3.31.md +9 -10
  34. package/upgrades/1.3.33.md +36 -0
  35. package/upgrades/side-effects/feedback-factory-dryrun.md +93 -0
  36. package/upgrades/side-effects/notify-on-stop-layer-b.md +34 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiRH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAksDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuzMtE;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;AAiRH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAksDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAi2MtE;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"}
@@ -6977,6 +6977,52 @@ export async function startServer(options) {
6977
6977
  });
6978
6978
  console.log(pc.green(` Unjustified Stop Gate: ${activeMode}${unjustifiedStopGate && stopGateDb ? ' (authority + SQLite wired)' : ' (degraded, fail-open)'}`));
6979
6979
  }
6980
+ // notify-on-stop Layer B — surface a genuinely-stuck UNATTENDED stop to the
6981
+ // user (docs/specs/NOTIFY-ON-STOP-SPEC.md). The evaluate route feeds each
6982
+ // decision to StopNotifier, which filters to the notify-worthy classes
6983
+ // (shadow+continue / escalate), the attended-gate, and per-session dedup,
6984
+ // then hands a coalesced one-liner to a dedicated SentinelNotifier sink
6985
+ // (single lifeline topic, log-always — reuses the post-2026-05-22 discipline).
6986
+ // Default ON (Justin's "tell me why it stopped"); requires telegram wired.
6987
+ let stopNotifier = null;
6988
+ {
6989
+ const nosCfg = config.monitoring?.notifyOnStop ?? {};
6990
+ const nosEnabled = nosCfg.enabled !== false; // default true
6991
+ const localTg = telegram;
6992
+ if (nosEnabled && localTg) {
6993
+ const stopLogPath = path.join(config.stateDir, '..', 'logs', 'sentinel-events.jsonl');
6994
+ const stopLog = (entry) => {
6995
+ try {
6996
+ fs.appendFileSync(stopLogPath, JSON.stringify({ ...entry, sentinel: 'stop-notify', ts: new Date().toISOString() }) + '\n');
6997
+ }
6998
+ catch { /* best-effort */ }
6999
+ };
7000
+ const send = async (text) => {
7001
+ const topicId = localTg.getLifelineTopicId();
7002
+ if (!topicId)
7003
+ return false;
7004
+ try {
7005
+ await localTg.sendToTopic(topicId, text);
7006
+ return true;
7007
+ }
7008
+ catch {
7009
+ return false;
7010
+ }
7011
+ };
7012
+ const { SentinelNotifier } = await import('../monitoring/SentinelNotifier.js');
7013
+ const stopSink = new SentinelNotifier({ log: stopLog, sendConsolidated: send }, { telegramEscalation: true });
7014
+ const { StopNotifier } = await import('../monitoring/StopNotifier.js');
7015
+ stopNotifier = new StopNotifier({ escalate: (name, text) => stopSink.escalate('stop-gate', name, text) }, {
7016
+ enabled: true,
7017
+ unattendedOnly: nosCfg.unattendedOnly !== false,
7018
+ ...(typeof nosCfg.cooldownMs === 'number' ? { cooldownMs: nosCfg.cooldownMs } : {}),
7019
+ });
7020
+ console.log(pc.green(' notify-on-stop Layer B: enabled (unjustified-stall heads-up — unattended-only, deduped, coalesced)'));
7021
+ }
7022
+ else {
7023
+ console.log(pc.dim(` notify-on-stop Layer B: ${nosEnabled ? 'idle (no telegram)' : 'disabled by config'}`));
7024
+ }
7025
+ }
6980
7026
  // Response Review Pipeline (Coherence Gate) — evaluates agent responses before delivery.
6981
7027
  // Prefers the shared IntelligenceProvider (subscription-compatible) so the gate works
6982
7028
  // even without ANTHROPIC_API_KEY. Falls back to direct Anthropic API if a key is set
@@ -7490,7 +7536,7 @@ export async function startServer(options) {
7490
7536
  ? ' SessionReaper enabled (idle-session reaper — LIVE)'
7491
7537
  : ' SessionReaper enabled (idle-session reaper — dry-run, logs only)'));
7492
7538
  }
7493
- 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, rateLimitSentinel, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? 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, conversationStore, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, proxyCoordinator, topicIntentStore, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, unjustifiedStopGate, stopGateDb });
7539
+ 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, rateLimitSentinel, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? 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, conversationStore, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, responseReviewGate, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, proxyCoordinator, topicIntentStore, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, unjustifiedStopGate, stopGateDb, stopNotifier });
7494
7540
  // Boot-recovery (tunnel-failure-resilience spec Part 6): if the agent
7495
7541
  // died mid-relay-episode, the persisted tunnel.json carries
7496
7542
  // rotationPending=true. Rotate the dashboard PIN + authToken BEFORE