instar 1.3.131 → 1.3.133

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 (70) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +92 -1
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +10 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  8. package/dist/core/PostUpdateMigrator.js +35 -2
  9. package/dist/core/PostUpdateMigrator.js.map +1 -1
  10. package/dist/core/types.d.ts +12 -0
  11. package/dist/core/types.d.ts.map +1 -1
  12. package/dist/core/types.js.map +1 -1
  13. package/dist/monitoring/AgentWorktreeReaper.d.ts +103 -0
  14. package/dist/monitoring/AgentWorktreeReaper.d.ts.map +1 -0
  15. package/dist/monitoring/AgentWorktreeReaper.js +159 -0
  16. package/dist/monitoring/AgentWorktreeReaper.js.map +1 -0
  17. package/dist/monitoring/CiFailurePoller.d.ts +1 -7
  18. package/dist/monitoring/CiFailurePoller.d.ts.map +1 -1
  19. package/dist/monitoring/CiFailurePoller.js +5 -12
  20. package/dist/monitoring/CiFailurePoller.js.map +1 -1
  21. package/dist/monitoring/CorrectionAnalyzer.d.ts +65 -0
  22. package/dist/monitoring/CorrectionAnalyzer.d.ts.map +1 -0
  23. package/dist/monitoring/CorrectionAnalyzer.js +78 -0
  24. package/dist/monitoring/CorrectionAnalyzer.js.map +1 -0
  25. package/dist/monitoring/CorrectionCaptureLoop.d.ts +130 -0
  26. package/dist/monitoring/CorrectionCaptureLoop.d.ts.map +1 -0
  27. package/dist/monitoring/CorrectionCaptureLoop.js +249 -0
  28. package/dist/monitoring/CorrectionCaptureLoop.js.map +1 -0
  29. package/dist/monitoring/CorrectionLedger.d.ts +149 -0
  30. package/dist/monitoring/CorrectionLedger.d.ts.map +1 -0
  31. package/dist/monitoring/CorrectionLedger.js +386 -0
  32. package/dist/monitoring/CorrectionLedger.js.map +1 -0
  33. package/dist/monitoring/CorrectionLoopDriver.d.ts +135 -0
  34. package/dist/monitoring/CorrectionLoopDriver.d.ts.map +1 -0
  35. package/dist/monitoring/CorrectionLoopDriver.js +185 -0
  36. package/dist/monitoring/CorrectionLoopDriver.js.map +1 -0
  37. package/dist/monitoring/HumanAsDetectorLog.d.ts +31 -1
  38. package/dist/monitoring/HumanAsDetectorLog.d.ts.map +1 -1
  39. package/dist/monitoring/HumanAsDetectorLog.js +70 -0
  40. package/dist/monitoring/HumanAsDetectorLog.js.map +1 -1
  41. package/dist/monitoring/agentWorktreeGit.d.ts +43 -0
  42. package/dist/monitoring/agentWorktreeGit.d.ts.map +1 -0
  43. package/dist/monitoring/agentWorktreeGit.js +194 -0
  44. package/dist/monitoring/agentWorktreeGit.js.map +1 -0
  45. package/dist/monitoring/scrubSecrets.d.ts +23 -0
  46. package/dist/monitoring/scrubSecrets.d.ts.map +1 -0
  47. package/dist/monitoring/scrubSecrets.js +41 -0
  48. package/dist/monitoring/scrubSecrets.js.map +1 -0
  49. package/dist/scaffold/templates.d.ts.map +1 -1
  50. package/dist/scaffold/templates.js +1 -0
  51. package/dist/scaffold/templates.js.map +1 -1
  52. package/dist/server/AgentServer.d.ts +4 -0
  53. package/dist/server/AgentServer.d.ts.map +1 -1
  54. package/dist/server/AgentServer.js +20 -0
  55. package/dist/server/AgentServer.js.map +1 -1
  56. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  57. package/dist/server/CapabilityIndex.js +8 -3
  58. package/dist/server/CapabilityIndex.js.map +1 -1
  59. package/dist/server/routes.d.ts +7 -0
  60. package/dist/server/routes.d.ts.map +1 -1
  61. package/dist/server/routes.js +213 -0
  62. package/dist/server/routes.js.map +1 -1
  63. package/package.json +1 -1
  64. package/src/data/builtin-manifest.json +63 -63
  65. package/src/scaffold/templates/jobs/instar/correction-analyzer.md +32 -0
  66. package/src/scaffold/templates.ts +1 -0
  67. package/upgrades/1.3.132.md +42 -0
  68. package/upgrades/1.3.133.md +70 -0
  69. package/upgrades/side-effects/agent-worktree-reaper.md +96 -0
  70. package/upgrades/side-effects/correction-preference-learning-sentinel-slice1b.md +79 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmSH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwvDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAi/OtE;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;AAmSH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwvDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmmPtE;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"}
