instar 1.3.1656 → 1.3.1657
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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +67 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/DeliverMessageHandler.d.ts +20 -0
- package/dist/core/DeliverMessageHandler.d.ts.map +1 -1
- package/dist/core/DeliverMessageHandler.js +13 -0
- package/dist/core/DeliverMessageHandler.js.map +1 -1
- package/dist/core/PendingInboundStore.d.ts +2 -0
- package/dist/core/PendingInboundStore.d.ts.map +1 -1
- package/dist/core/PendingInboundStore.js +6 -0
- package/dist/core/PendingInboundStore.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +18 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/QueueDrainLoop.d.ts +1 -0
- package/dist/core/QueueDrainLoop.d.ts.map +1 -1
- package/dist/core/QueueDrainLoop.js +3 -0
- package/dist/core/QueueDrainLoop.js.map +1 -1
- package/dist/core/SessionManager.d.ts +6 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +18 -0
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/roleFollowRestart.d.ts +27 -0
- package/dist/core/roleFollowRestart.d.ts.map +1 -0
- package/dist/core/roleFollowRestart.js +53 -0
- package/dist/core/roleFollowRestart.js.map +1 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/native/InstarWedgeCanary.app/Contents/MacOS/InstarWedgeCanary +0 -0
- package/dist/native/instar-desktop-host +0 -0
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +1 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/users/wireMemoryPrivacy.d.ts.map +1 -1
- package/dist/users/wireMemoryPrivacy.js +9 -2
- package/dist/users/wireMemoryPrivacy.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +20 -20
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/src/scaffold/templates.ts +1 -0
- package/upgrades/1.3.1657.md +38 -0
- package/upgrades/side-effects/lease-takeover-role-restart.md +49 -0
- package/upgrades/side-effects/memory-privacy-opt-in-existing-agents.md +78 -0
- package/upgrades/side-effects/session-pool-no-silent-drop.md +48 -0
- package/upgrades/side-effects/test-lsfiles-buffer.md +54 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAkIA,OAAO,EAAE,cAAc,EAAwD,MAAM,2BAA2B,CAAC;AAgBjH,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AA6BjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/server.js
CHANGED
|
@@ -240,6 +240,7 @@ import { DispatchScopeEnforcer } from '../core/DispatchScopeEnforcer.js';
|
|
|
240
240
|
import { TrustRecovery } from '../core/TrustRecovery.js';
|
|
241
241
|
import { DegradationReporter } from '../monitoring/DegradationReporter.js';
|
|
242
242
|
import { gitLeaseHasNoRemote, reportLeaseMediumSelection, selectLeaseMedium } from '../core/leaseMediumSelection.js';
|
|
243
|
+
import { decideRoleRestart, readLastRoleRestart, requestRoleRestart } from '../core/roleFollowRestart.js';
|
|
243
244
|
import { HumanAsDetectorLog, observeInboundMessage } from '../monitoring/HumanAsDetectorLog.js';
|
|
244
245
|
import { creditUsherOnMiss } from '../core/UsherActedCorrelator.js';
|
|
245
246
|
import { resolveStableNodeBinary } from '../utils/resolveNodeBinary.js';
|
|
@@ -6527,6 +6528,10 @@ export async function startServer(options) {
|
|
|
6527
6528
|
};
|
|
6528
6529
|
sessionManager.on('sessionComplete', (session) => sessionManager.releaseMemorySession(session));
|
|
6529
6530
|
await _memoryWiring.ready.catch((err) => console.error('[memory-privacy] boot probe failed; scoped conversations stay refused:', err));
|
|
6531
|
+
await sessionManager.retireBoundedSessionsWhenPrivacyOff()
|
|
6532
|
+
.then((names) => { if (names.length)
|
|
6533
|
+
console.log(`[memory-privacy] off: ended ${names.length} bounded session(s)`); })
|
|
6534
|
+
.catch((err) => console.error('[memory-privacy] could not end bounded sessions:', err));
|
|
6530
6535
|
// Native hook events (docs/specs/native-hook-events.md D4): reconcile the
|
|
6531
6536
|
// reporter entries in .claude/settings.json to this machine's decision at
|
|
6532
6537
|
// boot (a flag flip takes effect at the next restart, not the next
|
|
@@ -7750,6 +7755,44 @@ export async function startServer(options) {
|
|
|
7750
7755
|
console.log(pc.green(' Permission-Prompt Auto-Resolver: enabled (always-on safety floor)'));
|
|
7751
7756
|
}
|
|
7752
7757
|
let scheduler;
|
|
7758
|
+
// lease-takeover-role-restart: the scheduler below exists only on a machine awake at boot,
|
|
7759
|
+
// so a role change restarts once and this same path builds what the new role needs.
|
|
7760
|
+
// Losing authority stops jobs NOW, whatever a restart is waiting on: a throttled restart
|
|
7761
|
+
// must never mean jobs running in two places.
|
|
7762
|
+
const bootAwake = coordinator.isAwake;
|
|
7763
|
+
const reconcileRole = () => {
|
|
7764
|
+
try {
|
|
7765
|
+
const nowAwake = coordinator.isAwake;
|
|
7766
|
+
if (nowAwake === bootAwake)
|
|
7767
|
+
return;
|
|
7768
|
+
const lease = config.multiMachine?.leaseSelfHeal;
|
|
7769
|
+
const peer = Object.entries(coordinator.managers.identityManager.loadRegistry().machines ?? {})
|
|
7770
|
+
.some(([id, entry]) => id !== coordinator.identity?.machineId && !entry.revokedAt);
|
|
7771
|
+
const decision = decideRoleRestart({
|
|
7772
|
+
applies: !!lease?.soloCaptainHold?.enabled && !lease?.preferredAwakeMachineId && peer,
|
|
7773
|
+
bootAwake, nowAwake, lastRestartAtMs: readLastRoleRestart(config.stateDir), nowMs: Date.now(),
|
|
7774
|
+
});
|
|
7775
|
+
if (decision === 'restart') {
|
|
7776
|
+
console.log(pc.yellow(` [lease] role is now ${coordinator.role}: restarting once so boot builds what it needs`));
|
|
7777
|
+
requestRoleRestart({ stateDir: config.stateDir }, nowAwake);
|
|
7778
|
+
}
|
|
7779
|
+
}
|
|
7780
|
+
catch (err) {
|
|
7781
|
+
console.warn(` [lease] role restart check failed: ${err instanceof Error ? err.message : String(err)}`); // @silent-fallback-ok: logged, and the timer below retries
|
|
7782
|
+
}
|
|
7783
|
+
};
|
|
7784
|
+
coordinator.on('roleChange', (_from, to) => {
|
|
7785
|
+
const lease = config.multiMachine?.leaseSelfHeal;
|
|
7786
|
+
if (lease?.soloCaptainHold?.enabled && !lease?.preferredAwakeMachineId) {
|
|
7787
|
+
if (to === 'awake')
|
|
7788
|
+
scheduler?.resume();
|
|
7789
|
+
else
|
|
7790
|
+
scheduler?.pause();
|
|
7791
|
+
}
|
|
7792
|
+
reconcileRole();
|
|
7793
|
+
});
|
|
7794
|
+
// A change inside the restart window, or a failed request, is retried until the role matches.
|
|
7795
|
+
setInterval(reconcileRole, 60_000).unref?.();
|
|
7753
7796
|
if (config.scheduler.enabled && coordinator.isAwake) {
|
|
7754
7797
|
scheduler = new JobScheduler(config.scheduler, sessionManager, state, config.stateDir);
|
|
7755
7798
|
scheduler.notifyDestinationHasOtherReaders = (job) => {
|
|
@@ -25395,6 +25438,30 @@ export async function startServer(options) {
|
|
|
25395
25438
|
deliverSeenFallback.add(messageId);
|
|
25396
25439
|
return true;
|
|
25397
25440
|
},
|
|
25441
|
+
// session-pool-no-silent-drop: mirrors every silent return in onAccepted below.
|
|
25442
|
+
// A dashboard start needs no channel. Anything else needs the pool on and the
|
|
25443
|
+
// channel it belongs to, or it would be acked here and lost.
|
|
25444
|
+
refusal: {
|
|
25445
|
+
canServe: (cmd) => {
|
|
25446
|
+
if (parseDashboardCreatePayload(cmd.payload) && typeof cmd.messageId === 'string'
|
|
25447
|
+
&& cmd.messageId.startsWith(`dashboard-create:${cmd.session}:`))
|
|
25448
|
+
return true;
|
|
25449
|
+
if (_sessionPoolStage() === 'dark')
|
|
25450
|
+
return false;
|
|
25451
|
+
return isSlackSessionKey(cmd.session) ? !!_slackInboundDispatch : !!telegram;
|
|
25452
|
+
},
|
|
25453
|
+
alreadyReceived: (messageId, session) => {
|
|
25454
|
+
try {
|
|
25455
|
+
if (_inboundQueue)
|
|
25456
|
+
return _inboundQueue.hasRemoteReceipt(session, messageId);
|
|
25457
|
+
}
|
|
25458
|
+
catch { /* @silent-fallback-ok — unreadable receipts fall through to the next tier */ }
|
|
25459
|
+
if (messageLedger)
|
|
25460
|
+
return messageLedger.get(messageId) !== null;
|
|
25461
|
+
return deliverSeenFallback.has(messageId);
|
|
25462
|
+
},
|
|
25463
|
+
onCannotServe: (cmd) => console.warn(` [session-pool] refused forwarded message for ${cmd.session}: this machine cannot serve it (stage ${_sessionPoolStage()})`),
|
|
25464
|
+
},
|
|
25398
25465
|
// §3.4 sender re-validation, hardened by the §2.D wiring gate: a carried
|
|
25399
25466
|
// envelope whose userId no longer resolves on THIS machine NACKs
|
|
25400
25467
|
// `sender-rejected` — BUT the gate never arms against a degenerate /
|