instar 1.3.777 → 1.3.779
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/dashboard/index.html +134 -0
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +10 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +10 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +11 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +111 -1
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/StopGateDb.d.ts +31 -0
- package/dist/core/StopGateDb.d.ts.map +1 -1
- package/dist/core/StopGateDb.js +103 -5
- package/dist/core/StopGateDb.js.map +1 -1
- package/dist/core/UnjustifiedStopGate.d.ts +30 -1
- package/dist/core/UnjustifiedStopGate.d.ts.map +1 -1
- package/dist/core/UnjustifiedStopGate.js +97 -3
- package/dist/core/UnjustifiedStopGate.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +6 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/natureRoutingMap.d.ts +110 -0
- package/dist/core/natureRoutingMap.d.ts.map +1 -0
- package/dist/core/natureRoutingMap.js +120 -0
- package/dist/core/natureRoutingMap.js.map +1 -0
- package/dist/core/stopGateTranscriptTail.d.ts +48 -0
- package/dist/core/stopGateTranscriptTail.d.ts.map +1 -0
- package/dist/core/stopGateTranscriptTail.js +118 -0
- package/dist/core/stopGateTranscriptTail.js.map +1 -0
- package/dist/core/types.d.ts +11 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +104 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/server/stopGate.d.ts +8 -0
- package/dist/server/stopGate.d.ts.map +1 -1
- package/dist/server/stopGate.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +63 -63
- package/upgrades/1.3.778.md +47 -0
- package/upgrades/1.3.779.md +23 -0
- package/upgrades/eli16/routing-map-surface.md +41 -0
- package/upgrades/side-effects/routing-map-surface.md +117 -0
- package/upgrades/side-effects/self-deferral-guard-shadow.eli16.md +48 -0
package/dashboard/index.html
CHANGED
|
@@ -2751,6 +2751,7 @@
|
|
|
2751
2751
|
<button class="tab" data-tab="tokens" onclick="switchTab('tokens')">Tokens</button>
|
|
2752
2752
|
<button class="tab" data-tab="resources" onclick="switchTab('resources')">Resource Usage</button>
|
|
2753
2753
|
<button class="tab" data-tab="llm-activity" onclick="switchTab('llm-activity')">LLM Activity</button>
|
|
2754
|
+
<button class="tab" data-tab="routing-map" onclick="switchTab('routing-map')">Routing Map</button>
|
|
2754
2755
|
<button class="tab" data-tab="threadline" onclick="switchTab('threadline')">Threadline</button>
|
|
2755
2756
|
<button class="tab" data-tab="evidence" onclick="switchTab('evidence')">Evidence</button>
|
|
2756
2757
|
<button class="tab" data-tab="process-health" onclick="switchTab('process-health')">Process Health</button>
|
|
@@ -3337,6 +3338,41 @@
|
|
|
3337
3338
|
</div>
|
|
3338
3339
|
</div>
|
|
3339
3340
|
|
|
3341
|
+
<!-- Routing Map tab — the read-only nature-axis routing map (FD11 readable canary,
|
|
3342
|
+
docs/specs/nature-axis-routing.md). For every internal job-kind: which door +
|
|
3343
|
+
model it uses and its full ordered fallback tier list, with injection-safe /
|
|
3344
|
+
money-gated / critical-gate flags. Read-only display; data from
|
|
3345
|
+
/intelligence/routing/chains. No controls — the map only DISPLAYS the routing. -->
|
|
3346
|
+
<div id="routingMapPanel" style="display:none;flex-direction:column;padding:20px;gap:16px;overflow-y:auto">
|
|
3347
|
+
<div style="display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap">
|
|
3348
|
+
<h2 style="margin:0">Routing Map</h2>
|
|
3349
|
+
<button onclick="loadRoutingMap()" style="padding:6px 12px">Refresh</button>
|
|
3350
|
+
</div>
|
|
3351
|
+
<div style="font-size:12px;color:var(--text-dim);line-height:1.4">
|
|
3352
|
+
Where each internal job-kind sends its AI calls. Every background check, gate, and
|
|
3353
|
+
sentinel has a <b>lane</b> (its "nature") and a fallback list of <b>doors</b> — the ways
|
|
3354
|
+
it can reach a model. This shows, per lane, the ordered door + model list it tries, and
|
|
3355
|
+
flags a door that's <b>metered</b> (a paid API, skipped for now), <b>money-gated</b>, or
|
|
3356
|
+
that must never take untrusted input. Read-only: it shows the map, it changes nothing.
|
|
3357
|
+
</div>
|
|
3358
|
+
|
|
3359
|
+
<!-- The four lanes (chains) -->
|
|
3360
|
+
<div id="routingMapChainsCard" style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:12px">
|
|
3361
|
+
<div style="font-weight:600">Lanes (fallback order)</div>
|
|
3362
|
+
<div id="routingMapChainsBody" style="font-size:13px;overflow-x:auto">
|
|
3363
|
+
<div style="color:var(--text-dim)">Loading...</div>
|
|
3364
|
+
</div>
|
|
3365
|
+
</div>
|
|
3366
|
+
|
|
3367
|
+
<!-- Per job-kind mapping -->
|
|
3368
|
+
<div style="border:1px solid var(--border);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:8px">
|
|
3369
|
+
<div style="font-weight:600">By job-kind</div>
|
|
3370
|
+
<div id="routingMapComponentsBody" style="font-size:13px;overflow-x:auto">
|
|
3371
|
+
<div style="color:var(--text-dim)">Loading...</div>
|
|
3372
|
+
</div>
|
|
3373
|
+
</div>
|
|
3374
|
+
</div>
|
|
3375
|
+
|
|
3340
3376
|
<!-- Evidence Tab (WikiClaim Phase 4) — per-entity evidence + reverse "what cites this?" view.
|
|
3341
3377
|
Spec: docs/specs/OPENCLAW-IMPORT-WIKICLAIM-EVIDENCE-SPEC.md § Phase 4 (line 343). -->
|
|
3342
3378
|
<!-- process-health tab -->
|
|
@@ -5004,6 +5040,12 @@
|
|
|
5004
5040
|
display: ['flex'],
|
|
5005
5041
|
onActivate: () => { if (typeof loadLlmActivity === 'function') loadLlmActivity(); },
|
|
5006
5042
|
},
|
|
5043
|
+
{
|
|
5044
|
+
id: 'routing-map',
|
|
5045
|
+
panels: ['routingMapPanel'],
|
|
5046
|
+
display: ['flex'],
|
|
5047
|
+
onActivate: () => { if (typeof loadRoutingMap === 'function') loadRoutingMap(); },
|
|
5048
|
+
},
|
|
5007
5049
|
{
|
|
5008
5050
|
id: 'threadline',
|
|
5009
5051
|
panels: ['threadlineTab'],
|
|
@@ -5676,6 +5718,98 @@
|
|
|
5676
5718
|
}
|
|
5677
5719
|
}
|
|
5678
5720
|
|
|
5721
|
+
async function loadRoutingMap() {
|
|
5722
|
+
const chainsEl = document.getElementById('routingMapChainsBody');
|
|
5723
|
+
const compsEl = document.getElementById('routingMapComponentsBody');
|
|
5724
|
+
// Render one door+model position as a compact chip line.
|
|
5725
|
+
const flags = (p) => {
|
|
5726
|
+
const f = [];
|
|
5727
|
+
if (p.doorClass === 'metered') f.push('metered' + (p.skippedInIncrementA ? ' · skipped now' : ''));
|
|
5728
|
+
if (p.moneyGated) f.push('money-gated');
|
|
5729
|
+
if (p.injectionSafe === false) f.push('unsafe for untrusted input');
|
|
5730
|
+
if (p.claudeBanned) f.push('no-Claude');
|
|
5731
|
+
return f.length ? ' <span style="color:var(--text-dim)">(' + f.map(escapeHtml).join(' · ') + ')</span>' : '';
|
|
5732
|
+
};
|
|
5733
|
+
const posLine = (p, i) => '<div style="padding:2px 0">' +
|
|
5734
|
+
'<span style="color:var(--text-dim)">' + (i + 1) + '.</span> ' +
|
|
5735
|
+
'<b>' + escapeHtml(p.door) + '</b> → ' + escapeHtml(p.modelId) + flags(p) + '</div>';
|
|
5736
|
+
const th = (t, right) => '<th style="padding:6px 8px;' + (right ? 'text-align:right' : 'text-align:left') + '">' + t + '</th>';
|
|
5737
|
+
const td = (v, right) => '<td style="padding:6px 8px;vertical-align:top;' + (right ? 'text-align:right' : '') + '">' + v + '</td>';
|
|
5738
|
+
try {
|
|
5739
|
+
const data = await apiFetch('/intelligence/routing/chains');
|
|
5740
|
+
const chains = data.chains || [];
|
|
5741
|
+
chainsEl.innerHTML =
|
|
5742
|
+
'<div style="font-size:11px;color:var(--text-dim);margin-bottom:8px">Enforced default framework: <b>' +
|
|
5743
|
+
escapeHtml(String(data.defaultFramework || '—')) + '</b> · injection signal: ' +
|
|
5744
|
+
escapeHtml(String(data.injectionExposureSource || '—')) + '</div>' +
|
|
5745
|
+
'<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px">' +
|
|
5746
|
+
chains.map((c) =>
|
|
5747
|
+
'<div style="border:1px solid var(--border);border-radius:6px;padding:10px">' +
|
|
5748
|
+
'<div style="font-weight:600;margin-bottom:4px">' + escapeHtml(c.chain) + '</div>' +
|
|
5749
|
+
(c.positions || []).map(posLine).join('') +
|
|
5750
|
+
'</div>').join('') +
|
|
5751
|
+
'</div>';
|
|
5752
|
+
|
|
5753
|
+
const comps = (data.components || []).slice().sort((a, b) => {
|
|
5754
|
+
// Mapped (has a chain) first, then by component name.
|
|
5755
|
+
if (!!a.chain !== !!b.chain) return a.chain ? -1 : 1;
|
|
5756
|
+
return String(a.component).localeCompare(String(b.component));
|
|
5757
|
+
});
|
|
5758
|
+
if (comps.length === 0) {
|
|
5759
|
+
compsEl.innerHTML = '<div style="color:var(--text-dim)">No components mapped.</div>';
|
|
5760
|
+
return;
|
|
5761
|
+
}
|
|
5762
|
+
const yn = (v) => v === true ? 'yes' : (v === false ? 'no' : '—');
|
|
5763
|
+
compsEl.innerHTML =
|
|
5764
|
+
'<table style="width:100%;border-collapse:collapse;font-size:12px;min-width:760px">' +
|
|
5765
|
+
'<thead><tr style="color:var(--text-dim)">' +
|
|
5766
|
+
th('Job-kind') + th('Category') + th('Lane') + th('Enforced now') +
|
|
5767
|
+
th('Critical gate') + th('Injection exposure') + th('Fallback order') +
|
|
5768
|
+
'</tr></thead><tbody>' +
|
|
5769
|
+
comps.map((c) => {
|
|
5770
|
+
const route = (c.route && c.route.length)
|
|
5771
|
+
? c.route.map(posLine).join('')
|
|
5772
|
+
: '<span style="color:var(--text-dim)">legacy category routing (no nature lane)</span>';
|
|
5773
|
+
const lane = c.chain
|
|
5774
|
+
? escapeHtml(c.chain) + ' <span style="color:var(--text-dim)">(' + escapeHtml(String(c.nature)) + ')</span>'
|
|
5775
|
+
: '<span style="color:var(--text-dim)">—</span>';
|
|
5776
|
+
// Prefer the richer FD5b exposure classification; fall back to the untrusted-input flag.
|
|
5777
|
+
let exposure;
|
|
5778
|
+
if (c.injectionExposure) {
|
|
5779
|
+
const ch = c.injectionExposure.channels || {};
|
|
5780
|
+
const chans = ['user', 'model', 'tool'].filter((k) => ch[k]);
|
|
5781
|
+
exposure = c.injectionExposure.exposed
|
|
5782
|
+
? 'exposed' + (chans.length ? ' <span style="color:var(--text-dim)">(' + chans.join('/') + ')</span>' : '')
|
|
5783
|
+
: 'not exposed' + (c.injectionExposure.reason ? ' <span style="color:var(--text-dim)">(' + escapeHtml(c.injectionExposure.reason) + ')</span>' : '');
|
|
5784
|
+
} else if (c.untrustedInput === true) {
|
|
5785
|
+
exposure = 'exposed';
|
|
5786
|
+
} else if (c.untrustedInput === false) {
|
|
5787
|
+
exposure = 'not exposed' + (c.untrustedInputReason ? ' <span style="color:var(--text-dim)">(' + escapeHtml(c.untrustedInputReason) + ')</span>' : '');
|
|
5788
|
+
} else {
|
|
5789
|
+
exposure = '—';
|
|
5790
|
+
}
|
|
5791
|
+
return '<tr style="border-top:1px solid var(--border)">' +
|
|
5792
|
+
td('<b>' + escapeHtml(c.component) + '</b>') +
|
|
5793
|
+
td(escapeHtml(String(c.category || '—'))) +
|
|
5794
|
+
td(lane) +
|
|
5795
|
+
td(escapeHtml(String(c.enforcedFramework || '—'))) +
|
|
5796
|
+
td(c.criticalGate ? '<b>yes</b>' : 'no') +
|
|
5797
|
+
td(exposure) +
|
|
5798
|
+
td(route) +
|
|
5799
|
+
'</tr>';
|
|
5800
|
+
}).join('') +
|
|
5801
|
+
'</tbody></table>';
|
|
5802
|
+
} catch (err) {
|
|
5803
|
+
const m = err && err.message ? String(err.message) : String(err);
|
|
5804
|
+
if (/503|unavailable|not initialized/i.test(m)) {
|
|
5805
|
+
chainsEl.innerHTML = '<div style="color:var(--text-dim)">The routing map isn\'t available on this agent (no AI provider configured).</div>';
|
|
5806
|
+
} else {
|
|
5807
|
+
chainsEl.innerHTML = '<div style="color:var(--red)">Error: ' + escapeHtml(m) + '</div>';
|
|
5808
|
+
}
|
|
5809
|
+
compsEl.innerHTML = '';
|
|
5810
|
+
}
|
|
5811
|
+
}
|
|
5812
|
+
|
|
5679
5813
|
async function loadResources() {
|
|
5680
5814
|
const headlineEl = document.getElementById('resourcesHeadlineBody');
|
|
5681
5815
|
const sourcesEl = document.getElementById('resourcesSourcesBody');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwDH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAyBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA6H7D,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;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgmDD;;;;;;;;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,CAonBN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwDH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAyBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA6H7D,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;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgmDD;;;;;;;;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,CAonBN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6rmBtE;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
|
@@ -15108,7 +15108,16 @@ export async function startServer(options) {
|
|
|
15108
15108
|
if (sharedIntelligence && stopGateDb) {
|
|
15109
15109
|
try {
|
|
15110
15110
|
const { UnjustifiedStopGate } = await import('../core/UnjustifiedStopGate.js');
|
|
15111
|
-
|
|
15111
|
+
const { resolveDevAgentGate } = await import('../core/devAgentGate.js');
|
|
15112
|
+
// Turn-End Self-Deferral Guard (Phase A / shadow) — dev-gated dark:
|
|
15113
|
+
// `monitoring.selfDeferralGuard` OMITS `enabled` so resolveDevAgentGate
|
|
15114
|
+
// decides (LIVE on a dev agent, DARK on the fleet). When on, the
|
|
15115
|
+
// authority OFFERS the U_SELF_DEFERRAL rule + its four shadow fields.
|
|
15116
|
+
const selfDeferralGuardEnabled = resolveDevAgentGate(config.monitoring?.selfDeferralGuard?.enabled, config);
|
|
15117
|
+
unjustifiedStopGate = new UnjustifiedStopGate({
|
|
15118
|
+
intelligence: sharedIntelligence,
|
|
15119
|
+
selfDeferralGuardEnabled,
|
|
15120
|
+
});
|
|
15112
15121
|
}
|
|
15113
15122
|
catch (err) {
|
|
15114
15123
|
DegradationReporter.getInstance().report({
|