@@ -6092,6 +6092,83 @@ export async function startServer(options) {
6092
6092
  console.warn('[TopicIntentCapture] init failed:', err.message);
6093
6093
  }
6094
6094
  }
6095
+ // ── Correction & Preference Learning Sentinel — capture loop (Slice 1b) ─
6096
+ // Hot-path capture → distill → CorrectionLedger. VOID fire-and-forget so
6097
+ // the async distill NEVER blocks delivery and a thrown distill error
6098
+ // NEVER propagates back to the message seam. Constructed ONLY when
6099
+ // monitoring.correctionLearning.enabled (Layer-0 classify is the only
6100
+ // always-on piece; the loop is dark by default). The sentinel owns its
6101
+ // OWN LlmQueue (object opts — the per-sentinel daily cap is real, NOT a
6102
+ // fleet ceiling) so a distill burst can never starve PresenceProxy/Usher.
6103
+ // Spec: docs/specs/CORRECTION-PREFERENCE-LEARNING-SENTINEL-SPEC.md §3.1.
6104
+ if (sharedIntelligence && config.monitoring?.correctionLearning?.enabled === true) {
6105
+ try {
6106
+ const cl = config.monitoring.correctionLearning;
6107
+ const { CorrectionLedger } = await import('../monitoring/CorrectionLedger.js');
6108
+ const { LlmQueue } = await import('../monitoring/LlmQueue.js');
6109
+ const { CaptureRing, captureAndDistill, makeCaptureRateState, } = await import('../monitoring/CorrectionCaptureLoop.js');
6110
+ const correctionLedger = new CorrectionLedger({
6111
+ dbPath: path.join(config.stateDir, 'correction-ledger.db'),
6112
+ });
6113
+ // Per-sentinel LlmQueue — object opts (do NOT pass a bare number; that
6114
+ // is the latent PresenceProxy bug §2). Dedicated daily cap.
6115
+ const correctionLlmQueue = new LlmQueue({
6116
+ maxConcurrent: cl.llmMaxConcurrent ?? 1,
6117
+ maxDailyCents: cl.llmDailyCents ?? 25,
6118
+ });
6119
+ const ring = new CaptureRing({
6120
+ captureContextTurns: cl.captureContextTurns ?? 6,
6121
+ captureTopicMapMax: cl.captureTopicMapMax ?? 64,
6122
+ topicTtlMs: (cl.captureTopicTtlMinutes ?? 60) * 60_000,
6123
+ });
6124
+ const rateState = makeCaptureRateState();
6125
+ // Audit sink — one structured line per capture decision. The rollout
6126
+ // evidence filter keys on `correction-loop` in this file.
6127
+ const correctionAuditPath = path.join(config.stateDir, 'logs', 'correction-learning-audit.jsonl');
6128
+ const correctionAudit = (event) => {
6129
+ try {
6130
+ fs.mkdirSync(path.dirname(correctionAuditPath), { recursive: true });
6131
+ fs.appendFileSync(correctionAuditPath, JSON.stringify({ ts: new Date().toISOString(), origin: 'correction-loop', ...event }) + '\n', { mode: 0o600 });
6132
+ }
6133
+ catch { /* @silent-fallback-ok — audit is best-effort */ }
6134
+ };
6135
+ const beforeCorrectionCb = telegram.onMessageLogged;
6136
+ telegram.onMessageLogged = (entry) => {
6137
+ if (beforeCorrectionCb)
6138
+ beforeCorrectionCb(entry);
6139
+ // Layer 0 (SYNC, free) — classify on the seam. No signal → stop at
6140
+ // ~zero cost on the vast majority of messages.
6141
+ const verdict = entry.fromUser && entry.text
6142
+ ? HumanAsDetectorLog.getInstance().classify(entry.text)
6143
+ : null;
6144
+ // Fire-and-forget — capture/distill latency must NEVER reach the
6145
+ // delivery path. A thrown distill error is caught inside.
6146
+ void captureAndDistill({
6147
+ ring,
6148
+ ledger: correctionLedger,
6149
+ distill: (prompt) => correctionLlmQueue.enqueue('background', () => sharedIntelligence.evaluate(prompt, { model: 'fast', maxTokens: 400, temperature: 0 }), 0.3),
6150
+ shouldShed: () => {
6151
+ const r = quotaTracker?.getRecommendation();
6152
+ return r === 'critical' || r === 'stop';
6153
+ },
6154
+ rateCeiling: { maxPerWindow: cl.distillPerTopicRatePerMinute ?? 8, windowMs: 60_000 },
6155
+ audit: correctionAudit,
6156
+ }, {
6157
+ topicId: entry.topicId ?? null,
6158
+ text: entry.text ?? '',
6159
+ fromUser: !!entry.fromUser,
6160
+ sessionId: entry.sessionName ?? null,
6161
+ deterministicWeight: verdict?.deterministicWeight ?? 0,
6162
+ isLearningSignal: verdict?.learningKind != null,
6163
+ }, rateState);
6164
+ };
6165
+ globalThis.__instarCorrectionLearningWired = true;
6166
+ console.log(pc.green(' Correction & Preference Learning Sentinel wired (capture → distill → ledger; dark by default)'));
6167
+ }
6168
+ catch (err) {
6169
+ console.warn('[CorrectionLearning] init failed:', err.message);
6170
+ }
6171
+ }
6095
6172
  presenceProxy.start();
