@sema-agent/client-core 0.99.0 → 0.101.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 (374) hide show
  1. package/CHANGELOG.md +572 -0
  2. package/README.md +174 -114
  3. package/dist/adapt/arms.js +109 -50
  4. package/dist/adapt/panelTasks.d.ts +2 -1
  5. package/dist/adapt/panelTasks.js +32 -9
  6. package/dist/adapt/textStream.d.ts +1 -1
  7. package/dist/adapt/textStream.js +58 -32
  8. package/dist/adapt/toolCards.js +9 -8
  9. package/dist/adapt.js +7 -1
  10. package/dist/adapter/activeRunSelfHeal.d.ts +31 -2
  11. package/dist/adapter/activeRunSelfHeal.js +162 -13
  12. package/dist/adapter/downstream/eventToSdkMessage.d.ts +25 -6
  13. package/dist/adapter/downstream/eventToSdkMessage.js +157 -20
  14. package/dist/adapter/downstream/terminalToSdkResult.d.ts +60 -1
  15. package/dist/adapter/downstream/terminalToSdkResult.js +219 -39
  16. package/dist/adapter/downstream/wiringManifestView.d.ts +3 -1
  17. package/dist/adapter/downstream/wiringManifestView.js +1 -0
  18. package/dist/adapter/runStream.d.ts +4 -4
  19. package/dist/adapter/runStream.js +184 -42
  20. package/dist/adapter/types.d.ts +2 -0
  21. package/dist/agentsWireCaps.d.ts +9 -7
  22. package/dist/agentsWireCaps.js +101 -17
  23. package/dist/approvalDecidedByCapability.js +2 -2
  24. package/dist/approvalFrameFamilies.d.ts +33 -0
  25. package/dist/approvalFrameFamilies.js +120 -0
  26. package/dist/approvalsStreamLiveCapability.js +2 -2
  27. package/dist/attachmentsWireCaps.js +41 -13
  28. package/dist/callerCwdCapability.js +2 -2
  29. package/dist/centerWiringCapability.js +2 -2
  30. package/dist/clockReading.d.ts +2 -0
  31. package/dist/clockReading.js +4 -0
  32. package/dist/cloudConfigWireCaps.d.ts +28 -5
  33. package/dist/cloudConfigWireCaps.js +334 -103
  34. package/dist/compactionStatus.d.ts +34 -0
  35. package/dist/compactionStatus.js +196 -0
  36. package/dist/coreValuePorts.d.ts +12 -2
  37. package/dist/coreValuePorts.js +9 -0
  38. package/dist/decideFailureNote.js +8 -6
  39. package/dist/decideReceipt.js +2 -2
  40. package/dist/deviceExecutorManagementCapability.js +2 -2
  41. package/dist/deviceFlowPolling.js +1 -1
  42. package/dist/disableSkillsWire.d.ts +1 -1
  43. package/dist/disableSkillsWire.js +4 -3
  44. package/dist/displayUntrusted.d.ts +1 -0
  45. package/dist/displayUntrusted.js +215 -13
  46. package/dist/engineAgentPanelStore.d.ts +7 -4
  47. package/dist/engineCapReader.js +1 -1
  48. package/dist/engineConfigDrift.js +1 -1
  49. package/dist/engineErrorCodes.d.ts +23 -6
  50. package/dist/engineErrorCodes.js +36 -11
  51. package/dist/engineGenerationConvergence.d.ts +39 -0
  52. package/dist/engineGenerationConvergence.js +95 -0
  53. package/dist/engineGenerationPort.d.ts +61 -0
  54. package/dist/engineGenerationPort.js +144 -0
  55. package/dist/engineHealthFacts.d.ts +23 -0
  56. package/dist/engineHealthFacts.js +92 -0
  57. package/dist/engineIdentity.d.ts +4 -0
  58. package/dist/engineIdentity.js +11 -0
  59. package/dist/engineNoticeCodes.d.ts +2 -5
  60. package/dist/engineRowRef.js +4 -0
  61. package/dist/engineSessionMessages.js +2 -2
  62. package/dist/engineToolDirectory.d.ts +3 -0
  63. package/dist/engineToolDirectory.js +6 -4
  64. package/dist/engineWireFor.d.ts +99 -0
  65. package/dist/engineWireFor.js +248 -6
  66. package/dist/engineWireTarget.d.ts +1 -0
  67. package/dist/engineWireTarget.js +8 -0
  68. package/dist/env/uiLanguage.js +1 -1
  69. package/dist/errorSupplementRoles.d.ts +3 -0
  70. package/dist/errorSupplementRoles.js +37 -0
  71. package/dist/eventLeg.d.ts +1 -7
  72. package/dist/eventLeg.js +7 -8
  73. package/dist/executionLaneCapability.js +2 -2
  74. package/dist/fileHistoryCaptureCapability.d.ts +0 -3
  75. package/dist/fileHistoryCaptureCapability.js +3 -7
  76. package/dist/finalVerifyWire.d.ts +6 -3
  77. package/dist/finalVerifyWire.js +6 -23
  78. package/dist/flagInput.d.ts +4 -0
  79. package/dist/flagInput.js +24 -0
  80. package/dist/fleet/fleetLedger.js +5 -2
  81. package/dist/fleet/fleetProjection.d.ts +1 -0
  82. package/dist/fleet/fleetProjection.js +15 -2
  83. package/dist/gateVocabulary.js +3 -0
  84. package/dist/generated/engineFactTables.d.ts +7 -2
  85. package/dist/generated/engineFactTables.js +79 -0
  86. package/dist/generated/engineNoticeTables.js +15 -0
  87. package/dist/generated/settingsSchemaActiveTiers.d.ts +1 -0
  88. package/dist/generated/settingsSchemaActiveTiers.js +14 -0
  89. package/dist/generated/settingsSchemaCallerTextEcho.d.ts +1 -0
  90. package/dist/generated/settingsSchemaCallerTextEcho.js +8 -0
  91. package/dist/generated/settingsSchemaControlAndBidi.d.ts +1 -0
  92. package/dist/generated/settingsSchemaControlAndBidi.js +8 -0
  93. package/dist/generated/settingsSchemaDefaultModel.d.ts +11 -0
  94. package/dist/generated/settingsSchemaDefaultModel.js +25 -0
  95. package/dist/generated/settingsSchemaFns.d.ts +66 -0
  96. package/dist/generated/settingsSchemaFns.js +38 -0
  97. package/dist/generated/settingsSchemaMcpRequestEntry.d.ts +1 -0
  98. package/dist/generated/settingsSchemaMcpRequestEntry.js +156 -0
  99. package/dist/generated/settingsSchemaSafetyMergeSpec.d.ts +1 -0
  100. package/dist/generated/settingsSchemaSafetyMergeSpec.js +95 -0
  101. package/dist/generated/settingsSchemaSettingsSources.d.ts +1 -0
  102. package/dist/generated/settingsSchemaSettingsSources.js +58 -0
  103. package/dist/generated/settingsSchemaTables.d.ts +3 -0
  104. package/dist/generated/settingsSchemaTables.js +18 -0
  105. package/dist/generated/settingsSchemaTypes.d.ts +28 -0
  106. package/dist/generated/settingsSchemaUrlPattern.d.ts +1 -0
  107. package/dist/generated/settingsSchemaUrlPattern.js +183 -0
  108. package/dist/headlessPermissionModeWire.d.ts +18 -2
  109. package/dist/headlessPermissionModeWire.js +30 -19
  110. package/dist/hitl/allowRuleShadow.js +9 -7
  111. package/dist/hitl/approvalCardReading.d.ts +3 -0
  112. package/dist/hitl/approvalCardReading.js +17 -0
  113. package/dist/hitl/approvalCardReasons.js +2 -2
  114. package/dist/hitl/approvalCompleteParked.js +1 -1
  115. package/dist/hitl/approvalDelivery.d.ts +87 -0
  116. package/dist/hitl/approvalDelivery.js +193 -0
  117. package/dist/hitl/approvalHolds.d.ts +14 -0
  118. package/dist/hitl/approvalHolds.js +41 -0
  119. package/dist/hitl/approvalResolution.d.ts +11 -0
  120. package/dist/hitl/approvalResolution.js +50 -11
  121. package/dist/hitl/askClassPair.d.ts +8 -2
  122. package/dist/hitl/askClassPair.js +31 -4
  123. package/dist/hitl/askParkAutoReopenBlock.d.ts +30 -0
  124. package/dist/hitl/askParkAutoReopenBlock.js +117 -0
  125. package/dist/hitl/askParkRowRouting.js +4 -1
  126. package/dist/hitl/attributionLadder.d.ts +62 -0
  127. package/dist/hitl/attributionLadder.js +138 -0
  128. package/dist/hitl/automaticAnswerVerdict.d.ts +6 -1
  129. package/dist/hitl/automaticAnswerVerdict.js +46 -11
  130. package/dist/hitl/crashConverged.js +2 -2
  131. package/dist/hitl/decisionConflict.d.ts +6 -2
  132. package/dist/hitl/decisionConflict.js +24 -9
  133. package/dist/hitl/decisionLedger.d.ts +55 -0
  134. package/dist/hitl/decisionLedger.js +156 -0
  135. package/dist/hitl/decisionRefusal.d.ts +21 -10
  136. package/dist/hitl/decisionRefusal.js +100 -55
  137. package/dist/hitl/decisionSend.d.ts +116 -0
  138. package/dist/hitl/decisionSend.js +563 -0
  139. package/dist/hitl/frameRouter.d.ts +1 -0
  140. package/dist/hitl/frameRouter.js +9 -2
  141. package/dist/hitl/hitlBridge.d.ts +18 -6
  142. package/dist/hitl/hitlBridge.js +59 -43
  143. package/dist/hitl/livePendingAsk.js +4 -3
  144. package/dist/hitl/noAllowCause.js +1 -1
  145. package/dist/hitl/parkResolver.js +3 -2
  146. package/dist/hitl/persistedRulesWire.js +1 -0
  147. package/dist/hitl/planReviewWire.d.ts +4 -0
  148. package/dist/hitl/planReviewWire.js +104 -106
  149. package/dist/hitl/resumeRunningCard.d.ts +3 -2
  150. package/dist/hitl/resumeRunningCard.js +17 -11
  151. package/dist/hitl/sessionPolicyDeliverable.d.ts +5 -2
  152. package/dist/hitl/sessionPolicyDeliverable.js +65 -35
  153. package/dist/hitl/sessionPolicyWire.d.ts +13 -3
  154. package/dist/hitl/sessionPolicyWire.js +81 -16
  155. package/dist/hitl/standingRows.js +1 -1
  156. package/dist/hitl/toolApprovalWire.d.ts +9 -10
  157. package/dist/hitl/toolApprovalWire.js +103 -151
  158. package/dist/hookMatcherVerdict.d.ts +2 -0
  159. package/dist/hookMatcherVerdict.js +12 -0
  160. package/dist/hooksCompactTransition.d.ts +19 -0
  161. package/dist/hooksCompactTransition.js +41 -0
  162. package/dist/hooksWireCaps.d.ts +1 -1
  163. package/dist/hooksWireCaps.js +202 -203
  164. package/dist/host.d.ts +1 -14
  165. package/dist/host.js +0 -8
  166. package/dist/hostCallbackGuard.d.ts +1 -0
  167. package/dist/hostCallbackGuard.js +1 -1
  168. package/dist/hostSettingsSource.d.ts +172 -0
  169. package/dist/hostSettingsSource.js +675 -0
  170. package/dist/hostTurnSettings.d.ts +114 -19
  171. package/dist/hostTurnSettings.js +966 -68
  172. package/dist/httpHookPolicy.d.ts +37 -0
  173. package/dist/httpHookPolicy.js +176 -0
  174. package/dist/humanTurn.d.ts +4 -2
  175. package/dist/humanTurn.js +40 -10
  176. package/dist/humanTurnRead.js +4 -3
  177. package/dist/humanTurnSentences.d.ts +10 -0
  178. package/dist/humanTurnSentences.js +74 -0
  179. package/dist/i18n/messages.en.d.ts +313 -0
  180. package/dist/i18n/messages.en.js +326 -13
  181. package/dist/i18n/messages.zh.js +341 -13
  182. package/dist/i18n/translate.js +3 -3
  183. package/dist/index.d.ts +85 -15
  184. package/dist/index.js +53 -12
  185. package/dist/inheritEnvCapability.d.ts +4 -1
  186. package/dist/inheritEnvCapability.js +38 -17
  187. package/dist/inheritEnvWire.d.ts +2 -1
  188. package/dist/inheritEnvWire.js +11 -5
  189. package/dist/injectionLaneNotice.d.ts +5 -0
  190. package/dist/injectionLaneNotice.js +46 -0
  191. package/dist/interactiveToolsWire.d.ts +4 -2
  192. package/dist/interactiveToolsWire.js +5 -5
  193. package/dist/jsonFaithful.d.ts +20 -0
  194. package/dist/jsonFaithful.js +152 -0
  195. package/dist/limitsWire.d.ts +7 -2
  196. package/dist/limitsWire.js +19 -13
  197. package/dist/liveInitToolFace.d.ts +6 -1
  198. package/dist/liveInitToolFace.js +5 -3
  199. package/dist/liveModelCatalog.d.ts +22 -0
  200. package/dist/liveModelCatalog.js +132 -18
  201. package/dist/mcpPanel.js +3 -1
  202. package/dist/mcpProbeCapability.js +2 -2
  203. package/dist/mcpReconnect.js +2 -2
  204. package/dist/mcpStatusSupersetKeys.d.ts +24 -0
  205. package/dist/mcpStatusSupersetKeys.js +45 -0
  206. package/dist/mcpToolToggles.d.ts +6 -0
  207. package/dist/mcpToolToggles.js +47 -0
  208. package/dist/mcpWireCaps.d.ts +48 -4
  209. package/dist/mcpWireCaps.js +338 -99
  210. package/dist/mcpWireTransport.d.ts +4 -0
  211. package/dist/mcpWireTransport.js +18 -0
  212. package/dist/memoryComplianceCapability.js +2 -2
  213. package/dist/memoryOriginCapability.js +2 -2
  214. package/dist/model/catalogDefault.d.ts +24 -0
  215. package/dist/model/catalogDefault.js +4 -0
  216. package/dist/model/liveCatalogShape.js +5 -4
  217. package/dist/model/modelsPolicy.js +4 -3
  218. package/dist/model/onboardJudgement.d.ts +1 -0
  219. package/dist/model/onboardJudgement.js +1 -1
  220. package/dist/model/subagentModelWord.js +2 -2
  221. package/dist/modelCapabilityProbe.d.ts +2 -1
  222. package/dist/modelCapabilityProbe.js +16 -15
  223. package/dist/modelIdentityResolvability.d.ts +12 -1
  224. package/dist/modelIdentityResolvability.js +69 -28
  225. package/dist/modsKernelIdentity.d.ts +10 -0
  226. package/dist/modsKernelIdentity.js +103 -0
  227. package/dist/modsKernelTransit.d.ts +8 -0
  228. package/dist/modsKernelTransit.js +6 -0
  229. package/dist/notifications.d.ts +30 -12
  230. package/dist/notifications.js +241 -53
  231. package/dist/outputStyleSeatCapability.js +2 -2
  232. package/dist/ownKey.d.ts +37 -0
  233. package/dist/ownKey.js +238 -2
  234. package/dist/panelReduce.d.ts +5 -0
  235. package/dist/panelReduce.js +45 -13
  236. package/dist/panelStateHolder.d.ts +1 -0
  237. package/dist/panelStateHolder.js +10 -1
  238. package/dist/peerFrames.d.ts +1 -1
  239. package/dist/peerFrames.js +6 -2
  240. package/dist/peerLaneCapability.js +2 -2
  241. package/dist/permissionModesCapability.js +4 -4
  242. package/dist/permissionRuleIssue.d.ts +2 -1
  243. package/dist/permissionRuleIssue.js +24 -21
  244. package/dist/permissionRulesWriteCapability.js +2 -2
  245. package/dist/permissionsAllowGrantCapability.js +2 -2
  246. package/dist/permissionsDeclaration.d.ts +43 -4
  247. package/dist/permissionsDeclaration.js +102 -35
  248. package/dist/pluginHooksWire.d.ts +20 -4
  249. package/dist/pluginHooksWire.js +101 -60
  250. package/dist/prepareRefusal.d.ts +9 -0
  251. package/dist/prepareRefusal.js +90 -0
  252. package/dist/printInitToolFace.js +2 -2
  253. package/dist/printModelStatus.js +1 -1
  254. package/dist/projectMemory.d.ts +32 -0
  255. package/dist/projectMemory.js +70 -0
  256. package/dist/promptBlockedCopy.d.ts +2 -1
  257. package/dist/promptBlockedCopy.js +2 -1
  258. package/dist/promptDelivery.d.ts +23 -3
  259. package/dist/promptDelivery.js +169 -30
  260. package/dist/providerRejection.d.ts +19 -1
  261. package/dist/providerRejection.js +75 -4
  262. package/dist/queuedDelivery.d.ts +48 -0
  263. package/dist/queuedDelivery.js +233 -0
  264. package/dist/reattachWindow.d.ts +94 -0
  265. package/dist/reattachWindow.js +127 -0
  266. package/dist/request/printNotification.d.ts +1 -1
  267. package/dist/request/printNotification.js +5 -1
  268. package/dist/request/submissionIdentity.d.ts +37 -0
  269. package/dist/request/submissionIdentity.js +65 -0
  270. package/dist/request/taskRequest.d.ts +22 -14
  271. package/dist/request/taskRequest.js +312 -202
  272. package/dist/resultFrameKeys.d.ts +1 -0
  273. package/dist/resultFrameKeys.js +4 -1
  274. package/dist/resumeRefusalCopy.d.ts +3 -1
  275. package/dist/resumeRefusalCopy.js +22 -4
  276. package/dist/retryStatus.d.ts +26 -0
  277. package/dist/retryStatus.js +133 -28
  278. package/dist/rewindArchiveCapability.js +2 -2
  279. package/dist/rewindEngineAction.d.ts +2 -0
  280. package/dist/rewindEngineAction.js +23 -1
  281. package/dist/rowKind.d.ts +36 -0
  282. package/dist/rowKind.js +97 -0
  283. package/dist/ruleCompileVerdict.d.ts +18 -0
  284. package/dist/ruleCompileVerdict.js +67 -2
  285. package/dist/ruleReadings.d.ts +58 -0
  286. package/dist/ruleReadings.js +132 -0
  287. package/dist/ruleRefusalSentence.d.ts +8 -0
  288. package/dist/ruleRefusalSentence.js +64 -0
  289. package/dist/runCancelContext.d.ts +0 -1
  290. package/dist/runCancelContext.js +1 -2
  291. package/dist/runTerminal.d.ts +5 -0
  292. package/dist/runTerminal.js +52 -17
  293. package/dist/sandboxWire.d.ts +3 -2
  294. package/dist/sandboxWire.js +59 -27
  295. package/dist/scenarioRefusal.d.ts +2 -1
  296. package/dist/scenarioRefusal.js +6 -6
  297. package/dist/scenarioSkills.d.ts +20 -0
  298. package/dist/scenarioSkills.js +72 -0
  299. package/dist/scenarioWire.d.ts +5 -2
  300. package/dist/scenarioWire.js +9 -9
  301. package/dist/sealedKeyCapability.js +2 -2
  302. package/dist/seam.d.ts +26 -9
  303. package/dist/seam.js +44 -4
  304. package/dist/seatContract.d.ts +62 -9
  305. package/dist/seatContract.js +70 -25
  306. package/dist/selfOrchestrationDenial.js +1 -1
  307. package/dist/sessionPolicyCapability.js +2 -2
  308. package/dist/sessionRulesChildrenReadLive.d.ts +6 -0
  309. package/dist/sessionRulesChildrenReadLive.js +5 -0
  310. package/dist/sessionRulesNamespaceFormsCapability.d.ts +12 -0
  311. package/dist/sessionRulesNamespaceFormsCapability.js +29 -0
  312. package/dist/sessionSyncFileHistoryCapability.js +2 -2
  313. package/dist/settingsCredentialKeyPaths.d.ts +8 -0
  314. package/dist/settingsCredentialKeyPaths.js +274 -0
  315. package/dist/settingsHooksSalvage.d.ts +1 -0
  316. package/dist/settingsHooksSalvage.js +7 -1
  317. package/dist/settingsLayerAdmission.d.ts +4 -0
  318. package/dist/settingsLayerAdmission.js +16 -0
  319. package/dist/skillToolListsCapability.js +6 -5
  320. package/dist/skillsWireCaps.d.ts +14 -3
  321. package/dist/skillsWireCaps.js +48 -18
  322. package/dist/slashCommandGate.d.ts +24 -0
  323. package/dist/slashCommandGate.js +74 -0
  324. package/dist/slashCommandTable.d.ts +14 -0
  325. package/dist/slashCommandTable.js +99 -0
  326. package/dist/sqlEngineCapability.js +2 -2
  327. package/dist/steerPriorityCapability.js +2 -2
  328. package/dist/storePostureCapability.js +2 -2
  329. package/dist/subagent/agentStateDetail.js +1 -1
  330. package/dist/subagent/engineDelegatedPrompt.d.ts +9 -0
  331. package/dist/subagent/engineDelegatedPrompt.js +38 -7
  332. package/dist/subagent/engineRowStopGate.js +2 -2
  333. package/dist/subagent/engineSubagentResume.js +3 -3
  334. package/dist/subagent/engineTaskHandleWire.d.ts +1 -0
  335. package/dist/subagent/engineTaskHandleWire.js +10 -0
  336. package/dist/subagentContentStore.d.ts +1 -0
  337. package/dist/subagentContentStore.js +135 -27
  338. package/dist/submitFailure.d.ts +8 -0
  339. package/dist/submitFailure.js +17 -0
  340. package/dist/supportFloor.d.ts +1 -0
  341. package/dist/supportFloor.js +7 -0
  342. package/dist/terminationIntent.d.ts +55 -0
  343. package/dist/terminationIntent.js +352 -0
  344. package/dist/toolHistoryMismatch.d.ts +8 -0
  345. package/dist/toolHistoryMismatch.js +37 -6
  346. package/dist/toolResult.d.ts +13 -3
  347. package/dist/toolResult.js +158 -9
  348. package/dist/toolResultContent.d.ts +13 -0
  349. package/dist/toolResultContent.js +82 -7
  350. package/dist/toolRoster.d.ts +18 -0
  351. package/dist/toolRoster.js +64 -0
  352. package/dist/toolsFlagNames.d.ts +8 -0
  353. package/dist/toolsFlagNames.js +110 -0
  354. package/dist/turnFailurePresentation.js +41 -96
  355. package/dist/usageLimitAutoResume.d.ts +74 -0
  356. package/dist/usageLimitAutoResume.js +227 -0
  357. package/dist/userAttachmentEnvelope.js +1 -1
  358. package/dist/userAttachmentSeat.js +5 -5
  359. package/dist/userInvokedSkillsCapability.js +2 -2
  360. package/dist/webSearchBackendCapability.js +2 -2
  361. package/dist/wireErrorTriage.js +99 -50
  362. package/dist/wireFailureShape.d.ts +25 -1
  363. package/dist/wireFailureShape.js +92 -5
  364. package/dist/wireRefusalCopy.d.ts +75 -18
  365. package/dist/wireRefusalCopy.js +532 -148
  366. package/dist/wiringFleetDoctor.d.ts +3 -0
  367. package/dist/wiringFleetDoctor.js +21 -0
  368. package/dist/workflow.d.ts +2 -1
  369. package/dist/workflow.js +38 -1
  370. package/dist/workflowClient.d.ts +2 -7
  371. package/dist/workflowsJournalCapability.js +2 -2
  372. package/dist/writeProtectionCapability.js +2 -2
  373. package/docs/INTEGRATION-CLIENTS.md +1013 -190
  374. package/package.json +15 -4
