@sema-agent/client-core 0.112.0 → 0.113.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 +153 -0
- package/README.md +37 -24
- package/dist/adapt/arms.js +7 -1
- package/dist/adapt/textStream.d.ts +2 -0
- package/dist/adapt/textStream.js +27 -1
- package/dist/adapter/activeRunSelfHeal.d.ts +7 -5
- package/dist/adapter/activeRunSelfHeal.js +38 -66
- package/dist/adapter/downstream/eventToSdkMessage.js +4 -0
- package/dist/adapter/downstream/terminalToSdkResult.d.ts +8 -0
- package/dist/adapter/downstream/terminalToSdkResult.js +36 -1
- package/dist/adapter/runStream.d.ts +2 -12
- package/dist/adapter/runStream.js +46 -19
- package/dist/agentSession/engineAgentRegistryRead.js +2 -1
- package/dist/agentSession/engineSessionBackgroundStop.js +2 -2
- package/dist/attachmentOutcome.d.ts +35 -0
- package/dist/attachmentOutcome.js +192 -0
- package/dist/attachmentPathPlan.d.ts +67 -0
- package/dist/attachmentPathPlan.js +203 -0
- package/dist/attachmentRoute.d.ts +9 -1
- package/dist/attachmentRoute.js +23 -2
- package/dist/declared/supportFloorDeclared.d.ts +1 -1
- package/dist/declared/supportFloorDeclared.js +1 -0
- package/dist/deviceRebind.js +2 -3
- package/dist/displayUntrusted.js +126 -19
- package/dist/engineAddress.d.ts +1 -1
- package/dist/engineAddress.js +9 -6
- package/dist/engineErrorCodes.d.ts +3 -0
- package/dist/engineErrorCodes.js +4 -0
- package/dist/engineNoticeCodes.d.ts +34 -4
- package/dist/engineNoticeCodes.js +133 -6
- package/dist/engineUnavailable.d.ts +4 -2
- package/dist/engineUnavailable.js +99 -17
- package/dist/fleet/fleetLedger.d.ts +9 -3
- package/dist/fleet/fleetLedger.js +112 -16
- package/dist/fleet/fleetProjection.d.ts +5 -0
- package/dist/fleet/fleetProjection.js +9 -1
- package/dist/gateVocabulary.d.ts +7 -0
- package/dist/gateVocabulary.js +40 -14
- package/dist/generated/engineFactTables.d.ts +4 -2
- package/dist/generated/engineFactTables.js +198 -2
- package/dist/generated/engineNoticeTables.js +56 -8
- package/dist/generated/settingsSchemaFns.d.ts +7 -0
- package/dist/generated/settingsSchemaFns.js +11 -0
- package/dist/generated/settingsSchemaHash.d.ts +1 -0
- package/dist/generated/settingsSchemaHash.js +58 -0
- package/dist/generated/settingsSchemaOwnKeyRead.js +6 -1
- package/dist/generated/settingsSchemaTables.d.ts +3 -2
- package/dist/generated/settingsSchemaTables.js +14 -0
- package/dist/generated/settingsSchemaTightenVerdict.d.ts +1 -0
- package/dist/generated/settingsSchemaTightenVerdict.js +125 -0
- package/dist/headlessPermissionModeWire.d.ts +7 -2
- package/dist/headlessPermissionModeWire.js +77 -8
- package/dist/hitl/approvalDecisionDoor.d.ts +24 -0
- package/dist/hitl/approvalDecisionDoor.js +77 -0
- package/dist/hitl/approvalDelivery.d.ts +6 -0
- package/dist/hitl/approvalDelivery.js +57 -7
- package/dist/hitl/approvalResolution.d.ts +6 -3
- package/dist/hitl/approvalResolution.js +24 -2
- package/dist/hitl/approvalsFeed.js +1 -1
- package/dist/hitl/automaticAnswerVerdict.d.ts +1 -1
- package/dist/hitl/decisionSend.d.ts +7 -4
- package/dist/hitl/decisionSend.js +90 -41
- package/dist/hitl/frameRouter.d.ts +3 -3
- package/dist/hitl/frameRouter.js +5 -0
- package/dist/hitl/hitlBridge.d.ts +1 -0
- package/dist/hitl/hitlBridge.js +17 -4
- package/dist/hitl/hitlHostSurface.d.ts +3 -2
- package/dist/hitl/hitlHostSurface.js +5 -3
- package/dist/hitl/legacyApprovalShapes.d.ts +142 -0
- package/dist/hitl/legacyApprovalShapes.js +1 -0
- package/dist/hitl/livePendingAsk.d.ts +4 -4
- package/dist/hitl/livePendingAsk.js +5 -3
- package/dist/hitl/parkResolver.js +1 -1
- package/dist/hitl/persistedRulesWire.js +2 -2
- package/dist/hitl/planReviewCard.d.ts +4 -2
- package/dist/hitl/planReviewCard.js +66 -1
- package/dist/hitl/planReviewWire.d.ts +34 -2
- package/dist/hitl/planReviewWire.js +326 -150
- package/dist/hitl/sessionPolicyWire.js +16 -7
- package/dist/hitl/subagentSource.d.ts +1 -0
- package/dist/hitl/subagentSource.js +11 -0
- package/dist/hitl/toolApprovalWire.d.ts +34 -10
- package/dist/hitl/toolApprovalWire.js +182 -33
- package/dist/hookMatcherVerdict.d.ts +2 -1
- package/dist/hookMatcherVerdict.js +3 -2
- package/dist/hooksReaderGenerations.d.ts +8 -0
- package/dist/hooksReaderGenerations.js +49 -0
- package/dist/hooksWireCaps.js +43 -18
- package/dist/hostSettingsSource.d.ts +1 -1
- package/dist/hostSettingsSource.js +2 -2
- package/dist/hostTurnSettings.d.ts +2 -2
- package/dist/hostTurnSettings.js +87 -47
- package/dist/humanTurn.d.ts +2 -1
- package/dist/humanTurn.js +44 -13
- package/dist/humanTurnRead.d.ts +7 -0
- package/dist/humanTurnRead.js +23 -14
- package/dist/humanTurnSentences.js +3 -0
- package/dist/i18n/messages.en.d.ts +93 -5
- package/dist/i18n/messages.en.js +100 -12
- package/dist/i18n/messages.zh.js +110 -15
- package/dist/index.d.ts +29 -15
- package/dist/index.js +17 -9
- package/dist/liveModelCatalog.js +1 -0
- package/dist/liveQuestionStore.d.ts +2 -0
- package/dist/liveQuestionStore.js +7 -2
- package/dist/localConfig/kernel.d.ts +2 -1
- package/dist/localConfig/kernel.js +12 -18
- package/dist/localConfig/mcp/edit.js +25 -27
- package/dist/localConfig/mcp/servers.js +5 -8
- package/dist/localConfig/modelPool.d.ts +6 -1
- package/dist/localConfig/modelPool.js +104 -27
- package/dist/localConfig/modelPoolWords.d.ts +2 -0
- package/dist/localConfig/modelPoolWords.js +1 -0
- package/dist/localConfig/settingsWrite.js +1 -14
- package/dist/localConfig/skills.js +9 -16
- package/dist/localEngineSpawn.d.ts +29 -1
- package/dist/localEngineSpawn.js +62 -1
- package/dist/mcpLiveness.d.ts +1 -1
- package/dist/mcpProbeWire.js +2 -2
- package/dist/mcpReconnect.js +2 -2
- package/dist/model/catalogLoader.js +3 -17
- package/dist/model/onboardJudgement.d.ts +8 -0
- package/dist/model/onboardJudgement.js +8 -3
- package/dist/model/onboardSteps.d.ts +19 -0
- package/dist/model/onboardSteps.js +76 -0
- package/dist/notifications.js +20 -12
- package/dist/ownKey.d.ts +4 -0
- package/dist/ownKey.js +61 -0
- package/dist/pathShape.d.ts +14 -0
- package/dist/pathShape.js +44 -0
- package/dist/planReviewCardFacts.d.ts +3 -0
- package/dist/planReviewCardFacts.js +20 -3
- package/dist/planReviewOutcomeCause.d.ts +2 -0
- package/dist/planReviewOutcomeCause.js +12 -0
- package/dist/pluginHooksWire.d.ts +20 -8
- package/dist/pluginHooksWire.js +204 -86
- package/dist/prepareRefusal.d.ts +2 -0
- package/dist/prepareRefusal.js +11 -1
- package/dist/request/taskRequest.js +3 -1
- package/dist/resultFrameKeys.d.ts +1 -0
- package/dist/resultFrameKeys.js +3 -0
- package/dist/resumeRefusalCopy.js +3 -1
- package/dist/retryStatus.d.ts +11 -1
- package/dist/retryStatus.js +15 -4
- package/dist/runTerminal.d.ts +1 -0
- package/dist/runTerminal.js +15 -1
- package/dist/sdkWireTransit.d.ts +1 -1
- package/dist/seatContract.d.ts +12 -3
- package/dist/seatContract.js +24 -13
- package/dist/sessionEngine.js +1 -1
- package/dist/sessionHooksRoster.js +8 -6
- package/dist/sessionIdSegment.d.ts +0 -1
- package/dist/sessionIdSegment.js +1 -3
- package/dist/sessionMemoryErase.js +2 -2
- package/dist/sessionMemoryStatus.js +2 -1
- package/dist/sessionOccupant.d.ts +29 -0
- package/dist/sessionOccupant.js +78 -0
- package/dist/settingsHooksSalvage.d.ts +4 -1
- package/dist/settingsHooksSalvage.js +22 -9
- package/dist/skillOverrideChain.d.ts +3 -0
- package/dist/skillOverrideChain.js +31 -4
- package/dist/skillsWireCaps.d.ts +16 -2
- package/dist/skillsWireCaps.js +47 -20
- package/dist/subagent/agentStateDetail.js +32 -8
- package/dist/subagent/engineCompactWire.js +48 -36
- package/dist/subagent/engineDelegatedPrompt.d.ts +3 -2
- package/dist/subagent/engineDelegatedPrompt.js +65 -28
- package/dist/subagentEditOutcomes.d.ts +9 -0
- package/dist/subagentEditOutcomes.js +43 -0
- package/dist/supportFloor.d.ts +2 -1
- package/dist/supportFloor.js +1 -1
- package/dist/toolResult.js +4 -2
- package/dist/toolRoster.d.ts +1 -0
- package/dist/toolRoster.js +1 -0
- package/dist/usageAnalytics.js +2 -1
- package/dist/userAttachmentEnvelope.d.ts +11 -0
- package/dist/userAttachmentEnvelope.js +7 -2
- package/dist/userAttachmentSeat.d.ts +7 -1
- package/dist/userAttachmentSeat.js +44 -7
- package/dist/wiringInstructionsAttribution.js +8 -2
- package/docs/INTEGRATION-CLIENTS.md +1654 -16
- package/package.json +5 -5
package/dist/i18n/messages.en.js
CHANGED
|
@@ -209,14 +209,14 @@ const EN = {
|
|
|
209
209
|
'onboard.plan.modelsNotList': 'The model catalog has a "models" that is not a list — not rewriting it.',
|
|
210
210
|
'onboard.plan.modelsItemNotObject': 'The model catalog has a models[] item that is not an object — not rewriting it.',
|
|
211
211
|
'onboard.plan.envNotObject': 'The settings file has an "env" that is not an object — not rewriting it.',
|
|
212
|
-
'onboard.plan.envCatalogPresent': 'The engine is
|
|
212
|
+
'onboard.plan.envCatalogPresent': 'The engine is using "{model}" from its environment settings; a model added here would replace it, so nothing was saved. To add models, remove the model items from those settings first; or keep using it.',
|
|
213
213
|
'onboard.input.keyInFields': 'The model ID / base URL contains the API key — check the fields.',
|
|
214
214
|
'model.pool.add.duplicate': '"{model}" is listed twice in this batch with the same address — add it once.',
|
|
215
215
|
'model.pool.add.probeFailed': 'The provider rejected "{model}" (key, model name or reply format) — fix it and check again.',
|
|
216
216
|
'model.pool.add.probeUnverified': '"{model}" hasn\'t been checked against its provider (or the check couldn\'t finish) — check it again, or save it as unverified.',
|
|
217
217
|
'model.pool.add.pinMoved': 'The model list changed while "{name}" was being saved (its name or stored key moved) — nothing was added. Try again.',
|
|
218
218
|
'model.pool.notFound': 'There is no model named "{name}" in the model list.',
|
|
219
|
-
'model.pool.importEnv.notYet': 'The engine
|
|
219
|
+
'model.pool.importEnv.notYet': 'The engine uses "{model}" from its environment settings. This app can\'t move it into the model list yet — nothing was saved. To add models, remove the model items from those settings first; or keep using it.',
|
|
220
220
|
'model.pool.tier.badGroup': 'A tier group name must start with a letter or digit and use only letters, digits, ".", "_" or "-".',
|
|
221
221
|
'model.pool.tier.noGroup': 'There is no tier group named "{group}".',
|
|
222
222
|
'model.pool.tier.groupExists': 'A tier group named "{group}" already exists.',
|
|
@@ -233,7 +233,7 @@ const EN = {
|
|
|
233
233
|
'onboard.refusal.writeConflict': 'Another program changed the configuration while saving — nothing was saved; try again.',
|
|
234
234
|
'onboard.refusal.writeFailed': 'The model configuration could not be saved.',
|
|
235
235
|
'onboard.refusal.engineIsRemote': "The Cloud engine is in use — local model setup doesn't apply to it. Switch to the local engine first.",
|
|
236
|
-
'onboard.refusal.envCatalogPresent': 'The engine is
|
|
236
|
+
'onboard.refusal.envCatalogPresent': 'The engine is using models from its environment settings; a model added here would replace them, so nothing was saved. To add models, remove the model items from those settings first; or keep using them.',
|
|
237
237
|
'config.mcp.nameBlank': 'An MCP server entry{where} has a name that cannot be used ({name}), so it was not started. Give it a name, or remove the entry.',
|
|
238
238
|
'config.mcp.nameEdgeWhitespace': 'MCP server name {name}{where} cannot be used as written, so the server was not started: it would not match the same name in other settings (for example a list of disabled servers). Remove the extra whitespace from the name.',
|
|
239
239
|
'config.mcp.nameCollides': 'MCP server name {name}{where} cannot be used as written, so the server was not started: without its leading or trailing whitespace it would be the same name as another MCP server entry. Remove the extra whitespace from the name, or delete the duplicate entry.',
|
|
@@ -317,6 +317,12 @@ const EN = {
|
|
|
317
317
|
'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.',
|
|
318
318
|
'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',
|
|
319
319
|
'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',
|
|
320
|
+
'approval.routeMissing.line': 'Your answer was not delivered: the server did not recognise the address this app used to send the answer (not_found.route). Nothing was decided and the request is still waiting; reconnecting may fix it.',
|
|
321
|
+
'approval.notSent.noVerb': 'No approval card was shown: this server takes approval answers at a newer address than this app uses. Nothing was sent and the request is still waiting; a newer version of this app is needed to answer it.',
|
|
322
|
+
'approval.notSent.cardUnreadable': 'No approval card was shown: this app could not read this approval request, so it cannot be answered here. Nothing was sent and the request is still waiting; a newer version of this app may be able to answer it.',
|
|
323
|
+
'approval.notSent.noVerbOldServer': 'No approval card was shown: this app can only answer approvals on servers at version {version} or later, and it could not confirm that this server is one. Nothing was sent and the request is still waiting; reconnecting may fix it, otherwise the server needs to be upgraded.',
|
|
324
|
+
'approval.decision.notSentOldServer': 'Your answer was not sent: this app can only answer approvals on servers at version {version} or later, and it could not confirm that this server is one. Nothing was decided and the request is still waiting; reconnecting may fix it, otherwise the server needs to be upgraded.',
|
|
325
|
+
'approval.decision.notSentNewerAddress': 'Your answer was not sent: this server takes approval answers at a newer address than this app uses. Nothing was decided and the request is still waiting; a newer version of this app is needed to answer it.',
|
|
320
326
|
'approval.editRefusal.stem': 'this request does not expose its tool arguments here, so an edited approval cannot be applied',
|
|
321
327
|
'approval.editRefusal.line': 'That approval was NOT sent: {stem}. The request is still waiting — approve or deny it as it is.',
|
|
322
328
|
'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',
|
|
@@ -406,6 +412,8 @@ const EN = {
|
|
|
406
412
|
'resume.refusal.parentConstraintMissing': "This parked work was suspended under policy constraints inherited from its parent tasks, and this resume did not re-supply them (resuming without them would silently drop the parents' gate) · {safe} · Retry with the parent policy chain re-supplied",
|
|
407
413
|
'resume.refusal.parentConstraintMismatch': 'The parent policy constraints supplied with this resume do not match the ones this work was parked under (a partial or different chain would run it under thinner or different parent rules) · {safe} · Retry with the full original parent chain',
|
|
408
414
|
'resume.refusal.constraintUnprojectable': 'This resume carried an edited approval, but the policy inherited from the parent tasks cannot be re-checked against an edit · {safe} · Decide it again without editing the input — an unedited approval is not affected by this refusal',
|
|
415
|
+
'resume.refusal.isolationScopeMismatch': 'This resume named a different isolation scope than the one recorded when the work was parked · {safe} · Retry with the recorded isolation scope, or omit it to inherit it',
|
|
416
|
+
'resume.refusal.agentDefinitionMismatch': "This parked agent's name now resolves to a definition with different tool lists than the one it was parked under, or its record does not say which lists it ran under · {safe} · Resume it where the name resolves to the definition it was parked under, or let it expire",
|
|
409
417
|
'resume.refusal.preflightWaitable': "The deployment's resume preflight refused this attempt · The refusal happened before the commit — your decision was not consumed · The engine supplied a wait, so this token stays redeemable once the obstacle clears",
|
|
410
418
|
'resume.refusal.preflightNoWait': "The deployment's resume preflight refused this attempt · The refusal happened before the commit — your decision was not consumed · The engine supplied no wait, so this refusal does not say whether the token stays redeemable",
|
|
411
419
|
'resume.refusal.policyBlock': "The engine refused to resume this parked work at its admission check (the engine reports that its admission policy changed since the work was first accepted) · {reason} · This refusal does not say whether anything was consumed before it or whether a retry would pass — check the task's current state before deciding again, and ask whoever operates this deployment if it keeps happening",
|
|
@@ -455,7 +463,6 @@ const EN = {
|
|
|
455
463
|
'resume.refusal.park.blockedInteractive': 'sema will not put the card for run {run} back on screen by itself: this engine version refuses to resume it. To free this conversation, send a message — sema then offers to cancel that run (if the card comes back instead, answer it first), after which you can send the work again as a new message.',
|
|
456
464
|
'session.selfHeal.wayOut.interactive': 'run /clear to keep working in a fresh session',
|
|
457
465
|
'session.selfHeal.freshSession.default': 'start a new session (drop --resume/--continue)',
|
|
458
|
-
'session.selfHeal.freshSession.defaultCapitalized': 'Start a new session (drop --resume/--continue)',
|
|
459
466
|
'session.selfHeal.gate.kind': 'a {kind} decision',
|
|
460
467
|
'session.selfHeal.gate.generic': 'a decision',
|
|
461
468
|
'session.selfHeal.handle.run': ' (run {taskId})',
|
|
@@ -474,6 +481,8 @@ const EN = {
|
|
|
474
481
|
'session.selfHeal.injected.steerRejected': '{lead} was not delivered: passing it to the reply already in progress{id} was refused ({detail}). sema did not retry, so the model has not seen it.',
|
|
475
482
|
'session.selfHeal.injected.decisionInFlight': '{lead} was not delivered: this session is still busy with an earlier reply{id}, and your answer to the decision it is waiting on is still on its way. sema did not retry, so the model has not seen it.',
|
|
476
483
|
'session.selfHeal.injected.dismissedPlan': '{lead} was not delivered: this session is held by an earlier reply{id} whose plan is waiting for your review, and you closed that approval card — {closed}. Send a message when you want the card back; sema did not retry, so the model has not seen it.',
|
|
484
|
+
'session.selfHeal.injected.planReopenConversationLeft': '{lead} was not delivered: this session is held by an earlier reply{id} whose plan is waiting for your review, but this screen is no longer on the conversation that plan belongs to, so sema did not show the approval card here — it appears again when you go back to that conversation. sema did not retry, so the model has not seen it.',
|
|
485
|
+
'session.selfHeal.injected.planReopenConversationUnconfirmed': '{lead} was not delivered: this session is held by an earlier reply{id} whose plan is waiting for your review, and sema could not confirm that this screen is still on the conversation that plan belongs to, so it did not show the approval card. sema did not retry, so the model has not seen it.',
|
|
477
486
|
'session.selfHeal.injected.queuedOn': '{lead} is queued on an earlier reply{id} that is paused waiting for a decision',
|
|
478
487
|
'session.selfHeal.injected.queuedShown': '{queuedOn}; sema has shown that decision card, and the message is picked up once you answer it.',
|
|
479
488
|
'session.selfHeal.injected.queuedInFlight': '{queuedOn}; your answer to it is still on its way, and the message is picked up once that answer is applied.',
|
|
@@ -512,6 +521,8 @@ const EN = {
|
|
|
512
521
|
'session.selfHeal.row.planReopenFailed.dismissed': 'The previous turn is parked waiting for a plan review (run {taskId}), and you closed its approval card — {closed}. It did NOT cancel the run — that would have discarded the plan for you. Your message was NOT sent; send it again to bring the card back.',
|
|
513
522
|
'session.selfHeal.row.planReopenFailed.withKeep': 'The previous turn is parked waiting for a plan review (run {taskId}) and sema could not reopen that approval card{noView}. It did NOT cancel the run — that would have discarded the plan for you. Your message was NOT sent. To keep this conversation, {keep}: the card comes back when the session resumes, if it is still waiting. Or {wayOut} if you no longer want that plan.{viaEngine}',
|
|
514
523
|
'session.selfHeal.row.planReopenFailed.noKeep': 'The previous turn is parked waiting for a plan review (run {taskId}) and sema could not reopen that approval card{noView}. It did NOT cancel the run — that would have discarded the plan for you. Your message was NOT sent; {wayOut} if you no longer want that plan.{viaEngine}',
|
|
524
|
+
'session.selfHeal.row.planReopenFailed.conversationLeft': 'The previous turn is parked waiting for a plan review (run {taskId}), but this screen is no longer on the conversation that review belongs to, so sema did not put the approval card on screen here. It did NOT cancel the run — that would have discarded the plan for you. Your message was NOT sent. Go back to that conversation and the plan card will appear again.',
|
|
525
|
+
'session.selfHeal.row.planReopenFailed.conversationUnconfirmed': 'The previous turn is parked waiting for a plan review (run {taskId}), but sema could not confirm that this screen is still on the conversation that review belongs to, so it did not reopen the approval card. It did NOT cancel the run — that would have discarded the plan for you. Your message was NOT sent; send it again from that conversation to bring the card back.',
|
|
515
526
|
'session.selfHeal.row.steered.textOnly': 'Only the TEXT of your message was handed over — if that submission also had images or attachments, they were NOT sent.',
|
|
516
527
|
'session.selfHeal.row.steered.tail.following': 'sema is following that run and will surface whatever it asks for next.',
|
|
517
528
|
'session.selfHeal.row.steered.tail.watch': 'watch that run for what it does with it.',
|
|
@@ -572,9 +583,12 @@ const EN = {
|
|
|
572
583
|
'session.selfHeal.endRun.engineInteractive.noId': 'end that run on the engine',
|
|
573
584
|
'session.selfHeal.wakeOn.engine': ' (POST /v1/sessions/:id/wake)',
|
|
574
585
|
'session.selfHeal.wakeOn.host': ' ({where})',
|
|
575
|
-
'session.
|
|
576
|
-
'session.
|
|
577
|
-
'session.
|
|
586
|
+
'session.busy.running': 'This session is locked by an earlier run{handle} that the engine reports as still running, so this message was NOT sent. If it is still working, wait for it to finish; if it will never finish, {endRun} — that discards whatever it was doing — or {freshSession}.',
|
|
587
|
+
'session.busy.parked': 'This session is locked by an earlier run{handle} that has not been released, so this message was NOT sent. Nothing releases it on its own — {endRun}, or {freshSession}.',
|
|
588
|
+
'session.busy.parkedDecide': 'This session is held by an earlier run{handle}{status} that is parked, so this message was NOT sent. The engine reports {gate} waiting in this session: decide it at POST {decidePath}, then send this message again. If the session is still held after that, {endRun} — that may discard what that run was waiting on — or {freshSession}.{governance}',
|
|
589
|
+
'session.busy.unreadable': 'This session is locked by an earlier run{handle}, so this message was NOT sent. sema cannot read what that run is doing — {endRun}, or {freshSession}.',
|
|
590
|
+
'session.busy.released': 'The run that was holding this session has just been released, so this message was NOT sent. Send it again.',
|
|
591
|
+
'session.busy.freshSession.interactive': 'start a new session',
|
|
578
592
|
'approval.deniedBy.policy': "denied by this deployment's permission policy",
|
|
579
593
|
'approval.deniedBy.hook': 'denied by a PreToolUse hook',
|
|
580
594
|
'approval.deniedBy.org': 'denied by an organization rule',
|
|
@@ -596,15 +610,26 @@ const EN = {
|
|
|
596
610
|
'approval.origin.hook': 'a PreToolUse hook asked about this call',
|
|
597
611
|
'approval.origin.askRule': 'a persisted ask rule matches this call',
|
|
598
612
|
'approval.origin.denialLimitFallback': 'the auto-mode classifier hit its denial limit and handed this call back to you',
|
|
613
|
+
'approval.origin.integrityGuard': 'an always-on engine integrity guard asks about this call (removing a protected location, a recursive delete it cannot verify, shell text it cannot read, or a write to the session transcript; this client cannot tell which from the origin alone)',
|
|
599
614
|
'approval.origin.shellGateTighten': 'the coarse shell check rates this command above the tier it lets through, so it asks',
|
|
600
|
-
'approval.origin.safetyTighten': 'the gate tightened on this call’s own facts (network egress, irreversibility
|
|
615
|
+
'approval.origin.safetyTighten': 'the gate tightened on this call’s own facts (for example network egress, irreversibility or a protected write, among other cases; this client cannot tell which from the origin alone)',
|
|
601
616
|
'approval.origin.policy': 'this deployment’s permission policy, or the permission mode’s default, asks about this call',
|
|
602
617
|
'approval.origin.unknownWithWord': 'this call asks; its origin {word} is a word newer than this client, so answer it as usual',
|
|
603
618
|
'approval.origin.unknownNoWord': 'this call asks; its origin is a word newer than this client, so answer it as usual',
|
|
619
|
+
'approval.originHeadline.ancestorMarked': 'The task that started this work set it to wait for a person; it stays paused.',
|
|
620
|
+
'approval.originHeadline.orgUnavailable': "Your organization's policy couldn't be checked, so this one needs your decision.",
|
|
621
|
+
'approval.originHeadline.orgRule': 'A rule from your organization says this one needs your decision.',
|
|
622
|
+
'approval.originHeadline.ruleStoreUnavailable': "It's unclear whether your saved rules forbid this, so it needs your decision.",
|
|
623
|
+
'approval.originHeadline.hook': 'A hook that checks tool use asked for your OK; this runs only if you allow it.',
|
|
624
|
+
'approval.originHeadline.denialLimitFallback': 'Auto mode hit its limit on automatic refusals, so this one needs your decision.',
|
|
625
|
+
'approval.originHeadline.shellGateTighten': 'The built-in check for shell commands wants your OK before this command runs.',
|
|
626
|
+
'approval.originHeadline.safetyTighten': 'A built-in safety check needs your OK for this action; it runs only if allowed.',
|
|
627
|
+
'approval.originHeadline.integrityGuard': 'A built-in protection asked about this action; its own words are in the details.',
|
|
628
|
+
'approval.originHeadline.unknown': 'The reason for asking is newer than this app; answer it as you usually would.',
|
|
604
629
|
'approval.ruleOffer.absence.allowOutranked': 'no "don\'t ask again" option here: an allow rule already matches this call, but this question outranks it — another allow rule would be outranked the same way',
|
|
605
630
|
'approval.ruleOffer.absence.askRuleMatched': 'no "don\'t ask again" option here: an ask rule matches this call and keeps asking — an allow rule changes nothing while it stands; to stop being asked, review your ask rules',
|
|
606
631
|
'approval.ruleOffer.absence.askRuleMatchedDeploymentList': 'no "don\'t ask again" option here: this deployment asks about every call to this tool and your own rules cannot switch that off — the "in this session" option stops it asking again until the session ends',
|
|
607
|
-
'approval.ruleOffer.absence.laneCannotSpeak': 'no "don\'t ask again" option here: this
|
|
632
|
+
'approval.ruleOffer.absence.laneCannotSpeak': 'no "don\'t ask again" option here: this card has no rule to offer for this exact command, so it is approved each time; a form of what you trust that a rule can cover can still get one — through a card drawn for that form, or in settings',
|
|
608
633
|
'approval.ruleOffer.absence.unknown': 'no "don\'t ask again" option here (the reason is one this build does not know yet)',
|
|
609
634
|
'approval.ruleOffer.uncovered.redirection': 'always asks (shell redirection)',
|
|
610
635
|
'approval.ruleOffer.uncovered.noRuleForm': 'no coverable rule form',
|
|
@@ -862,8 +887,21 @@ const EN = {
|
|
|
862
887
|
'notice.classifier.denialLimit.tail': 'Review the transcript, then change the step that keeps getting blocked or make an approver available, and run it again.',
|
|
863
888
|
'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.',
|
|
864
889
|
'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.",
|
|
890
|
+
'notice.turnInterrupted.extensionAbort': 'An extension ended the running turn — tool calls that had already finished keep their results.',
|
|
891
|
+
'notice.turnInterrupted.extensionAbortNamed': 'The extension "{extension}" ended the running turn — tool calls that had already finished keep their results.',
|
|
865
892
|
'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.",
|
|
866
893
|
'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.',
|
|
894
|
+
'notice.rewind.boundaryUnrecorded.notSaved': 'The state of your files at the start of this turn could not be saved, so rewinding the files to this turn will be refused.',
|
|
895
|
+
'notice.rewind.boundaryUnrecorded.timedOut': 'Saving the state of your files at the start of this turn did not finish in time, so rewinding the files to this turn will be refused.',
|
|
896
|
+
'notice.rewind.boundaryUnrecorded.tail': 'The turn itself carries on. If you need to get back to how the files were at its start, rely on a copy you keep yourself, such as version control.',
|
|
897
|
+
'notice.inheritEnv.declaredLate': "Every shell command this execution environment would start is being refused. Its inheritEnv list names {name} (inheritEnv[{index}]), and a declaration made after the environment was built (declareWithheldEnv) now marks that variable as the engine's own service credential, which a child process may not inherit. No retry will succeed until the declaration or the list changes: make the declaration before the environment is built, or take that entry out of inheritEnv.",
|
|
898
|
+
'notice.mods.stopEnded.point.run': "the run's stop point",
|
|
899
|
+
'notice.mods.stopEnded.point.agent': "a delegated agent's stop point",
|
|
900
|
+
'notice.mods.stopEnded.point.other': 'a stop point',
|
|
901
|
+
'notice.mods.stopEnded.lead.named': 'The extension "{registration}" ended {point}: the run was not sent back to keep working from here, and the model was not told.',
|
|
902
|
+
'notice.mods.stopEnded.lead.anon': 'A stop handler ended {point}: the run was not sent back to keep working from here, and the model was not told.',
|
|
903
|
+
'notice.mods.stopEnded.reason': 'Its reason: "{reason}".',
|
|
904
|
+
'notice.mods.stopEnded.tail': 'This applies to this stop point only; a later stop point asks again. If this is not what you intended, check the stop handlers that apply here.',
|
|
867
905
|
'rules.refusal.sentence.one': 'permissions: 1 rule will not be enforced — {list}',
|
|
868
906
|
'rules.refusal.sentence.other': 'permissions: {count} rules will not be enforced — {list}',
|
|
869
907
|
'rules.refusal.item': '{rule} ({reason})',
|
|
@@ -909,6 +947,8 @@ const EN = {
|
|
|
909
947
|
'config.hooks.httpPolicy.urlListMalformed': 'HTTP hook blocked: allowedHttpHookUrls is not a list of strings ({layer}), so it is read as empty and no HTTP hook runs — the {event} hook for {url} does not run.',
|
|
910
948
|
'config.hooks.httpPolicy.envListMalformed': 'HTTP hook {url} ({event}) runs without environment variables: httpHookAllowedEnvVars is not a list of strings ({layer}), so it is read as empty.',
|
|
911
949
|
'config.hooks.httpPolicy.layerUnreadable': 'HTTP hook blocked: the settings of {layer} could not be read, so its allowedHttpHookUrls cannot be checked and no HTTP hook runs — the {event} hook for {url} does not run.',
|
|
950
|
+
'config.hooks.layerWithheld.degraded': '{layer}: could not be read in full this turn (the settings were too large to read, or this layer is malformed or not loaded yet), so its hooks and the hooks of the other user-editable settings are not sent — only managed-settings hooks run.',
|
|
951
|
+
'config.hooks.plan.reason.layerDegraded': 'another settings layer could not be read in full this turn, so only managed-settings hooks are sent',
|
|
912
952
|
'config.hooks.layerWithheld.trust': '{layer}: hooks will not run — this client has no workspace-trust step, and hooks in repository-controlled settings are only allowed once the workspace is trusted. Hooks from user, flag and managed settings are unaffected.',
|
|
913
953
|
'config.taskRequest.memoryOff.settingsSectionNotObject': 'memoryOffDeclared: the memory section of settings must be an object — got {shape}.',
|
|
914
954
|
'config.taskRequest.memoryOff.enabledNotBoolean': 'memoryOffDeclared: memory.enabled in settings must be a boolean when present — got {shape}.',
|
|
@@ -1198,6 +1238,12 @@ const EN = {
|
|
|
1198
1238
|
'session.humanTurn.degraded.noImageSeat.other': '{count} images were not sent: images cannot be added to a run in progress — send them as a new message when the run ends',
|
|
1199
1239
|
'session.humanTurn.degraded.noAttachmentIdSeat.one': '1 uploaded file was not attached: files cannot be added to a run in progress — send it as a new message when the run ends',
|
|
1200
1240
|
'session.humanTurn.degraded.noAttachmentIdSeat.other': '{count} uploaded files were not attached: files cannot be added to a run in progress — send them as a new message when the run ends',
|
|
1241
|
+
'session.humanTurn.degraded.noPathSeat.one': '1 attached file was sent as a reference only: the engine cannot be asked to read files for a run in progress — send it as a new message when the run ends',
|
|
1242
|
+
'session.humanTurn.degraded.noPathSeat.other': '{count} attached files were sent as a reference only: the engine cannot be asked to read files for a run in progress — send them as a new message when the run ends',
|
|
1243
|
+
'session.humanTurn.degraded.pathNotAdmitted.one': '1 attached file was sent as a reference only: it is not confirmed that the engine accepts files to read for this message, so it was not asked to read it',
|
|
1244
|
+
'session.humanTurn.degraded.pathNotAdmitted.other': '{count} attached files were sent as a reference only: it is not confirmed that the engine accepts files to read for this message, so it was not asked to read them',
|
|
1245
|
+
'session.humanTurn.degraded.pathSeatCount.one': '1 attached file was sent as a reference only: one message can ask the engine to read only so many files',
|
|
1246
|
+
'session.humanTurn.degraded.pathSeatCount.other': '{count} attached files were sent as a reference only: one message can ask the engine to read only so many files',
|
|
1201
1247
|
'session.humanTurn.printVision.no': 'The model{model} cannot read images, so the images in this prompt were not sent',
|
|
1202
1248
|
'session.humanTurn.printVision.unknown': "The engine's model list does not say whether the model{model} accepts image input — the images in this prompt were sent anyway; if it does not, they may be dropped or the request may be refused",
|
|
1203
1249
|
'config.scenarioRefusal.source.ruling': ', assigned to you by the configuration center,',
|
|
@@ -1272,6 +1318,7 @@ const EN = {
|
|
|
1272
1318
|
'notice.wireRefusal.unsupportedRule.stored.other': 'The engine refused to continue this work: the request stored for it has {count} rules in it that are forms the engine does not support — {detail} · It cannot continue as stored. Remove or rewrite those rules (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',
|
|
1273
1319
|
'notice.prepareRefusal.draftKept': 'Your draft is kept',
|
|
1274
1320
|
'notice.prepareRefusal.mcpServerNameCollision': 'The engine refused this run at setup: two MCP servers declared for it cannot be told apart — the same name written twice, or names the engine turns into one tool-name prefix (for example “a.b” and “a_b”), so their tool names would collide · The engine’s own error text names them · Sending the same request again is refused the same way; give one of them another name, or remove one of them, wherever MCP servers are configured for this run (ask whoever operates the engine if the deployment declares them), then send it',
|
|
1321
|
+
'notice.prepareRefusal.userAttachmentPath': 'The engine refused attachment {n} of this message: it names a file in the workspace of this run, and this run has no workspace to read from, or does not accept that path or line range{draft} · Remove that attachment, then send it again',
|
|
1275
1322
|
'notice.retry.source.unifiedHeader': "Judged from the model service's quota headers",
|
|
1276
1323
|
'notice.retry.source.providerCode': "Judged from the model service's error code",
|
|
1277
1324
|
'notice.retry.source.status': 'Judged from the HTTP status alone',
|
|
@@ -1322,7 +1369,7 @@ const EN = {
|
|
|
1322
1369
|
'doctor.wiring.fleetTranscripts.noPromise': 'background subagent transcripts: {tier} — this deployment does not promise that background subagent handles survive an engine restart',
|
|
1323
1370
|
'doctor.wiring.fleetTranscripts.unknownTier': 'background subagent transcripts: an unknown level ("{tier}") — read it as no promise that background subagent handles survive an engine restart',
|
|
1324
1371
|
'config.attachments.refusal.credentialShapedWord': 'looks like a credential rather than an attachments list, so it was not used and is not shown here — a credential does not belong in this setting.',
|
|
1325
|
-
'session.subagent.delegatedPrompt.absence.
|
|
1372
|
+
'session.subagent.delegatedPrompt.absence.anchorUnreported': "This subagent's prompt cannot be shown: no location for its conversation has been reported to this client.",
|
|
1326
1373
|
'session.subagent.delegatedPrompt.absence.notInStore': "This subagent's prompt cannot be shown: the engine's session store has no conversation for it.",
|
|
1327
1374
|
'session.subagent.delegatedPrompt.absence.forbidden': "This subagent's prompt cannot be shown: the engine refused access to its conversation.",
|
|
1328
1375
|
'session.subagent.delegatedPrompt.absence.promptAbsent': "This subagent's conversation was read, but it holds no delegated prompt to show.",
|
|
@@ -1346,6 +1393,7 @@ const EN = {
|
|
|
1346
1393
|
'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.',
|
|
1347
1394
|
'config.hooks.plan.keyNotRead.more': '{shown} and {rest} more',
|
|
1348
1395
|
'config.hooks.plan.keyNotRead.withOnFailure': '{line} The connected server does not read onFailure, so a hook set to block when it fails will not block.',
|
|
1396
|
+
'config.hooks.plan.keyNotRead.readerFieldsUnreadable': "The connected server's list of hook fields could not be read, so hook keys were checked against its version instead; the server may read some of the keys named above.",
|
|
1349
1397
|
'config.hooks.plan.reason.sourceNotAuthored': 'the matcher group of this hook sets "source", which only this client sets (remove the key)',
|
|
1350
1398
|
'config.hooks.plan.sourceNotAuthored.oneKey': '{layer}: {hooks} will not run — the key {coordinates} is set only by this client, not in settings. Remove the key.',
|
|
1351
1399
|
'config.hooks.plan.sourceNotAuthored.manyKeys': '{layer}: {hooks} will not run — the keys {coordinates} are set only by this client, not in settings. Remove those keys.',
|
|
@@ -1413,7 +1461,7 @@ const EN = {
|
|
|
1413
1461
|
'config.localConfig.refused.skillNameUnstorable': "Settings can't store an entry with this skill's name; rename its folder or file to configure it.",
|
|
1414
1462
|
'config.localConfig.refused.entryInUse': 'That model is still in use (as the default model, by a role, or in an old tier setting) — point those at another model first. Nothing was saved.',
|
|
1415
1463
|
'config.localConfig.refused.credentialUnpaired': "That model couldn't be reached with the key or address it has — nothing was saved.",
|
|
1416
|
-
'config.localConfig.refused.envCatalogPresent': 'The engine is using the models set in its environment; adding one here would take
|
|
1464
|
+
'config.localConfig.refused.envCatalogPresent': 'The engine is using the models set in its environment settings; adding one here would take them out of use — nothing was saved. To add models, remove the model items from those settings first; or keep using them.',
|
|
1417
1465
|
'config.localConfig.refused.probeFailed': 'The provider showed that a model in this change is set up wrong (key, model name or reply format) — nothing was saved.',
|
|
1418
1466
|
'config.localConfig.refused.probeUnverified': "A model in this change hasn't been checked against its provider (or the check couldn't finish) — nothing was saved. Check it again, or save it as unverified.",
|
|
1419
1467
|
'config.localConfig.unavailable.engineIsRemote': "The Cloud engine is in use — local configuration doesn't apply to it. Switch to the local engine first.",
|
|
@@ -1435,6 +1483,7 @@ const EN = {
|
|
|
1435
1483
|
'config.localConfig.disclosure.decidedBy': 'The setting in effect comes from {layer}.',
|
|
1436
1484
|
'config.localConfig.disclosure.shadowed': 'This setting is overridden by {layer}, so it has no effect for now.',
|
|
1437
1485
|
'config.localConfig.disclosure.tierGroupOverridden': 'Some tier groups in your old settings share a name with groups already in {layer}; the ones in {layer} were kept and the old ones were not copied over.',
|
|
1486
|
+
'config.localConfig.disclosure.shadowUnknown': 'It could not be told whether this setting is overridden by {layer}: that file could not be read.',
|
|
1438
1487
|
'config.localConfig.disclosure.tierGroupOverriddenNamed': 'These tier groups in your old settings share a name with groups already in {layer}; the ones in {layer} were kept and the old ones were not copied over: {names}.',
|
|
1439
1488
|
'config.localConfig.layer.userSettings': 'your user settings',
|
|
1440
1489
|
'config.localConfig.layer.projectSettings': "this project's shared settings",
|
|
@@ -1487,6 +1536,9 @@ const EN = {
|
|
|
1487
1536
|
'approval.planReview.note.tooLarge': 'This plan is too large to be shown in full ({length} characters), so it cannot be approved from this card. Reject it, or ask for a shorter plan.',
|
|
1488
1537
|
'approval.planReview.note.notCarried': "The engine did not bring this plan's text up to this card (it may be too long), so it cannot be approved from this card. Reject it, or ask for the plan to be presented again.",
|
|
1489
1538
|
'approval.planReview.note.unknown': 'This card cannot show the plan it would approve, so it cannot be approved from this card. Reject it, or ask for the plan to be presented again.',
|
|
1539
|
+
'approval.planReview.heading.plain': 'Plan review',
|
|
1540
|
+
'approval.planReview.heading.gate': 'Plan review — gate {gate}',
|
|
1541
|
+
'approval.planReview.heading.replaces': '{head}. This card replaces an earlier plan card.',
|
|
1490
1542
|
'approval.planReview.askAgain.shown': 'The user asked for the plan to be presented again.',
|
|
1491
1543
|
'approval.planReview.askAgain.marked': 'The user could not approve this plan: it contains characters that cannot be shown as written. Present the plan again without those characters.',
|
|
1492
1544
|
'approval.planReview.askAgain.tooLarge': 'The user could not approve this plan: it is too large to be shown in full. Present a shorter plan.',
|
|
@@ -1497,7 +1549,20 @@ const EN = {
|
|
|
1497
1549
|
'approval.planReview.decision.refused': 'This {decision} was not applied: the engine refused it and changed nothing.',
|
|
1498
1550
|
'approval.planReview.decision.cardMissing': 'Approving a plan needs the card that showed it, and none came with this approval.',
|
|
1499
1551
|
'approval.planReview.decision.gateMoved': 'The plan on this card is no longer the one waiting for approval.',
|
|
1500
|
-
'approval.planReview.decision.gateUntrusted': "The engine could not recognise this review's gate id (the server's record of it looks damaged; an operator should check it).
|
|
1552
|
+
'approval.planReview.decision.gateUntrusted': "The engine could not recognise this review's gate id (the server's record of it looks damaged; an operator should check it). Until it is fixed, approving this plan from here is refused the same way and changes nothing. Cancelling the task always works. Rejecting it or asking for a new plan is sent without the gate id and may be refused the same way; if it goes through, it does not approve anything, but if the plan has changed in the meantime it acts on whichever plan is waiting then, which may be one nobody here has seen.",
|
|
1553
|
+
'approval.planReview.decision.sentWithoutGateId': 'This answer was sent without the gate id. If it took effect, it acted on whichever plan review the engine was waiting on when it arrived, which is not necessarily the plan on this card.',
|
|
1554
|
+
'approval.planReview.bridge.gateIdMissing': 'Approving or editing a plan needs the gate id of the review card the user saw, and this decision did not carry one, so nothing was sent. Decide from the review card, which carries the gate id, or reject the plan or cancel the task instead.',
|
|
1555
|
+
'approval.planReview.notice.what.approve': 'approval of the plan',
|
|
1556
|
+
'approval.planReview.notice.what.reject': 'rejection of the plan',
|
|
1557
|
+
'approval.planReview.notice.what.askAgain': 'request to present the plan again',
|
|
1558
|
+
'approval.planReview.notice.what.unknown': 'decision on the plan',
|
|
1559
|
+
'approval.planReview.notice.notSent': 'Your {what} was not sent; the plan is still waiting for a decision.',
|
|
1560
|
+
'approval.planReview.notice.refused': 'Your {what} did not take effect: the engine refused it.',
|
|
1561
|
+
'approval.planReview.notice.stillParked': 'Your {what} did not take effect; the plan is still waiting at the same review.',
|
|
1562
|
+
'approval.planReview.notice.storedForm': 'Your {what} did not take effect, and deciding again will not take effect either: the engine cannot continue this review in the form it was stored in. Cancel the task, then submit the work again as a new task.',
|
|
1563
|
+
'approval.planReview.notice.unconfirmed': 'Whether your {what} took effect could not be confirmed.',
|
|
1564
|
+
'approval.planReview.notice.wayOut': 'The engine gives this way forward: {wayOut}.',
|
|
1565
|
+
'approval.planReview.notice.cardOnScreen': 'The plan review card is on screen.',
|
|
1501
1566
|
'approval.planReview.option.askAgain.label': 'No, ask for the plan to be presented again',
|
|
1502
1567
|
'approval.planReview.option.askAgain.description': 'Do not approve; ask the model to present the plan again',
|
|
1503
1568
|
'localEngine.behind.cliUpdate': 'The local engine (version {running}) is newer than this Sema ({own}), so this Sema cannot start new work on it. Run `sema update`, then reopen this session.',
|
|
@@ -1536,6 +1601,8 @@ const EN = {
|
|
|
1536
1601
|
'localEngine.settingsLayer.unspecified': 'a settings file',
|
|
1537
1602
|
'localEngine.bootRefusal': 'The local engine refused to start: {reason}',
|
|
1538
1603
|
'localEngine.firstShare': "Sema now shares one local engine with the other Sema apps on this computer. Local sessions from this app's earlier private engine are not shown in the list; their data has been left in place.",
|
|
1604
|
+
'localEngine.bindNotAcknowledged': 'The local engine did not start: Sema runs it on `127.0.0.1` only unless you allow otherwise, and `BIND_HOST` asks for a different address. To allow that, turn on `{switchKey}` and accept the risk; otherwise set `BIND_HOST` back to `127.0.0.1` or remove it, then start again.',
|
|
1605
|
+
'localEngine.bindAcknowledged': 'The local engine is set to listen outside `127.0.0.1`: other machines, or other programs on this computer, may be able to connect to it and run commands as you.',
|
|
1539
1606
|
'localEngine.phase.starting': 'Starting the local engine…',
|
|
1540
1607
|
'localEngine.phase.dormant': 'The local engine is not running; it starts when a session needs it.',
|
|
1541
1608
|
'localEngine.phase.draining': 'The local engine is finishing its work before it stops; Sema reconnects when it is back.',
|
|
@@ -1627,6 +1694,7 @@ const EN = {
|
|
|
1627
1694
|
'engine.bootRefusal.withWaysOut': 'The local engine refused to start: {reason} {waysOut}',
|
|
1628
1695
|
'engine.bootRefusal.withFix': 'The local engine refused to start: {reason} {fix}',
|
|
1629
1696
|
'engine.bootRefusal.waysOut': 'Ways out: (1) {newer} — {separate}; (2) {restore}; (3) {repair}.',
|
|
1697
|
+
'engine.bootRefusal.waysOutFour': 'Ways out: (1) {newer} — {separate}; (2) {restore}; (3) {repair}; (4) {migration}.',
|
|
1630
1698
|
'engine.bootRefusal.who.sema': 'a newer sema',
|
|
1631
1699
|
'engine.bootRefusal.who.semaAtLeast': 'a newer sema (its engine is version {version} or later)',
|
|
1632
1700
|
'engine.bootRefusal.who.app': 'a newer version of this app',
|
|
@@ -1647,6 +1715,10 @@ const EN = {
|
|
|
1647
1715
|
'engine.bootRefusal.folder.default': 'the engine-data folder in your sema configuration folder',
|
|
1648
1716
|
'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}',
|
|
1649
1717
|
'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',
|
|
1718
|
+
'engine.bootRefusal.release.atLeast': 'a release whose engine is version {version} or later and still carries that migration',
|
|
1719
|
+
'engine.bootRefusal.release.any': 'a release that still carries that migration',
|
|
1720
|
+
'engine.bootRefusal.migration': 'if a line above says this data folder skipped a required one-time migration, start it once with {release}, let that start finish, then {again}',
|
|
1721
|
+
'engine.bootRefusal.migrationDeployment': 'if a line above says the data root skipped a required one-time migration, start the data root once with {release}, let that start finish, then start this build',
|
|
1650
1722
|
'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.",
|
|
1651
1723
|
'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.",
|
|
1652
1724
|
'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.",
|
|
@@ -1660,12 +1732,28 @@ const EN = {
|
|
|
1660
1732
|
'session.devices.repoint.refused.targetOccupied': 'Nothing was changed: this machine already has a different device record for the new address.',
|
|
1661
1733
|
'session.devices.repoint.refused.unarmed': 'Nothing was changed: this app is not set up to move the device record and its sessions.',
|
|
1662
1734
|
'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.',
|
|
1735
|
+
'attachments.outcome.attached.row': 'attached',
|
|
1736
|
+
'attachments.outcome.partial.row': 'only part of it was attached',
|
|
1737
|
+
'attachments.outcome.notAttached.row': 'not attached',
|
|
1738
|
+
'attachments.outcome.notAttachedDeclined.row': 'not attached — the extension {name} declined it',
|
|
1739
|
+
'attachments.outcome.refused.row': 'not attached — the engine refused the attachments of this message',
|
|
1740
|
+
'attachments.outcome.refusedNamed.row': 'not attached — the engine refused this attachment',
|
|
1741
|
+
'attachments.outcome.unknown.row': 'could not tell whether it was attached',
|
|
1663
1742
|
'attachments.withheld.toolsElsewhere.row': "the tools in this session do not work on this machine's files",
|
|
1664
1743
|
'attachments.withheld.toolsLocationUnconfirmed.row': "could not confirm that the tools in this session work on this machine's files",
|
|
1665
1744
|
'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",
|
|
1666
1745
|
'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",
|
|
1667
1746
|
'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.",
|
|
1747
|
+
'attachments.pathOverflow.seatCount.row': 'The engine was not asked to read this attachment itself: this message already names as many files as the engine reads for one message',
|
|
1748
|
+
'attachments.pathOverflow.linesInvalid.row': 'The engine was not asked to read this attachment itself: its line range is not valid (lines are numbered from 1, and a range cannot end before it starts)',
|
|
1749
|
+
'attachments.pathOverflow.pathInvalid.row': 'The engine was not asked to read this attachment itself: its path is empty or longer than the engine accepts',
|
|
1750
|
+
'attachments.pathPointer.model': 'The user attached {path} to this message.',
|
|
1668
1751
|
'session.compaction.canceled': 'Compaction canceled.',
|
|
1752
|
+
'session.compaction.notRunning.willRetry': 'Compaction did not take effect on this turn; it will be requested again with your next message.',
|
|
1753
|
+
'session.compaction.notRunning.final': 'Compaction did not take effect on this turn either, so nothing was compacted. If you still need it, request compaction again.',
|
|
1754
|
+
'session.subagent.editOutcomes.allApplied.one': 'Applied {count} file edit.',
|
|
1755
|
+
'session.subagent.editOutcomes.allApplied.other': 'Applied {count} file edits.',
|
|
1756
|
+
'session.subagent.editOutcomes.mixed': 'File edits: {attempted} attempted — {succeeded} applied, {refused} not run, {failed} failed.',
|
|
1669
1757
|
'localEngine.health.answer.unansweredTimeout': 'did not answer in time',
|
|
1670
1758
|
'localEngine.health.answer.unansweredNetwork': 'could not be reached',
|
|
1671
1759
|
'localEngine.health.answer.ok': 'answered with status "ok"',
|