@sema-agent/client-core 0.91.0 → 0.92.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.
Files changed (123) hide show
  1. package/CHANGELOG.md +172 -0
  2. package/README.md +31 -21
  3. package/dist/adapt/arms.js +4 -12
  4. package/dist/adapt/panelTasks.d.ts +0 -2
  5. package/dist/adapt/panelTasks.js +6 -26
  6. package/dist/adapt.js +2 -2
  7. package/dist/adapter/activeRunSelfHeal.d.ts +0 -2
  8. package/dist/adapter/activeRunSelfHeal.js +5 -27
  9. package/dist/adapter/downstream/terminalToSdkResult.js +16 -7
  10. package/dist/adapter/runStream.js +3 -1
  11. package/dist/askSurvivesStandingAnswer.d.ts +4 -1
  12. package/dist/askSurvivesStandingAnswer.js +13 -0
  13. package/dist/autoModeUnavailable.js +3 -2
  14. package/dist/cloudConfigWireCaps.js +5 -4
  15. package/dist/compensations.js +5 -5
  16. package/dist/controlRouter.d.ts +23 -23
  17. package/dist/controlRouter.js +114 -49
  18. package/dist/coreValuePorts.d.ts +4 -2
  19. package/dist/coreValuePorts.js +5 -0
  20. package/dist/decideFailureNote.js +4 -2
  21. package/dist/decideReceipt.d.ts +9 -0
  22. package/dist/decideReceipt.js +62 -1
  23. package/dist/displayUntrusted.js +2 -1
  24. package/dist/effectiveFacts.d.ts +14 -4
  25. package/dist/effectiveFacts.js +45 -5
  26. package/dist/engineAgentAbsence.js +2 -1
  27. package/dist/engineCapReader.js +16 -10
  28. package/dist/engineCapsCache.d.ts +2 -0
  29. package/dist/engineCapsCache.js +13 -2
  30. package/dist/engineErrorCodes.d.ts +14 -0
  31. package/dist/engineErrorCodes.js +37 -0
  32. package/dist/engineNoticeCodes.d.ts +14 -0
  33. package/dist/engineNoticeCodes.js +71 -0
  34. package/dist/executionLaneCapability.js +2 -0
  35. package/dist/gateOutcome.js +2 -17
  36. package/dist/gateVocabulary.d.ts +2 -4
  37. package/dist/gateVocabulary.js +3 -11
  38. package/dist/generated/engineFactTables.d.ts +16 -1
  39. package/dist/generated/engineFactTables.js +81 -0
  40. package/dist/generated/engineNoticeTables.js +3 -0
  41. package/dist/generated/settingsSchemaTables.d.ts +8 -0
  42. package/dist/generated/settingsSchemaTables.js +40 -0
  43. package/dist/hitl/allowRuleShadow.d.ts +21 -0
  44. package/dist/hitl/allowRuleShadow.js +167 -0
  45. package/dist/hitl/askClassPair.d.ts +14 -0
  46. package/dist/hitl/askClassPair.js +42 -0
  47. package/dist/hitl/askGateWire.js +1 -0
  48. package/dist/hitl/askSurvivesPosture.d.ts +5 -0
  49. package/dist/hitl/askSurvivesPosture.js +17 -0
  50. package/dist/hitl/automaticAnswerVerdict.d.ts +21 -0
  51. package/dist/hitl/automaticAnswerVerdict.js +143 -0
  52. package/dist/hitl/crashConverged.d.ts +1 -0
  53. package/dist/hitl/crashConverged.js +1 -1
  54. package/dist/hitl/frameRouter.d.ts +2 -0
  55. package/dist/hitl/frameRouter.js +66 -14
  56. package/dist/hitl/gateLedger.d.ts +6 -0
  57. package/dist/hitl/gateLedger.js +34 -5
  58. package/dist/hitl/hitlHostSurface.d.ts +2 -0
  59. package/dist/hitl/hitlHostSurface.js +7 -0
  60. package/dist/hitl/livePendingAsk.js +24 -5
  61. package/dist/hitl/parkResolver.js +3 -1
  62. package/dist/hitl/persistedRulesWire.d.ts +4 -1
  63. package/dist/hitl/persistedRulesWire.js +9 -2
  64. package/dist/hitl/planReviewWire.js +2 -2
  65. package/dist/hitl/replayedApproval.d.ts +21 -0
  66. package/dist/hitl/replayedApproval.js +89 -0
  67. package/dist/hitl/sessionPolicyDeliverable.js +20 -2
  68. package/dist/hitl/sessionPolicyWire.d.ts +8 -0
  69. package/dist/hitl/sessionPolicyWire.js +12 -2
  70. package/dist/hitl/toolApprovalWire.d.ts +6 -1
  71. package/dist/hitl/toolApprovalWire.js +20 -40
  72. package/dist/hookMatcherVerdict.js +2 -1
  73. package/dist/humanTurn.js +3 -4
  74. package/dist/index.d.ts +15 -5
  75. package/dist/index.js +12 -3
  76. package/dist/inheritEnvWire.js +3 -4
  77. package/dist/mcpLiveness.js +2 -1
  78. package/dist/memoryVerbsWire.d.ts +1 -1
  79. package/dist/memoryVerbsWire.js +3 -0
  80. package/dist/model/catalog.js +2 -1
  81. package/dist/model/providerPresets.d.ts +3 -1
  82. package/dist/model/tierVocabulary.d.ts +2 -1
  83. package/dist/model/tierVocabulary.js +3 -8
  84. package/dist/peerFrames.js +2 -2
  85. package/dist/permissionRuleIssue.js +9 -6
  86. package/dist/permissionsDeclaration.d.ts +7 -1
  87. package/dist/permissionsDeclaration.js +29 -20
  88. package/dist/pluginHooksWire.js +2 -11
  89. package/dist/promptProfileWireCaps.d.ts +2 -1
  90. package/dist/protocolSegment.d.ts +9 -0
  91. package/dist/protocolSegment.js +28 -0
  92. package/dist/request/taskRequest.js +1 -15
  93. package/dist/ruleCompileVerdict.d.ts +2 -0
  94. package/dist/ruleCompileVerdict.js +13 -0
  95. package/dist/ruleRemovalConsequence.d.ts +2 -1
  96. package/dist/runCancelContext.d.ts +12 -0
  97. package/dist/runCancelContext.js +83 -1
  98. package/dist/seam.js +1 -1
  99. package/dist/seatContract.d.ts +2 -1
  100. package/dist/sessionMemoryStatus.d.ts +2 -4
  101. package/dist/sessionSyncFileHistoryCapability.d.ts +18 -0
  102. package/dist/sessionSyncFileHistoryCapability.js +50 -0
  103. package/dist/skillToolListsCapability.d.ts +18 -0
  104. package/dist/skillToolListsCapability.js +50 -0
  105. package/dist/sqlEngineCapability.js +1 -8
  106. package/dist/steerPriorityCapability.d.ts +18 -0
  107. package/dist/steerPriorityCapability.js +80 -0
  108. package/dist/steerReceipt.d.ts +9 -0
  109. package/dist/steerReceipt.js +25 -0
  110. package/dist/subagent/engineSubagentSteer.js +2 -9
  111. package/dist/supportFloor.js +2 -2
  112. package/dist/toolResult.d.ts +8 -0
  113. package/dist/toolResult.js +47 -3
  114. package/dist/types/engineState.d.ts +2 -12
  115. package/dist/userInvokedSkillsCapability.d.ts +18 -0
  116. package/dist/userInvokedSkillsCapability.js +50 -0
  117. package/dist/wireFailureShape.d.ts +2 -0
  118. package/dist/wireFailureShape.js +4 -0
  119. package/dist/workflowsJournalCapability.d.ts +18 -0
  120. package/dist/workflowsJournalCapability.js +50 -0
  121. package/dist/writeProtectionCapability.d.ts +2 -4
  122. package/docs/INTEGRATION-CLIENTS.md +624 -12
  123. package/package.json +2 -2
