@sema-agent/client-core 0.109.0 → 0.111.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 +342 -0
- package/README.md +88 -32
- package/dist/abortableSleep.d.ts +7 -0
- package/dist/abortableSleep.js +37 -0
- package/dist/adapt/arms.js +45 -11
- package/dist/adapt/toolCards.d.ts +3 -1
- package/dist/adapt/toolCards.js +4 -2
- package/dist/adapter/activeRunSelfHeal.d.ts +39 -0
- package/dist/adapter/activeRunSelfHeal.js +171 -3
- package/dist/adapter/downstream/eventToSdkMessage.js +20 -15
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +2 -0
- package/dist/adapter/downstream/terminalToSdkResult.js +11 -0
- package/dist/adapter/runStream.d.ts +5 -0
- package/dist/adapter/runStream.js +15 -3
- package/dist/attachmentRoute.d.ts +20 -0
- package/dist/attachmentRoute.js +39 -0
- package/dist/attachmentsWireCaps.js +1 -1
- package/dist/builtinOutputStyles.d.ts +12 -0
- package/dist/builtinOutputStyles.js +147 -0
- package/dist/compactionStatus.d.ts +9 -0
- package/dist/compactionStatus.js +29 -5
- package/dist/controlRouter.js +2 -1
- package/dist/coreValuePorts.d.ts +39 -1
- package/dist/coreValuePorts.js +10 -0
- package/dist/declared/supportFloorDeclared.js +1 -1
- package/dist/displayUntrusted.d.ts +1 -0
- package/dist/displayUntrusted.js +138 -14
- package/dist/engineErrorCodes.d.ts +3 -0
- package/dist/engineErrorCodes.js +3 -0
- package/dist/engineHealthFacts.d.ts +20 -0
- package/dist/engineHealthFacts.js +42 -1
- package/dist/engineHealthProbeVerdict.d.ts +23 -0
- package/dist/engineHealthProbeVerdict.js +115 -0
- package/dist/engineInlineTaskStats.d.ts +4 -3
- package/dist/engineInlineTaskStats.js +18 -2
- package/dist/engineNoticeCodes.d.ts +10 -0
- package/dist/engineNoticeCodes.js +36 -6
- package/dist/engineRepoint.d.ts +147 -0
- package/dist/engineRepoint.js +310 -0
- package/dist/engineRowRef.d.ts +3 -0
- package/dist/engineRowRef.js +13 -1
- package/dist/engineSessionMessages.d.ts +2 -1
- package/dist/engineSessionMessages.js +5 -0
- package/dist/engineSwapCrossing.d.ts +57 -0
- package/dist/engineSwapCrossing.js +297 -0
- package/dist/engineUnavailable.d.ts +44 -0
- package/dist/engineUnavailable.js +492 -0
- package/dist/errorSupplementRoles.js +2 -1
- package/dist/eventLeg.js +3 -3
- package/dist/fleet/fleetProjection.js +3 -2
- package/dist/generated/engineFactTables.d.ts +2 -0
- package/dist/generated/engineFactTables.js +12 -0
- package/dist/generated/sdkFactTables.d.ts +2 -1
- package/dist/generated/sdkFactTables.js +5 -0
- package/dist/generated/settingsSchemaTables.d.ts +4 -0
- package/dist/generated/settingsSchemaTables.js +1 -0
- package/dist/hitl/approvalAskers.d.ts +6 -0
- package/dist/hitl/approvalAskers.js +30 -0
- package/dist/hitl/approvalCardReasons.js +6 -3
- package/dist/hitl/approvalDelivery.d.ts +1 -0
- package/dist/hitl/approvalDelivery.js +1 -1
- package/dist/hitl/approvalRequestFrameReading.d.ts +7 -0
- package/dist/hitl/approvalRequestFrameReading.js +11 -0
- package/dist/hitl/approvalResolution.d.ts +9 -2
- package/dist/hitl/approvalResolution.js +6 -1
- package/dist/hitl/askGateWire.js +5 -8
- package/dist/hitl/automaticAnswerVerdict.js +2 -2
- package/dist/hitl/decisionConflict.js +6 -3
- package/dist/hitl/decisionRefusal.d.ts +2 -0
- package/dist/hitl/decisionRefusal.js +8 -8
- package/dist/hitl/decisionRefusalCarrier.d.ts +3 -0
- package/dist/hitl/decisionRefusalCarrier.js +348 -0
- package/dist/hitl/decisionSend.d.ts +10 -0
- package/dist/hitl/decisionSend.js +57 -17
- package/dist/hitl/editedApprovalAcceptance.d.ts +25 -0
- package/dist/hitl/editedApprovalAcceptance.js +26 -0
- package/dist/hitl/elicitationRefusal.d.ts +4 -0
- package/dist/hitl/elicitationRefusal.js +23 -0
- package/dist/hitl/frameRouter.d.ts +2 -2
- package/dist/hitl/frameRouter.js +12 -33
- package/dist/hitl/gateIdentity.d.ts +5 -0
- package/dist/hitl/gateIdentity.js +23 -0
- package/dist/hitl/gateLedger.d.ts +0 -4
- package/dist/hitl/gateLedger.js +0 -19
- package/dist/hitl/hitlBridge.d.ts +7 -0
- package/dist/hitl/hitlBridge.js +14 -8
- package/dist/hitl/hitlHostSurface.d.ts +3 -1
- package/dist/hitl/hitlHostSurface.js +14 -4
- package/dist/hitl/hostWithdrawal.d.ts +15 -0
- package/dist/hitl/hostWithdrawal.js +38 -0
- package/dist/hitl/localAllowRedemption.d.ts +67 -0
- package/dist/hitl/localAllowRedemption.js +256 -0
- package/dist/hitl/parkResolver.js +32 -13
- package/dist/hitl/persistedRulesWire.d.ts +16 -0
- package/dist/hitl/persistedRulesWire.js +72 -2
- package/dist/hitl/planReviewWire.d.ts +3 -0
- package/dist/hitl/planReviewWire.js +37 -10
- package/dist/hitl/policyDenyCause.d.ts +1 -1
- package/dist/hitl/policyDenyCause.js +1 -1
- package/dist/hitl/resumeRunningCard.d.ts +1 -0
- package/dist/hitl/resumeRunningCard.js +1 -0
- package/dist/hitl/screenCardCarriers.d.ts +15 -0
- package/dist/hitl/screenCardCarriers.js +41 -0
- package/dist/hitl/screenDecisionCards.d.ts +98 -0
- package/dist/hitl/screenDecisionCards.js +362 -0
- package/dist/hitl/sessionPolicyWire.js +6 -4
- package/dist/hitl/standingRows.d.ts +4 -1
- package/dist/hitl/standingRows.js +33 -1
- package/dist/hitl/toolApprovalWire.d.ts +64 -15
- package/dist/hitl/toolApprovalWire.js +470 -125
- package/dist/hooksWireCaps.js +31 -1
- package/dist/hostSettingNoticeArm.d.ts +3 -0
- package/dist/hostSettingNoticeArm.js +12 -0
- package/dist/hostTurnSettings.d.ts +13 -4
- package/dist/hostTurnSettings.js +150 -10
- package/dist/humanTurnRead.js +11 -1
- package/dist/i18n/messages.en.d.ts +212 -0
- package/dist/i18n/messages.en.js +217 -5
- package/dist/i18n/messages.zh.js +235 -5
- package/dist/i18n/translate.d.ts +3 -0
- package/dist/i18n/translate.js +78 -10
- package/dist/i18n/zh.d.ts +1 -0
- package/dist/i18n/zh.js +1 -0
- package/dist/index.d.ts +56 -16
- package/dist/index.js +40 -12
- package/dist/inheritEnvCapability.js +2 -0
- package/dist/inputAuthor.d.ts +16 -0
- package/dist/inputAuthor.js +44 -0
- package/dist/interactiveHalt.js +2 -1
- package/dist/interactiveInterrupt.js +20 -2
- package/dist/interruptRefusalNote.d.ts +2 -0
- package/dist/interruptRefusalNote.js +17 -0
- package/dist/liveModelCatalog.d.ts +2 -0
- package/dist/liveModelCatalog.js +23 -9
- package/dist/liveQuestionStore.d.ts +4 -1
- package/dist/liveQuestionStore.js +12 -3
- package/dist/localEngineSeatReading.d.ts +2 -2
- package/dist/localEngineSeatReading.js +5 -3
- package/dist/localEngineSpawn.d.ts +0 -7
- package/dist/localEngineSpawn.js +0 -92
- package/dist/localEngineStep.d.ts +2 -2
- package/dist/localEngineStep.js +2 -0
- package/dist/mcpEngineLeg.d.ts +3 -0
- package/dist/mcpEngineLeg.js +38 -1
- package/dist/mcpPanel.js +2 -0
- package/dist/mcpReconnect.d.ts +9 -1
- package/dist/mcpReconnect.js +124 -19
- package/dist/mcpWireCaps.js +1 -1
- package/dist/model/engineModelWords.d.ts +3 -0
- package/dist/model/engineModelWords.js +13 -0
- package/dist/model/subagentModelWord.d.ts +21 -2
- package/dist/model/subagentModelWord.js +100 -29
- package/dist/modelCapabilityProbe.js +7 -43
- package/dist/modsFace.d.ts +8 -1
- package/dist/modsFace.js +27 -0
- package/dist/notifications.d.ts +36 -6
- package/dist/notifications.js +170 -20
- package/dist/ownKey.d.ts +6 -5
- package/dist/ownKey.js +31 -7
- package/dist/peerFrames.d.ts +40 -2
- package/dist/peerFrames.js +158 -3
- package/dist/pendingUserRow.d.ts +4 -0
- package/dist/pendingUserRow.js +16 -0
- package/dist/permissionsDeclaration.d.ts +1 -0
- package/dist/permissionsDeclaration.js +11 -1
- package/dist/planReviewCardFacts.d.ts +3 -0
- package/dist/planReviewCardFacts.js +52 -2
- package/dist/pluginHooksWire.d.ts +10 -1
- package/dist/pluginHooksWire.js +96 -7
- package/dist/printToolResultFrame.js +4 -2
- package/dist/promptBlockedCopy.js +11 -6
- package/dist/promptSuggestionBatch.d.ts +7 -0
- package/dist/promptSuggestionBatch.js +9 -0
- package/dist/promptSuggestionsTail.d.ts +39 -0
- package/dist/promptSuggestionsTail.js +116 -0
- package/dist/replayBody.js +10 -2
- package/dist/request/taskRequest.d.ts +5 -0
- package/dist/request/taskRequest.js +142 -21
- package/dist/requestCoordinate.d.ts +1 -0
- package/dist/requestCoordinate.js +13 -0
- package/dist/resumeRefusalCopy.d.ts +1 -3
- package/dist/resumeRefusalCopy.js +2 -1
- package/dist/retryStatus.d.ts +2 -2
- package/dist/retryStatus.js +2 -0
- package/dist/rewindArchiveReading.js +4 -4
- package/dist/runCancelContext.d.ts +2 -1
- package/dist/runCancelContext.js +1 -0
- package/dist/runPermissionModeSwitch.js +2 -2
- package/dist/scenarioRefusal.js +11 -13
- package/dist/scenarioSkills.js +11 -6
- package/dist/seam.d.ts +27 -2
- package/dist/seam.js +17 -1
- package/dist/seatContract.d.ts +189 -12
- package/dist/seatContract.js +401 -9
- package/dist/sessionBackground.js +2 -1
- package/dist/sessionBackgroundHandoff.js +2 -1
- package/dist/sessionCostReading.d.ts +70 -0
- package/dist/sessionCostReading.js +150 -0
- package/dist/sessionEngine.d.ts +2 -0
- package/dist/sessionEngine.js +111 -0
- package/dist/sessionHooksRoster.d.ts +4 -0
- package/dist/sessionHooksRoster.js +158 -0
- package/dist/sessionMemoryStatus.d.ts +2 -1
- package/dist/sessionMemoryStatus.js +2 -2
- package/dist/sessionReadRedaction.d.ts +7 -0
- package/dist/sessionReadRedaction.js +26 -0
- package/dist/sessionSyncFileHistory.d.ts +4 -0
- package/dist/sessionSyncFileHistory.js +27 -0
- package/dist/settingsHooksSalvage.js +2 -1
- package/dist/sseIdleTriage.d.ts +13 -1
- package/dist/sseIdleTriage.js +25 -6
- package/dist/storeDurabilityWord.d.ts +15 -0
- package/dist/storeDurabilityWord.js +18 -0
- package/dist/storePostureCapability.d.ts +7 -3
- package/dist/storePostureCapability.js +69 -39
- package/dist/subagent/engineSubagentResume.js +2 -2
- package/dist/subagent/engineSubagentTail.js +8 -1
- package/dist/subagentContentStore.d.ts +11 -0
- package/dist/subagentContentStore.js +28 -2
- package/dist/terminalStatuses.d.ts +1 -0
- package/dist/terminalStatuses.js +4 -1
- package/dist/toolResult.d.ts +1 -0
- package/dist/toolResult.js +2 -0
- package/dist/turnFailurePresentation.js +9 -2
- package/dist/typePins.d.ts +11 -0
- package/dist/usageAnalytics.d.ts +17 -0
- package/dist/usageAnalytics.js +44 -2
- package/dist/userAttachmentEnvelope.d.ts +2 -1
- package/dist/userAttachmentEnvelope.js +10 -0
- package/dist/wireErrorTriage.js +2 -1
- package/dist/wireFailureShape.d.ts +6 -5
- package/dist/wireFailureShape.js +150 -38
- package/dist/wireRefusalCopy.d.ts +16 -5
- package/dist/wireRefusalCopy.js +119 -86
- package/docs/INTEGRATION-CLIENTS.md +4228 -21
- package/package.json +7 -3
package/dist/i18n/messages.en.js
CHANGED
|
@@ -115,8 +115,16 @@ const EN = {
|
|
|
115
115
|
'model.subagent.chainUnbound': "Subagent model {word} is not bound on this engine (neither it nor any tier below it has a model) — the subagent will run on its parent's model.",
|
|
116
116
|
'model.subagent.bindingNotInCatalog': "Subagent model {word} is bound to a model that is not in this engine's model catalog — the subagent will run on its parent's model.",
|
|
117
117
|
'model.subagent.ambiguous': "Subagent model {word} matches more than one model name that differ only in case — spell it exactly; the subagent will run on its parent's model.",
|
|
118
|
+
'model.subagent.call.ambiguous': "Subagent model {word} can't be used for this call: it matches more than one model name that differ only in case — spell it exactly.",
|
|
119
|
+
'model.subagent.call.tiersInert': "Subagent model {word} can't be used for this call: it is a tier word, but this engine has no model tiers configured.",
|
|
120
|
+
'model.subagent.call.chainUnbound': "Subagent model {word} can't be used for this call: it maps to tier {tier}, which has no model bound on this engine (nor does any tier below it).",
|
|
121
|
+
'model.subagent.call.bindingNotInCatalog': "Subagent model {word} can't be used for this call: its tier {tier} is bound to a model that is not in this engine's model catalog.",
|
|
122
|
+
'model.subagent.refused.notListed': "Subagent model {word} is not a model name, tier word or model id on this engine, so this agent is left out of the request (the engine refuses any request that carries it) — change the agent's model, or set it to `inherit`.",
|
|
123
|
+
'model.subagent.refused.notServed': "Subagent model {word} has no model behind it on this engine, so this agent is left out of the request (the engine refuses any request that carries it) — change the agent's model, or set it to `inherit`.",
|
|
124
|
+
'model.subagent.refused.disabled': "Subagent model {word} is disabled on this engine, so this agent is left out of the request (the engine refuses any request that carries it) — change the agent's model, or set it to `inherit`.",
|
|
118
125
|
'model.catalogDefault.refused.named': 'A task that names no model would be refused: the engine cannot resolve a default model from its model configuration (the settings default is {name}) · Set a default model the engine can run, or add or fix one',
|
|
119
126
|
'model.catalogDefault.refused.select': 'A task that names no model would be refused: the engine cannot resolve a default model from its model configuration (the settings default is a selection) · Change the selection, or add or fix a model the engine can run',
|
|
127
|
+
'session.sync.pushRowBitsWriterSide': 'The session was pushed · At the destination it is a read-only mirror, so its title and pin stay with the side that writes it and were not changed there',
|
|
120
128
|
'session.devices.laneAbsent': 'This backend has no remote-control lane',
|
|
121
129
|
'session.devices.laneUnreported': "This backend doesn't report a remote-control lane",
|
|
122
130
|
'session.devices.verbsOff': "This backend's device lane is on, but its device-management verbs are off — devices can't be listed or changed here",
|
|
@@ -130,6 +138,27 @@ const EN = {
|
|
|
130
138
|
'session.engine.dispatch.scopeUnproven': "Your current sign-in can't be confirmed to reach this session's engine, so nothing was sent. Sign in to that engine's space (or connect to the engine directly), then try again.",
|
|
131
139
|
'session.engine.dispatch.unresolved': "This session's engine isn't known yet, so nothing was sent. Choose the engine for this session once, then try again.",
|
|
132
140
|
'session.engine.dispatch.sessionAmbiguous': 'This session is registered on two engines at once, so nothing was sent. Stop here and resolve which engine it belongs to first.',
|
|
141
|
+
'session.mcpReconnect.notRunning': 'No run of this session is live on this engine right now (it may be waiting for an answer, have finished, or be running elsewhere), so {server} was not re-dialed; a run that starts or resumes dials its declared servers again.',
|
|
142
|
+
'session.mcpReconnect.unsupported': 'This engine does not support re-dialing an MCP server during a session; {server} was not re-dialed.',
|
|
143
|
+
'session.mcpReconnect.notFound': 'The engine did not find this session, so {server} was not re-dialed.',
|
|
144
|
+
'session.mcpReconnect.invalid': 'The re-dial request for {server} was not valid (the session id or the server name was unusable), so it was not re-dialed.',
|
|
145
|
+
'session.mcpReconnect.failed': 'Could not re-dial {server} on the engine: the request did not complete.',
|
|
146
|
+
'session.mcpReconnect.noSession': 'There is no engine session yet, so {server} was not re-dialed on the engine.',
|
|
147
|
+
'session.mcpReconnect.unavailable': 'Re-dialing {server} on the engine is not available here.',
|
|
148
|
+
'session.mcpReconnect.accepted.one': 'MCP server {server} was re-dialed: {toolCount} tool mounted for this run ({added} added, {removed} removed)',
|
|
149
|
+
'session.mcpReconnect.accepted.other': 'MCP server {server} was re-dialed: {toolCount} tools mounted for this run ({added} added, {removed} removed)',
|
|
150
|
+
'session.mcpReconnect.refused.untouched': 'MCP server {server} was NOT re-dialed; its connection and tools were left untouched{why}',
|
|
151
|
+
'session.mcpReconnect.refused.noTools': "MCP server {server} was NOT re-dialed; this run's tool list has no tools from it right now (the dial failed, or this run's tool settings let none of its tools through){why}",
|
|
152
|
+
'session.mcpReconnect.refused.listed.one': 'MCP server {server} was NOT re-dialed; the engine reports {toolCount} tool for it after this attempt{why}',
|
|
153
|
+
'session.mcpReconnect.refused.listed.other': 'MCP server {server} was NOT re-dialed; the engine reports {toolCount} tools for it after this attempt{why}',
|
|
154
|
+
'session.mcpReconnect.undeclared': 'This run declared no MCP servers, so there is nothing to re-dial ({server} is not part of this run){why}',
|
|
155
|
+
'session.mcpReconnect.unsettled': "The MCP re-dial did not settle within the time this request waits, so there is no result yet: the re-dial was not cancelled and may still be running. Check the server's state before re-dialing it again — a second request that arrives after the dial has settled closes the connection and dials once more.",
|
|
156
|
+
'session.mcpReconnect.reasonTail': ' — {reason}',
|
|
157
|
+
'session.mcpReconnect.transaction': 'Reconnecting closes the current connection before dialing again. On a healthy server this is a transaction, not a refresh: a failed re-dial leaves the server down and withdraws its tools from the model until a later re-dial succeeds.',
|
|
158
|
+
'session.mcpFailure.reauthorizeSuffix': ' (re-authorize)',
|
|
159
|
+
'session.mcpFailure.serverDownSuffix': ' (the server is down)',
|
|
160
|
+
'mcp.elicitation.refused.named': 'MCP server {server} asked for input through a form that cannot be shown here, so the request was declined.',
|
|
161
|
+
'mcp.elicitation.refused.unnamed': 'An MCP server asked for input through a form that cannot be shown here, so the request was declined.',
|
|
133
162
|
'config.cloudLogin.accessDenied': 'Sign-in was declined.',
|
|
134
163
|
'config.cloudLogin.expiredToken': 'The sign-in code expired before it was approved — start again.',
|
|
135
164
|
'config.cloudLogin.invalidGrant': 'The Cloud sign-in can no longer be renewed — sign in again.',
|
|
@@ -202,9 +231,9 @@ const EN = {
|
|
|
202
231
|
'config.mcp.transportsNone': 'none',
|
|
203
232
|
'config.mcp.transportInvalid': 'MCP server {name}{where} was not started: its transport setting cannot be used — {path} {problem}. Fix that setting for this server (or remove the server); the other MCP servers are unaffected.',
|
|
204
233
|
'config.mcp.transportDegraded': 'MCP server {name}{where} was started without part of its transport settings, which cannot be used as written: {lost}. The rest of its settings are applied; fix the settings named above to get them applied too.',
|
|
205
|
-
'config.mcp.toolAxesInvalid': 'MCP server {name}{where} was
|
|
234
|
+
'config.mcp.toolAxesInvalid': 'MCP server {name}{where} was started to read its tool list and then dropped: its toolAxes setting is not valid — {problem}. Fix the toolAxes entry for this server (or remove it); the other MCP servers are unaffected.',
|
|
206
235
|
'config.mcp.toolAxesFallbackProblem': 'the declaration is not a valid set of per-tool safety settings',
|
|
207
|
-
'config.mcp.toolFacesInvalid': 'MCP server {name}{where} was
|
|
236
|
+
'config.mcp.toolFacesInvalid': 'MCP server {name}{where} was started to read its tool list and then dropped: its toolFaces setting is not valid — {problem}. Fix the toolFaces entry for this server (or remove it); the other MCP servers are unaffected.',
|
|
208
237
|
'config.mcp.toolFacesFallbackProblem': 'the declaration is not a valid set of per-tool display and approval settings',
|
|
209
238
|
'config.mcp.toolFacesUnreadable': 'the setting could not be read (a getter or proxy trap on it threw)',
|
|
210
239
|
'config.mcp.elicitationInvalid': 'MCP server {name}{where} was not started: its elicitation setting must be true or false. Fix the elicitation entry for this server (or remove it); the other MCP servers are unaffected.',
|
|
@@ -213,7 +242,7 @@ const EN = {
|
|
|
213
242
|
'config.mcp.entryNotObjectProblem': 'the entry is not an object (an object with a command or a url is expected)',
|
|
214
243
|
'config.mcp.transportTypeUnsupported': 'this transport type cannot be carried on the request (only stdio and http are supported)',
|
|
215
244
|
'config.mcp.transportIdentityBothSetProblem': 'both principalHeader and assertionHeader are set, and they name the same identity header — keep only one of the two',
|
|
216
|
-
'config.mcp.allowToolsInvalid': 'MCP server {name}{where} was
|
|
245
|
+
'config.mcp.allowToolsInvalid': 'MCP server {name}{where} was started to read its tool list and then dropped: its allowTools setting cannot be used — {problem}. Fix the allowTools entry for this server (a list of tool-name strings); the other MCP servers are unaffected.',
|
|
217
246
|
'config.mcp.allowToolsNotArray': '{path} must be an array of strings (got {got})',
|
|
218
247
|
'config.mcp.allowToolsElementNotString': '{path} must be a string (got {got})',
|
|
219
248
|
'config.mcp.allowToolsHole': '{path} is missing: a list with gaps is not allowed, every position must hold a string',
|
|
@@ -252,6 +281,7 @@ const EN = {
|
|
|
252
281
|
'approval.settle.cause.streamDisconnected': 'the connection carrying this card dropped',
|
|
253
282
|
'approval.settle.cause.undeliverable': 'it could not be delivered to any approval surface',
|
|
254
283
|
'approval.resolution.engineUnavailable': 'The engine is temporarily unavailable — answer this once the engine is back.',
|
|
284
|
+
'approval.allowNote.notCarried': "This engine can't take a note on Yes — a note written here is not sent to the model.",
|
|
255
285
|
'approval.decide.requiresBinding': 'This decision was sent without the binding that ties it to the exact action on the approval card, so the engine refused it · Nothing was decided and the approval is still pending · Fetch the pending approvals again and decide from the card as it is listed now; if the listed card itself carries no binding, {wayOut}',
|
|
256
286
|
'approval.decide.unboundWayOut.armed': 'it cannot be decided here — cancel the run or let the approval expire',
|
|
257
287
|
'approval.decide.unboundWayOut.none': 'it cannot be decided here — cancel the run (this approval has no expiry timer)',
|
|
@@ -261,17 +291,24 @@ const EN = {
|
|
|
261
291
|
'approval.rowUnresumable.askNotSurfaced': 'the pending row (task {taskId}) cannot be continued by this engine, so it is not surfaced as a card that can be answered: {sentence}',
|
|
262
292
|
'approval.park.stillParked': '{gate} gate could not be answered: {reason} — the run is still parked on this approval.',
|
|
263
293
|
'approval.park.refusedNotResumable': '{gate} gate could not be answered: {reason} — this engine cannot resume this approval as things stand; cancel the run if it is still parked.',
|
|
294
|
+
'approval.park.resume.card': '{gate} gate could not be answered: {reason} — the run is still parked on this approval: decide it on the card when it is shown again, or cancel the run.',
|
|
295
|
+
'approval.park.resume.speak': '{gate} gate could not be answered: {reason} — the run is still parked on this approval: send a message to reopen the card, then decide it there, or cancel the run.',
|
|
264
296
|
'approval.park.argsFromModelCall': "the pending approval record has no tool arguments that will run, so the arguments shown are the model's original call from the conversation — if they were changed after that call (for example by a hook), what runs differs from what is shown. Edits are not accepted on this card: the arguments shown are not the ones that will run",
|
|
265
297
|
'approval.park.questionsFromModelCall': "the pending approval record has no questions to present, so the questions shown are the model's original call from the conversation — if they were changed after that call (for example by a hook), the question the engine is actually asking may differ from what is shown",
|
|
266
298
|
'approval.policyDeny.denyRule': 'Permission for this tool use was denied by a deny rule in the permission settings. {tail}',
|
|
267
299
|
'approval.policyDeny.dontAsk': 'Permission for this tool use was denied: this session no longer asks for approval, so a call that would need approval is refused. {tail}',
|
|
268
300
|
'approval.policyDeny.engineFloor': 'Permission for this tool use was denied by a safeguard on the engine side that permission settings cannot override. {tail}',
|
|
301
|
+
'approval.policyDeny.hook': 'Permission for this tool use was denied by a PermissionRequest hook. The action was NOT performed. Do not claim it succeeded, and do not retry it unchanged — report what was blocked, or suggest an alternative.',
|
|
269
302
|
'approval.policyDeny.tail': 'The action was NOT performed. Do not claim it succeeded, and do not retry it in this session — report the limitation to the user, or suggest an alternative.',
|
|
270
303
|
'approval.decision.grantChanged': 'The engine refused this approval because the skill grant it was bound to has changed since the card was shown · Nothing was decided and the request is still waiting, but approving it again will be refused the same way · Deny this request so the model can activate the skill again',
|
|
271
304
|
'approval.decision.answerInvalid': 'The engine rejected the answer itself because it does not fit the question that was asked · Nothing was decided and the question is still waiting · Correct the answer and send it again',
|
|
305
|
+
'approval.editRefusal.stem': 'this request does not expose its tool arguments here, so an edited approval cannot be applied',
|
|
306
|
+
'approval.editRefusal.line': 'That approval was NOT sent: {stem}. The request is still waiting — approve or deny it as it is.',
|
|
307
|
+
'approval.editRefusal.parkReason': 'the card returned an edited approval, but {stem} — nothing was sent (the arguments are missing from the pending approval record, or replaced there by a size marker); approve or deny it as it is',
|
|
272
308
|
'approval.decision.settledElsewhereContrary.deniedFirst': 'This request was already answered elsewhere and denied, so your approval did not take effect.',
|
|
273
309
|
'approval.decision.settledElsewhereContrary.approvedFirst': 'This request was already answered elsewhere and approved, so your denial did not take effect.',
|
|
274
310
|
'approval.decision.unconfirmedAfterRetry': "It is not known whether your answer took effect: an earlier attempt to send it was not confirmed, and by the time it was sent again the request was no longer waiting · Check the task's current state before acting on it",
|
|
311
|
+
'approval.decideAck.unconfirmed': "It is not known whether your answer took effect · Check the request's current state before answering it again",
|
|
275
312
|
'notice.decide.rowUnrevivable': 'The engine can no longer recover this approval card, so neither approving nor denying it will take effect · The card can only be cleared on the server side — wait for that, or contact whoever operates the engine',
|
|
276
313
|
'approval.askPark.autoReopenBlocked.policyInteractive': "The engine's admission policy refused to resume this parked step (run {run}), so sema will not put its card back on screen by itself. Switch to a permission mode this deployment allows, or ask whoever operates the deployment, then send a message to bring the card back.",
|
|
277
314
|
'approval.askPark.autoReopenBlocked.policyPrint': "The engine's admission policy refused to resume this parked step (run {run}), so sema will not put its card back on screen by itself. Switch to a permission mode this deployment allows, or ask whoever operates the deployment, then send a message to bring the card back; or stop the run ({cancel}).",
|
|
@@ -437,6 +474,9 @@ const EN = {
|
|
|
437
474
|
'session.selfHeal.injected.notDelivered': '{lead} was not delivered: this session was still busy with an earlier reply{id}, and there was no open card you could answer to free it{noView}. sema did not retry, so the model has not seen it.',
|
|
438
475
|
'session.selfHeal.injected.redundant': '{lead} was not passed on: the reply it was about{id} resumed on its own after that decision, so it has nothing to add.',
|
|
439
476
|
'session.selfHeal.injected.deferred': '{lead} is waiting: this session is busy with an earlier reply{id}, so sema kept the message and will send it as a new message once that reply has finished or paused.',
|
|
477
|
+
'session.selfHeal.injected.resendWithheldLeftConfirmed': '{lead} was not delivered: the earlier reply{id} let go of the conversation the message was meant for, but this screen switched to another conversation before sema could send it, and sema does not send it into a different conversation — the model has not seen it.',
|
|
478
|
+
'session.selfHeal.injected.resendWithheldUnconfirmed': '{lead} was not delivered: sema could not confirm that this screen is still on the conversation it was meant for, so it did not send it — the model has not seen it.',
|
|
479
|
+
'session.selfHeal.injected.resendWithheldLeftInferred': '{lead} was not delivered: the earlier reply{id} is now reported as finished in the conversation the message was meant for, but this screen switched to another conversation before sema could send it, and sema does not send it into a different conversation — the model has not seen it.',
|
|
440
480
|
'session.selfHeal.decisionInFlight': 'The previous turn is parked {parkedOn} and your answer to that card is still on its way to the engine, so sema did not show the card again — answering it a second time would send a second decision. It did NOT cancel the run. Your message was NOT sent; send it again in a moment, once the engine has applied that decision.',
|
|
441
481
|
'session.selfHeal.parkedOn.ask': 'waiting for your decision (run {taskId})',
|
|
442
482
|
'session.selfHeal.parkedOn.plan': 'on a plan review (run {taskId})',
|
|
@@ -476,6 +516,17 @@ const EN = {
|
|
|
476
516
|
'session.selfHeal.row.attach': '{disclosure} Your message was NOT sent; send it again once that run has finished.',
|
|
477
517
|
'session.selfHeal.row.cancelled.confirmed': 'You chose to cancel run {taskId}. The engine confirmed it is no longer holding this session, so sema is sending your message now.',
|
|
478
518
|
'session.selfHeal.row.cancelled.reported': 'You chose to cancel run {taskId}. The engine now reports that run as finished, so sema is sending your message now; if that run has not fully let go of the session yet, you may have to send it once more.',
|
|
519
|
+
'session.selfHeal.row.resendWithheldLeft.confirmed': 'Your message was NOT sent: run {taskId} no longer holds the conversation you typed it in, but this screen switched to another conversation before sema could send it again, and sema does not send a message into a different conversation. Switch back to that conversation and send it again if you still want it.',
|
|
520
|
+
'session.selfHeal.row.resendWithheldLeft.reported': 'Your message was NOT sent: run {taskId} is now reported as finished in the conversation you typed it in, but this screen switched to another conversation before sema could send it again, and sema does not send a message into a different conversation. Switch back to that conversation and send it again if you still want it (if that run has not fully let go of it yet, you may have to send it once more).',
|
|
521
|
+
'session.selfHeal.row.resendWithheldUnconfirmed': 'Your message was NOT sent: sema could not confirm that this screen is still on the conversation you typed it in, so it did not send it again — sending a message into a different conversation would be worse than not sending it. If this is still that conversation, send it again.',
|
|
522
|
+
'session.selfHeal.stopLeft.untouched': 'sema left run {taskId} alone: this screen switched to another conversation while sema was checking that run, and sema does not end a run for a conversation that is no longer on screen. That run may still hold the conversation it belongs to — switch back to that conversation, then {endRun}.',
|
|
523
|
+
'session.selfHeal.stopLeft.waiting.certain': 'Run {taskId} is waiting on a decision from you in the conversation it belongs to, and sema does not end a run that is waiting for your answer. This screen has switched to another conversation since — switch back to that conversation to answer it.',
|
|
524
|
+
'session.selfHeal.stopLeft.waiting.uncertain': 'Run {taskId} may be waiting on a decision from you in the conversation it belongs to — sema could not confirm that it is not — so sema left it alone. This screen has switched to another conversation since — switch back to that conversation to answer it; if nothing is waiting there, {endRun}.',
|
|
525
|
+
'session.selfHeal.stopLeft.ended.confirmed': 'Run {taskId} has ended — the engine confirmed it no longer holds the conversation it belongs to. This screen has switched to another conversation since — switch back to that conversation to send your message again.',
|
|
526
|
+
'session.selfHeal.stopLeft.ended.reported': 'Run {taskId} has ended — the engine reports it finished. This screen has switched to another conversation since — switch back to that conversation to send your message again.',
|
|
527
|
+
'session.selfHeal.stopLeft.nothingToEnd': 'Run {taskId} had already finished, so there was nothing to end. This screen has switched to another conversation since — switch back to that conversation to send your message again.',
|
|
528
|
+
'session.selfHeal.stopLeft.refused': 'sema could not end run {taskId}: the engine refused ({detail}), so nothing was ended. This screen has switched to another conversation since — switch back to the conversation that run belongs to and try again there: {endRun}.',
|
|
529
|
+
'session.selfHeal.stopLeft.notConfirmed': 'sema could not confirm that run {taskId} has let go of the conversation it belongs to, and this screen has switched to another conversation since. Switch back to that conversation to check there; to end it, {endRun}.',
|
|
479
530
|
'session.selfHeal.row.cancelTimeout.aborted': 'sema asked the engine to cancel run {taskId} and you interrupted while it was still confirming ({waited} in). Cancelling is asynchronous, so that run may still be winding down and may still hold this session. Your message was NOT sent; send it again in a moment, or {wayOut}.',
|
|
480
531
|
'session.selfHeal.row.cancelTimeout.unread': "sema asked the engine to cancel run {taskId} but could not read that run's state back within {waited}, so it cannot confirm whether the session was released. Your message was NOT sent; send it again in a moment (if that run really is gone it will just run), or {wayOut}.",
|
|
481
532
|
'session.selfHeal.row.cancelTimeout.held': 'sema asked the engine to cancel run {taskId}, but that run still held this session {waited} later — cancelling is asynchronous and it may still be winding down. Your message was NOT sent; send it again in a moment, or {wayOut}.',
|
|
@@ -634,6 +685,8 @@ const EN = {
|
|
|
634
685
|
'session.hostSettings.heldPrevious': 'A settings file could not be read cleanly just now (it may be in the middle of being saved), so the permission rules from the last clean read are still applied.',
|
|
635
686
|
'session.hostSettings.styleMissing': 'The output style "{name}" selected in your settings could not be found or read, so it is not applied to this request.',
|
|
636
687
|
'session.hostSettings.styleSafeMode': 'Safe mode is on, so the output style from your settings is not applied.',
|
|
688
|
+
'session.hostSettings.styleOversize': 'Your output style was not applied to this request: together with the built-in product context it is longer than the {limit}-character limit. Shorten the style to apply it.',
|
|
689
|
+
'session.hostSettings.styleUnreadable': 'Your output style could not be read as text, so it is not applied to this request.',
|
|
637
690
|
'model.identity.lane.processEnv': 'the environment this client was started with',
|
|
638
691
|
'model.identity.lane.settingsEnv': "this client's settings file",
|
|
639
692
|
'model.identity.lane.modelCatalogFile': 'the local model catalog file',
|
|
@@ -675,7 +728,7 @@ const EN = {
|
|
|
675
728
|
'notice.durableGate.exit.other': 'To use durable approval, a checkpoint store has to be available.',
|
|
676
729
|
'notice.durableGate.exitAlt.forceDurableGate': 'Or ask whoever runs the deployment to drop the requirement for this account.',
|
|
677
730
|
'notice.durableGate.exitAlt.durableApproval': 'Or run the task where a live approver is attached.',
|
|
678
|
-
'notice.memory.sessionPolluted': '
|
|
731
|
+
'notice.memory.sessionPolluted': 'A tool in this session can reach content from outside it ({reason}). From here on, memory it writes may be held back for review instead of being saved to the long-term library; what each batch actually held back is announced separately.',
|
|
679
732
|
'notice.memory.harvestQuarantined.counts': 'Memory harvest held back entry files written or changed in this session instead of adding them to the long-term library — withheld {count}, moved aside for review {moved}, flagged for follow-up {escalated}; the last two counts can overlap.',
|
|
680
733
|
'notice.memory.harvestQuarantined.indexOnly': "Memory harvest rolled this session's changes to the memory index back to where they started; no entry files were withheld.",
|
|
681
734
|
'notice.memory.harvestQuarantined.indexAlso': 'The memory index was also rolled back.',
|
|
@@ -708,6 +761,29 @@ const EN = {
|
|
|
708
761
|
'notice.peer.inbound.resupplyExhausted': "{subject} may never have been read by the model: context compaction dropped it from the model's context twice, and the sender was not told.",
|
|
709
762
|
'notice.peer.inbound.other': '{subject} was reported with a disposition this version does not recognize.',
|
|
710
763
|
'notice.peer.inbound.cause': 'Cause: {cause}.',
|
|
764
|
+
'notice.sessionBox.peer.another': 'another session',
|
|
765
|
+
'notice.sessionBox.peer.anotherStart': 'Another session',
|
|
766
|
+
'notice.sessionBox.inbox.one': '1 cross-session message waiting',
|
|
767
|
+
'notice.sessionBox.inbox.many': '{pending} cross-session messages waiting',
|
|
768
|
+
'notice.sessionBox.inbox.urgent': '({urgent} urgent)',
|
|
769
|
+
'notice.sessionBox.inbox.resupplied': '(resupplied {resupplied})',
|
|
770
|
+
'notice.sessionBox.delivery.delivered': 'Your message to {peer} was delivered.',
|
|
771
|
+
'notice.sessionBox.delivery.held': "Your message to {peer} is waiting for that session's approval.",
|
|
772
|
+
'notice.sessionBox.delivery.heldByPolicy': "Your message to {peer} is held by that session's own settings; nobody there is asked to approve it.",
|
|
773
|
+
'notice.sessionBox.delivery.denied': 'Your message to {peer} was declined by that session.',
|
|
774
|
+
'notice.sessionBox.delivery.refused': '{peer} is not accepting cross-session messages; your message was not delivered.',
|
|
775
|
+
'notice.sessionBox.delivery.expired': 'Your message to {peer} expired before it was approved.',
|
|
776
|
+
'notice.sessionBox.delivery.dropped': 'Your message to {peer} was dropped ({reason}).',
|
|
777
|
+
'notice.sessionBox.delivery.droppedPlain': 'Your message to {peer} was dropped.',
|
|
778
|
+
'notice.sessionBox.delivery.other': 'There is a delivery update for your message to {peer}.',
|
|
779
|
+
'notice.sessionBox.idle.finished': '{peer} finished its turn.',
|
|
780
|
+
'notice.sessionBox.idle.finishedDetail': '{peer} finished its turn: {detail}',
|
|
781
|
+
'notice.sessionBox.idle.exited': '{peer} has exited.',
|
|
782
|
+
'notice.sessionBox.idle.unavailable': '{peer} is unavailable.',
|
|
783
|
+
'notice.sessionBox.idle.expired': '{peer} did not answer before the wait ran out.',
|
|
784
|
+
'notice.sessionBox.idle.other': 'There is a status update from {peer}.',
|
|
785
|
+
'notice.resupply.truncated.one': 'This notice was shortened: the full record is {bytes} bytes, over the notice size limit, so 1 field was left out. The full content can still be viewed in the run record.',
|
|
786
|
+
'notice.resupply.truncated.other': 'This notice was shortened: the full record is {bytes} bytes, over the notice size limit, so {count} fields were left out. The full content can still be viewed in the run record.',
|
|
711
787
|
'notice.peer.held.deliveredApproved': '{subject} was approved and delivered.',
|
|
712
788
|
'notice.peer.held.deliveredRejudged': '{subject} was re-judged and delivered, because the policy now accepts it.',
|
|
713
789
|
'notice.peer.held.droppedRejudged': '{subject} was approved, but the policy now refuses it, so it was dropped.',
|
|
@@ -736,6 +812,7 @@ const EN = {
|
|
|
736
812
|
'notice.task.lateApproval': 'Your approval for "{tool}" was not consumed: a run or turn interrupt released that request before your decision landed, so the tool did not run and nothing was settled by your answer. This is a timing fact, not an error; ask again if that step is still needed.',
|
|
737
813
|
'notice.task.haltUnconsumed': "Your stop request did not cut anything: the run was already ending for its own reason when it arrived, so nothing was stopped by it and the run's own ending stands.",
|
|
738
814
|
'notice.steering.parkedInputBlocked': "An instruction you sent while this run was paused was blocked when the run resumed: this deployment's input screen withheld it, so it never reached the model. Send it again if it still applies.",
|
|
815
|
+
'notice.model.capabilityDowngraded.image': 'The images in this conversation were not sent to {model}: its catalog entry declares that it does not take image input, so each image reaches it as a one-line placeholder. If it can read images, declare that in the model entry (input: ["text", "image"]); otherwise switch to a model that can.',
|
|
739
816
|
'rules.refusal.sentence.one': 'permissions: 1 rule will not be enforced — {list}',
|
|
740
817
|
'rules.refusal.sentence.other': 'permissions: {count} rules will not be enforced — {list}',
|
|
741
818
|
'rules.refusal.item': '{rule} ({reason})',
|
|
@@ -818,6 +895,10 @@ const EN = {
|
|
|
818
895
|
'session.steerRefusal.advice': '{happened} — {nextStep}',
|
|
819
896
|
'session.steerRefusal.hostQueue.queued': 'it stays queued and will be submitted as-is when this turn ends',
|
|
820
897
|
'session.steerRefusal.hostQueue.dropped': 'it was not kept; {nextStep}',
|
|
898
|
+
'session.interruptRefusal.nothingInFlight': 'The interrupt was not accepted: this run is waiting on a pending decision, so there is no turn in flight to cut · The run itself was not changed and is still waiting · To end it, stop the whole run; to give it a message, send one — it is delivered when the run resumes',
|
|
899
|
+
'session.interruptRefusal.notHeld': 'The interrupt was not accepted: this server has no live turn it can cut for this run — the run may be running on another server, or on a path that exposes no live turn · The run itself was not changed · To end it, stop the whole run',
|
|
900
|
+
'session.interruptRefusal.notRunning': 'The interrupt was not accepted: this run is not running any more — it has just finished, or it no longer takes an interrupt · Nothing was cut or changed · Check its current state before doing anything else',
|
|
901
|
+
'session.interruptRefusal.unrecognised': 'The interrupt was not accepted, for a reason this version cannot name · Do not assume the run has stopped or that any turn was cut · Check its current state; if this keeps happening, report the error code (if the engine gave one)',
|
|
821
902
|
'session.permissionModeSwitch.applied': 'The running turn now uses the {mode} permission mode.',
|
|
822
903
|
'session.permissionModeSwitch.folded': 'The running turn now uses the {mode} permission mode instead of the one you chose — {reason}.',
|
|
823
904
|
'session.permissionModeSwitch.reason.entryFloor': 'this deployment does not allow a looser mode than its floor',
|
|
@@ -860,6 +941,20 @@ const EN = {
|
|
|
860
941
|
'notice.capability.mcpProbe.notReported': 'per-server MCP status face not reported by this engine — this says nothing about whether the face exists, so that path may not exist here (asking it may answer with a machine-readable route-not-found, though a timeout or an uncoded gateway answer says nothing either way); prefer the session panel last-leg roster where that panel carries one, and otherwise show this reason rather than an entry that cannot answer',
|
|
861
942
|
'notice.capability.mcpProbe.absent': 'per-server MCP status face reported off on this deployment — this engine answers no readings there; this client does not guess why, and whether caller-supplied declarations are honored is a separate position with its own answer',
|
|
862
943
|
'notice.capability.mcpProbe.present': 'per-server MCP status face on — this engine dials its own declared MCP servers on request, with no run, and a probe of caller-supplied declarations answers with the very same body shape',
|
|
944
|
+
'notice.capability.subject.storePosture': 'store posture',
|
|
945
|
+
'notice.capability.storePosture.unobserved': 'store posture not observed — the engine reports it on /v1/capabilities; this process has no usable capabilities reading cached for it, so whether this deployment persists its state is unknown',
|
|
946
|
+
'notice.capability.storePosture.notReported': 'store posture not reported by this engine; this does not say whether this deployment persists its state',
|
|
947
|
+
'notice.capability.storePosture.assembled': 'store {backend}',
|
|
948
|
+
'notice.capability.storePosture.assembledDeclared': 'store declared {declared}, running on {backend}',
|
|
949
|
+
'notice.capability.storePosture.durable': '{assembled} — durable: this replica persists its state, so it survives a restart',
|
|
950
|
+
'notice.capability.storePosture.notDurableHead': 'NOT durable',
|
|
951
|
+
'notice.capability.storePosture.memory': '{assembled} — {head}: this replica holds its state in memory and loses it on restart',
|
|
952
|
+
'notice.capability.storePosture.ephemeral': '{assembled} — {head}: the engine reports that this replica keeps state on storage that does not survive a restart',
|
|
953
|
+
'notice.capability.storePosture.unknown': "{assembled} — durability unknown: the engine reports that it cannot tell whether this replica's state survives a restart",
|
|
954
|
+
'notice.capability.storePosture.unrecognized': '{assembled} — durability unknown: the engine reported a durability word this client does not know yet: "{word}"',
|
|
955
|
+
'notice.capability.storePosture.degraded.dbUnreachable': '{line} (degraded: the declared database could not be opened at start-up, so the engine fell back rather than refusing to start)',
|
|
956
|
+
'notice.capability.storePosture.degraded.localUnwritable': '{line} (degraded: the default local file store could not be created — a read-only or full data directory is one possible cause, and this client cannot tell which applies)',
|
|
957
|
+
'notice.capability.storePosture.degraded.other': '{line} (degraded for a reason this client does not know yet: "{reason}")',
|
|
863
958
|
'notice.capability.hands.noneStem': 'this leg of the run was assembled with NO built-in file-and-shell tools',
|
|
864
959
|
'notice.capability.hands.noneTail': "so on this leg the model had no tool of the engine's own for editing files or running commands (tools mounted by other conditions, such as external servers, and sub-runs delegated to other legs are not covered by this reading)",
|
|
865
960
|
'notice.capability.hands.noneLine': '{stem} — {why}, {tail}',
|
|
@@ -954,6 +1049,8 @@ const EN = {
|
|
|
954
1049
|
'notice.failure.headline.parked': 'The event stream ended while the run had not reached a terminal state — the run is likely parked waiting for a decision, not crashed. Check its status and decide anything pending; the turn did not complete here.',
|
|
955
1050
|
'notice.failure.headline.internal': 'This client hit an internal error — it is a bug in the client, not an engine outage, and the turn did not complete.',
|
|
956
1051
|
'notice.failure.headline.causeUnreadable': 'The reason for this failure could not be read (part of the error object was unreadable) — it is not known whether the engine received your message. Check the run’s status, or reattach to it, before sending it again.',
|
|
1052
|
+
'notice.streamEnded.emptyLegs.headline': 'The event stream came back empty twice in a row and ended while the run had not reached a terminal state — the run is likely parked waiting for a decision, not crashed. Check its status and decide anything pending; the turn did not complete here.',
|
|
1053
|
+
'notice.streamEnded.consecutiveFailures.headline': 'The event stream kept ending without progress and the client stopped re-opening it — it is not known whether the run is still going or is waiting for a decision. Check its status, or reattach to it, before sending again; the turn did not complete here.',
|
|
957
1054
|
'notice.failure.quota.fiveHour': 'Your 5-hour quota is used up',
|
|
958
1055
|
'notice.failure.quota.weekly': 'Your weekly quota is used up',
|
|
959
1056
|
'notice.failure.quota.budgetPersonal': 'Your personal budget is used up',
|
|
@@ -1108,6 +1205,16 @@ const EN = {
|
|
|
1108
1205
|
'notice.wireRefusal.sessionIdRetired.folded': 'This parked work cannot continue: its session id belonged to a session that was deleted on this server, and work under that id now runs only for the session\'s earlier owner; nothing was resumed and the card is still waiting',
|
|
1109
1206
|
'notice.wireRefusal.runConcurrencyCap.head': 'This deployment already has as many runs in flight as it allows, so the engine did not accept this request · Nothing is wrong with the request itself',
|
|
1110
1207
|
'notice.wireRefusal.runConcurrencyCap.unknownWait': 'Send it again once one of the runs in flight has finished',
|
|
1208
|
+
'notice.wireRefusal.unreadMembers': 'The engine did not accept this request: it carries {part} that this server version cannot read as written, and running it would silently leave that part out',
|
|
1209
|
+
'notice.wireRefusal.unreadMembers.folded': 'This parked work cannot continue: the request saved for it carries {part} that this server version cannot read as written, and continuing would silently leave that part out; nothing was resumed and the card is still waiting',
|
|
1210
|
+
'notice.wireRefusal.unreadMembers.where': 'Where: {where}',
|
|
1211
|
+
'notice.wireRefusal.unreadMembers.remedy': 'Send the request again with that part in the current form',
|
|
1212
|
+
'notice.wireRefusal.unreadMembers.folded.remedy': 'Cancel the work if it is still suspended, then submit it again as a new request with that part in the current form',
|
|
1213
|
+
'notice.wireRefusal.unreadMembers.part.settingsHooks': 'hook settings',
|
|
1214
|
+
'notice.wireRefusal.unreadMembers.part.settingsEnv': 'environment variables',
|
|
1215
|
+
'notice.wireRefusal.unreadMembers.part.settingsOther': 'a setting',
|
|
1216
|
+
'notice.wireRefusal.unreadMembers.part.mcpTransport': "an MCP server's connection settings",
|
|
1217
|
+
'notice.wireRefusal.unreadMembers.part.a2aHeaders': "an A2A peer's request headers",
|
|
1111
1218
|
'notice.wireRefusal.unsupportedRule': 'The engine refused this request, so none of it took effect: a rule in it is a form the engine does not support — {detail} · Remove or rewrite that rule (to stop a tool altogether, write its name alone), then send it again',
|
|
1112
1219
|
'notice.wireRefusal.unsupportedRule.other': 'The engine refused this request, so none of it took effect: {count} rules in it are forms the engine does not support — {detail} · Remove or rewrite those rules (to stop a tool altogether, write its name alone), then send it again',
|
|
1113
1220
|
'notice.wireRefusal.unsupportedRule.stored': 'The engine refused to continue this work: the request stored for it has a rule in it that is a form the engine does not support — {detail} · It cannot continue as stored. Remove or rewrite that rule (to stop a tool altogether, write its name alone), cancel the work if it is still suspended, then submit it again as a new request',
|
|
@@ -1169,15 +1276,21 @@ const EN = {
|
|
|
1169
1276
|
'session.subagent.delegatedPrompt.absence.forbidden': "This subagent's prompt cannot be shown: the engine refused access to its conversation.",
|
|
1170
1277
|
'session.subagent.delegatedPrompt.absence.promptAbsent': "This subagent's conversation was read, but it holds no delegated prompt to show.",
|
|
1171
1278
|
'session.subagent.delegatedPrompt.absence.unknown': "This subagent's prompt could not be read just now.",
|
|
1279
|
+
'rules.sessionPolicy.remove.loosenForbiddenStem': 'The engine refused to take these entries out of this session’s rule record, so the record is unchanged: it counts at least one of them as written by an operator rather than added by the session’s owner, and an owner can take back only the entries the owner added.',
|
|
1280
|
+
'rules.sessionPolicy.remove.loosenForbidden': '{stem} Ask an operator to remove them, or continue in a new session.',
|
|
1172
1281
|
'rules.sessionPolicy.tighten.unknown.sessionOwnerless.noIdentity': 'This session has no owner, so a rule written for it could never be read back; nothing was written.',
|
|
1173
1282
|
'rules.sessionPolicy.tighten.unknown.storeCorrupt.noOperator': 'The engine could not establish which version this session’s rules are at and refused to stamp a new one, so nothing was written. The entries sent here are not the problem — this deployment has no operator to look at the rule store, so whoever runs it has to.',
|
|
1174
1283
|
'rules.sessionPolicy.deployment.noOperator.readStoreCorrupt': 'The engine could not establish which version this session’s rules are at, so it would not hand the record over. This deployment has no operator to look at the rule store — whoever runs it has to.',
|
|
1175
|
-
'rules.sessionPolicy.deployment.noOperator.removeLoosenForbidden': '
|
|
1284
|
+
'rules.sessionPolicy.deployment.noOperator.removeLoosenForbidden': '{stem} This deployment has no operator to remove them. Continue in a new session.',
|
|
1176
1285
|
'rules.sessionPolicy.deployment.noOperator.removeReadStoreCorrupt': 'The engine could not establish which version this session’s rules are at, so nothing was changed. This deployment has no operator to look at the rule store — whoever runs it has to.',
|
|
1177
1286
|
'rules.sessionPolicy.deployment.noOperator.removeWriteStoreCorrupt': 'The engine could not establish which version this session’s rules are at and refused to stamp a new one, so nothing was changed. This deployment has no operator to look at the rule store — whoever runs it has to.',
|
|
1178
1287
|
'config.hooks.plan.reason.compactionLocalFallback': 'this compaction is summarized on this client because the engine session is unavailable, so the engine will not run it and this client runs it itself',
|
|
1179
1288
|
'config.hooks.plan.reason.keyNotRead': 'the connected server does not read a key written on this hook (remove the key, or use a server that reads it)',
|
|
1180
1289
|
'config.hooks.plan.disableAllHooks': 'All hooks are turned off by managed settings (disableAllHooks).',
|
|
1290
|
+
'config.hooks.plan.reason.closedUntrusted': 'this workspace is not trusted, so no hooks run in it',
|
|
1291
|
+
'config.hooks.plan.reason.closedGovernanceUnreadable': 'the managed policy could not be read, so no hooks run this turn',
|
|
1292
|
+
'config.hooks.plan.reason.closedDisableAll': 'managed settings turn off all hooks (disableAllHooks)',
|
|
1293
|
+
'config.hooks.plan.reason.noExecutor': 'neither the engine nor this client runs this event',
|
|
1181
1294
|
'config.hooks.plan.keyNotRead.oneKey': '{layer}: {hooks} will not run — the connected server does not read the key {coordinates}. Remove the key, or use a server that reads it.',
|
|
1182
1295
|
'config.hooks.plan.keyNotRead.manyKeys': '{layer}: {hooks} will not run — the connected server does not read the keys {coordinates}. Remove those keys, or use a server that reads them.',
|
|
1183
1296
|
'config.hooks.plan.keyNotRead.more': '{shown} and {rest} more',
|
|
@@ -1224,8 +1337,13 @@ const EN = {
|
|
|
1224
1337
|
'config.mods.loader.failed': '{name} could not be loaded: {reason}',
|
|
1225
1338
|
'config.mods.loader.failedNoReason': '{name} could not be loaded',
|
|
1226
1339
|
'config.mods.refusal.by': 'Refused by {by}',
|
|
1340
|
+
'config.mods.request.by': 'Requested by {by}',
|
|
1227
1341
|
'config.mods.rewrite.resultInPlace': 'Answered by {by} in place of the tool',
|
|
1228
1342
|
'config.mods.rewrite.inputBy': 'Arguments changed by {by} before the call was let through',
|
|
1343
|
+
'config.mods.session.unreadable': "The mods used by this conversation's last run couldn't be read",
|
|
1344
|
+
'config.mods.session.unarmed': 'Mods show up here once this conversation has run on this engine',
|
|
1345
|
+
'config.hooks.roster.unreadable': "This conversation's hooks plan couldn't be read",
|
|
1346
|
+
'config.hooks.roster.unarmed': 'Hooks show up here once this app has this conversation open',
|
|
1229
1347
|
'follow.notFollowed.headRun': 'This screen is no longer following run {taskId}{reason}{ending}{exit}',
|
|
1230
1348
|
'follow.notFollowed.headTurn': "This screen is no longer following this turn's run{reason}{ending}{exit}",
|
|
1231
1349
|
'follow.notFollowed.reason.exhaustedDraining': ": the engine instance serving it was going down when its last event stream closed, and this client's re-attach allowance has run out.",
|
|
@@ -1311,6 +1429,7 @@ const EN = {
|
|
|
1311
1429
|
'localEngine.down.spawnRefused': 'The local engine was not started: the preparation step did not pass.',
|
|
1312
1430
|
'localEngine.down.stopFailed': 'The old local engine did not stop in time, so it was not replaced.',
|
|
1313
1431
|
'localEngine.down.crashLoop': 'The local engine keeps stopping unexpectedly, so automatic restarts are paused.',
|
|
1432
|
+
'localEngine.down.exitedOnce': 'The local engine exited after it started, and Sema does not restart it automatically.',
|
|
1314
1433
|
'localEngine.down.highWaterUnreadable': 'The record of the newest engine version used on this machine cannot be read, so the local engine is not started; check the engine data directory.',
|
|
1315
1434
|
'localEngine.crashLoop.retry': 'The local engine keeps stopping unexpectedly; Sema tries again in about {seconds} seconds.',
|
|
1316
1435
|
'localEngine.crashLoop.stopped': 'The local engine keeps stopping unexpectedly; Sema has stopped retrying on its own. Restart it manually.',
|
|
@@ -1337,5 +1456,98 @@ const EN = {
|
|
|
1337
1456
|
'localEngine.restartOutcome.pendingBusy': 'Other sessions are using the local engine; it restarts once nothing is using it.',
|
|
1338
1457
|
'localEngine.restartOutcome.failedPrepare': 'The local engine was not restarted; the current engine keeps running.',
|
|
1339
1458
|
'localEngine.restartOutcome.failedDown': 'The local engine could not be restarted: {detail}',
|
|
1459
|
+
'localEngine.swapGuard.newer': 'The local engine (version {running}) was started by a newer Sema than this one ({own}), so Sema keeps it running instead of replacing it with an older engine.',
|
|
1460
|
+
'localEngine.swapGuard.newer.highWater': "This machine's local engine data was last used by a newer Sema (engine version {running}) than this one ({own}), so Sema does not start an older engine on it.",
|
|
1461
|
+
'localEngine.swapGuard.newer.cliUpdate': 'To apply the change, run `sema update`.',
|
|
1462
|
+
'localEngine.swapGuard.newer.appUpdate': 'To apply the change, update this app.',
|
|
1463
|
+
'localEngine.swapGuard.hold': 'The local engine is not replaced yet: work still waiting on it may not continue on the replacement.',
|
|
1464
|
+
'localEngine.swapGuard.unknown': 'Sema cannot tell whether the running local engine is newer than this Sema, so it is not replaced unless you confirm.',
|
|
1465
|
+
'localEngine.swapGuard.parked.one': 'One approval card is still waiting for an answer.',
|
|
1466
|
+
'localEngine.swapGuard.parked.oneSession': '{count} approval cards are still waiting for an answer in one session.',
|
|
1467
|
+
'localEngine.swapGuard.parked.manySessions': '{count} approval cards are still waiting for an answer across {sessions} sessions.',
|
|
1468
|
+
'localEngine.swapGuard.parked.failed': 'Whether approval cards are still waiting for an answer could not be read.',
|
|
1469
|
+
'localEngine.swapGuard.parked.unsupported': 'Whether approval cards are still waiting for an answer cannot be read from this engine.',
|
|
1470
|
+
'localEngine.swapGuard.wayOut.interactive': 'Answer waiting cards first, or confirm to replace the engine now.',
|
|
1471
|
+
'localEngine.swapGuard.wayOut.print': 'This command keeps using the current engine; open Sema interactively to answer waiting cards or to replace it.',
|
|
1472
|
+
'localEngine.swapGuard.told.one': 'The local engine was replaced; the approval card that was still waiting may no longer be answerable. If it says it cannot continue, send that turn again.',
|
|
1473
|
+
'localEngine.swapGuard.told.other': 'The local engine was replaced; {count} approval cards that were still waiting may no longer be answerable. If one says it cannot continue, send that turn again.',
|
|
1474
|
+
'localEngine.swapGuard.told.unknown': 'The local engine was replaced; approval cards that were still waiting, if any, may no longer be answerable. If one says it cannot continue, send that turn again.',
|
|
1475
|
+
'engine.unavailable.line': '[sema] engine-fatal · {tag} — {head}, so nothing can reach a model on this session: {detail}. {fix}',
|
|
1476
|
+
'engine.unavailable.lineNoDetail': '[sema] engine-fatal · {tag} — {head}, so nothing can reach a model on this session. {fix}',
|
|
1477
|
+
'engine.unavailable.lineNoFix': '[sema] engine-fatal · {tag} — {head}, so nothing can reach a model on this session: {detail}',
|
|
1478
|
+
'engine.unavailable.lineBare': '[sema] engine-fatal · {tag} — {head}, so nothing can reach a model on this session.',
|
|
1479
|
+
'engine.unavailable.lineRefusedUse': '[sema] engine-fatal · {tag} — {head}, so nothing was sent to a model on this session: {detail}',
|
|
1480
|
+
'engine.unavailable.lineRefusedUseNoDetail': '[sema] engine-fatal · {tag} — {head}, so nothing was sent to a model on this session.',
|
|
1481
|
+
'engine.unavailable.head.notRunning': 'the sema engine is not running',
|
|
1482
|
+
'engine.unavailable.head.refused': 'the sema engine refused to start',
|
|
1483
|
+
'engine.unavailable.head.notAnswering': 'the sema engine is not answering',
|
|
1484
|
+
'engine.unavailable.head.noHealthyAnswer': 'the sema engine has not given a healthy answer',
|
|
1485
|
+
'engine.unavailable.head.drainStuck': 'the previous sema engine has not finished stopping',
|
|
1486
|
+
'engine.unavailable.head.addressRefused': 'sema did not connect to the engine named in SEMA_ENGINE_URL',
|
|
1487
|
+
'engine.unavailable.head.versionRefused': 'an engine is running, but this sema refused to use it',
|
|
1488
|
+
'engine.unavailable.head.unknown': 'the sema engine is unavailable',
|
|
1489
|
+
'engine.unavailable.again.session': 'start sema again',
|
|
1490
|
+
'engine.unavailable.again.command': 'run the command again',
|
|
1491
|
+
'engine.unavailable.again.app': 'open this app again',
|
|
1492
|
+
'engine.unavailable.retry.session': 'restart sema to retry',
|
|
1493
|
+
'engine.unavailable.retry.command': 'run the command again to retry',
|
|
1494
|
+
'engine.unavailable.fix.diagnose': 'Fix: run `sema doctor` to diagnose, or {retry}.',
|
|
1495
|
+
'engine.unavailable.fix.modelSetup': 'Fix: run `sema onboard` to finish model setup, then {again}.',
|
|
1496
|
+
'engine.unavailable.fix.credentialConflict': 'Fix: unset one of the two and keep the one your endpoint expects, then {again}.',
|
|
1497
|
+
'engine.unavailable.fix.credentialMalformed': 'Fix: run `sema cloud login` to sign in again (it rewrites the file sema manages), or `sema cloud logout` to stop using it; if you set {tokenFile} yourself, fix that file. Then {again}.',
|
|
1498
|
+
'engine.unavailable.fix.credentialMultiTenant': 'Fix: give the engine the worker pull token ({token}, or one bare line in the file {tokenFile} names), or unset REQUIRE_PRINCIPAL for a single-user engine, then {again}.',
|
|
1499
|
+
'engine.unavailable.fix.credential': 'Fix: correct the sign-in credential the engine named, then {again}.',
|
|
1500
|
+
'engine.unavailable.wait.respond': 'wait for it to respond',
|
|
1501
|
+
'engine.unavailable.wait.healthy': 'wait for it to give a healthy answer',
|
|
1502
|
+
'engine.unavailable.wait.exit': 'wait for it to exit',
|
|
1503
|
+
'engine.unavailable.fix.waitPid': 'Fix: {wait} and {again}, or stop it yourself (kill {pid}) and {again}.',
|
|
1504
|
+
'engine.unavailable.fix.wait': 'Fix: {wait} and {again}, or stop that engine process yourself and {again}.',
|
|
1505
|
+
'engine.bootRefusal.withWaysOut': 'The local engine refused to start: {reason} {waysOut}',
|
|
1506
|
+
'engine.bootRefusal.withFix': 'The local engine refused to start: {reason} {fix}',
|
|
1507
|
+
'engine.bootRefusal.waysOut': 'Ways out: (1) {newer} — {separate}; (2) {restore}; (3) {repair}.',
|
|
1508
|
+
'engine.bootRefusal.who.sema': 'a newer sema',
|
|
1509
|
+
'engine.bootRefusal.who.semaAtLeast': 'a newer sema (its engine is version {version} or later)',
|
|
1510
|
+
'engine.bootRefusal.who.app': 'a newer version of this app',
|
|
1511
|
+
'engine.bootRefusal.who.appAtLeast': 'a newer version of this app (its engine is version {version} or later)',
|
|
1512
|
+
'engine.bootRefusal.who.build': 'a newer build',
|
|
1513
|
+
'engine.bootRefusal.who.buildAtLeast': 'a newer build (engine {version} or later)',
|
|
1514
|
+
'engine.bootRefusal.newer.update': '{who} has used this data folder: update this sema with `sema update` and {again}, or start that newer sema again',
|
|
1515
|
+
'engine.bootRefusal.newer.projectLocal': '{who} has used this data folder: update the copy of sema installed in this project where it was installed, then {again}; or start that newer sema again',
|
|
1516
|
+
'engine.bootRefusal.newer.devTree': '{who} has used this data folder: switch this working tree to the newer build, then {again}; or start that newer sema again',
|
|
1517
|
+
'engine.bootRefusal.newer.app': '{who} has used this data folder: update this app, or start that newer version again',
|
|
1518
|
+
'engine.bootRefusal.newer.unknown': '{who} has used this data folder: start that newer sema again',
|
|
1519
|
+
'engine.bootRefusal.newer.deployment': '{who} wrote this data root: deploy that build',
|
|
1520
|
+
'engine.bootRefusal.separate.embedded': 'to keep using this sema on this computer, start it with its own configuration folder: `{key}=<another-folder> sema` (it starts without your settings and sessions)',
|
|
1521
|
+
'engine.bootRefusal.separate.app': 'to keep using this version, start it with its own configuration folder (`{key}=<another-folder>`); it starts without your settings and sessions',
|
|
1522
|
+
'engine.bootRefusal.separate.deployment': 'to run this older build on this machine, give it its own data root (LOCAL_DATA_ROOT)',
|
|
1523
|
+
'engine.bootRefusal.restore': 'put back a copy of {folder} made before the newer engine first opened it, then {again} (also the way out when a file named above is damaged; changes made after that copy are lost)',
|
|
1524
|
+
'engine.bootRefusal.restoreDeployment': 'restore the data-root backup taken before the upgrade, then start this build (also the way out when a file named above is damaged)',
|
|
1525
|
+
'engine.bootRefusal.folder.default': 'the engine-data folder in your sema configuration folder',
|
|
1526
|
+
'engine.bootRefusal.repair': 'if a file named above could not be read at all (an I/O error such as EACCES), repair access to it (permissions, disk) and {again}',
|
|
1527
|
+
'engine.bootRefusal.repairDeployment': 'if a file named above could not be read at all (an I/O error such as EACCES), repair access to it (permissions, mount, disk) and restart',
|
|
1528
|
+
'session.devices.repoint.done': "Done: this machine's device record and sessions now follow the new engine address. The device kept its identity — nothing was enrolled again.",
|
|
1529
|
+
'session.devices.repoint.unverified': "Nothing was changed: the new address could not be confirmed to hold this device. If it is the same engine, check that you are signed in as the device's owner and try again. Otherwise enroll this machine again at the engine's own address, then remove the old device from the engine's device list.",
|
|
1530
|
+
'session.devices.repoint.undetermined': "Nothing was changed: a check against the new address could not be read, so it is not known whether this device is registered there. Try again. Or enroll this machine again at the engine's own address, then remove the old device from the engine's device list.",
|
|
1531
|
+
'session.devices.repoint.partial': 'The device record now follows the new address, but not every session could be updated. Run the same command again to finish — sessions that were already updated are left as they are.',
|
|
1532
|
+
'session.devices.repoint.storeFailed': "The device record could not be confirmed as moved, so no session was touched. Run the same command again; if it keeps failing, enroll this machine again at the engine's own address.",
|
|
1533
|
+
'session.devices.repoint.refused.addressInvalid': 'Nothing was changed: an address is not usable. Give the full https:// address of the engine (plain http:// is only accepted for this machine).',
|
|
1534
|
+
'session.devices.repoint.refused.sameAddress': 'Nothing was changed: the new address is the same engine address as the old one.',
|
|
1535
|
+
'session.devices.repoint.refused.recordAbsent': 'Nothing was changed: this machine has no device record for the old address.',
|
|
1536
|
+
'session.devices.repoint.refused.recordNotActive': "Nothing was changed: the device record for this address is not an active enrollment (it is still being enrolled, or the device was removed). Enroll again at the engine's own address.",
|
|
1537
|
+
'session.devices.repoint.refused.recordUnreadable': 'Nothing was changed: a device record could not be read, so it was left alone.',
|
|
1538
|
+
'session.devices.repoint.refused.targetOccupied': 'Nothing was changed: this machine already has a different device record for the new address.',
|
|
1539
|
+
'session.devices.repoint.refused.unarmed': 'Nothing was changed: this app is not set up to move the device record and its sessions.',
|
|
1540
|
+
'session.devices.repoint.refused.rosterUnbound': 'Nothing was changed: this app is not set up to read the device list at the new address, so the move cannot be checked. This is a setup problem in the app, and trying again will not fix it.',
|
|
1541
|
+
'attachments.withheld.toolsElsewhere.row': "the tools in this session do not work on this machine's files",
|
|
1542
|
+
'attachments.withheld.toolsLocationUnconfirmed.row': "could not confirm that the tools in this session work on this machine's files",
|
|
1543
|
+
'attachments.withheld.toolsElsewhere.model': "the tools in this session do not work on the files of the machine this client runs on, so the client did not attach that machine's copy; it may differ from the file the tools read and change, or the file may exist only where the tools run",
|
|
1544
|
+
'attachments.withheld.toolsLocationUnconfirmed.model': "the client could not confirm that the tools in this session work on the files of the machine it runs on, so it did not attach that machine's copy; it may differ from the file the tools read and change, or the file may exist only where the tools run",
|
|
1545
|
+
'attachments.localCopy.model': "The user shared this from the machine this client runs on: it is that machine's copy, and any path shown with it is a path on that machine. The tools in this session may not work on that machine's files, so the file they read and change may differ or may not exist.",
|
|
1546
|
+
'session.compaction.canceled': 'Compaction canceled.',
|
|
1547
|
+
'localEngine.health.answer.unansweredTimeout': 'did not answer in time',
|
|
1548
|
+
'localEngine.health.answer.unansweredNetwork': 'could not be reached',
|
|
1549
|
+
'localEngine.health.answer.ok': 'answered with status "ok"',
|
|
1550
|
+
'localEngine.health.answer.notOkHttp': 'answered HTTP {http}',
|
|
1551
|
+
'localEngine.health.answer.notOkStatus': 'answered HTTP {http} but not with status "ok"',
|
|
1340
1552
|
};
|
|
1341
1553
|
export const EN_MESSAGES = Object.freeze(EN);
|