@@ -0,0 +1,37 @@
1
+ import type { WireHooksConfig } from './finalVerifyWire.js';
2
+ import type { WorkspaceTrustState } from './hostSettingsSource.js';
3
+ import type { HookSettingsSource } from './pluginHooksWire.js';
4
+ export declare const HTTP_POLICY_DROP_REASONS: readonly ["url_not_listed", "url_list_empty", "url_list_malformed", "env_list_malformed", "layer_unreadable"];
5
+ export type HttpPolicyDropReason = (typeof HTTP_POLICY_DROP_REASONS)[number];
6
+ export interface HttpPolicyDropRow {
7
+ readonly event: string;
8
+ readonly reason: HttpPolicyDropReason;
9
+ readonly layer: HookSettingsSource;
10
+ readonly urlShown: string;
11
+ readonly notice: string;
12
+ }
13
+ export type HttpHookListReading = {
14
+ readonly kind: 'absent';
15
+ } | {
16
+ readonly kind: 'list';
17
+ readonly patterns: readonly string[];
18
+ } | {
19
+ readonly kind: 'malformed';
20
+ } | {
21
+ readonly kind: 'unreadable';
22
+ };
23
+ export interface HttpHookLayerReading {
24
+ readonly layer: HookSettingsSource;
25
+ readonly urls: HttpHookListReading;
26
+ readonly envs: HttpHookListReading;
27
+ }
28
+ export interface HttpHookPolicyReading {
29
+ readonly layers: readonly HttpHookLayerReading[];
30
+ }
31
+ export declare function httpHookAdmittedSources(sources: readonly HookSettingsSource[], trust: WorkspaceTrustState | 'unreadable'): readonly HookSettingsSource[];
32
+ export declare function readHttpHookPolicy(admitted: readonly HookSettingsSource[], docOf: (layer: HookSettingsSource) => object | null | undefined): HttpHookPolicyReading;
33
+ export declare function wireHasHttpEntry(wire: WireHooksConfig): boolean;
34
+ export declare function applyHttpHookPolicy(wire: WireHooksConfig, policy: HttpHookPolicyReading): {
35
+ readonly wire: WireHooksConfig | undefined;
36
+ readonly rows: readonly HttpPolicyDropRow[];
37
+ };
@@ -0,0 +1,176 @@
1
+ import { appendOwnElement } from './ownKey.js';
2
+ import { displayUntrusted } from './displayUntrusted.js';
3
+ import { SETTINGS_URL_ALLOW_PATTERN_MATCHES } from './generated/settingsSchemaFns.js';
4
+ import { admittedLayers } from './settingsLayerAdmission.js';
5
+ import { hostLog } from './host.js';
6
+ import { msg, renderMessage } from './i18n/translate.js';
7
+ import { HOOK_SETTINGS_SOURCE_TEXT } from './settingsHooksSalvage.js';
8
+ export const HTTP_POLICY_DROP_REASONS = Object.freeze(['url_not_listed', 'url_list_empty', 'url_list_malformed', 'env_list_malformed', 'layer_unreadable']);
9
+ const ABSENT = Object.freeze({ kind: 'absent' });
10
+ const MALFORMED = Object.freeze({ kind: 'malformed' });
11
+ const UNREADABLE = Object.freeze({ kind: 'unreadable' });
12
+ const HTTP_HOOK_ALLOWLISTS_CATEGORY = 'httpHookAllowlists';
13
+ export function httpHookAdmittedSources(sources, trust) {
14
+ return admittedLayers(sources, trust, HTTP_HOOK_ALLOWLISTS_CATEGORY);
15
+ }
16
+ function readList(doc, key) {
17
+ try {
18
+ if (typeof doc !== 'object' || doc === null)
19
+ return ABSENT;
20
+ const d = Object.getOwnPropertyDescriptor(doc, key);
21
+ if (d === undefined)
22
+ return ABSENT;
23
+ if (!Object.hasOwn(d, 'value'))
24
+ return MALFORMED;
25
+ const v = d.value;
26
+ if (v === undefined)
27
+ return ABSENT;
28
+ if (!Array.isArray(v))
29
+ return MALFORMED;
30
+ const patterns = [];
31
+ for (let i = 0; i < v.length; i++) {
32
+ const ed = Object.getOwnPropertyDescriptor(v, i);
33
+ if (ed === undefined || !Object.hasOwn(ed, 'value') || typeof ed.value !== 'string')
34
+ return MALFORMED;
35
+ appendOwnElement(patterns, ed.value);
36
+ }
37
+ return { kind: 'list', patterns };
38
+ }
39
+ catch {
40
+ return MALFORMED;
41
+ }
42
+ }
43
+ export function readHttpHookPolicy(admitted, docOf) {
44
+ const layers = [];
45
+ for (const layer of admitted) {
46
+ let doc;
47
+ try {
48
+ doc = docOf(layer);
49
+ }
50
+ catch {
51
+ hostLog('debug', `http-hook-list-layer-read-threw: ${layer}`);
52
+ layers.push(Object.freeze({ layer, urls: UNREADABLE, envs: UNREADABLE }));
53
+ continue;
54
+ }
55
+ const urls = readList(doc, 'allowedHttpHookUrls');
56
+ const envs = readList(doc, 'httpHookAllowedEnvVars');
57
+ if (urls.kind === 'absent' && envs.kind === 'absent')
58
+ continue;
59
+ layers.push(Object.freeze({ layer, urls, envs }));
60
+ }
61
+ return Object.freeze({ layers: Object.freeze(layers) });
62
+ }
63
+ function httpHookPolicyIsUnrestricted(p) {
64
+ return p.layers.length === 0;
65
+ }
66
+ export function wireHasHttpEntry(wire) {
67
+ for (const groups of Object.values(wire)) {
68
+ if (!Array.isArray(groups))
69
+ continue;
70
+ for (const g of groups) {
71
+ if (typeof g !== 'object' || g === null || !Array.isArray(g.hooks))
72
+ continue;
73
+ for (const h of g.hooks)
74
+ if (h?.type === 'http')
75
+ return true;
76
+ }
77
+ }
78
+ return false;
79
+ }
80
+ function patternAdmits(url, pattern) {
81
+ try {
82
+ return SETTINGS_URL_ALLOW_PATTERN_MATCHES(url, pattern);
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ }
88
+ function urlListed(url, patterns) {
89
+ return patterns.some((p) => patternAdmits(url, p));
90
+ }
91
+ const DROP_KEY = {
92
+ url_not_listed: 'config.hooks.httpPolicy.urlNotListed',
93
+ url_list_empty: 'config.hooks.httpPolicy.urlListEmpty',
94
+ url_list_malformed: 'config.hooks.httpPolicy.urlListMalformed',
95
+ env_list_malformed: 'config.hooks.httpPolicy.envListMalformed',
96
+ layer_unreadable: 'config.hooks.httpPolicy.layerUnreadable',
97
+ };
98
+ const URL_SHOWN_MAX = 200;
99
+ const EVENT_SHOWN_MAX = 80;
100
+ function rowOf(event, reason, layer, url) {
101
+ const urlShown = typeof url === 'string' && url !== '' ? displayUntrusted(url, { max: URL_SHOWN_MAX }) : '(no URL)';
102
+ const eventShown = displayUntrusted(event, { max: EVENT_SHOWN_MAX });
103
+ const layerShown = HOOK_SETTINGS_SOURCE_TEXT[layer] ?? 'Settings';
104
+ return Object.freeze({ event, reason, layer, urlShown, notice: renderMessage(msg(DROP_KEY[reason], { url: urlShown, event: eventShown, layer: layerShown })) });
105
+ }
106
+ function judgeEntry(entry, event, policy) {
107
+ const e = entry;
108
+ for (const l of policy.layers) {
109
+ const urls = l.urls;
110
+ if (urls.kind === 'absent')
111
+ continue;
112
+ if (urls.kind === 'unreadable')
113
+ return { keep: undefined, rows: [rowOf(event, 'layer_unreadable', l.layer, e.url)] };
114
+ if (urls.kind === 'malformed')
115
+ return { keep: undefined, rows: [rowOf(event, 'url_list_malformed', l.layer, e.url)] };
116
+ if (urls.patterns.length === 0)
117
+ return { keep: undefined, rows: [rowOf(event, 'url_list_empty', l.layer, e.url)] };
118
+ if (typeof e.url !== 'string' || !urlListed(e.url, urls.patterns))
119
+ return { keep: undefined, rows: [rowOf(event, 'url_not_listed', l.layer, e.url)] };
120
+ }
121
+ const envLayers = policy.layers.filter((l) => l.envs.kind !== 'absent');
122
+ if (envLayers.length === 0 || !Array.isArray(e.allowedEnvVars))
123
+ return { keep: entry, rows: [] };
124
+ const own = e.allowedEnvVars;
125
+ const lists = envLayers.map((l) => (l.envs.kind === 'list' ? l.envs.patterns : []));
126
+ const narrowed = own.filter((v) => typeof v === 'string' && lists.every((list) => list.includes(v)));
127
+ if (narrowed.length === own.length)
128
+ return { keep: entry, rows: [] };
129
+ const bad = envLayers.find((l) => l.envs.kind === 'malformed');
130
+ return { keep: { ...entry, allowedEnvVars: narrowed }, rows: bad !== undefined && own.length > 0 ? [rowOf(event, 'env_list_malformed', bad.layer, e.url)] : [] };
131
+ }
132
+ export function applyHttpHookPolicy(wire, policy) {
133
+ if (httpHookPolicyIsUnrestricted(policy))
134
+ return { wire, rows: [] };
135
+ const rows = [];
136
+ let changed = false;
137
+ const out = {};
138
+ for (const [event, groups] of Object.entries(wire)) {
139
+ if (!Array.isArray(groups)) {
140
+ out[event] = groups;
141
+ continue;
142
+ }
143
+ const keptGroups = [];
144
+ for (const g of groups) {
145
+ if (typeof g !== 'object' || g === null || !Array.isArray(g.hooks) || g.hooks.length === 0) {
146
+ keptGroups.push(g);
147
+ continue;
148
+ }
149
+ const hooks = [];
150
+ for (const h of g.hooks) {
151
+ if (h?.type !== 'http') {
152
+ hooks.push(h);
153
+ continue;
154
+ }
155
+ const j = judgeEntry(h, event, policy);
156
+ rows.push(...j.rows);
157
+ if (j.keep !== undefined)
158
+ hooks.push(j.keep);
159
+ }
160
+ const same = hooks.length === g.hooks.length && hooks.every((h, i) => h === g.hooks[i]);
161
+ if (!same)
162
+ changed = true;
163
+ if (hooks.length > 0)
164
+ keptGroups.push(same ? g : { ...g, hooks });
165
+ }
166
+ if (keptGroups.length > 0)
167
+ out[event] = keptGroups;
168
+ else if (groups.length === 0)
169
+ out[event] = groups;
170
+ else
171
+ changed = true;
172
+ }
173
+ if (!changed)
174
+ return { wire, rows };
175
+ return { wire: Object.keys(out).length > 0 ? out : undefined, rows };
176
+ }
@@ -3,6 +3,7 @@ import type { ImageInput } from './imagesWireCaps.js';
3
3
  import type { ImageVision } from './liveModelCatalog.js';
4
4
  import { type UserAttachmentDescriptor } from './userAttachmentEnvelope.js';
5
5
  import type { UserAttachmentSeatReading } from './userAttachmentSeat.js';
6
+ import type { UiLanguage } from './env/uiLanguage.js';
6
7
  export interface HumanTurnRider {
7
8
  readonly uuid: string;
8
9
  readonly role: 'image_meta' | 'attachment' | 'skill_body' | (string & {});
@@ -66,7 +67,7 @@ export interface HumanTurnDegraded {
66
67
  export interface HumanTurnNotice {
67
68
  readonly uuid: string;
68
69
  readonly kind: 'image';
69
- readonly ref: string;
70
+ readonly ref: string | number;
70
71
  readonly why: 'vision_unknown';
71
72
  }
72
73
  export type HumanTurnEncoding = {
@@ -98,7 +99,8 @@ export interface HumanTurnDelivered {
98
99
  readonly full: readonly string[];
99
100
  readonly partial: readonly string[];
100
101
  }
101
- export declare function imageSentOnUnknownVision(notices: readonly HumanTurnNotice[] | undefined): string | undefined;
102
+ export declare function otherBodyBytesOf(request: object | null | undefined): number | undefined;
103
+ export declare function imageSentOnUnknownVision(notices: readonly HumanTurnNotice[] | undefined, lang?: UiLanguage): string | undefined;
102
104
  export declare function encodeHumanTurn(input: HumanTurnInput): HumanTurnEncoding;
103
105
  export declare function deliveredUuidsOf(encoding: HumanTurnEncoding): HumanTurnDelivered;
104
106
  export {};
package/dist/humanTurn.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { CORE_MAX_PENDING_STEER_CHARS, CORE_MCP_IMAGE_MAX_BASE64, CORE_USER_ATTACHMENT_LABEL_MAX } from './generated/engineFactTables.js';
2
2
  import { mintEnvelopeOf, mintReferenceOf, seatTextOf } from './userAttachmentEnvelope.js';
3
3
  import { readEncodingShares, readHumanTurnInput } from './humanTurnRead.js';
4
+ import { putOwnKey } from './ownKey.js';
5
+ import { msg, renderMessage } from './i18n/translate.js';
4
6
  const REQUEST_BODY_MAX_BYTES = 8 * 1024 * 1024;
5
7
  const IMAGE_SEAT_MAX_COUNT = 20;
6
8
  const IMAGE_SEAT_MAX_BASE64_CHARS_TOTAL = 6 * 1024 * 1024;
@@ -29,6 +31,29 @@ function utf8Length(s) {
29
31
  return n;
30
32
  }
31
33
  const jsonBytes = (v) => utf8Length(JSON.stringify(v));
34
+ const ENCODER_BODY_KEYS = new Set(['objective', 'images', 'attachmentIds', 'userAttachments']);
35
+ export function otherBodyBytesOf(request) {
36
+ if (typeof request !== 'object' || request === null)
37
+ return undefined;
38
+ try {
39
+ if (Array.isArray(request))
40
+ return undefined;
41
+ const rest = {};
42
+ for (const k of Object.keys(request)) {
43
+ if (ENCODER_BODY_KEYS.has(k))
44
+ continue;
45
+ const d = Object.getOwnPropertyDescriptor(request, k);
46
+ if (d === undefined || !Object.hasOwn(d, 'value'))
47
+ return undefined;
48
+ putOwnKey(rest, k, d.value);
49
+ }
50
+ const json = JSON.stringify(rest);
51
+ return json === undefined ? undefined : utf8Length(json);
52
+ }
53
+ catch {
54
+ return undefined;
55
+ }
56
+ }
32
57
  function bodyBytes(other, objective, images, ids, entries) {
33
58
  const keys = [jsonBytes('objective') + 1 + jsonBytes(objective)];
34
59
  if (images.length > 0)
@@ -162,17 +187,23 @@ function sharesAndDegraded(items, recs) {
162
187
  }
163
188
  return { shares, degraded };
164
189
  }
165
- function noticesKey(v, items, placements) {
190
+ function noticesKey(v, items, placements, pastedWhy) {
166
191
  if (v.vision !== 'unknown')
167
192
  return {};
168
193
  const notices = [];
169
- for (const p of placements) {
170
- if (p.form === 'content' && p.seated && p.a.pixels !== undefined)
171
- notices.push({ uuid: items[p.item].uuid, kind: 'image', ref: p.a.uuid, why: 'vision_unknown' });
172
- }
194
+ items.forEach((it, i) => {
195
+ it.images.forEach((_, k) => {
196
+ if (pastedWhy[i]?.[k] === undefined)
197
+ notices.push({ uuid: it.uuid, kind: 'image', ref: k, why: 'vision_unknown' });
198
+ });
199
+ for (const p of placements) {
200
+ if (p.item === i && p.form === 'content' && p.seated && p.a.pixels !== undefined)
201
+ notices.push({ uuid: it.uuid, kind: 'image', ref: p.a.uuid, why: 'vision_unknown' });
202
+ }
203
+ });
173
204
  return notices.length > 0 ? { notices } : {};
174
205
  }
175
- export function imageSentOnUnknownVision(notices) {
206
+ export function imageSentOnUnknownVision(notices, lang) {
176
207
  let n = 0;
177
208
  try {
178
209
  if (!Array.isArray(notices))
@@ -186,8 +217,7 @@ export function imageSentOnUnknownVision(notices) {
186
217
  }
187
218
  if (n === 0)
188
219
  return undefined;
189
- const what = n === 1 ? 'An @-mentioned image was' : `${n} @-mentioned images were`;
190
- return `${what} sent with this message, although the engine's model list does not say whether the model this message uses accepts image input — if it does not, the images may be dropped or the message may be refused`;
220
+ return renderMessage(n === 1 ? msg('session.humanTurn.imageUnknownVision.one') : msg('session.humanTurn.imageUnknownVision.other', { count: n }), lang);
191
221
  }
192
222
  function encodeObjective(v) {
193
223
  const { items } = v;
@@ -204,7 +234,7 @@ function encodeObjective(v) {
204
234
  total += len;
205
235
  return undefined;
206
236
  };
207
- const pastedWhy = items.map((it) => it.images.map((img) => seat('data' in img ? img.data.length : 0)));
237
+ const pastedWhy = items.map((it) => it.images.map((img) => (v.vision === 'no' ? 'vision_no' : seat('data' in img ? img.data.length : 0))));
208
238
  const placements = [];
209
239
  items.forEach((it, i) => {
210
240
  for (const a of it.attachments) {
@@ -260,7 +290,7 @@ function encodeObjective(v) {
260
290
  ...(entries.length > 0 ? { userAttachments: entries, userAttachmentOrdinals: seated.map((p) => p.a.uuid) } : {}),
261
291
  shares,
262
292
  degraded,
263
- ...noticesKey(v, items, placements),
293
+ ...noticesKey(v, items, placements, pastedWhy),
264
294
  };
265
295
  }
266
296
  let pick = -1;
@@ -1,3 +1,4 @@
1
+ import { appendOwnElement } from './ownKey.js';
1
2
  import { userAttachmentSeatAdmits } from './userAttachmentSeat.js';
2
3
  const descriptorKindsAligned = true;
3
4
  void descriptorKindsAligned;
@@ -15,7 +16,7 @@ function ownData(o, key) {
15
16
  const d = Object.getOwnPropertyDescriptor(o, key);
16
17
  if (d === undefined)
17
18
  return undefined;
18
- if (!('value' in d))
19
+ if (!Object.hasOwn(d, 'value'))
19
20
  bad();
20
21
  return d.value;
21
22
  }
@@ -29,9 +30,9 @@ function ownArray(x) {
29
30
  const out = [];
30
31
  for (let i = 0; i < n; i += 1) {
31
32
  const d = Object.getOwnPropertyDescriptor(arr, i);
32
- if (d === undefined || !('value' in d))
33
+ if (d === undefined || !Object.hasOwn(d, 'value'))
33
34
  bad();
34
- out.push(d.value);
35
+ appendOwnElement(out, d.value);
35
36
  }
36
37
  return out;
37
38
  }
@@ -0,0 +1,10 @@
1
+ import type { HumanTurnDegraded, HumanTurnEncoding } from './humanTurn.js';
2
+ import type { UiLanguage } from './env/uiLanguage.js';
3
+ import type { ImageVision } from './liveModelCatalog.js';
4
+ export declare function humanTurnRefusalSentence(answer: HumanTurnEncoding | null | undefined, lang?: UiLanguage): string | undefined;
5
+ export declare function humanTurnDegradedSentence(degraded: readonly HumanTurnDegraded[] | null | undefined, lang?: UiLanguage, ctx?: {
6
+ readonly modelName?: string;
7
+ }): string | undefined;
8
+ export declare function printImageVisionSentence(vision: ImageVision | undefined, lang?: UiLanguage, ctx?: {
9
+ readonly modelName?: string;
10
+ }): string | undefined;
@@ -0,0 +1,74 @@
1
+ import { msg, renderMessage } from './i18n/translate.js';
2
+ import { guardedRead, readOwnDataValue } from './ownKey.js';
3
+ const own = (o, key) => guardedRead(() => readOwnDataValue(o, key));
4
+ const REFUSAL_KEYS = {
5
+ empty: 'session.humanTurn.refused.empty',
6
+ malformed_input: 'session.humanTurn.refused.malformedInput',
7
+ malformed_item: 'session.humanTurn.refused.malformedItem',
8
+ duplicate_uuid: 'session.humanTurn.refused.duplicateUuid',
9
+ rider_collides_primary: 'session.humanTurn.refused.riderCollidesPrimary',
10
+ oversize: 'session.humanTurn.refused.oversize',
11
+ };
12
+ const HOLD_KEYS = {
13
+ no_text: 'session.humanTurn.held.noText',
14
+ reminder_tag: 'session.humanTurn.held.reminderTag',
15
+ control_char: 'session.humanTurn.held.controlChar',
16
+ too_long: 'session.humanTurn.held.tooLong',
17
+ };
18
+ export function humanTurnRefusalSentence(answer, lang) {
19
+ if (own(answer, 'ok') !== false)
20
+ return undefined;
21
+ const reason = own(answer, 'reason');
22
+ if (typeof reason !== 'string')
23
+ return undefined;
24
+ if (reason === 'steer_hold') {
25
+ const why = own(answer, 'why');
26
+ return typeof why === 'string' && Object.hasOwn(HOLD_KEYS, why) ? renderMessage(msg(HOLD_KEYS[why]), lang) : undefined;
27
+ }
28
+ return Object.hasOwn(REFUSAL_KEYS, reason) ? renderMessage(msg(REFUSAL_KEYS[reason]), lang) : undefined;
29
+ }
30
+ const DEGRADED_KEYS = {
31
+ vision_no: ['session.humanTurn.degraded.visionNo.one', 'session.humanTurn.degraded.visionNo.other'],
32
+ image_too_large: ['session.humanTurn.degraded.imageTooLarge.one', 'session.humanTurn.degraded.imageTooLarge.other'],
33
+ seat_count: ['session.humanTurn.degraded.seatCount.one', 'session.humanTurn.degraded.seatCount.other'],
34
+ seat_total: ['session.humanTurn.degraded.seatTotal.one', 'session.humanTurn.degraded.seatTotal.other'],
35
+ body_budget: ['session.humanTurn.degraded.bodyBudget.one', 'session.humanTurn.degraded.bodyBudget.other'],
36
+ steer_admission: ['session.humanTurn.degraded.steerAdmission.one', 'session.humanTurn.degraded.steerAdmission.other'],
37
+ lane_has_no_image_seat: ['session.humanTurn.degraded.noImageSeat.one', 'session.humanTurn.degraded.noImageSeat.other'],
38
+ lane_has_no_attachment_id_seat: ['session.humanTurn.degraded.noAttachmentIdSeat.one', 'session.humanTurn.degraded.noAttachmentIdSeat.other'],
39
+ };
40
+ function modelFragment(modelName, lang) {
41
+ return typeof modelName === 'string' && modelName.length > 0 ? renderMessage(msg('session.humanTurn.modelFragment', { model: modelName }), lang) : '';
42
+ }
43
+ export function humanTurnDegradedSentence(degraded, lang, ctx) {
44
+ const counts = new Map();
45
+ try {
46
+ if (!Array.isArray(degraded))
47
+ return undefined;
48
+ for (const d of degraded) {
49
+ const why = own(d, 'why');
50
+ if (typeof why !== 'string' || !Object.hasOwn(DEGRADED_KEYS, why))
51
+ continue;
52
+ const k = why;
53
+ counts.set(k, (counts.get(k) ?? 0) + 1);
54
+ }
55
+ }
56
+ catch {
57
+ return undefined;
58
+ }
59
+ if (counts.size === 0)
60
+ return undefined;
61
+ const modelName = ctx === undefined ? undefined : own(ctx, 'modelName');
62
+ const lines = [];
63
+ for (const [why, n] of counts) {
64
+ const [one, other] = DEGRADED_KEYS[why];
65
+ lines.push(renderMessage(msg(n === 1 ? one : other, { count: n, model: modelFragment(modelName, lang) }), lang));
66
+ }
67
+ return lines.join('\n');
68
+ }
69
+ export function printImageVisionSentence(vision, lang, ctx) {
70
+ if (vision !== 'no' && vision !== 'unknown')
71
+ return undefined;
72
+ const model = modelFragment(ctx === undefined ? undefined : own(ctx, 'modelName'), lang);
73
+ return renderMessage(msg(vision === 'no' ? 'session.humanTurn.printVision.no' : 'session.humanTurn.printVision.unknown', { model }), lang);
74
+ }