@@ -2,11 +2,12 @@ import { APPROVAL_CARD_PORT_KEY_MISMATCH_REASON, DEFAULT_DENY_REASON, DecideTran
2
2
  import { askParkRowArm } from './askParkRowRouting.js';
3
3
  import { hostLog } from '../host.js';
4
4
  import { readOwnNonEmptyString } from '../ownKey.js';
5
+ import { readAskClassPair } from './askClassPair.js';
6
+ import { legacyShadowedRuleTextOf, readAllowRuleShadowFromWire } from './allowRuleShadow.js';
5
7
  import { createSessionSlot, DEFAULT_SESSION_KEY } from '../sessionSlot.js';
6
8
  import { readEngineActiveBgTasks } from '../fleet/fleetLedger.js';
7
9
  import { observeCancelByDeny, surfaceRememberNotApplied, surfaceEditNotForwarded, surfaceEditRefusedOnBlindAsk, surfaceRuleArmNotSent, surfaceRuleArmRejected } from './hitlHostSurface.js';
8
10
  import { approvalCallKey, liveFrameCallKey } from './gateIdentity.js';
9
- import { isRuleStoreUnreadableKind } from '../gateVocabulary.js';
10
11
  import { isApprovalMandateWord } from '../gateVocabulary.js';
11
12
  import { denyAttributionRefusalFromError } from '../wireRefusalCopy.js';
12
13
  import { decideFailureNote } from '../decideFailureNote.js';
@@ -192,9 +193,8 @@ export async function surfaceFsApprovalAndDecide(deps, taskId, argsByCall, signa
192
193
  const ruleOffersReadOnly = readRuleOfferSupply(pending.ruleOffers, pending.ruleSuggestions);
193
194
  const durableProbeCause = pending.riskDescriptor?.probeCause;
194
195
  const durableProbeReason = readProbeReason(pending.riskDescriptor);
195
- const durableShadowedRule = pending.riskDescriptor?.shadowedRule;
196
+ const durableShadow = readAllowRuleShadowFromWire(pending, 'row');
196
197
  const durableRuleOffersAbsence = pending.ruleOffersAbsence;
197
- const durableRuleStoreUnreadable = readRuleStoreUnreadable(pending.ruleStoreUnreadable);
198
198
  deps.onPresented?.();
199
199
  const card = await surfaceApprovalCard({
200
200
  toolName,
@@ -218,12 +218,9 @@ export async function surfaceFsApprovalAndDecide(deps, taskId, argsByCall, signa
218
218
  ...(ruleOffersReadOnly !== undefined ? { ruleOffersReadOnly } : {}),
219
219
  ...(isWireRecordCarrier(durableProbeCause) ? { probeCause: durableProbeCause } : {}),
220
220
  ...(durableProbeReason !== undefined ? { probeReason: durableProbeReason } : {}),
221
- ...(durableRuleStoreUnreadable !== undefined
222
- ? { ruleStoreUnreadable: durableRuleStoreUnreadable }
223
- : {}),
224
- ...(typeof durableShadowedRule === 'string' && durableShadowedRule.trim() !== ''
225
- ? { persistedRuleShadowed: durableShadowedRule }
226
- : {}),
221
+ ...(readRememberRefused(pending) ? { rememberRefused: true } : {}),
222
+ ...(durableShadow !== undefined ? { allowRuleShadow: durableShadow } : {}),
223
+ ...((t) => (t !== undefined ? { persistedRuleShadowed: t } : {}))(legacyShadowedRuleTextOf(durableShadow)),
227
224
  ...(typeof durableRuleOffersAbsence === 'string' && durableRuleOffersAbsence !== ''
228
225
  ? { ruleOffersAbsence: durableRuleOffersAbsence }
229
226
  : {}),
@@ -399,8 +396,10 @@ export const TOOL_APPROVAL_FRAME_KEYS_MIRROR = [
399
396
  'inputHasBidi',
400
397
  'parked',
401
398
  'persistedRuleShadowed',
399
+ 'allowRuleShadowed',
402
400
  'probeCause',
403
401
  'probeReason',
402
+ 'rememberRefused',
404
403
  'ruleEvidence',
405
404
  'requiresRealApproval',
406
405
  'expiresInMs',
@@ -445,30 +444,6 @@ export function toolPermissionRequestAskBits(card) {
445
444
  ...(askClassPair ?? {}),
446
445
  };
447
446
  }
448
- function readAskClassPair(v) {
449
- if (typeof v !== 'object' || v === null)
450
- return undefined;
451
- const askClass = readOwnNonEmptyString(v, 'askClass');
452
- if (askClass === undefined || !Object.hasOwn(v, 'classes'))
453
- return undefined;
454
- const raw = v.classes;
455
- if (!Array.isArray(raw) || raw.length === 0)
456
- return undefined;
457
- const classes = [];
458
- const seen = new Set();
459
- for (let i = 0; i < raw.length; i++) {
460
- if (!Object.hasOwn(raw, i))
461
- return undefined;
462
- const c = raw[i];
463
- if (typeof c !== 'string' || c === '' || seen.has(c))
464
- return undefined;
465
- seen.add(c);
466
- classes.push(c);
467
- }
468
- if (classes[0] !== askClass)
469
- return undefined;
470
- return { askClass, classes: Object.freeze(classes) };
471
- }
472
447
  function hasOwnStrictTrue(v, key) {
473
448
  return Object.hasOwn(v, key) && v[key] === true;
474
449
  }
@@ -663,6 +638,14 @@ function readProbeReason(v) {
663
638
  return undefined;
664
639
  }
665
640
  }
641
+ function readRememberRefused(v) {
642
+ try {
643
+ return typeof v === 'object' && v !== null && Object.hasOwn(v, 'rememberRefused') && v.rememberRefused === true;
644
+ }
645
+ catch {
646
+ return false;
647
+ }
648
+ }
666
649
  function isNonNegativeFinite(v) {
667
650
  return typeof v === 'number' && Number.isFinite(v) && v >= 0;
668
651
  }
@@ -688,9 +671,6 @@ export function readDenialLimitFallback(v) {
688
671
  autoDenyAfterMs: d.autoDenyAfterMs,
689
672
  };
690
673
  }
691
- function readRuleStoreUnreadable(v) {
692
- return isRuleStoreUnreadableKind(v) ? v : undefined;
693
- }
694
674
  function isRuleOfferMatch(v) {
695
675
  return typeof v === 'string' && RULE_OFFER_MATCHES.includes(v);
696
676
  }
@@ -876,6 +856,7 @@ export async function surfaceToolApprovalFrameAndRespond(frame, respond, streamA
876
856
  const argsNotRealInput = argsFallback || lane?.argsUnavailable === true;
877
857
  const ruleOffers = readRuleOfferSupply(frame.ruleOffers, frame.ruleSuggestions);
878
858
  const denialLimitFallback = readDenialLimitFallback(frame.denialLimitFallback);
859
+ const frameShadow = readAllowRuleShadowFromWire(frame, 'frame');
879
860
  const card = await surfaceApprovalCard({
880
861
  toolName,
881
862
  args: args,
@@ -902,11 +883,11 @@ export async function surfaceToolApprovalFrameAndRespond(frame, respond, streamA
902
883
  ? { delegation: frame.delegation }
903
884
  : {}),
904
885
  ...(ruleOffers !== undefined ? { ruleOffers } : {}),
905
- ...(typeof frame.persistedRuleShadowed === 'string' && frame.persistedRuleShadowed.trim() !== ''
906
- ? { persistedRuleShadowed: frame.persistedRuleShadowed }
907
- : {}),
886
+ ...((sh) => (sh !== undefined ? { allowRuleShadow: sh } : {}))(frameShadow),
887
+ ...((t) => (t !== undefined ? { persistedRuleShadowed: t } : {}))(legacyShadowedRuleTextOf(frameShadow)),
908
888
  ...(isWireRecordCarrier(frame.probeCause) ? { probeCause: frame.probeCause } : {}),
909
889
  ...((r) => (r !== undefined ? { probeReason: r } : {}))(readProbeReason(frame)),
890
+ ...(readRememberRefused(frame) ? { rememberRefused: true } : {}),
910
891
  ...(isWireRecordCarrier(frame.ruleEvidence) ? { ruleEvidence: frame.ruleEvidence } : {}),
911
892
  ...(frame.requiresRealApproval === true ? { requiresRealApproval: true } : {}),
912
893
  ...(hasOwnStrictTrue(frame, 'mandated') ? { mandated: true } : {}),
@@ -917,7 +898,6 @@ export async function surfaceToolApprovalFrameAndRespond(frame, respond, streamA
917
898
  ? { ruleOffersAbsence: frame.ruleOffersAbsence }
918
899
  : {}),
919
900
  ...(denialLimitFallback !== undefined ? { denialLimitFallback } : {}),
920
- ...((k) => (k !== undefined ? { ruleStoreUnreadable: k } : {}))(readRuleStoreUnreadable(frame.ruleStoreUnreadable)),
921
901
  ...((o) => (o !== undefined ? { origin: o } : {}))(readOwnNonEmptyString(frame, 'origin')),
922
902
  ...(readAskClassPair(frame) ?? {}),
923
903
  });
@@ -1,5 +1,6 @@
1
1
  import { HOOK_TOOL_ALIASES } from './hookToolAliases.js';
2
- const TOOL_NAME_MATCHER_EVENTS = new Set(['PreToolUse', 'PostToolUse', 'PostToolUseFailure']);
2
+ import { SETTINGS_TOOL_NAME_MATCHER_EVENTS } from './generated/settingsSchemaTables.js';
3
+ const TOOL_NAME_MATCHER_EVENTS = new Set(SETTINGS_TOOL_NAME_MATCHER_EVENTS);
3
4
  const MATCHER_MAX_CHARS = 8192;
4
5
  const PATTERN_WORK_BUDGET = 10_000_000;
5
6
  const PATTERN_MAX_DEPTH = 32;
package/dist/humanTurn.js CHANGED
@@ -1,10 +1,9 @@
1
+ import { CORE_MAX_PENDING_STEER_CHARS, CORE_MCP_IMAGE_MAX_BASE64 } from './generated/engineFactTables.js';
1
2
  import { mintEnvelopeOf, mintReferenceOf } from './userAttachmentEnvelope.js';
2
3
  import { readEncodingShares, readHumanTurnInput } from './humanTurnRead.js';
3
4
  const REQUEST_BODY_MAX_BYTES = 8 * 1024 * 1024;
4
5
  const IMAGE_SEAT_MAX_COUNT = 20;
5
- const IMAGE_MAX_BASE64_CHARS_EACH = 6 * 1024 * 1024;
6
6
  const IMAGE_SEAT_MAX_BASE64_CHARS_TOTAL = 6 * 1024 * 1024;
7
- const STEER_MAX_CHARS = 16000;
8
7
  const STEER_REMINDER_TAG = /<\s*\/?\s*system-reminder(?:\s[^>]*)?>/i;
9
8
  const STEER_CONTROL_CHARS = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/;
10
9
  function utf8Length(s) {
@@ -46,7 +45,7 @@ function steerRefusal(text) {
46
45
  return 'reminder_tag';
47
46
  if (STEER_CONTROL_CHARS.test(text))
48
47
  return 'control_char';
49
- if (text.length > STEER_MAX_CHARS)
48
+ if (text.length > CORE_MAX_PENDING_STEER_CHARS)
50
49
  return 'too_long';
51
50
  return undefined;
52
51
  }
@@ -148,7 +147,7 @@ function encodeObjective(v) {
148
147
  let count = 0;
149
148
  let total = 0;
150
149
  const seat = (len) => {
151
- if (len > IMAGE_MAX_BASE64_CHARS_EACH)
150
+ if (len > CORE_MCP_IMAGE_MAX_BASE64)
152
151
  return 'image_too_large';
153
152
  if (count + 1 > IMAGE_SEAT_MAX_COUNT)
154
153
  return 'seat_count';
package/dist/index.d.ts CHANGED
@@ -50,6 +50,11 @@ export * from './mcpPanel.js';
50
50
  export * from './mcpLiveness.js';
51
51
  export * from './mcpEngineLeg.js';
52
52
  export * from './mcpProbeCapability.js';
53
+ export * from './sessionSyncFileHistoryCapability.js';
54
+ export * from './workflowsJournalCapability.js';
55
+ export * from './userInvokedSkillsCapability.js';
56
+ export * from './skillToolListsCapability.js';
57
+ export * from './steerPriorityCapability.js';
53
58
  export * from './mcpProbeWire.js';
54
59
  export * from './effectiveFacts.js';
55
60
  export * from './gateOutcome.js';
@@ -69,14 +74,15 @@ export type { DisplayUntrustedOptions, DisplayMark, DisplayMarkSpan, DisplayUntr
69
74
  export type * from './types/engineState.js';
70
75
  export * from './hostEnv.js';
71
76
  export * from './unrefTimer.js';
72
- export { ControlRouter, ControlSafetyError, errCodes, steerRefusalAdviceOf, steeringRefusedBeforeEngine, type ControlClientLike, type ControlRouterOptions, type ControlSafetyCode, type ErrCodes, type QueuedCommand, type QueuePriority, type RunsResourceLike, type SteerRefusalAdvice, type SteeringRefusedBeforeEngine, } from './controlRouter.js';
77
+ export { ControlRouter, ControlSafetyError, errCodes, steerBodyOf, steerRefusalAdviceOf, steeringRefusedBeforeEngine, type ControlClientLike, type ControlRouterOptions, type ControlRouterSteerOptions, type ControlSafetyCode, type ErrCodes, type RunsResourceLike, type SteerBody, type SteerBodyInput, type SteerRefusalAdvice, type SteeringRefusedBeforeEngine, } from './controlRouter.js';
78
+ export { readSteerReceipt, type SteerReceiptReading } from './steerReceipt.js';
73
79
  export * from './sseIdleTriage.js';
74
80
  export * from './engineWireSdk.js';
75
81
  export * from './classifierVerdictWire.js';
76
82
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
77
83
  export { findSystemReminderOpenTag, type SystemReminderOpenTagSpan } from './systemReminderTag.js';
78
- export { ACTIVE_RUN_BUSY_ERROR_CODE, asModelFallbackReason, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
79
- export type { DelegationCapDisposition, ModelFallbackReason, } from './engineErrorCodes.js';
84
+ export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
85
+ export type { DelegationCapDisposition, ModelFallbackReason, OperatorGateRefusal, RunDeathVerdictCode, } from './engineErrorCodes.js';
80
86
  export * from './agentsWireCaps.js';
81
87
  export * from './attachmentsWireCaps.js';
82
88
  export * from './clientContextWireCaps.js';
@@ -119,7 +125,7 @@ export * from './request/taskRequest.js';
119
125
  export { disableSkillsDeclaration, disableSkillsDeclarationSettled } from './disableSkillsWire.js';
120
126
  export type { DisableSkillsDeclaration } from './disableSkillsWire.js';
121
127
  export { PERMISSIONS_KEPT_REASONS, permissionsDeclaration, permissionsDeclarationReport } from './permissionsDeclaration.js';
122
- export type { PermissionsDeclaration, PermissionsDeclarationBuckets, PermissionsDeclarationInput, PermissionsDeclarationReport, PermissionsKeptReason, PermissionsKeptRule, PermissionsRewrittenRule, PermissionsUncheckedRule, WireRuleOrigin, WireRuleOrigins, } from './permissionsDeclaration.js';
128
+ export type { PermissionsDeclaration, PermissionsDeclarationBuckets, PermissionsDeclarationInput, PermissionsDeclarationReport, PermissionsKeptReason, PermissionsKeptRule, PermissionsRewrittenRule, PermissionsUncheckedRule, PermissionsUnreachableRule, WireRuleOrigin, WireRuleOrigins, } from './permissionsDeclaration.js';
123
129
  export * from './clientSlice.js';
124
130
  export * from './host.js';
125
131
  export { abortableSleep } from './abortableSleep.js';
@@ -195,7 +201,7 @@ export * from './hitl/suspendedReopen.js';
195
201
  export * from './hitl/approvalOutcomeNote.js';
196
202
  export * from './hitl/approvalResolution.js';
197
203
  export { toolEndOutputText, ENGINE_ABORT_TOOL_RESULT } from './hitl/frameRouter.js';
198
- export { _resetHitlHostSurfaceForTest, CANCEL_DENY_BUDGET_MS, CANCEL_DENY_WARN_TEXT, EDIT_NOT_FORWARDED_WARN_TEXT, EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT, hitlHostSurfaceFor, hitlHostSurfaceMisses, hitlHostSurfaceMissesFor, installHitlHostSurface, installHitlHostSurfaceFor, observeCancelByDeny, REMEMBER_NOT_APPLIED_WARN_TEXT, RULE_NOT_SENT_REJECTED_WARN_TEXT, RULE_NOT_SENT_WARN_TEXT, surfaceEditRefusedOnBlindAsk, surfaceForCurrentSession, surfaceRememberNotApplied, } from './hitl/hitlHostSurface.js';
204
+ export { _resetHitlHostSurfaceForTest, CANCEL_DENY_BUDGET_MS, CANCEL_DENY_WARN_TEXT, EDIT_NOT_FORWARDED_WARN_TEXT, EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT, hitlHostSurfaceFor, hitlHostSurfaceMisses, hitlHostSurfaceMissesFor, installHitlHostSurface, installHitlHostSurfaceFor, observeCancelByDeny, REMEMBER_NOT_APPLIED_WARN_TEXT, REPLAYED_APPROVAL_LIST_UNREADABLE_WARN_TEXT, RULE_NOT_SENT_REJECTED_WARN_TEXT, RULE_NOT_SENT_WARN_TEXT, surfaceEditRefusedOnBlindAsk, surfaceForCurrentSession, surfaceRememberNotApplied, } from './hitl/hitlHostSurface.js';
199
205
  export type { ClassifierDenyContext, HitlHostSurface, HitlNotice, } from './hitl/hitlHostSurface.js';
200
206
  export * from './hitl/toolApprovalWire.js';
201
207
  export * from './hitl/editedRuleTextPrecheck.js';
@@ -215,7 +221,11 @@ export * from './hitl/sessionPolicyWire.js';
215
221
  export * from './hitl/sessionPolicyDeliverable.js';
216
222
  export * from './hitl/approvalsFeed.js';
217
223
  export * from './hitl/livePendingAsk.js';
224
+ export { replayedApprovalDisposition } from './hitl/replayedApproval.js';
225
+ export type { ReplayedApprovalDisposition, ReplayPendingBasis } from './hitl/replayedApproval.js';
218
226
  export * from './hitl/askSurvivesPosture.js';
227
+ export { automaticAnswerVerdict, type AutomaticAnswerLane, type AutomaticAnswerFacts, type AutomaticAnswerRoad, type AutomaticAnswerUnknownWhy, type AutomaticAnswerVerdict, } from './hitl/automaticAnswerVerdict.js';
228
+ export { readApprovalAllowRuleShadow, approvalAllowRuleShadowed, type ApprovalAllowRuleShadow, type ApprovalAllowRuleShadowMember, type AllowRuleShadowedWireMember, } from './hitl/allowRuleShadow.js';
219
229
  export { projectCrashConverged } from './hitl/crashConverged.js';
220
230
  export type { ApprovalsListEnvelope, CrashConvergedOrphanState, CrashConvergedProjection, CrashConvergedRow } from './hitl/crashConverged.js';
221
231
  export * from './hitl/crashConvergedNotice.js';
package/dist/index.js CHANGED
@@ -44,6 +44,11 @@ export * from './mcpPanel.js';
44
44
  export * from './mcpLiveness.js';
45
45
  export * from './mcpEngineLeg.js';
46
46
  export * from './mcpProbeCapability.js';
47
+ export * from './sessionSyncFileHistoryCapability.js';
48
+ export * from './workflowsJournalCapability.js';
49
+ export * from './userInvokedSkillsCapability.js';
50
+ export * from './skillToolListsCapability.js';
51
+ export * from './steerPriorityCapability.js';
47
52
  export * from './mcpProbeWire.js';
48
53
  export * from './effectiveFacts.js';
49
54
  export * from './gateOutcome.js';
@@ -61,13 +66,14 @@ export * from './fleetTaskDesc.js';
61
66
  export { displayUntrusted, displayUntrustedMarks } from './displayUntrusted.js';
62
67
  export * from './hostEnv.js';
63
68
  export * from './unrefTimer.js';
64
- export { ControlRouter, ControlSafetyError, errCodes, steerRefusalAdviceOf, steeringRefusedBeforeEngine, } from './controlRouter.js';
69
+ export { ControlRouter, ControlSafetyError, errCodes, steerBodyOf, steerRefusalAdviceOf, steeringRefusedBeforeEngine, } from './controlRouter.js';
70
+ export { readSteerReceipt } from './steerReceipt.js';
65
71
  export * from './sseIdleTriage.js';
66
72
  export * from './engineWireSdk.js';
67
73
  export * from './classifierVerdictWire.js';
68
74
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
69
75
  export { findSystemReminderOpenTag } from './systemReminderTag.js';
70
- export { ACTIVE_RUN_BUSY_ERROR_CODE, asModelFallbackReason, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
76
+ export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_REFUSAL_CODES, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RULES_LEGACY_TOOL_NAME, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STOP_CONFLICT_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
71
77
  export * from './agentsWireCaps.js';
72
78
  export * from './attachmentsWireCaps.js';
73
79
  export * from './clientContextWireCaps.js';
@@ -170,7 +176,7 @@ export * from './hitl/suspendedReopen.js';
170
176
  export * from './hitl/approvalOutcomeNote.js';
171
177
  export * from './hitl/approvalResolution.js';
172
178
  export { toolEndOutputText, ENGINE_ABORT_TOOL_RESULT } from './hitl/frameRouter.js';
173
- export { _resetHitlHostSurfaceForTest, CANCEL_DENY_BUDGET_MS, CANCEL_DENY_WARN_TEXT, EDIT_NOT_FORWARDED_WARN_TEXT, EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT, hitlHostSurfaceFor, hitlHostSurfaceMisses, hitlHostSurfaceMissesFor, installHitlHostSurface, installHitlHostSurfaceFor, observeCancelByDeny, REMEMBER_NOT_APPLIED_WARN_TEXT, RULE_NOT_SENT_REJECTED_WARN_TEXT, RULE_NOT_SENT_WARN_TEXT, surfaceEditRefusedOnBlindAsk, surfaceForCurrentSession, surfaceRememberNotApplied, } from './hitl/hitlHostSurface.js';
179
+ export { _resetHitlHostSurfaceForTest, CANCEL_DENY_BUDGET_MS, CANCEL_DENY_WARN_TEXT, EDIT_NOT_FORWARDED_WARN_TEXT, EDIT_REFUSED_ON_BLIND_ASK_WARN_TEXT, hitlHostSurfaceFor, hitlHostSurfaceMisses, hitlHostSurfaceMissesFor, installHitlHostSurface, installHitlHostSurfaceFor, observeCancelByDeny, REMEMBER_NOT_APPLIED_WARN_TEXT, REPLAYED_APPROVAL_LIST_UNREADABLE_WARN_TEXT, RULE_NOT_SENT_REJECTED_WARN_TEXT, RULE_NOT_SENT_WARN_TEXT, surfaceEditRefusedOnBlindAsk, surfaceForCurrentSession, surfaceRememberNotApplied, } from './hitl/hitlHostSurface.js';
174
180
  export * from './hitl/toolApprovalWire.js';
175
181
  export * from './hitl/editedRuleTextPrecheck.js';
176
182
  export * from './coreValuePorts.js';
@@ -189,7 +195,10 @@ export * from './hitl/sessionPolicyWire.js';
189
195
  export * from './hitl/sessionPolicyDeliverable.js';
190
196
  export * from './hitl/approvalsFeed.js';
191
197
  export * from './hitl/livePendingAsk.js';
198
+ export { replayedApprovalDisposition } from './hitl/replayedApproval.js';
192
199
  export * from './hitl/askSurvivesPosture.js';
200
+ export { automaticAnswerVerdict, } from './hitl/automaticAnswerVerdict.js';
201
+ export { readApprovalAllowRuleShadow, approvalAllowRuleShadowed, } from './hitl/allowRuleShadow.js';
193
202
  export { projectCrashConverged } from './hitl/crashConverged.js';
194
203
  export * from './hitl/crashConvergedNotice.js';
195
204
  export * from './interactiveHalt.js';
@@ -1,5 +1,6 @@
1
1
  import { INHERIT_ENV_WORDS, isInheritEnvWord } from './request/taskRequest.js';
2
2
  import { settingsPermissionBucketRefusalFromError } from './wireRefusalCopy.js';
3
+ import { engineVersionTier } from './supportFloor.js';
3
4
  export const INHERIT_ENV_MIN_SERVER = Object.freeze([7, 106, 0]);
4
5
  export function inheritEnvServerSupport(version) {
5
6
  const mm = typeof version === 'string' ? /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.exec(version) : null;
@@ -21,11 +22,9 @@ export function inheritEnvDeclaration(word, serverVersion) {
21
22
  if (!isInheritEnvWord(word)) {
22
23
  throw new TypeError(`inheritEnvDeclaration: inheritEnv 只接受 ${INHERIT_ENV_WORDS.map((w) => `'${w}'`).join(' / ')} 或缺席 —— 收到 ${Array.isArray(word) ? 'typeof=object / array' : `typeof=${typeof word}`}。坏词在版本判定之前就拒:「这一次不发」不许顺手吞掉一个打错字的声明。错误文本只报形状,不回显值。`);
23
24
  }
24
- const support = inheritEnvServerSupport(serverVersion);
25
- if (support === 'supported')
25
+ if (engineVersionTier(serverVersion) !== 'unknown')
26
26
  return Object.freeze({ field: Object.freeze({ inheritEnv: word }) });
27
- const cause = support === 'unsupported' ? 'server_too_old' : 'server_version_unknown';
28
- return Object.freeze({ field: Object.freeze({}), withheld: Object.freeze({ cause, word }) });
27
+ return Object.freeze({ field: Object.freeze({}), withheld: Object.freeze({ cause: 'server_version_unknown', word }) });
29
28
  }
30
29
  const WITHHELD_NOTICES = Object.freeze({
31
30
  server_too_old: Object.freeze({
@@ -1,4 +1,5 @@
1
- export const MCP_LIVENESS_STATES = Object.freeze(['reachable', 'unreachable', 'unknown']);
1
+ import { CORE_MCP_LIVENESS_STATES } from './generated/engineFactTables.js';
2
+ export const MCP_LIVENESS_STATES = CORE_MCP_LIVENESS_STATES;
2
3
  void MCP_LIVENESS_STATES;
3
4
  void true;
4
5
  void true;
@@ -19,7 +19,7 @@ export interface MemoryFacade {
19
19
  signal?: AbortSignal;
20
20
  }): Promise<MemoryOriginClearReceipt>;
21
21
  }
22
- export declare const MEMORY_VERB_REFUSAL_CAUSES: readonly ["face_absent", "client_too_old", "unreadable_request", "store_absent", "operator_only", "unauthorized", "service_token_required", "id_invalid", "request_id_required", "body_shape", "query_invalid", "selector_invalid", "evidence_unavailable", "selector_mismatch", "census_incomplete", "clear_unattributed", "clear_invalid", "clear_not_marked", "clear_challenged", "clear_conflict", "clear_pending"];
22
+ export declare const MEMORY_VERB_REFUSAL_CAUSES: readonly ["face_absent", "client_too_old", "unreadable_request", "store_absent", "operator_only", "operators_unconfigured", "unauthorized", "service_token_required", "id_invalid", "request_id_required", "body_shape", "query_invalid", "selector_invalid", "evidence_unavailable", "selector_mismatch", "census_incomplete", "clear_unattributed", "clear_invalid", "clear_not_marked", "clear_challenged", "clear_conflict", "clear_pending"];
23
23
  export type MemoryVerbRefusalCause = (typeof MEMORY_VERB_REFUSAL_CAUSES)[number];
24
24
  export declare const MEMORY_VERB_UNKNOWN_WHYS: readonly ["no_verdict", "server_fault", "control_plane_corrupt", "clear_unknown", "clear_failed", "result_unreadable", "unsupported_version", "identity_mismatch", "unclassified"];
25
25
  export type MemoryVerbUnknownWhy = (typeof MEMORY_VERB_UNKNOWN_WHYS)[number];
@@ -8,6 +8,7 @@ export const MEMORY_VERB_REFUSAL_CAUSES = Object.freeze([
8
8
  'unreadable_request',
9
9
  'store_absent',
10
10
  'operator_only',
11
+ 'operators_unconfigured',
11
12
  'unauthorized',
12
13
  'service_token_required',
13
14
  'id_invalid',
@@ -51,6 +52,8 @@ export function classifyMemoryFailure(e) {
51
52
  return refusedBy('unauthorized', message);
52
53
  case 'auth.operator_only':
53
54
  return refusedBy('operator_only', message);
55
+ case 'capability.operator_principals_required':
56
+ return refusedBy('operators_unconfigured', message);
54
57
  case 'auth.service_token_required':
55
58
  return refusedBy('service_token_required', message);
56
59
  case 'capability.memory_engine_required':
@@ -1,4 +1,5 @@
1
1
  import { PROVIDER_PRESETS } from './providerPresets.js';
2
+ import { SETTINGS_MODEL_API_WORDS } from '../generated/settingsSchemaTables.js';
2
3
  export const CATALOG_SCHEMA_VERSION_MIN = 1;
3
4
  export const CATALOG_SCHEMA_VERSION_MAX = 1;
4
5
  export function isSupportedCatalogSchemaVersion(v) {
@@ -15,7 +16,7 @@ function isProviderRow(v) {
15
16
  r.id.length > 0 &&
16
17
  typeof r.name === 'string' &&
17
18
  typeof r.baseUrl === 'string' &&
18
- (r.api === 'anthropic-messages' || r.api === 'openai-completions') &&
19
+ typeof r.api === 'string' && SETTINGS_MODEL_API_WORDS.includes(r.api) &&
19
20
  typeof r.authEnv === 'string' &&
20
21
  Array.isArray(r.models));
21
22
  }
@@ -1,3 +1,5 @@
1
+ import type { SETTINGS_MODEL_API_WORDS } from '../generated/settingsSchemaTables.js';
2
+ export type ModelApiWord = (typeof SETTINGS_MODEL_API_WORDS)[number];
1
3
  export type PresetModel = {
2
4
  id: string;
3
5
  contextWindow: number;
@@ -8,7 +10,7 @@ export type ProviderPreset = {
8
10
  id: string;
9
11
  name: string;
10
12
  baseUrl: string;
11
- api: 'anthropic-messages' | 'openai-completions';
13
+ api: ModelApiWord;
12
14
  authEnv: string;
13
15
  models: PresetModel[];
14
16
  modelViaFamily?: boolean;
@@ -1,4 +1,5 @@
1
- export type Tier = 'ultra' | 'max' | 'pro' | 'flash' | 'lite';
1
+ import { CORE_DEFAULT_TIER_ORDER } from '../generated/engineFactTables.js';
2
+ export type Tier = (typeof CORE_DEFAULT_TIER_ORDER)[number];
2
3
  export declare const TIER_ORDER: readonly Tier[];
3
4
  export declare const SURFACED_TIERS: readonly Tier[];
4
5
  export declare const CC_TIER_ALIASES: Readonly<Record<string, Tier>>;
@@ -1,12 +1,7 @@
1
- export const TIER_ORDER = Object.freeze(['ultra', 'max', 'pro', 'flash', 'lite']);
1
+ import { CORE_CC_MODEL_TIER_ALIASES, CORE_DEFAULT_TIER_ORDER } from '../generated/engineFactTables.js';
2
+ export const TIER_ORDER = CORE_DEFAULT_TIER_ORDER;
2
3
  export const SURFACED_TIERS = ['max', 'pro', 'flash', 'lite'];
3
- export const CC_TIER_ALIASES = {
4
- fable: 'max',
5
- mythos: 'max',
6
- opus: 'pro',
7
- sonnet: 'flash',
8
- haiku: 'lite',
9
- };
4
+ export const CC_TIER_ALIASES = CORE_CC_MODEL_TIER_ALIASES;
10
5
  export const DEFAULT_TIER = 'pro';
11
6
  export const TIER_BLURBS = {
12
7
  ultra: 'reserved above max — binds when a stronger model lands',
@@ -1,5 +1,5 @@
1
1
  import { applyDisplayFace, LEGACY_NAME_FACE } from './displayUntrusted.js';
2
- import { CORE_ENGINE_AUTHORITY_ENVELOPE_TAGS } from './generated/engineFactTables.js';
2
+ import { CORE_ENGINE_AUTHORITY_ENVELOPE_TAGS, CORE_PERMISSION_MODE_CLASSES } from './generated/engineFactTables.js';
3
3
  const WIRE_KEY_FROM = 'from';
4
4
  const WIRE_KEY_BODY = 'body';
5
5
  const WIRE_KEY_KIND = 'kind';
@@ -21,7 +21,7 @@ export const AGENT_MESSAGE_TAG = 'agent-message';
21
21
  export const CROSS_SESSION_MESSAGE_TAG = 'cross-session-message';
22
22
  export const PEER_FRAME_LANES = Object.freeze(['agent_message', 'cross_session_message', 'cross_session_notice']);
23
23
  export const CROSS_SESSION_NOTICE_KINDS = Object.freeze(['delivery_notice', 'idle_notice']);
24
- export const PEER_MODE_CLASSES = Object.freeze(['bypass', 'prompting']);
24
+ export const PEER_MODE_CLASSES = CORE_PERMISSION_MODE_CLASSES;
25
25
  function dataProp(o, key) {
26
26
  if (o === null || typeof o !== 'object')
27
27
  return undefined;
@@ -3,15 +3,15 @@ export const PERMISSION_RULE_ISSUE_CODES = Object.freeze([
3
3
  'invalid.empty_tool',
4
4
  'invalid.paren',
5
5
  'invalid.param_split',
6
- 'invalid.allow_param_rule',
7
6
  'invalid.primary_field',
8
7
  'invalid.cap_exceeded',
9
- 'unsupported.bash_prefix',
8
+ 'unsupported.allow',
9
+ 'invalid.behavior',
10
10
  'invalid.command_rule',
11
+ 'invalid.entry_type',
11
12
  'unsupported.param_unknown',
12
13
  'unsupported.param_non_scalar',
13
14
  'unsupported.tool_unknown',
14
- 'unsupported.file_glob',
15
15
  'unsupported.path_base',
16
16
  'unsupported.mcp_paren',
17
17
  'unsupported.covering_paren',
@@ -22,18 +22,21 @@ const ISSUE_SENTENCES = Object.freeze({
22
22
  'invalid.empty_tool': 'this rule is invalid: it names no tool',
23
23
  'invalid.paren': 'this rule is invalid: its parentheses do not parse (escape a literal one as \\( or \\))',
24
24
  'invalid.param_split': 'this rule is invalid: its parentheses do not hold a parameter rule written name:pattern',
25
- 'invalid.allow_param_rule': 'this rule is invalid: an allow rule cannot carry a parameter pattern — only bare tool rules auto-allow',
26
25
  'invalid.primary_field': "this rule is invalid: it patterns the tool's primary field, which matches the whole trimmed string rather than a prefix",
27
26
  'invalid.cap_exceeded': 'this rule set is invalid: it is over one of the deployment caps (rule count, rule length, pattern length, or star count)',
27
+ 'invalid.behavior': 'this rule is invalid: its behavior is neither deny nor ask, so it would never fire',
28
28
  'invalid.command_rule': 'this rule is invalid: the command pattern was rejected by the command-rule validator',
29
- 'unsupported.bash_prefix': 'a standing approval for a command belongs in the persisted-rule store, so this allow rule is not supported here (deny and ask rules with the same shape do compile)',
29
+ 'invalid.entry_type': 'this allow list is invalid: it must be a list of rule strings, and it or one of its entries is not a string',
30
+ 'unsupported.allow': 'an allow rule is not supported in a rule set that only says deny or ask — a standing approval belongs on the allow list instead',
30
31
  'unsupported.param_unknown': 'this parameter rule is not supported: the tool carries no such parameter, so it could never match',
31
32
  'unsupported.param_non_scalar': 'this parameter rule is not supported: that parameter holds an object or an array, so it could never match',
32
33
  'unsupported.tool_unknown': "this rule is not supported on this leg: the resolver it supplied does not know the tool, so the rule's face cannot be checked",
33
- 'unsupported.file_glob': 'a standing approval by path belongs in the consent store, so this allow rule is not supported here (deny and ask path rules do compile)',
34
34
  'unsupported.path_base': 'this path rule is not supported as spelled: it needs a base this policy was not given, so it would reach nothing and is refused rather than compiled',
35
35
  'unsupported.mcp_paren': 'a parenthesised parameter rule is not supported on an MCP tool name',
36
36
  'unsupported.covering_paren': 'a parenthesised parameter rule is not supported on a covering protocol name — the parameter grammar is keyed by an exact tool name, so no mounted tool could ever bear it',
37
+ 'invalid.allow_param_rule': 'this rule is invalid: an allow rule cannot carry a parameter pattern — only bare tool rules auto-allow',
38
+ 'unsupported.bash_prefix': 'a standing approval for a command belongs in the persisted-rule store, so this allow rule is not supported here (deny and ask rules with the same shape do compile)',
39
+ 'unsupported.file_glob': 'a standing approval by path belongs in the consent store, so this allow rule is not supported here (deny and ask path rules do compile)',
37
40
  });
38
41
  const PARAM_SPLIT_WITH_COLON = 'this rule is invalid: a parameter rule is written name:pattern, and the name before the colon or the pattern after it is empty';
39
42
  const PARAM_SPLIT_NO_COLON = 'this rule is invalid: there is no colon inside the parentheses, so this is not a parameter rule (a parameter rule is written name:pattern)';
@@ -22,7 +22,7 @@ export interface PermissionsDeclarationBuckets {
22
22
  export interface PermissionsDeclaration {
23
23
  permissions?: PermissionsDeclarationBuckets;
24
24
  }
25
- export declare const PERMISSIONS_KEPT_REASONS: readonly ["allow_capability_off", "settings_read_not_clean", "empty_rule", "paren_in_tool_name", "retired_tool_name", "unprefixed_namespaced_name", "incomplete_protocol_name", "home_relative_path", "compile_refused", "content_form_not_grantable", "judge_failed", "duplicate"];
25
+ export declare const PERMISSIONS_KEPT_REASONS: readonly ["allow_capability_off", "settings_read_not_clean", "empty_rule", "paren_in_tool_name", "retired_tool_name", "unprefixed_namespaced_name", "incomplete_protocol_name", "unminted_protocol_segment", "home_relative_path", "compile_refused", "content_form_not_grantable", "judge_failed", "duplicate"];
26
26
  export type PermissionsKeptReason = (typeof PERMISSIONS_KEPT_REASONS)[number];
27
27
  export interface PermissionsKeptRule {
28
28
  rule: string;
@@ -38,10 +38,16 @@ export interface PermissionsUncheckedRule {
38
38
  rule: string;
39
39
  bucket: 'deny' | 'ask';
40
40
  }
41
+ export interface PermissionsUnreachableRule {
42
+ rule: string;
43
+ bucket: 'deny' | 'ask';
44
+ mintedPrefix?: string;
45
+ }
41
46
  export interface PermissionsDeclarationReport extends PermissionsDeclaration {
42
47
  kept: PermissionsKeptRule[];
43
48
  rewritten: PermissionsRewrittenRule[];
44
49
  unchecked: PermissionsUncheckedRule[];
50
+ unreachable: PermissionsUnreachableRule[];
45
51
  }
46
52
  export declare function permissionsDeclaration(input: PermissionsDeclarationInput, caps: PermissionsAllowGrantReading): PermissionsDeclaration;
47
53
  export declare function permissionsDeclarationReport(input: PermissionsDeclarationInput, caps: PermissionsAllowGrantReading): PermissionsDeclarationReport;
@@ -1,4 +1,6 @@
1
- import { hasCoreValuePort, protocolOf, retiredToolNames, ruleToolGrammarOf, validatePermissionRules } from './coreValuePorts.js';
1
+ import { hasCoreValuePort, protocolOf, retiredToolNames, ruleToolGrammarOf } from './coreValuePorts.js';
2
+ import { protocolSegmentOf } from './protocolSegment.js';
3
+ import { ruleCompileVerdict } from './ruleCompileVerdict.js';
2
4
  import { allowRulesGate } from './permissionsAllowGrantCapability.js';
3
5
  const RULE_TRUST_ORDER = [
4
6
  'policySettings',
@@ -17,6 +19,7 @@ export const PERMISSIONS_KEPT_REASONS = Object.freeze([
17
19
  'retired_tool_name',
18
20
  'unprefixed_namespaced_name',
19
21
  'incomplete_protocol_name',
22
+ 'unminted_protocol_segment',
20
23
  'home_relative_path',
21
24
  'compile_refused',
22
25
  'content_form_not_grantable',
@@ -93,19 +96,14 @@ function wholeServerRuleName(name) {
93
96
  const peer = read.slice(ns.prefix.length);
94
97
  return peer !== '' && !peer.includes('__') && !peer.endsWith('_') ? `${read}__*` : name;
95
98
  }
96
- const RULE_ROOT = '/';
97
- function compileVerdict(rule, behavior) {
98
- try {
99
- const issues = validatePermissionRules([{ rule, behavior }], { pathBases: { root: RULE_ROOT } });
100
- if (!Array.isArray(issues))
101
- return 'unknown';
102
- return issues.length === 0 ? 'compiles' : 'refused';
103
- }
104
- catch {
105
- return 'unknown';
106
- }
107
- }
99
+ const compileVerdict = ruleCompileVerdict;
108
100
  const kept = (reason) => ({ sent: false, reason });
101
+ function sentFate(wire, toolName, unchecked) {
102
+ const segment = protocolSegmentOf(toolName);
103
+ return segment.kind === 'unminted'
104
+ ? { sent: true, wire, unchecked, unreachable: segment.minted !== undefined ? { minted: segment.minted } : {} }
105
+ : { sent: true, wire, unchecked };
106
+ }
109
107
  function judgeList(rules, behavior) {
110
108
  let portsChecked = false;
111
109
  return rules.map((rule) => {
@@ -121,24 +119,31 @@ function judgeList(rules, behavior) {
121
119
  const issue = wireIssue(name);
122
120
  if (issue !== undefined)
123
121
  return kept(issue);
124
- const verdict = compileVerdict(name, behavior);
122
+ if (behavior === 'allow') {
123
+ const segment = protocolSegmentOf(name);
124
+ if (segment.kind === 'unminted')
125
+ return kept('unminted_protocol_segment');
126
+ if (segment.kind === 'unknown')
127
+ return kept('judge_failed');
128
+ }
129
+ const verdict = compileVerdict(name, behavior === 'ask' ? 'ask' : 'deny');
125
130
  if (verdict === 'refused')
126
131
  return kept('compile_refused');
127
132
  if (verdict === 'unknown' && behavior === 'allow')
128
133
  return kept('judge_failed');
129
- return { sent: true, wire: name, unchecked: verdict === 'unknown' };
134
+ return behavior === 'allow' ? { sent: true, wire: name, unchecked: false } : sentFate(name, name, verdict === 'unknown');
130
135
  }
131
136
  const issue = wireIssue(parsed.toolName);
132
137
  if (issue !== undefined)
133
138
  return kept(issue);
134
139
  if (ruleToolGrammarOf(parsed.toolName) === 'path' && parsed.ruleContent.startsWith('~/'))
135
140
  return kept('home_relative_path');
141
+ if (behavior === 'allow')
142
+ return kept('content_form_not_grantable');
136
143
  const verdict = compileVerdict(rule, behavior);
137
144
  if (verdict === 'refused')
138
- return kept(behavior === 'allow' ? 'content_form_not_grantable' : 'compile_refused');
139
- if (verdict === 'unknown' && behavior === 'allow')
140
- return kept('judge_failed');
141
- return { sent: true, wire: rule, unchecked: verdict === 'unknown' };
145
+ return kept('compile_refused');
146
+ return sentFate(rule, parsed.toolName, verdict === 'unknown');
142
147
  });
143
148
  }
144
149
  function outsideSettingsFiles(origin) {
@@ -275,6 +280,7 @@ function assemble(input, caps) {
275
280
  const keptRows = [];
276
281
  const rewritten = [];
277
282
  const unchecked = [];
283
+ const unreachable = [];
278
284
  const rows = [
279
285
  ['deny', [...denySlots, ...cliSlots], denyJ],
280
286
  ['ask', askSlots, askJ],
@@ -293,9 +299,12 @@ function assemble(input, caps) {
293
299
  const f = (winner.list === 'cliDeny' ? j.fates[denySlots.length + winner.at] : j.fates[winner.at]);
294
300
  if (f.sent && f.unchecked && bucket !== 'allow')
295
301
  unchecked.push({ rule: wire, bucket });
302
+ if (f.sent && f.unreachable !== undefined && bucket !== 'allow') {
303
+ unreachable.push({ rule: wire, bucket, ...(f.unreachable.minted !== undefined ? { mintedPrefix: f.unreachable.minted } : {}) });
304
+ }
296
305
  }
297
306
  }
298
- return { buckets, report: { kept: keptRows, rewritten, unchecked } };
307
+ return { buckets, report: { kept: keptRows, rewritten, unchecked, unreachable } };
299
308
  }
300
309
  export function permissionsDeclaration(input, caps) {
301
310
  const { buckets } = assemble(input, caps);