instar 1.3.1114 → 1.3.1115
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 +157 -124
- package/dist/commands/server.js.map +1 -1
- package/dist/core/CartographerNavigator.d.ts.map +1 -1
- package/dist/core/CartographerNavigator.js +8 -3
- package/dist/core/CartographerNavigator.js.map +1 -1
- package/dist/core/CartographerRootRegistry.d.ts +100 -0
- package/dist/core/CartographerRootRegistry.d.ts.map +1 -0
- package/dist/core/CartographerRootRegistry.js +306 -0
- package/dist/core/CartographerRootRegistry.js.map +1 -0
- package/dist/core/CartographerSweepEngine.d.ts +12 -0
- package/dist/core/CartographerSweepEngine.d.ts.map +1 -1
- package/dist/core/CartographerSweepEngine.js +81 -1
- package/dist/core/CartographerSweepEngine.js.map +1 -1
- package/dist/core/ScopeVerifier.d.ts +2 -0
- package/dist/core/ScopeVerifier.d.ts.map +1 -1
- package/dist/core/ScopeVerifier.js +8 -1
- package/dist/core/ScopeVerifier.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/server/AgentServer.d.ts +2 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +1 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +4 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +133 -87
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +47 -47
- 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/upgrades/1.3.1115.md +62 -0
- package/upgrades/side-effects/cartographer-project-aware-navigation.md +189 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8EH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AA0BjG,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":"AAAA;;;;;;;;GAQG;AA8EH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AA0BjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA+H7D,OAAO,KAAK,EAAW,oBAAoB,EAAe,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgFtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAuID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA+rDD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,oBAAoB,GAAG,IAAI,GACxC;IACD,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAqBA;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,EAQrD,oBAAoB,CAAC,EAAE,MAAM;IAC3B,YAAY,EAAE,OAAO,kBAAkB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,GACP,IAAI,CAwtBN;AAgmBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAq2qBtE;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"}
|
package/dist/commands/server.js
CHANGED
|
@@ -169,8 +169,7 @@ import { decryptFromSync, encryptForSync } from '../core/SecretStore.js';
|
|
|
169
169
|
import { createPrivateKey, createPublicKey, createHash, randomBytes, randomInt } from 'node:crypto';
|
|
170
170
|
import { sign as signEd25519, verify as verifyEd25519 } from '../core/MachineIdentity.js';
|
|
171
171
|
import { ProjectMapper } from '../core/ProjectMapper.js';
|
|
172
|
-
import {
|
|
173
|
-
import { populateCartographer } from '../core/cartographerPopulation.js';
|
|
172
|
+
import { CartographerRootRegistry } from '../core/CartographerRootRegistry.js';
|
|
174
173
|
import { CapabilityMapper } from '../core/CapabilityMapper.js';
|
|
175
174
|
import { ScopeVerifier } from '../core/ScopeVerifier.js';
|
|
176
175
|
import { ContextHierarchy, checkDeclaredIdentityDirectory } from '../core/ContextHierarchy.js';
|
|
@@ -14296,6 +14295,14 @@ export async function startServer(options) {
|
|
|
14296
14295
|
}
|
|
14297
14296
|
sleepWakeDetector.start();
|
|
14298
14297
|
// Project Map + Coherence Gate — spatial awareness and pre-action verification
|
|
14298
|
+
// ScopeVerifier is constructed before Cartographer because its persisted topic
|
|
14299
|
+
// bindings are now the typed provenance source for every live root selection.
|
|
14300
|
+
const scopeVerifier = new ScopeVerifier({
|
|
14301
|
+
projectDir: config.projectDir,
|
|
14302
|
+
stateDir: config.stateDir,
|
|
14303
|
+
projectName: config.projectName,
|
|
14304
|
+
});
|
|
14305
|
+
scopeVerifier.loadTopicBindings();
|
|
14299
14306
|
const projectMapper = new ProjectMapper({ projectDir: config.projectDir, stateDir: config.stateDir });
|
|
14300
14307
|
try {
|
|
14301
14308
|
projectMapper.generateAndSave();
|
|
@@ -14309,44 +14316,63 @@ export async function startServer(options) {
|
|
|
14309
14316
|
// (cartographer-doc-tree-schema spec #1). Ships dark behind cartographer.enabled;
|
|
14310
14317
|
// null → /cartographer/* routes return 503.
|
|
14311
14318
|
const cartographerEnabled = resolveDevAgentGate(config.cartographer?.enabled, config);
|
|
14312
|
-
const
|
|
14313
|
-
|
|
14319
|
+
const fsCfg = config.cartographer?.freshnessSweep;
|
|
14320
|
+
const cartographerNum = (v, d) => (typeof v === 'number' && Number.isFinite(v) ? v : d);
|
|
14321
|
+
const cartographerRoots = cartographerEnabled
|
|
14322
|
+
? new CartographerRootRegistry({
|
|
14323
|
+
agentType: config.agentType === 'standalone' ? 'standalone' : 'project-bound',
|
|
14324
|
+
agentHome: config.projectDir,
|
|
14325
|
+
agentName: config.projectName,
|
|
14326
|
+
stateDir: config.stateDir,
|
|
14327
|
+
...(config.agentType === 'standalone'
|
|
14328
|
+
? {}
|
|
14329
|
+
: {
|
|
14330
|
+
serverProject: {
|
|
14331
|
+
projectDir: config.projectDir,
|
|
14332
|
+
projectName: config.projectName,
|
|
14333
|
+
},
|
|
14334
|
+
}),
|
|
14335
|
+
// ScopeVerifier owns the live map; this accessor avoids synchronous
|
|
14336
|
+
// disk reads while still following route-driven binding updates.
|
|
14337
|
+
topicBindings: () => scopeVerifier.currentTopicBindings(),
|
|
14338
|
+
population: {
|
|
14339
|
+
config: {
|
|
14340
|
+
scaffoldChunkNodes: cartographerNum(fsCfg?.scaffoldChunkNodes, 500),
|
|
14341
|
+
detectTimeoutMs: cartographerNum(fsCfg?.detectTimeoutMs, 120000),
|
|
14342
|
+
detectWorkerHeapMb: cartographerNum(fsCfg?.detectWorkerHeapMb, 1536),
|
|
14343
|
+
maxIndexBytes: cartographerNum(fsCfg?.maxIndexBytes, 200 * 1024 * 1024),
|
|
14344
|
+
snapshotSampleMax: cartographerNum(fsCfg?.snapshotSampleMax, 500),
|
|
14345
|
+
gitMaxBuffer: cartographerNum(fsCfg?.gitMaxBuffer, 64 * 1024 * 1024),
|
|
14346
|
+
graceMs: cartographerNum(fsCfg?.cadenceMs, 600000) * 2,
|
|
14347
|
+
},
|
|
14348
|
+
},
|
|
14349
|
+
log: (message) => console.log(pc.yellow(` ${message}`)),
|
|
14350
|
+
})
|
|
14314
14351
|
: null;
|
|
14315
|
-
if (
|
|
14316
|
-
console.log(pc.green(' Cartographer
|
|
14352
|
+
if (cartographerRoots)
|
|
14353
|
+
console.log(pc.green(' Cartographer verified-root registry enabled'));
|
|
14317
14354
|
// Zero-cost structural population is independent of the optional summary
|
|
14318
14355
|
// author sweep. Refresh at every boot so newly-added/removed paths join the
|
|
14319
14356
|
// hierarchy, then run aggregate-only detect in a worker and publish the
|
|
14320
14357
|
// snapshot that /tree?format=compact + /health serve. No router, LLM, egress,
|
|
14321
14358
|
// or freshnessSweep.enabled mutation occurs on this path.
|
|
14322
|
-
const cartographerPopulationReady =
|
|
14323
|
-
? (
|
|
14324
|
-
|
|
14325
|
-
|
|
14326
|
-
|
|
14327
|
-
|
|
14328
|
-
config: {
|
|
14329
|
-
scaffoldChunkNodes: num(fsCfg?.scaffoldChunkNodes, 500),
|
|
14330
|
-
detectTimeoutMs: num(fsCfg?.detectTimeoutMs, 120000),
|
|
14331
|
-
detectWorkerHeapMb: num(fsCfg?.detectWorkerHeapMb, 1536),
|
|
14332
|
-
maxIndexBytes: num(fsCfg?.maxIndexBytes, 200 * 1024 * 1024),
|
|
14333
|
-
snapshotSampleMax: num(fsCfg?.snapshotSampleMax, 500),
|
|
14334
|
-
gitMaxBuffer: num(fsCfg?.gitMaxBuffer, 64 * 1024 * 1024),
|
|
14335
|
-
graceMs: num(fsCfg?.cadenceMs, 600000) * 2,
|
|
14336
|
-
},
|
|
14337
|
-
}).then((r) => {
|
|
14338
|
-
if (r.refused) {
|
|
14339
|
-
console.log(pc.yellow(` Cartographer population snapshot refused (${r.detectStatus}); retries next boot`));
|
|
14359
|
+
const cartographerPopulationReady = cartographerRoots
|
|
14360
|
+
? cartographerRoots.populateOnBoot()
|
|
14361
|
+
.then((results) => {
|
|
14362
|
+
for (const result of results) {
|
|
14363
|
+
if (result.refused) {
|
|
14364
|
+
console.log(pc.yellow(` Cartographer population snapshot refused (${result.detectStatus}); retries next boot`));
|
|
14340
14365
|
}
|
|
14341
14366
|
else {
|
|
14342
|
-
console.log(pc.gray(` Cartographer hierarchy populated (${
|
|
14367
|
+
console.log(pc.gray(` Cartographer hierarchy populated (${result.nodeCount} nodes, ${result.rootAuthority.verificationState})`));
|
|
14343
14368
|
}
|
|
14344
|
-
}
|
|
14345
|
-
|
|
14346
|
-
|
|
14347
|
-
|
|
14348
|
-
|
|
14349
|
-
|
|
14369
|
+
}
|
|
14370
|
+
})
|
|
14371
|
+
.catch((err) => {
|
|
14372
|
+
// @silent-fallback-ok — scaffold is atomic and boot remains available;
|
|
14373
|
+
// prior snapshot/index stay readable and the next boot retries.
|
|
14374
|
+
console.log(pc.yellow(` Cartographer population incomplete (retries next boot): ${err instanceof Error ? err.message : String(err)}`));
|
|
14375
|
+
})
|
|
14350
14376
|
: null;
|
|
14351
14377
|
// Cartographer doc-freshness sweep (spec #2). In-process poller that authors
|
|
14352
14378
|
// stale/never-authored node summaries on a LIGHT model routed OFF Claude.
|
|
@@ -14359,96 +14385,110 @@ export async function startServer(options) {
|
|
|
14359
14385
|
// routing is an unrouted provider the sweep refuses to start (it could not enforce
|
|
14360
14386
|
// off-Claude) — that cost-protecting probe is UNCHANGED.
|
|
14361
14387
|
let cartographerSweepPoller = null;
|
|
14362
|
-
if (
|
|
14363
|
-
const
|
|
14388
|
+
if (cartographerRoots) {
|
|
14389
|
+
const paidFsCfg = config.cartographer?.freshnessSweep;
|
|
14364
14390
|
const num = (v, d) => (typeof v === 'number' && Number.isFinite(v) ? v : d);
|
|
14365
|
-
if (
|
|
14366
|
-
const
|
|
14367
|
-
|
|
14368
|
-
|
|
14369
|
-
? sharedIntelligence
|
|
14370
|
-
: null;
|
|
14371
|
-
if (!routerLike) {
|
|
14372
|
-
console.log(pc.yellow(' Cartographer sweep: NOT started (off-Claude routing requires the IntelligenceRouter)'));
|
|
14391
|
+
if (paidFsCfg?.enabled && sharedLlmQueue) {
|
|
14392
|
+
const backgroundResolution = cartographerRoots.resolve();
|
|
14393
|
+
if (!backgroundResolution.ok) {
|
|
14394
|
+
console.log(pc.yellow(` Cartographer sweep: NOT started (root authority ${backgroundResolution.reason})`));
|
|
14373
14395
|
}
|
|
14374
14396
|
else {
|
|
14375
|
-
const
|
|
14376
|
-
const
|
|
14377
|
-
const
|
|
14378
|
-
|
|
14379
|
-
|
|
14380
|
-
|
|
14381
|
-
|
|
14382
|
-
|
|
14383
|
-
|
|
14384
|
-
// otherwise freshnessSweep.framework becomes the sweep's effective override.
|
|
14385
|
-
{
|
|
14386
|
-
const { resolveSweepFrameworkRouting } = await import('../core/CartographerSweepEngine.js');
|
|
14387
|
-
const cf = config.sessions?.componentFrameworks ?? {};
|
|
14388
|
-
const sweepFw = typeof fsCfg.framework === 'string' ? fsCfg.framework : undefined;
|
|
14389
|
-
const routed = resolveSweepFrameworkRouting(cf, sweepFw);
|
|
14390
|
-
if (routed.injectOverride && routed.framework) {
|
|
14391
|
-
// Inject so BOTH probeRouting and evaluate resolve consistently (router
|
|
14392
|
-
// reads config.sessions.componentFrameworks live). Explicit-set-only.
|
|
14393
|
-
const s = (config.sessions ??= {});
|
|
14394
|
-
const c = (s.componentFrameworks ??= {});
|
|
14395
|
-
(c.overrides ??= {}).CartographerSweep = routed.framework;
|
|
14396
|
-
}
|
|
14397
|
-
console.log(pc.gray(` Cartographer sweep routing: ${routed.framework ?? '(default)'} (source: ${routed.source})`));
|
|
14397
|
+
const cartographer = backgroundResolution.root.tree;
|
|
14398
|
+
const fsCfg = paidFsCfg;
|
|
14399
|
+
const routerLike = sharedIntelligence &&
|
|
14400
|
+
typeof sharedIntelligence.for === 'function' &&
|
|
14401
|
+
typeof sharedIntelligence.defaultFramework === 'string'
|
|
14402
|
+
? sharedIntelligence
|
|
14403
|
+
: null;
|
|
14404
|
+
if (!routerLike) {
|
|
14405
|
+
console.log(pc.yellow(' Cartographer sweep: NOT started (off-Claude routing requires the IntelligenceRouter)'));
|
|
14398
14406
|
}
|
|
14399
|
-
|
|
14400
|
-
|
|
14401
|
-
|
|
14402
|
-
|
|
14403
|
-
|
|
14404
|
-
|
|
14405
|
-
|
|
14406
|
-
|
|
14407
|
-
//
|
|
14408
|
-
|
|
14409
|
-
|
|
14410
|
-
|
|
14411
|
-
|
|
14412
|
-
|
|
14413
|
-
|
|
14414
|
-
|
|
14415
|
-
|
|
14416
|
-
|
|
14417
|
-
|
|
14418
|
-
|
|
14419
|
-
|
|
14420
|
-
|
|
14421
|
-
|
|
14422
|
-
|
|
14423
|
-
detectTimeoutMs: num(fsCfg.detectTimeoutMs, 120000),
|
|
14424
|
-
detectWorkerHeapMb: num(fsCfg.detectWorkerHeapMb, 1536),
|
|
14425
|
-
maxIndexBytes: num(fsCfg.maxIndexBytes, 200 * 1024 * 1024),
|
|
14426
|
-
snapshotSampleMax: num(fsCfg.snapshotSampleMax, 500),
|
|
14427
|
-
gitMaxBuffer: num(fsCfg.gitMaxBuffer, 64 * 1024 * 1024),
|
|
14428
|
-
detectCandidateHeadroom: num(fsCfg.detectCandidateHeadroom, 4),
|
|
14429
|
-
detectGraceMs: num(fsCfg.cadenceMs, 600000) * 2,
|
|
14430
|
-
},
|
|
14431
|
-
stateDir: config.stateDir,
|
|
14432
|
-
log: (m) => console.log(pc.gray(m)),
|
|
14433
|
-
});
|
|
14434
|
-
cartographerSweepPoller = new CartographerSweepPoller({
|
|
14435
|
-
engine,
|
|
14436
|
-
cadenceMs: num(fsCfg.cadenceMs, 600000),
|
|
14437
|
-
idleCadenceMs: num(fsCfg.idleCadenceMs, 1800000),
|
|
14438
|
-
zeroProgressTicksToBreak: num(fsCfg.zeroProgressTicksToBreak, 3),
|
|
14439
|
-
breakerReescalateHours: num(fsCfg.breakerReescalateHours, 6),
|
|
14440
|
-
log: (m) => console.log(pc.gray(m)),
|
|
14441
|
-
reportDegradation: (d) => { try {
|
|
14442
|
-
DegradationReporter.getInstance().report(d);
|
|
14407
|
+
else {
|
|
14408
|
+
const { CartographerSweepEngine } = await import('../core/CartographerSweepEngine.js');
|
|
14409
|
+
const { CartographerSweepPoller } = await import('../monitoring/CartographerSweepPoller.js');
|
|
14410
|
+
const { sampleHostPressure: _sampleHostPressure } = await import('../monitoring/HostPressureSampler.js');
|
|
14411
|
+
const rcfg = config.monitoring?.sessionReaper;
|
|
14412
|
+
// Slice 3 (fix instar#1069): honor cartographer.freshnessSweep.framework as
|
|
14413
|
+
// the sweep's routing so BOTH the routing PROBE and the actual author call
|
|
14414
|
+
// resolve consistently (the router reads config.sessions.componentFrameworks
|
|
14415
|
+
// live). EXPLICIT-SET-ONLY: a pre-existing overrides.CartographerSweep OR an
|
|
14416
|
+
// explicitly-configured categories.job is never overridden (migration safety);
|
|
14417
|
+
// otherwise freshnessSweep.framework becomes the sweep's effective override.
|
|
14418
|
+
{
|
|
14419
|
+
const { resolveSweepFrameworkRouting } = await import('../core/CartographerSweepEngine.js');
|
|
14420
|
+
const cf = config.sessions?.componentFrameworks ?? {};
|
|
14421
|
+
const sweepFw = typeof fsCfg.framework === 'string' ? fsCfg.framework : undefined;
|
|
14422
|
+
const routed = resolveSweepFrameworkRouting(cf, sweepFw);
|
|
14423
|
+
if (routed.injectOverride && routed.framework) {
|
|
14424
|
+
// Inject so BOTH probeRouting and evaluate resolve consistently (router
|
|
14425
|
+
// reads config.sessions.componentFrameworks live). Explicit-set-only.
|
|
14426
|
+
const s = (config.sessions ??= {});
|
|
14427
|
+
const c = (s.componentFrameworks ??= {});
|
|
14428
|
+
(c.overrides ??= {}).CartographerSweep = routed.framework;
|
|
14429
|
+
}
|
|
14430
|
+
console.log(pc.gray(` Cartographer sweep routing: ${routed.framework ?? '(default)'} (source: ${routed.source})`));
|
|
14443
14431
|
}
|
|
14444
|
-
|
|
14445
|
-
|
|
14446
|
-
|
|
14447
|
-
|
|
14448
|
-
|
|
14449
|
-
|
|
14450
|
-
|
|
14451
|
-
|
|
14432
|
+
const engine = new CartographerSweepEngine({
|
|
14433
|
+
tree: cartographer,
|
|
14434
|
+
router: routerLike,
|
|
14435
|
+
llmQueue: sharedLlmQueue,
|
|
14436
|
+
pressure: () => _sampleHostPressure({
|
|
14437
|
+
cpuModerateLoadPerCore: rcfg?.cpuModerateLoadPerCore ?? 1.0,
|
|
14438
|
+
cpuCriticalLoadPerCore: rcfg?.cpuCriticalLoadPerCore ?? 1.5,
|
|
14439
|
+
}),
|
|
14440
|
+
// Author ONLY on the lease holder (multi-machine N× burn fix); single-machine ⇒ always holder.
|
|
14441
|
+
holdsLease: () => (leaseCoordinatorRef ? leaseCoordinatorRef.holdsLease() : true),
|
|
14442
|
+
authorizePaidAuthoring: () => {
|
|
14443
|
+
const decision = cartographerRoots.authorizePaidAuthoring(backgroundResolution.root);
|
|
14444
|
+
return decision.ok
|
|
14445
|
+
? { ok: true }
|
|
14446
|
+
: { ok: false, reason: decision.reason };
|
|
14447
|
+
},
|
|
14448
|
+
config: {
|
|
14449
|
+
maxNodesPerPass: num(fsCfg.maxNodesPerPass, 25),
|
|
14450
|
+
maxCentsPerPass: num(fsCfg.maxCentsPerPass, 25),
|
|
14451
|
+
estCentsPerAuthor: num(fsCfg.estCentsPerAuthor, 1),
|
|
14452
|
+
maxLeafBytes: num(fsCfg.maxLeafBytes, 24576),
|
|
14453
|
+
minSummaryChars: num(fsCfg.minSummaryChars, 24),
|
|
14454
|
+
maxSummaryChars: num(fsCfg.maxSummaryChars, 600),
|
|
14455
|
+
allowClaudeFallback: fsCfg.allowClaudeFallback === true,
|
|
14456
|
+
nodeFailQuarantineThreshold: num(fsCfg.nodeFailQuarantineThreshold, 3),
|
|
14457
|
+
maxDeferredPasses: num(fsCfg.maxDeferredPasses, 5),
|
|
14458
|
+
revalidateSamplePerPass: num(fsCfg.revalidateSamplePerPass, 2),
|
|
14459
|
+
minNodesUnderPressure: num(fsCfg.minNodesUnderPressure, 3),
|
|
14460
|
+
// fix instar#1069: off-event-loop detect knobs (worker by default).
|
|
14461
|
+
detectInWorker: fsCfg.detectInWorker !== false,
|
|
14462
|
+
detectTimeoutMs: num(fsCfg.detectTimeoutMs, 120000),
|
|
14463
|
+
detectWorkerHeapMb: num(fsCfg.detectWorkerHeapMb, 1536),
|
|
14464
|
+
maxIndexBytes: num(fsCfg.maxIndexBytes, 200 * 1024 * 1024),
|
|
14465
|
+
snapshotSampleMax: num(fsCfg.snapshotSampleMax, 500),
|
|
14466
|
+
gitMaxBuffer: num(fsCfg.gitMaxBuffer, 64 * 1024 * 1024),
|
|
14467
|
+
detectCandidateHeadroom: num(fsCfg.detectCandidateHeadroom, 4),
|
|
14468
|
+
detectGraceMs: num(fsCfg.cadenceMs, 600000) * 2,
|
|
14469
|
+
},
|
|
14470
|
+
stateDir: config.stateDir,
|
|
14471
|
+
log: (m) => console.log(pc.gray(m)),
|
|
14472
|
+
});
|
|
14473
|
+
cartographerSweepPoller = new CartographerSweepPoller({
|
|
14474
|
+
engine,
|
|
14475
|
+
cadenceMs: num(fsCfg.cadenceMs, 600000),
|
|
14476
|
+
idleCadenceMs: num(fsCfg.idleCadenceMs, 1800000),
|
|
14477
|
+
zeroProgressTicksToBreak: num(fsCfg.zeroProgressTicksToBreak, 3),
|
|
14478
|
+
breakerReescalateHours: num(fsCfg.breakerReescalateHours, 6),
|
|
14479
|
+
log: (m) => console.log(pc.gray(m)),
|
|
14480
|
+
reportDegradation: (d) => { try {
|
|
14481
|
+
DegradationReporter.getInstance().report(d);
|
|
14482
|
+
}
|
|
14483
|
+
catch { /* never break boot on a report */ } },
|
|
14484
|
+
});
|
|
14485
|
+
// Structural refresh owns the index first; only then may the optional
|
|
14486
|
+
// author loop mutate it. This closes the boot scaffold/sweep write race.
|
|
14487
|
+
void (cartographerPopulationReady ?? Promise.resolve()).then(() => {
|
|
14488
|
+
cartographerSweepPoller?.start();
|
|
14489
|
+
console.log(pc.green(' Cartographer doc-freshness sweep enabled (off-Claude, lease-gated)'));
|
|
14490
|
+
});
|
|
14491
|
+
}
|
|
14452
14492
|
}
|
|
14453
14493
|
}
|
|
14454
14494
|
}
|
|
@@ -14620,13 +14660,6 @@ export async function startServer(options) {
|
|
|
14620
14660
|
// @silent-fallback-ok — capability map non-critical at startup
|
|
14621
14661
|
console.error(` Capability map generation failed (non-critical): ${err.message}`);
|
|
14622
14662
|
});
|
|
14623
|
-
const scopeVerifier = new ScopeVerifier({
|
|
14624
|
-
projectDir: config.projectDir,
|
|
14625
|
-
stateDir: config.stateDir,
|
|
14626
|
-
projectName: config.projectName,
|
|
14627
|
-
});
|
|
14628
|
-
// Load any persisted topic-project bindings
|
|
14629
|
-
scopeVerifier.loadTopicBindings();
|
|
14630
14663
|
// Context Hierarchy — tiered context loading for session efficiency
|
|
14631
14664
|
const contextHierarchy = new ContextHierarchy({
|
|
14632
14665
|
stateDir: config.stateDir,
|
|
@@ -23649,7 +23682,7 @@ export async function startServer(options) {
|
|
|
23649
23682
|
userDirected: true, status: 'open', assignee: null, priority: 'medium',
|
|
23650
23683
|
})),
|
|
23651
23684
|
});
|
|
23652
|
-
const server = new AgentServer({ config, subscriptionEmailBinding: credentialLocationLedger, subscriptionEmailBarrier, subscriptionIdentityOracle: credentialIdentityOracle, sessionManager, llmQueue: sharedLlmQueue, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper,
|
|
23685
|
+
const server = new AgentServer({ config, subscriptionEmailBinding: credentialLocationLedger, subscriptionEmailBarrier, subscriptionIdentityOracle: credentialIdentityOracle, sessionManager, llmQueue: sharedLlmQueue, state, scheduler, telegram, relationships, feedback, feedbackAnomalyDetector, dispatches, updateChecker, autoUpdater, autoDispatcher, quotaTracker, quotaManager, publisher, viewer, tunnel, evolution, watchdog, topicMemory, triageNurse, projectMapper, cartographerRoots: cartographerRoots ?? undefined, coherenceGate: scopeVerifier, contextHierarchy, canonicalState, operationGate, sentinel, adaptiveTrust, memoryMonitor, orphanReaper, coherenceMonitor, commitmentTracker, subscriptionPool, accountFollowMePeerViews: async () => { const nickById = new Map((_listPoolMachines?.() ?? []).map((m) => [m.machineId, m.nickname ?? m.machineId])); let peers = (_resolvePeerUrls?.() ?? []).map((p) => ({ machineId: p.machineId, nickname: nickById.get(p.machineId) ?? p.machineId, url: p.url })); if (peers.length === 0) {
|
|
23653
23686
|
peers = (_listPoolMachines?.() ?? []).filter((m) => m.machineId !== _meshSelfId && !!m.lastKnownUrl).map((m) => ({ machineId: m.machineId, nickname: m.nickname ?? m.machineId, url: m.lastKnownUrl }));
|
|
23654
23687
|
} if (peers.length === 0)
|
|
23655
23688
|
return []; const { fetchPeerSubscriptionViews } = await import('../core/fetchPeerSubscriptionViews.js'); return fetchPeerSubscriptionViews({ peers: () => peers, fetchImpl: fetch, authToken: config.authToken ?? '' }); }, quotaPoller, quotaAwareScheduler: _quotaAwareScheduler ?? undefined, proactiveSwapMonitor: _proactiveSwapMonitor ?? undefined, inUseAccountResolver, enrollmentWizard, accountFollowMeRevocation, credentialRepointing, semanticMemory, activitySentinel, rateLimitSentinel, releaseReadinessSentinel: releaseReadinessSentinel ?? undefined, greenPrAutoMerger: greenPrAutoMerger ?? undefined, guardLatchStore: guardLatchStore ?? undefined, messageRouter, summarySentinel, spawnManager, systemReviewer, capabilityMapper, selfKnowledgeTree, coverageAuditor, topicResumeMap: _topicResumeMap ?? undefined, topicProfile: _topicProfileCtx ?? undefined, sessionRefresh: _sessionRefresh ?? undefined, autonomyManager, trustElevationTracker, autonomousEvolution, coordinator: coordinator.enabled ? coordinator : undefined, meshBindActive: coordinator.managers.identityManager.hasIdentity() && config.multiMachine?.meshTransport?.enabled !== false, localSigningKeyPem, leaseTransport, peerEndpointRecorder, getSelfMeshEndpoints, 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, conversationRegistry, conversationBindAuth, conversationFollowThrough, whatsappBusinessBackend, messageBridge, hookEventReceiver, worktreeMonitor, subagentTracker, instructionsVerifier, handshakeManager: threadlineHandshake, threadlineRouter, conversationStore, threadLog, threadMessageRecorder, warrantsReplyGate, collaborationSurfacer, threadResumeMap, topicLinkageHandler: topicLinkageHandler ?? undefined, threadlineRelayClient, getLastRelayEvent: threadlineGetLastRelayEvent, threadlineReplyWaiters, listenerManager: listenerManager ?? undefined, a2aDeliveryTracker: a2aDeliveryTracker ?? undefined, responseReviewGate, reviewCanaryBattery, messagingToneGate, outboundDedupGate, telemetryHeartbeat, pasteManager, featureRegistry, discoveryEvaluator, completionEvaluator, unifiedTrust, liveConfig, sharedStateLedger, ledgerSessionRegistry, worktreeManager, oidcEnrolledRepos: parallelDevConfig?.oidcEnrolledRepos, initiativeTracker, projectRoundRunner, projectDriftChecker, machineHeartbeat, machinePoolRegistry, ropeHealthMonitor, writeAdmission: writeAdmission ?? undefined, getInboundQueue: () => _inboundQueue, getMachineCoherence: () => _machineCoherenceSentinel, getSingleMachineFailoverGap: () => _singleMachineFailoverGap, getMissingLoginSession: () => _missingLoginSession, getSessionPoolFailoverRunner: () => _sessionPoolFailoverRunnerDriver?.status() ?? null, sessionPoolPromotionActivation: _sessionPoolPromotionActivation, meshRpcDispatcher, deliverA2aToMachine: _deliverA2aToMachine ?? undefined, workingSetPullCoordinator, workingSetArtifactManager, orchestratorPoller, commitmentReplicaStore, preferenceReplicaStore, replicatedRecordEmitter, conflictStore, rollbackUnmerge, droppedOriginRegistry, preferencesUnionReader, forwardCommitmentMutate, sessionOwnershipRegistry, sendDrain: _sendDrain ?? undefined, topicPinStore: _topicPinStore ?? undefined, topicPinSkewQuarantine: _topicPinSkewQuarantine ?? undefined, topicPinFoldView: _topicPinFoldView ?? undefined, ownershipReconciler: _ownershipReconciler ?? undefined, staleOwnerEngine: _staleOwnerEngine ?? undefined, duplicateReconciler: _duplicateReconciler ?? undefined, ownerDarkLadder: _ownerDarkLadder ?? undefined, spawnAdmission: _spawnAdmission ?? undefined, judgmentProvenance: _judgmentProvenance ?? undefined, leaseHandback: _leaseHandbackCtx ?? undefined, streamTicketStore: _streamTicketStore ?? undefined, poolStreamAllowRemoteInput: config.dashboard?.poolStream?.allowRemoteInput ?? false, poolStreamConnector: _poolStreamConnector ?? undefined, secretSync: _secretSyncHandle ?? undefined, meshSelfId: _meshSelfId ?? undefined, resolveRouterUrl: _resolveRouterUrl ?? undefined, resolvePeerUrls: _resolvePeerUrls ?? undefined, guardRegistry, listPoolMachines: _listPoolMachines ?? undefined, deliverMandateToMachine: _deliverMandateToMachine ?? undefined, poolLink: _poolLink ?? undefined, poolPollCache: _poolPollCache ?? undefined, sessionPoolE2EResultStore, proxyCoordinator, topicIntentStore, topicIntentArcCheck, usherSignalStore, intelligence: sharedIntelligence ?? undefined, telegramBridgeConfig, telegramBridge: telegramBridge ?? undefined, threadlineObservability, briefDeps, workingMemory, taskFlowRegistry, threadlineFlowBridge, sessionReaper, agentWorktreeReaper, externalHogSentinel, orphanedWorkSentinel, mcpProcessReaper, geminiLoopRunner, sleepController, agentActivityState, reapLog, resumeQueue, resumeDrainer, autonomousLivenessReconciler, enforcedTerminationStatus: () => enforcedTerminationWatchdog?.guardStatus() ?? null, prHandLease: prHandLease ?? undefined, operatorStopRecorder: recordOperatorStop, sleepWakeDetector, unjustifiedStopGate, stopGateDb, stopNotifier, liveTestGate, liveTestGateMode, liveTestRunnerCtx }); // Resolve the late-bound topic-operator getter (increment 2e): routing was
|