instar 1.3.246 → 1.3.248

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 (32) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +39 -6
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  5. package/dist/core/PostUpdateMigrator.js +15 -1
  6. package/dist/core/PostUpdateMigrator.js.map +1 -1
  7. package/dist/core/RelocationNicknameSet.d.ts +42 -0
  8. package/dist/core/RelocationNicknameSet.d.ts.map +1 -0
  9. package/dist/core/RelocationNicknameSet.js +47 -0
  10. package/dist/core/RelocationNicknameSet.js.map +1 -0
  11. package/dist/core/TopicPlacementDescription.d.ts +46 -0
  12. package/dist/core/TopicPlacementDescription.d.ts.map +1 -0
  13. package/dist/core/TopicPlacementDescription.js +32 -0
  14. package/dist/core/TopicPlacementDescription.js.map +1 -0
  15. package/dist/scaffold/templates.d.ts.map +1 -1
  16. package/dist/scaffold/templates.js +3 -1
  17. package/dist/scaffold/templates.js.map +1 -1
  18. package/dist/server/AgentServer.d.ts +6 -0
  19. package/dist/server/AgentServer.d.ts.map +1 -1
  20. package/dist/server/AgentServer.js +3 -0
  21. package/dist/server/AgentServer.js.map +1 -1
  22. package/dist/server/routes.d.ts +11 -0
  23. package/dist/server/routes.d.ts.map +1 -1
  24. package/dist/server/routes.js +163 -0
  25. package/dist/server/routes.js.map +1 -1
  26. package/package.json +1 -1
  27. package/src/data/builtin-manifest.json +64 -64
  28. package/src/scaffold/templates.ts +3 -1
  29. package/upgrades/1.3.247.md +48 -0
  30. package/upgrades/1.3.248.md +46 -0
  31. package/upgrades/side-effects/mm-placement-transfer-robustness.md +45 -0
  32. package/upgrades/side-effects/telegraph-e2e-flake-tolerant.md +58 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2SH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgxDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgxQtE;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;AA2SH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgxDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmzQtE;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"}
@@ -9348,17 +9348,50 @@ export async function startServer(options) {
9348
9348
  const nickMod = await import('../core/NicknameCommand.js');
9349
9349
  const transferMod = await import('../core/TransferByNickname.js');
9350
9350
  const pinMod = await import('../core/TopicPlacementPinStore.js');
9351
+ const relocSetMod = await import('../core/RelocationNicknameSet.js');
9352
+ const nickAssignMod = await import('../core/NicknameAssigner.js');
9351
9353
  _topicPinStore = new pinMod.TopicPlacementPinStore({
9352
9354
  filePath: path.join(config.stateDir, 'session-pool', 'topic-pins.json'),
9353
9355
  });
9356
+ // Authoritative resolver for THIS machine's OWN nickname. Guarantees a topic
9357
+ // can always be moved BACK to the machine currently handling it, even when the
9358
+ // capacities view omits the self nickname (the back-transfer bug: the lifeline
9359
+ // forwards inbound to the holder, so the relocation check runs on the very
9360
+ // machine the user is moving back to). Priority: capacities self-entry →
9361
+ // identity registry self-entry → deterministic derive (reconstructs the
9362
+ // auto-assigned nickname; a manual rename is persisted on the identity entry).
9363
+ const resolveSelfNickname = (caps) => {
9364
+ const fromCaps = caps.find((c) => c.machineId === meshSelfId)?.nickname;
9365
+ if (fromCaps)
9366
+ return fromCaps;
9367
+ try {
9368
+ const selfEntry = meshIdMgr
9369
+ .getActiveMachines()
9370
+ .find((m) => m.machineId === meshSelfId)?.entry;
9371
+ if (selfEntry?.nickname)
9372
+ return selfEntry.nickname;
9373
+ const id = meshIdMgr.hasIdentity()
9374
+ ? meshIdMgr.loadIdentity()
9375
+ : null;
9376
+ const derived = nickAssignMod.deriveBaseNickname(id?.name, selfEntry?.hardware?.platform);
9377
+ if (derived)
9378
+ return derived;
9379
+ }
9380
+ catch {
9381
+ /* @silent-fallback-ok — best-effort self-nickname resolution; on any failure we
9382
+ return undefined and the recognizer simply falls back to the capacities-derived
9383
+ set (the pre-existing behavior), so this can only ever ADD a nickname, never break. */
9384
+ }
9385
+ return undefined;
9386
+ };
9354
9387
  _tryNicknameRelocation = async (topicId, text) => {
9355
9388
  const sessionKey = String(topicId);
9356
9389
  const caps = machinePoolRegistry?.getCapacities() ?? [];
9357
- const nickToMachine = new Map();
9358
- for (const c of caps)
9359
- if (c.nickname)
9360
- nickToMachine.set(c.nickname.toLowerCase(), c.machineId);
9361
- const knownNicknames = caps.map((c) => c.nickname).filter((n) => !!n);
9390
+ const { knownNicknames, nickToMachine } = relocSetMod.buildRelocationNicknameSet({
9391
+ capacities: caps,
9392
+ selfMachineId: meshSelfId,
9393
+ selfNickname: resolveSelfNickname(caps),
9394
+ });
9362
9395
  const cmd = nickMod.recognizeNicknameCommand(text, knownNicknames);
9363
9396
  if (!cmd)
9364
9397
  return { handled: false };
@@ -9474,7 +9507,7 @@ export async function startServer(options) {
9474
9507
  catch (err) {
9475
9508
  console.log(pc.dim(` [session-pool] rollout gate not wired: ${err instanceof Error ? err.message : String(err)}`));
9476
9509
  }
9477
- 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, onLeasePullRequest: () => leaseCoordinatorRef?.currentLease() ?? null, 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, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier });
9510
+ 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, onLeasePullRequest: () => leaseCoordinatorRef?.currentLease() ?? null, 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, topicPinStore: _topicPinStore ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier });
9478
9511
  // Boot-recovery (tunnel-failure-resilience spec Part 6): if the agent
9479
9512
  // died mid-relay-episode, the persisted tunnel.json carries
9480
9513
  // rotationPending=true. Rotate the dashboard PIN + authToken BEFORE