@sema-agent/client-core 0.104.1 → 0.106.0
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/CHANGELOG.md +310 -0
- package/README.md +36 -14
- package/dist/adapt/arms.js +23 -6
- package/dist/adapter/activeRunSelfHeal.d.ts +14 -2
- package/dist/adapter/activeRunSelfHeal.js +90 -12
- package/dist/adapter/downstream/eventToSdkMessage.d.ts +0 -5
- package/dist/adapter/downstream/eventToSdkMessage.js +24 -23
- package/dist/adapter/downstream/terminalToSdkResult.js +2 -3
- package/dist/adapter/downstream/wiringManifestView.d.ts +7 -3
- package/dist/adapter/downstream/wiringManifestView.js +25 -1
- package/dist/adapter/runStream.js +8 -5
- package/dist/approvalReachWire.d.ts +1 -0
- package/dist/approvalReachWire.js +4 -1
- package/dist/approvalSeat.d.ts +21 -0
- package/dist/approvalSeat.js +73 -0
- package/dist/assistantInbox.d.ts +2 -0
- package/dist/assistantInbox.js +3 -0
- package/dist/checkpointRowVerdict.d.ts +23 -0
- package/dist/checkpointRowVerdict.js +89 -0
- package/dist/cloudConfigWireCaps.js +3 -0
- package/dist/compensations.js +6 -6
- package/dist/coreValuePorts.d.ts +14 -1
- package/dist/coreValuePorts.js +14 -0
- package/dist/decideFailureNote.js +3 -1
- package/dist/decideReceipt.d.ts +9 -0
- package/dist/decideReceipt.js +29 -1
- package/dist/declared/supportFloorDeclared.js +2 -2
- package/dist/deviceRebind.d.ts +7 -0
- package/dist/deviceRebind.js +39 -5
- package/dist/displayUntrusted.d.ts +4 -2
- package/dist/displayUntrusted.js +45 -22
- package/dist/engineAddress.d.ts +3 -0
- package/dist/engineAddress.js +25 -0
- package/dist/engineDirectory.js +9 -17
- package/dist/engineErrorCodes.d.ts +8 -0
- package/dist/engineErrorCodes.js +8 -0
- package/dist/engineGenerationPort.d.ts +11 -2
- package/dist/engineGenerationPort.js +63 -9
- package/dist/engineHealthFacts.d.ts +5 -0
- package/dist/engineHealthFacts.js +11 -0
- package/dist/engineNoticeCodes.d.ts +26 -3
- package/dist/engineNoticeCodes.js +52 -7
- package/dist/engineRowRef.js +1 -1
- package/dist/errorSupplementRoles.js +2 -0
- package/dist/eventLeg.d.ts +3 -3
- package/dist/eventLeg.js +25 -4
- package/dist/fleet/fleetProjection.js +26 -5
- package/dist/generated/engineFactTables.d.ts +3 -1
- package/dist/generated/engineFactTables.js +4 -1
- package/dist/generated/engineNoticeTables.js +19 -4
- package/dist/generated/sdkFactTables.d.ts +5 -0
- package/dist/generated/sdkFactTables.js +24 -0
- package/dist/generated/settingsSchemaFns.d.ts +11 -0
- package/dist/generated/settingsSchemaFns.js +2 -1
- package/dist/generated/settingsSchemaSafetyMergeSpec.js +1 -1
- package/dist/generated/settingsSchemaSettingsSources.d.ts +1 -1
- package/dist/generated/settingsSchemaSettingsSources.js +22 -2
- package/dist/headlessReconnectWire.js +31 -4
- package/dist/hitl/approvalLiveFace.d.ts +17 -0
- package/dist/hitl/approvalLiveFace.js +35 -0
- package/dist/hitl/approvalQueueRow.d.ts +21 -0
- package/dist/hitl/approvalQueueRow.js +69 -0
- package/dist/hitl/approvalsFeed.d.ts +5 -4
- package/dist/hitl/approvalsFeed.js +38 -6
- package/dist/hitl/askGateWire.js +26 -2
- package/dist/hitl/askParkRowRouting.d.ts +4 -3
- package/dist/hitl/askParkRowRouting.js +15 -3
- package/dist/hitl/automaticAnswerVerdict.js +13 -10
- package/dist/hitl/crashConverged.d.ts +5 -1
- package/dist/hitl/decisionConflict.js +2 -1
- package/dist/hitl/decisionRefusal.js +1 -1
- package/dist/hitl/decisionSend.d.ts +1 -0
- package/dist/hitl/decisionSend.js +14 -2
- package/dist/hitl/frameRouter.d.ts +4 -0
- package/dist/hitl/frameRouter.js +18 -5
- package/dist/hitl/gateIdentity.d.ts +1 -0
- package/dist/hitl/gateIdentity.js +3 -0
- package/dist/hitl/hitlBridge.d.ts +1 -1
- package/dist/hitl/hitlBridge.js +26 -5
- package/dist/hitl/livePendingAsk.d.ts +5 -0
- package/dist/hitl/livePendingAsk.js +6 -1
- package/dist/hitl/planReviewCard.d.ts +23 -0
- package/dist/hitl/planReviewCard.js +250 -0
- package/dist/hitl/planReviewWire.d.ts +39 -14
- package/dist/hitl/planReviewWire.js +450 -163
- package/dist/hitl/sessionAllowRoute.d.ts +2 -0
- package/dist/hitl/sessionAllowRoute.js +7 -0
- package/dist/hitl/sessionPolicyWire.d.ts +1 -7
- package/dist/hitl/sessionPolicyWire.js +3 -43
- package/dist/hitl/subagentSource.d.ts +1 -0
- package/dist/hitl/subagentSource.js +13 -0
- package/dist/hitl/toolApprovalWire.d.ts +3 -2
- package/dist/hitl/toolApprovalWire.js +79 -37
- package/dist/hostSettingsSource.d.ts +5 -2
- package/dist/hostSettingsSource.js +19 -10
- package/dist/hostTurnSettings.d.ts +5 -6
- package/dist/hostTurnSettings.js +106 -26
- package/dist/i18n/messages.en.d.ts +85 -12
- package/dist/i18n/messages.en.js +85 -12
- package/dist/i18n/messages.zh.js +88 -12
- package/dist/index.d.ts +35 -4
- package/dist/index.js +19 -2
- package/dist/liveInitToolFace.js +0 -1
- package/dist/liveModelCatalog.d.ts +15 -0
- package/dist/liveModelCatalog.js +40 -0
- package/dist/mcpTransportKindsCapability.d.ts +18 -0
- package/dist/mcpTransportKindsCapability.js +75 -0
- package/dist/mcpWireCaps.d.ts +4 -1
- package/dist/mcpWireCaps.js +25 -14
- package/dist/modelCapabilityProbe.js +66 -33
- package/dist/notifications.d.ts +9 -0
- package/dist/notifications.js +11 -2
- package/dist/ownKey.d.ts +4 -1
- package/dist/ownKey.js +8 -2
- package/dist/permissionModeWriteCapability.d.ts +13 -0
- package/dist/permissionModeWriteCapability.js +35 -0
- package/dist/permissionsAllowGrantCapability.d.ts +3 -0
- package/dist/permissionsAllowGrantCapability.js +26 -3
- package/dist/permissionsDeclaration.d.ts +25 -3
- package/dist/permissionsDeclaration.js +69 -41
- package/dist/planReviewCardFacts.d.ts +116 -0
- package/dist/planReviewCardFacts.js +469 -0
- package/dist/projectSeed.d.ts +39 -0
- package/dist/projectSeed.js +80 -0
- package/dist/promptDelivery.js +1 -1
- package/dist/reattachWindow.d.ts +8 -1
- package/dist/reattachWindow.js +44 -12
- package/dist/replayBody.d.ts +7 -6
- package/dist/replayBody.js +62 -7
- package/dist/request/taskRequest.js +3 -4
- package/dist/ruleCompileVerdict.d.ts +0 -2
- package/dist/ruleCompileVerdict.js +0 -31
- package/dist/ruleRefusalSentence.js +0 -3
- package/dist/runFollow.d.ts +30 -0
- package/dist/runFollow.js +117 -0
- package/dist/runLedgerSnapshot.d.ts +20 -0
- package/dist/runLedgerSnapshot.js +272 -0
- package/dist/runPermissionModeSwitch.d.ts +57 -0
- package/dist/runPermissionModeSwitch.js +135 -0
- package/dist/runReattachPolicy.d.ts +16 -5
- package/dist/runReattachPolicy.js +72 -24
- package/dist/runTerminal.js +30 -8
- package/dist/sandboxWire.d.ts +0 -3
- package/dist/sandboxWire.js +0 -9
- package/dist/seam.d.ts +17 -7
- package/dist/seam.js +13 -1
- package/dist/seatContract.d.ts +57 -7
- package/dist/seatContract.js +133 -3
- package/dist/serverSupportRange.d.ts +18 -0
- package/dist/serverSupportRange.js +25 -0
- package/dist/sessionEngine.d.ts +156 -0
- package/dist/sessionEngine.js +464 -0
- package/dist/sessionMap.d.ts +11 -1
- package/dist/sessionMap.js +35 -9
- package/dist/sessionMemoryErase.d.ts +1 -1
- package/dist/sessionMemoryErase.js +5 -0
- package/dist/sessionMemoryStatus.d.ts +27 -1
- package/dist/sessionMemoryStatus.js +117 -0
- package/dist/sessionMemorySync.d.ts +31 -0
- package/dist/sessionMemorySync.js +95 -0
- package/dist/sessionRowTag.d.ts +4 -0
- package/dist/sessionRowTag.js +18 -0
- package/dist/settingsLayerAdmission.d.ts +1 -0
- package/dist/settingsLayerAdmission.js +4 -1
- package/dist/sseIdleTriage.d.ts +3 -1
- package/dist/sseIdleTriage.js +19 -4
- package/dist/subagent/engineSubagentTail.js +2 -0
- package/dist/subagentContentStore.d.ts +3 -0
- package/dist/subagentContentStore.js +10 -1
- package/dist/toolResult.js +1 -1
- package/dist/turnFailurePresentation.d.ts +5 -2
- package/dist/turnFailurePresentation.js +12 -4
- package/dist/wireRefusalCopy.js +2 -6
- package/docs/INTEGRATION-CLIENTS.md +1507 -18
- package/package.json +5 -5
package/dist/hostTurnSettings.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SETTINGS_CLASSIFY_HOOKS_CONFIG } from './generated/settingsSchemaFns.js';
|
|
2
2
|
import { hostLog } from './host.js';
|
|
3
3
|
import { layerNotAppliedRefusesTurn, salvageSettingsHooksEntries } from './settingsHooksSalvage.js';
|
|
4
|
-
import { ADOPTED_LAYERS, HOST_SETTINGS_LAYERS, HostSettingsSourceShapeError, permissionRulesOf, MANAGED_READING_DISPOSITIONS, adoptHostSettingsRead, mintHostSettingsSession, readHostSettingsOnce, remintSameContent, sessionSnapshotOf, settingsValueOf, sourceOfRead, } from './hostSettingsSource.js';
|
|
4
|
+
import { ADOPTED_LAYERS, HOST_SETTINGS_LAYERS, HostSettingsSourceShapeError, TIGHTEN_ONLY_HOST_SETTINGS_LAYERS, permissionBucketOf, permissionRulesOf, MANAGED_READING_DISPOSITIONS, adoptHostSettingsRead, mintHostSettingsSession, readHostSettingsOnce, remintSameContent, sessionSnapshotOf, settingsValueOf, sourceOfRead, } from './hostSettingsSource.js';
|
|
5
5
|
import { hooksWirePlan } from './hooksWireCaps.js';
|
|
6
6
|
import { submissionSurfaceOf } from './request/submissionIdentity.js';
|
|
7
7
|
import { displayUntrusted } from './displayUntrusted.js';
|
|
@@ -10,7 +10,9 @@ import { fileHistoryTightenVerdict, fileHistoryUnjudgedRefusal } from './fileHis
|
|
|
10
10
|
import { msg, renderMessage } from './i18n/translate.js';
|
|
11
11
|
import { newRulePortsProjection, projectPermissionsDeclaration, rulePortsMissingOf, WIRE_RULE_TRUST_ORDER } from './permissionsDeclaration.js';
|
|
12
12
|
import { assemblyRefusalOf } from './wireFailureShape.js';
|
|
13
|
-
import {
|
|
13
|
+
import { permissionRuleLayersOn } from './permissionsAllowGrantCapability.js';
|
|
14
|
+
import { layerAdmissionReading, layerAdmitted } from './settingsLayerAdmission.js';
|
|
15
|
+
import { SETTINGS_BUILD_LAYER_PARTS_UNREAD_NOTICE } from './generated/settingsSchemaFns.js';
|
|
14
16
|
import { appendOwnElement, ownDataField } from './ownKey.js';
|
|
15
17
|
export const HOST_SUPPLIED_KEYS = Object.freeze(['settings.hooks', 'settings.resolved', 'settings.webSearch', 'settings.outputStyle', 'memory', 'fileHistory']);
|
|
16
18
|
export const HOST_SETTING_CAUSES = Object.freeze([
|
|
@@ -41,6 +43,7 @@ const HOST_SETTING_NOTICE_TEXT = {
|
|
|
41
43
|
'HS-HELD-PREVIOUS': () => renderMessage(msg('session.hostSettings.heldPrevious')),
|
|
42
44
|
'HS-STYLE-MISSING': (what) => renderMessage(msg('session.hostSettings.styleMissing', { name: what })),
|
|
43
45
|
'HS-STYLE-SAFE': () => renderMessage(msg('session.hostSettings.styleSafeMode')),
|
|
46
|
+
'HS-LAYER-PARTS-UNREAD': (line) => line,
|
|
44
47
|
};
|
|
45
48
|
const KEY_NOUN = {
|
|
46
49
|
'settings.hooks': 'the hooks',
|
|
@@ -366,10 +369,60 @@ function stringListOf(v) {
|
|
|
366
369
|
function permissionMemberAdmitted(layer, read, bucket) {
|
|
367
370
|
return layerAdmitted(layer, read.trust, 'permissions', bucket);
|
|
368
371
|
}
|
|
372
|
+
function managedRulesOnly(read) {
|
|
373
|
+
const policyDoc = read.layers.policySettings.doc;
|
|
374
|
+
return MANAGED_READING_DISPOSITIONS[read.managed].ruleScope === 'by-switch' && policyDoc !== null && managedOnlySwitchOn(policyDoc);
|
|
375
|
+
}
|
|
376
|
+
const TIGHTEN_ONLY_LAYER_BUCKETS = Object.freeze(['deny', 'ask']);
|
|
377
|
+
function tightenOnlyBucketsRead(read, layer) {
|
|
378
|
+
if (managedRulesOnly(read))
|
|
379
|
+
return [];
|
|
380
|
+
const doc = read.layers[layer].doc;
|
|
381
|
+
return TIGHTEN_ONLY_LAYER_BUCKETS.filter((bucket) => permissionMemberAdmitted(layer, read, bucket) && permissionBucketOf(doc, bucket) !== undefined);
|
|
382
|
+
}
|
|
383
|
+
function tightenOnlyLayerPartsUnread(read, layer, permissionsRead) {
|
|
384
|
+
const doc = read.layers[layer].doc;
|
|
385
|
+
if (doc === null)
|
|
386
|
+
return [];
|
|
387
|
+
const readBuckets = permissionsRead ? tightenOnlyBucketsRead(read, layer) : [];
|
|
388
|
+
const parts = [];
|
|
389
|
+
const rec = doc;
|
|
390
|
+
for (const key of Object.keys(rec)) {
|
|
391
|
+
const v = rec[key];
|
|
392
|
+
if (key !== 'permissions')
|
|
393
|
+
appendOwnElement(parts, key);
|
|
394
|
+
else if (typeof v !== 'object' || v === null || Array.isArray(v))
|
|
395
|
+
appendOwnElement(parts, key);
|
|
396
|
+
else
|
|
397
|
+
for (const member of Object.keys(v))
|
|
398
|
+
if (!readBuckets.includes(member))
|
|
399
|
+
appendOwnElement(parts, `${key}.${member}`);
|
|
400
|
+
}
|
|
401
|
+
for (const c of read.layers[layer].carriers)
|
|
402
|
+
if (c.status === 'loaded-partial')
|
|
403
|
+
for (const k of c.issues ?? [])
|
|
404
|
+
if (!parts.includes(k))
|
|
405
|
+
appendOwnElement(parts, k);
|
|
406
|
+
return parts;
|
|
407
|
+
}
|
|
408
|
+
function tightenOnlyLayerNotices(read, permissionsRead) {
|
|
409
|
+
const out = [];
|
|
410
|
+
for (const layer of TIGHTEN_ONLY_HOST_SETTINGS_LAYERS) {
|
|
411
|
+
const snap = read.layers[layer];
|
|
412
|
+
if (!snap.enabled || snap.doc === null)
|
|
413
|
+
continue;
|
|
414
|
+
const parts = tightenOnlyLayerPartsUnread(read, layer, permissionsRead);
|
|
415
|
+
const loaded = snap.carriers.filter((c) => c.status === 'loaded' || c.status === 'loaded-partial').map((c) => c.id);
|
|
416
|
+
const file = (loaded.length > 0 ? loaded : snap.carriers.map((c) => c.id)).join(', ');
|
|
417
|
+
const n = SETTINGS_BUILD_LAYER_PARTS_UNREAD_NOTICE({ source: layer, workspace: layerAdmissionReading(read.trust), file, parts });
|
|
418
|
+
if (n !== undefined)
|
|
419
|
+
appendOwnElement(out, notice('HS-LAYER-PARTS-UNREAD', 'session', displayUntrusted(n.line)));
|
|
420
|
+
}
|
|
421
|
+
return out;
|
|
422
|
+
}
|
|
369
423
|
function allowAdmittedFor(read) {
|
|
370
424
|
const disp = MANAGED_READING_DISPOSITIONS[read.managed];
|
|
371
|
-
const
|
|
372
|
-
const managedOnlySwitch = disp.ruleScope === 'by-switch' && policyDoc !== null && managedOnlySwitchOn(policyDoc);
|
|
425
|
+
const managedOnlySwitch = managedRulesOnly(read);
|
|
373
426
|
const degrade = disp.ruleScope === 'degrade';
|
|
374
427
|
return (layer) => {
|
|
375
428
|
if (degrade || managedOnlySwitch)
|
|
@@ -386,17 +439,17 @@ function allowAdmittedFor(read) {
|
|
|
386
439
|
};
|
|
387
440
|
}
|
|
388
441
|
function badPermissionsSource() {
|
|
389
|
-
return new HostSourceShapeError(`hostTurnSettings: sources.resolved must be 'none' or { allowGrantReading, cliArg?, session?, clientOwnedServers
|
|
442
|
+
return new HostSourceShapeError(`hostTurnSettings: sources.resolved must be 'none' or { allowGrantReading, cliArg?, session?, clientOwnedServers? } — since 0.101.0 the permission rules of the settings files come from the settings the entry reads; do not pass snapshot — got something else (the value is not echoed).`);
|
|
390
443
|
}
|
|
391
|
-
function
|
|
444
|
+
function readPermissionSource(src) {
|
|
392
445
|
const key = 'settings.resolved';
|
|
393
446
|
if (src.kind === 'missing')
|
|
394
|
-
return missingArm(key);
|
|
447
|
+
return { kind: 'arm', arm: missingArm(key) };
|
|
395
448
|
if (src.kind === 'threw')
|
|
396
|
-
return unreadableArm(key);
|
|
449
|
+
return { kind: 'arm', arm: unreadableArm(key) };
|
|
397
450
|
const v = src.value;
|
|
398
451
|
if (v === 'none')
|
|
399
|
-
return noSourceArm(key);
|
|
452
|
+
return { kind: 'arm', arm: noSourceArm(key) };
|
|
400
453
|
let allowGrantReading;
|
|
401
454
|
let cliAllow;
|
|
402
455
|
let cliDeny;
|
|
@@ -404,18 +457,15 @@ function permissionsArm(src, side, adoption) {
|
|
|
404
457
|
let sesAsk;
|
|
405
458
|
let owned;
|
|
406
459
|
let ownedRaw;
|
|
407
|
-
let serverVersion;
|
|
408
460
|
try {
|
|
409
461
|
if (!isRecordShape(v) || Object.hasOwn(v, 'snapshot') || !Object.hasOwn(v, 'allowGrantReading'))
|
|
410
462
|
throw badPermissionsSource();
|
|
411
|
-
const sver = ownDataOf(v, 'serverVersion');
|
|
412
|
-
serverVersion = sver.ok && typeof sver.value === 'string' ? sver.value : undefined;
|
|
413
463
|
const g = ownDataOf(v, 'allowGrantReading');
|
|
414
464
|
const c = ownDataOf(v, 'cliArg');
|
|
415
465
|
const se = ownDataOf(v, 'session');
|
|
416
466
|
const o = ownDataOf(v, 'clientOwnedServers');
|
|
417
467
|
if (!g.ok || !c.ok || !se.ok || !o.ok)
|
|
418
|
-
return unreadableArm(key);
|
|
468
|
+
return { kind: 'arm', arm: unreadableArm(key) };
|
|
419
469
|
allowGrantReading = g.value;
|
|
420
470
|
const cv = c.value;
|
|
421
471
|
const sv = se.value;
|
|
@@ -428,7 +478,7 @@ function permissionsArm(src, side, adoption) {
|
|
|
428
478
|
const sd = sv === undefined ? { ok: true, value: undefined } : ownDataOf(sv, 'deny');
|
|
429
479
|
const sa = sv === undefined ? { ok: true, value: undefined } : ownDataOf(sv, 'ask');
|
|
430
480
|
if (!ca.ok || !cd.ok || !sd.ok || !sa.ok)
|
|
431
|
-
return unreadableArm(key);
|
|
481
|
+
return { kind: 'arm', arm: unreadableArm(key) };
|
|
432
482
|
cliAllow = stringListOf(ca.value);
|
|
433
483
|
cliDeny = stringListOf(cd.value);
|
|
434
484
|
sesDeny = stringListOf(sd.value);
|
|
@@ -439,16 +489,32 @@ function permissionsArm(src, side, adoption) {
|
|
|
439
489
|
catch (e) {
|
|
440
490
|
if (e instanceof HostSourceShapeError)
|
|
441
491
|
throw e;
|
|
442
|
-
return unreadableArm(key);
|
|
492
|
+
return { kind: 'arm', arm: unreadableArm(key) };
|
|
443
493
|
}
|
|
444
494
|
if (cliAllow === undefined || cliDeny === undefined || sesDeny === undefined || sesAsk === undefined || (owned === undefined && ownedRaw !== undefined))
|
|
445
495
|
throw badPermissionsSource();
|
|
496
|
+
return { kind: 'facts', allowGrantReading, cliAllow, cliDeny, sesDeny, sesAsk, owned };
|
|
497
|
+
}
|
|
498
|
+
function permissionsArm(facts, side, adoption, layered) {
|
|
499
|
+
const key = 'settings.resolved';
|
|
500
|
+
if (facts.kind === 'arm')
|
|
501
|
+
return facts.arm;
|
|
502
|
+
const { allowGrantReading, cliAllow, cliDeny, sesDeny, sesAsk, owned } = facts;
|
|
446
503
|
if (side.kind === 'missing')
|
|
447
504
|
return missingArm(key);
|
|
448
505
|
const buckets = { deny: [], ask: [], allow: [] };
|
|
449
506
|
const origins = { deny: new Map(), ask: new Map(), allow: new Map() };
|
|
450
507
|
const rank = (o) => WIRE_RULE_TRUST_ORDER.indexOf(o);
|
|
508
|
+
const contributions = { deny: [], ask: [] };
|
|
509
|
+
const contributed = { deny: new Set(), ask: new Set() };
|
|
451
510
|
const add = (bucket, rule, origin) => {
|
|
511
|
+
if (bucket !== 'allow') {
|
|
512
|
+
const k = JSON.stringify([origin, rule]);
|
|
513
|
+
if (!contributed[bucket].has(k)) {
|
|
514
|
+
contributed[bucket].add(k);
|
|
515
|
+
appendOwnElement(contributions[bucket], freeze({ rule, origin }));
|
|
516
|
+
}
|
|
517
|
+
}
|
|
452
518
|
const prev = origins[bucket].get(rule);
|
|
453
519
|
if (prev === undefined) {
|
|
454
520
|
appendOwnElement(buckets[bucket], rule);
|
|
@@ -465,7 +531,7 @@ function permissionsArm(src, side, adoption) {
|
|
|
465
531
|
const read = side.read;
|
|
466
532
|
const disp = MANAGED_READING_DISPOSITIONS[read.managed];
|
|
467
533
|
const policyDoc = read.layers.policySettings.doc;
|
|
468
|
-
const managedOnlySwitch =
|
|
534
|
+
const managedOnlySwitch = managedRulesOnly(read);
|
|
469
535
|
const degrade = disp.ruleScope === 'degrade';
|
|
470
536
|
try {
|
|
471
537
|
for (const bucket of Object.keys(buckets)) {
|
|
@@ -489,6 +555,10 @@ function permissionsArm(src, side, adoption) {
|
|
|
489
555
|
for (const r of adoption?.extraTighten[bucket] ?? [])
|
|
490
556
|
if (permissionMemberAdmitted(r.layer, read, bucket))
|
|
491
557
|
add(bucket, r.rule, r.layer);
|
|
558
|
+
for (const l of TIGHTEN_ONLY_HOST_SETTINGS_LAYERS)
|
|
559
|
+
for (const bucket of tightenOnlyBucketsRead(read, l))
|
|
560
|
+
for (const r of permissionRulesOf(read.layers[l].doc, bucket))
|
|
561
|
+
add(bucket, r, l);
|
|
492
562
|
}
|
|
493
563
|
}
|
|
494
564
|
catch (error) {
|
|
@@ -504,7 +574,7 @@ function permissionsArm(src, side, adoption) {
|
|
|
504
574
|
let declared;
|
|
505
575
|
if (projectionError === undefined) {
|
|
506
576
|
try {
|
|
507
|
-
const d = projectPermissionsDeclaration({ deny: buckets.deny, ask: buckets.ask, allow: buckets.allow, origins, cliDeny, settingsRead: 'clean', ...(owned !== undefined && owned.length > 0 ? { clientOwnedServers: owned } : {}),
|
|
577
|
+
const d = projectPermissionsDeclaration({ deny: buckets.deny, ask: buckets.ask, allow: buckets.allow, origins, cliDeny, settingsRead: 'clean', ...(owned !== undefined && owned.length > 0 ? { clientOwnedServers: owned } : {}) }, allowGrantReading, portsProjection, layered ? freeze({ deny: freeze([...contributions.deny]), ask: freeze([...contributions.ask]) }) : undefined);
|
|
508
578
|
declared = d.permissions !== undefined ? { permissions: d.permissions } : undefined;
|
|
509
579
|
}
|
|
510
580
|
catch (error) {
|
|
@@ -567,8 +637,11 @@ function notLoadedLayers(read, plan) {
|
|
|
567
637
|
}
|
|
568
638
|
return out;
|
|
569
639
|
}
|
|
640
|
+
const isTightenOnlyLayer = (l) => TIGHTEN_ONLY_HOST_SETTINGS_LAYERS.includes(l);
|
|
570
641
|
function notLoadedSentence(n, form) {
|
|
571
642
|
const layer = msg(`session.hostSettings.layer.${n.layer}`);
|
|
643
|
+
if (isTightenOnlyLayer(n.layer))
|
|
644
|
+
return renderMessage(msg(form === 'hold' ? 'session.hostSettings.layerNotLoaded.restrictions.hold' : 'session.hostSettings.layerNotLoaded.restrictions.sent', { layer }));
|
|
572
645
|
return renderMessage(msg(form === 'hold' ? `session.hostSettings.layerNotLoaded.hold.${n.how}` : 'session.hostSettings.layerNotLoaded.sent.unreadable', { layer }));
|
|
573
646
|
}
|
|
574
647
|
function settingsSideOf(input) {
|
|
@@ -615,10 +688,12 @@ export function buildHostTurnSettings(input, judges) {
|
|
|
615
688
|
if (rawSide.kind === 'read')
|
|
616
689
|
for (const line of rawSide.read.debug)
|
|
617
690
|
hostLog('debug', line);
|
|
618
|
-
const
|
|
691
|
+
const permissionSource = readPermissionSource(read('resolved'));
|
|
692
|
+
const layeredRules = permissionSource.kind === 'facts' && permissionRuleLayersOn(permissionSource.allowGrantReading);
|
|
693
|
+
const adoption = rawSide.kind === 'read' ? adoptHostSettingsRead(rawSide.read, session, allowAdmittedFor(rawSide.read), layeredRules) : undefined;
|
|
619
694
|
const side = adoption !== undefined ? { kind: 'read', read: adoption.read } : rawSide;
|
|
620
695
|
const nextSession = adoption?.session ?? remintSameContent(session);
|
|
621
|
-
const resolvedArm = permissionsArm(
|
|
696
|
+
const resolvedArm = permissionsArm(permissionSource, side, adoption, layeredRules);
|
|
622
697
|
let resolvedCarried = resolvedArm.carried;
|
|
623
698
|
let resolvedError;
|
|
624
699
|
if (resolvedCarried !== undefined) {
|
|
@@ -660,17 +735,19 @@ export function buildHostTurnSettings(input, judges) {
|
|
|
660
735
|
if (notLoaded.length > 0) {
|
|
661
736
|
const key = `hs1-${fnv1a(JSON.stringify(notLoaded.map((n) => n.key)))}`;
|
|
662
737
|
const ask = surface === 'interactive' && !session.consented.includes(key);
|
|
663
|
-
const
|
|
664
|
-
const cause = notLoaded.some((n) => n.how === 'unreadable') ? 'source_unreadable' : 'source_rejected';
|
|
665
|
-
const reshape = (a) => {
|
|
738
|
+
const reshape = (a, feeds) => {
|
|
666
739
|
const d = a.row.disposition;
|
|
667
740
|
if (d === 'refuse_turn' || d === 'unwired' || a.row.cause === 'no_source')
|
|
668
741
|
return a;
|
|
742
|
+
const mine = notLoaded.filter((n) => feeds(n.layer));
|
|
743
|
+
if (mine.length === 0)
|
|
744
|
+
return a;
|
|
745
|
+
const cause = mine.some((n) => n.how === 'unreadable') ? 'source_unreadable' : 'source_rejected';
|
|
669
746
|
const disposition = ask ? 'hold_for_consent' : a.carried !== undefined ? 'carry_partial' : 'withhold_notice';
|
|
670
|
-
return { ...a, row: freeze({ key: a.row.key, cause, disposition, layers }) };
|
|
747
|
+
return { ...a, row: freeze({ key: a.row.key, cause, disposition, layers: freeze(mine.map((n) => n.layer)) }) };
|
|
671
748
|
};
|
|
672
749
|
const before = armsByKey;
|
|
673
|
-
armsByKey = [{ ...reshape(before[0]), ...(hooks.plan !== undefined ? { plan: hooks.plan } : {}) }, reshape(before[1]), before[2], before[3], before[4], before[5]];
|
|
750
|
+
armsByKey = [{ ...reshape(before[0], (l) => !isTightenOnlyLayer(l)), ...(hooks.plan !== undefined ? { plan: hooks.plan } : {}) }, reshape(before[1], () => true), before[2], before[3], before[4], before[5]];
|
|
674
751
|
if (ask && armsByKey.slice(0, 2).some((a) => a.row.disposition === 'hold_for_consent'))
|
|
675
752
|
consentKey = key;
|
|
676
753
|
for (const n of notLoaded) {
|
|
@@ -690,7 +767,11 @@ export function buildHostTurnSettings(input, judges) {
|
|
|
690
767
|
}
|
|
691
768
|
const arms = armsByKey;
|
|
692
769
|
const rows = freeze(arms.map((a) => a.row));
|
|
693
|
-
const
|
|
770
|
+
const resolvedOut = arms[1]?.row.disposition === 'carry' || arms[1]?.row.disposition === 'carry_partial' || arms[1]?.row.disposition === 'hold_for_consent' ? resolvedCarried : undefined;
|
|
771
|
+
const permissionsRow = arms[1]?.row;
|
|
772
|
+
const permissionsRead = permissionsRow !== undefined && permissionsRow.disposition !== 'refuse_turn' && permissionsRow.disposition !== 'unwired' && permissionsRow.cause !== 'no_source';
|
|
773
|
+
const partsNotices = side.kind === 'read' ? tightenOnlyLayerNotices(side.read, permissionsRead) : [];
|
|
774
|
+
const notices = freeze([...arms.flatMap((a) => a.notices), ...notLoadedNotices, ...heldNotices, ...partsNotices]);
|
|
694
775
|
const refusal = arms.find((a) => a.row.disposition === 'refuse_turn');
|
|
695
776
|
const verdict = refusal !== undefined
|
|
696
777
|
? freeze({ kind: 'refuse', notice: refusal.notices[0] ?? notices.find((n) => n.plane === 'turn') ?? notice('HS-PROJECTION', 'turn') })
|
|
@@ -702,7 +783,6 @@ export function buildHostTurnSettings(input, judges) {
|
|
|
702
783
|
return a.row.disposition === 'carry' || a.row.disposition === 'carry_partial' || a.row.disposition === 'hold_for_consent' ? a.carried : undefined;
|
|
703
784
|
};
|
|
704
785
|
const hooksCarried = carriedOf(0);
|
|
705
|
-
const resolvedOut = arms[1]?.row.disposition === 'carry' || arms[1]?.row.disposition === 'carry_partial' || arms[1]?.row.disposition === 'hold_for_consent' ? resolvedCarried : undefined;
|
|
706
786
|
const carried = freeze({
|
|
707
787
|
...(hooksCarried !== undefined ? { hooks: hooksCarried } : {}),
|
|
708
788
|
...(resolvedOut !== undefined ? { resolved: resolvedOut } : {}),
|
|
@@ -122,6 +122,11 @@ declare const EN: {
|
|
|
122
122
|
'session.devices.probeFailedTransport': string;
|
|
123
123
|
'session.devices.probeFailedRefused': string;
|
|
124
124
|
'session.devices.probeFailedUnreadable': string;
|
|
125
|
+
'session.engine.selfNotLocal': string;
|
|
126
|
+
'session.engine.dispatch.notWired': string;
|
|
127
|
+
'session.engine.dispatch.scopeMismatch': string;
|
|
128
|
+
'session.engine.dispatch.scopeUnproven': string;
|
|
129
|
+
'session.engine.dispatch.unresolved': string;
|
|
125
130
|
'config.cloudLogin.accessDenied': string;
|
|
126
131
|
'config.cloudLogin.expiredToken': string;
|
|
127
132
|
'config.cloudLogin.invalidGrant': string;
|
|
@@ -141,6 +146,7 @@ declare const EN: {
|
|
|
141
146
|
'config.engineTarget.loginFailed': string;
|
|
142
147
|
'config.engineTarget.storageUnavailable': string;
|
|
143
148
|
'config.engineTarget.noLocalRuntime': string;
|
|
149
|
+
'config.engineTarget.serverBelowSupportFloor': string;
|
|
144
150
|
'config.engineTarget.input': string;
|
|
145
151
|
'config.engineTarget.unknown': string;
|
|
146
152
|
'onboard.probe.endpointReachable': string;
|
|
@@ -187,6 +193,8 @@ declare const EN: {
|
|
|
187
193
|
'config.mcp.nameReserved': string;
|
|
188
194
|
'config.mcp.identityHeadersBothSet': string;
|
|
189
195
|
'config.mcp.transportUnreadable': string;
|
|
196
|
+
'config.mcp.transportNotAdvertised': string;
|
|
197
|
+
'config.mcp.transportsNone': string;
|
|
190
198
|
'config.mcp.transportInvalid': string;
|
|
191
199
|
'config.mcp.transportDegraded': string;
|
|
192
200
|
'config.mcp.toolAxesInvalid': string;
|
|
@@ -238,6 +246,7 @@ declare const EN: {
|
|
|
238
246
|
'approval.settle.cause.broadcastLost': string;
|
|
239
247
|
'approval.settle.cause.streamDisconnected': string;
|
|
240
248
|
'approval.settle.cause.undeliverable': string;
|
|
249
|
+
'approval.decide.requiresBinding': string;
|
|
241
250
|
'approval.decision.grantChanged': string;
|
|
242
251
|
'approval.decision.settledElsewhereContrary.deniedFirst': string;
|
|
243
252
|
'approval.decision.settledElsewhereContrary.approvedFirst': string;
|
|
@@ -293,6 +302,13 @@ declare const EN: {
|
|
|
293
302
|
'session.crashConverged.cause.neutral': string;
|
|
294
303
|
'session.crashConverged.cause.withClause': string;
|
|
295
304
|
'session.corrupt.content': string;
|
|
305
|
+
'session.projectSeed.invalid': string;
|
|
306
|
+
'session.projectSeed.invalidAt': string;
|
|
307
|
+
'session.projectSeed.laneNotIsolated': string;
|
|
308
|
+
'session.projectSeed.seedFixed': string;
|
|
309
|
+
'session.projectSeed.boundElsewhere': string;
|
|
310
|
+
'session.projectSeed.laneUnknown': string;
|
|
311
|
+
'session.projectSeed.missing': string;
|
|
296
312
|
'resume.reopen.first.envFailed': string;
|
|
297
313
|
'resume.reopen.first.toolUnavailable': string;
|
|
298
314
|
'resume.reopen.first.toolContractMismatch': string;
|
|
@@ -392,6 +408,8 @@ declare const EN: {
|
|
|
392
408
|
'session.selfHeal.injected.handedOffWatch': string;
|
|
393
409
|
'session.selfHeal.injected.interruptedFinishing': string;
|
|
394
410
|
'session.selfHeal.injected.notDelivered': string;
|
|
411
|
+
'session.selfHeal.injected.redundant': string;
|
|
412
|
+
'session.selfHeal.injected.deferred': string;
|
|
395
413
|
'session.selfHeal.decisionInFlight': string;
|
|
396
414
|
'session.selfHeal.parkedOn.ask': string;
|
|
397
415
|
'session.selfHeal.parkedOn.plan': string;
|
|
@@ -543,10 +561,28 @@ declare const EN: {
|
|
|
543
561
|
'approval.boundGrants.denyPart.one': string;
|
|
544
562
|
'approval.boundGrants.denyPart.other': string;
|
|
545
563
|
'approval.boundGrants.activates': string;
|
|
564
|
+
'approval.boundGrants.allowPart.named.one': string;
|
|
565
|
+
'approval.boundGrants.allowPart.named.other': string;
|
|
566
|
+
'approval.boundGrants.denyPart.named.one': string;
|
|
567
|
+
'approval.boundGrants.denyPart.named.other': string;
|
|
568
|
+
'approval.boundGrants.more': string;
|
|
546
569
|
'session.fileHistoryRefusal.notYet': string;
|
|
547
570
|
'session.fileHistoryRefusal.notSaid': string;
|
|
548
571
|
'session.fileHistoryRefusal.unrecognized': string;
|
|
549
572
|
'session.fileHistoryRefusal.unreadable': string;
|
|
573
|
+
'session.memoryErase.personalStoreUnjudged': string;
|
|
574
|
+
'session.memorySync.parked.one': string;
|
|
575
|
+
'session.memorySync.parked.other': string;
|
|
576
|
+
'session.memorySync.parkedUnnamed.one': string;
|
|
577
|
+
'session.memorySync.parkedUnnamed.other': string;
|
|
578
|
+
'session.memorySync.wayOut.deleteCursor': string;
|
|
579
|
+
'session.memorySync.wayOut.unrecognized': string;
|
|
580
|
+
'session.memorySyncTrigger.notConfigured': string;
|
|
581
|
+
'session.memorySyncTrigger.noSettledRun': string;
|
|
582
|
+
'session.memorySyncTrigger.runUnobserved': string;
|
|
583
|
+
'session.memorySyncTrigger.memoryNotMounted': string;
|
|
584
|
+
'session.memorySyncTrigger.noLeaf': string;
|
|
585
|
+
'session.memorySyncTrigger.unobtainable': string;
|
|
550
586
|
'session.hostSettings.memorySwitchMalformed': string;
|
|
551
587
|
'session.hostSettings.fileHistoryRestoreConflict': string;
|
|
552
588
|
'session.hostSettings.projectionUnchecked': string;
|
|
@@ -556,11 +592,14 @@ declare const EN: {
|
|
|
556
592
|
'session.hostSettings.layerNotLoaded.hold.unreadable': string;
|
|
557
593
|
'session.hostSettings.layerNotLoaded.hold.rejected': string;
|
|
558
594
|
'session.hostSettings.layerNotLoaded.sent.unreadable': string;
|
|
595
|
+
'session.hostSettings.layerNotLoaded.restrictions.hold': string;
|
|
596
|
+
'session.hostSettings.layerNotLoaded.restrictions.sent': string;
|
|
559
597
|
'session.hostSettings.layer.policySettings': string;
|
|
560
598
|
'session.hostSettings.layer.userSettings': string;
|
|
561
599
|
'session.hostSettings.layer.projectSettings': string;
|
|
562
600
|
'session.hostSettings.layer.localSettings': string;
|
|
563
601
|
'session.hostSettings.layer.flagSettings': string;
|
|
602
|
+
'session.hostSettings.layer.foreignProjectSettings': string;
|
|
564
603
|
'session.hostSettings.heldPrevious': string;
|
|
565
604
|
'session.hostSettings.styleMissing': string;
|
|
566
605
|
'session.hostSettings.styleSafeMode': string;
|
|
@@ -594,7 +633,6 @@ declare const EN: {
|
|
|
594
633
|
'rules.refusal.list.more': string;
|
|
595
634
|
'rules.refusal.reason.toolName': string;
|
|
596
635
|
'rules.refusal.reason.homePath': string;
|
|
597
|
-
'rules.refusal.reason.neverMatches': string;
|
|
598
636
|
'rules.nearMiss.sentence.one': string;
|
|
599
637
|
'rules.nearMiss.sentence.other': string;
|
|
600
638
|
'rules.nearMiss.reason': string;
|
|
@@ -670,6 +708,18 @@ declare const EN: {
|
|
|
670
708
|
'session.steerRefusal.advice': string;
|
|
671
709
|
'session.steerRefusal.hostQueue.queued': string;
|
|
672
710
|
'session.steerRefusal.hostQueue.dropped': string;
|
|
711
|
+
'session.permissionModeSwitch.applied': string;
|
|
712
|
+
'session.permissionModeSwitch.folded': string;
|
|
713
|
+
'session.permissionModeSwitch.reason.entryFloor': string;
|
|
714
|
+
'session.permissionModeSwitch.reason.disableAutoMode': string;
|
|
715
|
+
'session.permissionModeSwitch.reason.engine': string;
|
|
716
|
+
'session.permissionModeSwitch.notPersisted': string;
|
|
717
|
+
'session.permissionModeSwitch.notRunning': string;
|
|
718
|
+
'session.permissionModeSwitch.notFound': string;
|
|
719
|
+
'session.permissionModeSwitch.refused': string;
|
|
720
|
+
'session.permissionModeSwitch.refusedWithCode': string;
|
|
721
|
+
'session.permissionModeSwitch.unconfirmed': string;
|
|
722
|
+
'session.permissionModeSwitch.unavailable': string;
|
|
673
723
|
'notice.capability.subject.userInvokedSkills': string;
|
|
674
724
|
'notice.capability.subject.skillToolLists': string;
|
|
675
725
|
'notice.capability.subject.permissionRulesWrite': string;
|
|
@@ -713,17 +763,6 @@ declare const EN: {
|
|
|
713
763
|
'notice.capability.hands.unknownRosterUnreadable': string;
|
|
714
764
|
'notice.capability.hands.unknownMountConditionAbsent': string;
|
|
715
765
|
'rules.sessionPolicy.tighten.written': string;
|
|
716
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.counts': string;
|
|
717
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unreadable': string;
|
|
718
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unseen': string;
|
|
719
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.one': string;
|
|
720
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.many': string;
|
|
721
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.one': string;
|
|
722
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.many': string;
|
|
723
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.one': string;
|
|
724
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.many': string;
|
|
725
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.two': string;
|
|
726
|
-
'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.three': string;
|
|
727
766
|
'rules.sessionPolicy.tighten.conflict': string;
|
|
728
767
|
'rules.sessionPolicy.tighten.loosenForbidden': string;
|
|
729
768
|
'rules.sessionPolicy.tighten.capabilityAbsent': string;
|
|
@@ -1053,6 +1092,40 @@ declare const EN: {
|
|
|
1053
1092
|
'config.mods.refusal.by': string;
|
|
1054
1093
|
'config.mods.rewrite.resultInPlace': string;
|
|
1055
1094
|
'config.mods.rewrite.inputBy': string;
|
|
1095
|
+
'follow.notFollowed.headRun': string;
|
|
1096
|
+
'follow.notFollowed.headTurn': string;
|
|
1097
|
+
'follow.notFollowed.reason.exhaustedDraining': string;
|
|
1098
|
+
'follow.notFollowed.reason.exhaustedConnectionLost': string;
|
|
1099
|
+
'follow.notFollowed.reason.exhaustedStreamCap': string;
|
|
1100
|
+
'follow.notFollowed.reason.exhausted': string;
|
|
1101
|
+
'follow.notFollowed.reason.badInput': string;
|
|
1102
|
+
'follow.notFollowed.reason.noRunId': string;
|
|
1103
|
+
'follow.notFollowed.reason.runUnknown': string;
|
|
1104
|
+
'follow.notFollowed.reason.unspecified': string;
|
|
1105
|
+
'follow.notFollowed.endingUnknown': string;
|
|
1106
|
+
'follow.notFollowed.exit.reattach': string;
|
|
1107
|
+
'follow.notFollowed.exit.checkRuns': string;
|
|
1108
|
+
'follow.notFollowed.exit.runUnknown': string;
|
|
1109
|
+
'follow.notFollowed.idleTear': string;
|
|
1110
|
+
'follow.notFollowed.idleGrace': string;
|
|
1111
|
+
'approval.planReview.note.empty': string;
|
|
1112
|
+
'approval.planReview.note.marked': string;
|
|
1113
|
+
'approval.planReview.note.tooLarge': string;
|
|
1114
|
+
'approval.planReview.note.notCarried': string;
|
|
1115
|
+
'approval.planReview.note.unknown': string;
|
|
1116
|
+
'approval.planReview.askAgain.shown': string;
|
|
1117
|
+
'approval.planReview.askAgain.marked': string;
|
|
1118
|
+
'approval.planReview.askAgain.tooLarge': string;
|
|
1119
|
+
'approval.planReview.askAgain.notCarried': string;
|
|
1120
|
+
'approval.planReview.askAgain.unknown': string;
|
|
1121
|
+
'approval.planReview.askAgain.withNote': string;
|
|
1122
|
+
'approval.planReview.decision.notSent': string;
|
|
1123
|
+
'approval.planReview.decision.refused': string;
|
|
1124
|
+
'approval.planReview.decision.cardMissing': string;
|
|
1125
|
+
'approval.planReview.decision.gateMoved': string;
|
|
1126
|
+
'approval.planReview.decision.gateUntrusted': string;
|
|
1127
|
+
'approval.planReview.option.askAgain.label': string;
|
|
1128
|
+
'approval.planReview.option.askAgain.description': string;
|
|
1056
1129
|
};
|
|
1057
1130
|
export declare const EN_MESSAGES: Readonly<typeof EN>;
|
|
1058
1131
|
export type MessageKey = keyof typeof EN;
|