6096
6173
  // ── PromiseBeacon ────────────────────────────────────────────────
6097
6174
  // Watches beacon-enabled commitments and emits ⏳ heartbeats so the
@@ -8086,6 +8163,20 @@ export async function startServer(options) {
8086
8163
  audit: reaperAuditSink(config.stateDir),
8087
8164
  }, config.monitoring?.sessionReaper);
8088
8165
  sessionReaper.start();
8166
+ // ── AgentWorktreeReaper (RESPONSIBLE-RESOURCE-USAGE — OS resource hygiene) ──
8167
+ // Reclaims stale CLI-created worktrees under the agent's `.worktrees/` that
8168
+ // are merged + clean + inactive. Ships OFF + dry-run; start() no-ops when
8169
+ // disabled. Observability at GET /worktrees/agent-reaper.
8170
+ const { AgentWorktreeReaper } = await import('../monitoring/AgentWorktreeReaper.js');
8171
+ const { makeAgentWorktreeReaperDeps } = await import('../monitoring/agentWorktreeGit.js');
8172
+ const _agentWorktreesDir = path.join(path.dirname(config.stateDir), '.worktrees');
8173
+ const agentWorktreeReaper = new AgentWorktreeReaper(makeAgentWorktreeReaperDeps({ instarRepo: config.projectDir, worktreesDir: _agentWorktreesDir }), config.monitoring?.agentWorktreeReaper);
8174
+ agentWorktreeReaper.start();
8175
+ if (config.monitoring?.agentWorktreeReaper?.enabled) {
8176
+ console.log(pc.green(config.monitoring.agentWorktreeReaper.dryRun === false
8177
+ ? ' AgentWorktreeReaper enabled (stale-worktree reclaim — LIVE)'
8178
+ : ' AgentWorktreeReaper enabled (stale-worktree reclaim — dry-run, report only)'));
8179
+ }
8089
8180
  // ── Unkillability backstop (UNIFIED-SESSION-LIFECYCLE §P5) ───────────────
8090
8181
  // Signal-only: raises ONE deduped Attention item (never auto-kills) when a
8091
8182
  // session is KEPT forever despite faking work, or is stuck indeterminate.
@@ -8691,7 +8782,7 @@ export async function startServer(options) {
8691
8782
  catch (err) {
8692
8783
  console.log(pc.dim(` [session-pool] rollout gate not wired: ${err instanceof Error ? err.message : String(err)}`));
8693
8784
  }
8694
- 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, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, leaseTransport, liveTailReceiver, handoffWireTransport, onHandoffBegin, onHandoffInitiate: handoffInitiate, handoffInProgress: handoffSentinelInProgress, messageLedger, currentInboundByTopic, replyMarkerTransport, onReplyMarker: messageLedger ? (marker) => { const m = marker; messageLedger.applyRemoteReplyMarker(m.dedupeKey, { platform: m.platform, replyIdempotencyKey: m.replyIdempotencyKey, epoch: m.epoch, topic: m.topic ?? null }); } : undefined, 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, machinePoolRegistry, meshRpcDispatcher, sessionOwnershipRegistry, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, reapLog, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier });
8785
+ 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, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, localSigningKeyPem, leaseTransport, liveTailReceiver, handoffWireTransport, onHandoffBegin, onHandoffInitiate: handoffInitiate, handoffInProgress: handoffSentinelInProgress, messageLedger, currentInboundByTopic, replyMarkerTransport, onReplyMarker: messageLedger ? (marker) => { const m = marker; messageLedger.applyRemoteReplyMarker(m.dedupeKey, { platform: m.platform, replyIdempotencyKey: m.replyIdempotencyKey, epoch: m.epoch, topic: m.topic ?? null }); } : undefined, 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, machinePoolRegistry, meshRpcDispatcher, sessionOwnershipRegistry, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, reapLog, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier });
8695
8786
  // Boot-recovery (tunnel-failure-resilience spec Part 6): if the agent
8696
8787
  // died mid-relay-episode, the persisted tunnel.json carries
8697
8788
  // rotationPending=true. Rotate the dashboard PIN + authToken BEFORE