@sema-agent/client-core 0.109.0 → 0.110.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 +173 -0
- package/README.md +46 -22
- package/dist/adapt/arms.js +20 -7
- package/dist/adapter/downstream/eventToSdkMessage.js +11 -6
- package/dist/declared/supportFloorDeclared.js +1 -1
- package/dist/displayUntrusted.js +132 -14
- package/dist/engineErrorCodes.d.ts +3 -0
- package/dist/engineErrorCodes.js +3 -0
- package/dist/engineHealthFacts.d.ts +9 -0
- package/dist/engineHealthFacts.js +21 -1
- package/dist/engineInlineTaskStats.d.ts +4 -3
- package/dist/engineInlineTaskStats.js +18 -2
- package/dist/engineNoticeCodes.d.ts +10 -0
- package/dist/engineNoticeCodes.js +33 -1
- package/dist/engineRepoint.d.ts +140 -0
- package/dist/engineRepoint.js +285 -0
- package/dist/engineRowRef.js +2 -0
- package/dist/engineSessionMessages.d.ts +2 -1
- package/dist/engineSessionMessages.js +5 -0
- package/dist/errorSupplementRoles.js +2 -1
- 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 +1 -0
- package/dist/generated/sdkFactTables.js +4 -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/approvalRequestFrameReading.d.ts +7 -0
- package/dist/hitl/approvalRequestFrameReading.js +11 -0
- package/dist/hitl/approvalResolution.d.ts +8 -1
- package/dist/hitl/approvalResolution.js +4 -0
- package/dist/hitl/askGateWire.js +0 -2
- package/dist/hitl/automaticAnswerVerdict.js +2 -2
- package/dist/hitl/decisionConflict.js +6 -3
- package/dist/hitl/decisionRefusal.js +1 -0
- package/dist/hitl/decisionSend.d.ts +3 -0
- package/dist/hitl/decisionSend.js +29 -11
- package/dist/hitl/editedApprovalAcceptance.d.ts +25 -0
- package/dist/hitl/editedApprovalAcceptance.js +26 -0
- package/dist/hitl/frameRouter.js +4 -18
- package/dist/hitl/gateLedger.d.ts +0 -4
- package/dist/hitl/gateLedger.js +0 -19
- package/dist/hitl/hitlBridge.d.ts +1 -0
- package/dist/hitl/hitlBridge.js +4 -4
- package/dist/hitl/hitlHostSurface.d.ts +1 -0
- package/dist/hitl/hitlHostSurface.js +7 -2
- package/dist/hitl/hostWithdrawal.d.ts +15 -0
- package/dist/hitl/hostWithdrawal.js +38 -0
- package/dist/hitl/parkResolver.js +25 -9
- package/dist/hitl/persistedRulesWire.js +2 -2
- package/dist/hitl/planReviewWire.js +14 -4
- package/dist/hitl/sessionPolicyWire.js +6 -4
- package/dist/hitl/standingRows.d.ts +1 -0
- package/dist/hitl/standingRows.js +15 -1
- package/dist/hitl/toolApprovalWire.d.ts +35 -8
- package/dist/hitl/toolApprovalWire.js +235 -33
- package/dist/hooksWireCaps.js +31 -1
- package/dist/hostTurnSettings.d.ts +10 -4
- package/dist/hostTurnSettings.js +112 -5
- package/dist/i18n/messages.en.d.ts +83 -0
- package/dist/i18n/messages.en.js +86 -2
- package/dist/i18n/messages.zh.js +96 -2
- package/dist/index.d.ts +21 -7
- package/dist/index.js +14 -4
- package/dist/inheritEnvCapability.js +2 -0
- package/dist/inputAuthor.d.ts +16 -0
- package/dist/inputAuthor.js +44 -0
- package/dist/interruptRefusalNote.d.ts +2 -0
- package/dist/interruptRefusalNote.js +17 -0
- package/dist/liveModelCatalog.d.ts +2 -0
- package/dist/liveModelCatalog.js +21 -7
- package/dist/liveQuestionStore.d.ts +4 -1
- package/dist/liveQuestionStore.js +12 -3
- 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 +121 -16
- package/dist/modelCapabilityProbe.js +4 -3
- package/dist/modsFace.d.ts +8 -1
- package/dist/modsFace.js +27 -0
- package/dist/notifications.d.ts +17 -6
- package/dist/notifications.js +67 -19
- package/dist/ownKey.d.ts +0 -5
- package/dist/ownKey.js +0 -7
- package/dist/peerFrames.d.ts +40 -2
- package/dist/peerFrames.js +158 -3
- package/dist/pluginHooksWire.d.ts +2 -1
- package/dist/pluginHooksWire.js +56 -1
- package/dist/replayBody.js +10 -2
- package/dist/request/taskRequest.d.ts +5 -0
- package/dist/request/taskRequest.js +138 -21
- 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/seam.d.ts +12 -1
- package/dist/seam.js +7 -1
- package/dist/seatContract.d.ts +86 -9
- package/dist/seatContract.js +196 -7
- package/dist/sessionBackground.js +2 -1
- package/dist/sessionBackgroundHandoff.js +2 -1
- package/dist/sessionEngine.d.ts +2 -0
- package/dist/sessionEngine.js +111 -0
- package/dist/sessionMemoryStatus.d.ts +2 -1
- package/dist/sessionSyncFileHistory.d.ts +4 -0
- package/dist/sessionSyncFileHistory.js +28 -0
- package/dist/sseIdleTriage.d.ts +13 -1
- package/dist/sseIdleTriage.js +24 -6
- package/dist/subagent/engineSubagentTail.js +6 -0
- package/dist/terminalStatuses.d.ts +1 -0
- package/dist/terminalStatuses.js +4 -1
- 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/wireFailureShape.d.ts +2 -5
- package/dist/wireFailureShape.js +10 -20
- package/dist/wireRefusalCopy.d.ts +10 -0
- package/dist/wireRefusalCopy.js +76 -0
- package/docs/INTEGRATION-CLIENTS.md +2126 -20
- package/package.json +3 -3
package/dist/i18n/messages.en.js
CHANGED
|
@@ -117,6 +117,7 @@ const EN = {
|
|
|
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
118
|
'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
119
|
'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',
|
|
120
|
+
'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
121
|
'session.devices.laneAbsent': 'This backend has no remote-control lane',
|
|
121
122
|
'session.devices.laneUnreported': "This backend doesn't report a remote-control lane",
|
|
122
123
|
'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 +131,24 @@ const EN = {
|
|
|
130
131
|
'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
132
|
'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
133
|
'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.',
|
|
134
|
+
'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.',
|
|
135
|
+
'session.mcpReconnect.unsupported': 'This engine does not support re-dialing an MCP server during a session; {server} was not re-dialed.',
|
|
136
|
+
'session.mcpReconnect.notFound': 'The engine did not find this session, so {server} was not re-dialed.',
|
|
137
|
+
'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.',
|
|
138
|
+
'session.mcpReconnect.failed': 'Could not re-dial {server} on the engine: the request did not complete.',
|
|
139
|
+
'session.mcpReconnect.noSession': 'There is no engine session yet, so {server} was not re-dialed on the engine.',
|
|
140
|
+
'session.mcpReconnect.unavailable': 'Re-dialing {server} on the engine is not available here.',
|
|
141
|
+
'session.mcpReconnect.accepted.one': 'MCP server {server} was re-dialed: {toolCount} tool mounted for this run ({added} added, {removed} removed)',
|
|
142
|
+
'session.mcpReconnect.accepted.other': 'MCP server {server} was re-dialed: {toolCount} tools mounted for this run ({added} added, {removed} removed)',
|
|
143
|
+
'session.mcpReconnect.refused.untouched': 'MCP server {server} was NOT re-dialed; its connection and tools were left untouched{why}',
|
|
144
|
+
'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}",
|
|
145
|
+
'session.mcpReconnect.refused.listed.one': 'MCP server {server} was NOT re-dialed; the engine reports {toolCount} tool for it after this attempt{why}',
|
|
146
|
+
'session.mcpReconnect.refused.listed.other': 'MCP server {server} was NOT re-dialed; the engine reports {toolCount} tools for it after this attempt{why}',
|
|
147
|
+
'session.mcpReconnect.undeclared': 'This run declared no MCP servers, so there is nothing to re-dial ({server} is not part of this run){why}',
|
|
148
|
+
'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.",
|
|
149
|
+
'session.mcpReconnect.reasonTail': ' — {reason}',
|
|
150
|
+
'session.mcpFailure.reauthorizeSuffix': ' (re-authorize)',
|
|
151
|
+
'session.mcpFailure.serverDownSuffix': ' (the server is down)',
|
|
133
152
|
'config.cloudLogin.accessDenied': 'Sign-in was declined.',
|
|
134
153
|
'config.cloudLogin.expiredToken': 'The sign-in code expired before it was approved — start again.',
|
|
135
154
|
'config.cloudLogin.invalidGrant': 'The Cloud sign-in can no longer be renewed — sign in again.',
|
|
@@ -252,6 +271,7 @@ const EN = {
|
|
|
252
271
|
'approval.settle.cause.streamDisconnected': 'the connection carrying this card dropped',
|
|
253
272
|
'approval.settle.cause.undeliverable': 'it could not be delivered to any approval surface',
|
|
254
273
|
'approval.resolution.engineUnavailable': 'The engine is temporarily unavailable — answer this once the engine is back.',
|
|
274
|
+
'approval.allowNote.notCarried': "This engine can't take a note on Yes — a note written here is not sent to the model.",
|
|
255
275
|
'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
276
|
'approval.decide.unboundWayOut.armed': 'it cannot be decided here — cancel the run or let the approval expire',
|
|
257
277
|
'approval.decide.unboundWayOut.none': 'it cannot be decided here — cancel the run (this approval has no expiry timer)',
|
|
@@ -261,6 +281,8 @@ const EN = {
|
|
|
261
281
|
'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
282
|
'approval.park.stillParked': '{gate} gate could not be answered: {reason} — the run is still parked on this approval.',
|
|
263
283
|
'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.',
|
|
284
|
+
'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.',
|
|
285
|
+
'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
286
|
'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
287
|
'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
288
|
'approval.policyDeny.denyRule': 'Permission for this tool use was denied by a deny rule in the permission settings. {tail}',
|
|
@@ -269,6 +291,8 @@ const EN = {
|
|
|
269
291
|
'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
292
|
'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
293
|
'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',
|
|
294
|
+
'approval.editRefusal.line': 'That approval was NOT sent: this request does not expose its tool arguments here, so an edited approval cannot be applied. ' +
|
|
295
|
+
'The request is still waiting — approve or deny it as it is.',
|
|
272
296
|
'approval.decision.settledElsewhereContrary.deniedFirst': 'This request was already answered elsewhere and denied, so your approval did not take effect.',
|
|
273
297
|
'approval.decision.settledElsewhereContrary.approvedFirst': 'This request was already answered elsewhere and approved, so your denial did not take effect.',
|
|
274
298
|
'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",
|
|
@@ -634,6 +658,8 @@ const EN = {
|
|
|
634
658
|
'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
659
|
'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
660
|
'session.hostSettings.styleSafeMode': 'Safe mode is on, so the output style from your settings is not applied.',
|
|
661
|
+
'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.',
|
|
662
|
+
'session.hostSettings.styleUnreadable': 'Your output style could not be read as text, so it is not applied to this request.',
|
|
637
663
|
'model.identity.lane.processEnv': 'the environment this client was started with',
|
|
638
664
|
'model.identity.lane.settingsEnv': "this client's settings file",
|
|
639
665
|
'model.identity.lane.modelCatalogFile': 'the local model catalog file',
|
|
@@ -675,7 +701,7 @@ const EN = {
|
|
|
675
701
|
'notice.durableGate.exit.other': 'To use durable approval, a checkpoint store has to be available.',
|
|
676
702
|
'notice.durableGate.exitAlt.forceDurableGate': 'Or ask whoever runs the deployment to drop the requirement for this account.',
|
|
677
703
|
'notice.durableGate.exitAlt.durableApproval': 'Or run the task where a live approver is attached.',
|
|
678
|
-
'notice.memory.sessionPolluted': '
|
|
704
|
+
'notice.memory.sessionPolluted': 'Memory for this session is marked externally exposed ({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
705
|
'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
706
|
'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
707
|
'notice.memory.harvestQuarantined.indexAlso': 'The memory index was also rolled back.',
|
|
@@ -708,6 +734,27 @@ const EN = {
|
|
|
708
734
|
'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
735
|
'notice.peer.inbound.other': '{subject} was reported with a disposition this version does not recognize.',
|
|
710
736
|
'notice.peer.inbound.cause': 'Cause: {cause}.',
|
|
737
|
+
'notice.sessionBox.peer.another': 'another session',
|
|
738
|
+
'notice.sessionBox.peer.anotherStart': 'Another session',
|
|
739
|
+
'notice.sessionBox.inbox.one': '1 cross-session message waiting',
|
|
740
|
+
'notice.sessionBox.inbox.many': '{pending} cross-session messages waiting',
|
|
741
|
+
'notice.sessionBox.inbox.urgent': '({urgent} urgent)',
|
|
742
|
+
'notice.sessionBox.inbox.resupplied': '(resupplied {resupplied})',
|
|
743
|
+
'notice.sessionBox.delivery.delivered': 'Your message to {peer} was delivered.',
|
|
744
|
+
'notice.sessionBox.delivery.held': "Your message to {peer} is waiting for that session's approval.",
|
|
745
|
+
'notice.sessionBox.delivery.heldByPolicy': "Your message to {peer} is held by that session's own settings; nobody there is asked to approve it.",
|
|
746
|
+
'notice.sessionBox.delivery.denied': 'Your message to {peer} was declined by that session.',
|
|
747
|
+
'notice.sessionBox.delivery.refused': '{peer} is not accepting cross-session messages; your message was not delivered.',
|
|
748
|
+
'notice.sessionBox.delivery.expired': 'Your message to {peer} expired before it was approved.',
|
|
749
|
+
'notice.sessionBox.delivery.dropped': 'Your message to {peer} was dropped ({reason}).',
|
|
750
|
+
'notice.sessionBox.delivery.droppedPlain': 'Your message to {peer} was dropped.',
|
|
751
|
+
'notice.sessionBox.delivery.other': 'There is a delivery update for your message to {peer}.',
|
|
752
|
+
'notice.sessionBox.idle.finished': '{peer} finished its turn.',
|
|
753
|
+
'notice.sessionBox.idle.finishedDetail': '{peer} finished its turn: {detail}',
|
|
754
|
+
'notice.sessionBox.idle.exited': '{peer} has exited.',
|
|
755
|
+
'notice.sessionBox.idle.unavailable': '{peer} is unavailable.',
|
|
756
|
+
'notice.sessionBox.idle.expired': '{peer} did not answer before the wait ran out.',
|
|
757
|
+
'notice.sessionBox.idle.other': 'There is a status update from {peer}.',
|
|
711
758
|
'notice.peer.held.deliveredApproved': '{subject} was approved and delivered.',
|
|
712
759
|
'notice.peer.held.deliveredRejudged': '{subject} was re-judged and delivered, because the policy now accepts it.',
|
|
713
760
|
'notice.peer.held.droppedRejudged': '{subject} was approved, but the policy now refuses it, so it was dropped.',
|
|
@@ -736,6 +783,7 @@ const EN = {
|
|
|
736
783
|
'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
784
|
'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
785
|
'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.",
|
|
786
|
+
'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
787
|
'rules.refusal.sentence.one': 'permissions: 1 rule will not be enforced — {list}',
|
|
740
788
|
'rules.refusal.sentence.other': 'permissions: {count} rules will not be enforced — {list}',
|
|
741
789
|
'rules.refusal.item': '{rule} ({reason})',
|
|
@@ -818,6 +866,10 @@ const EN = {
|
|
|
818
866
|
'session.steerRefusal.advice': '{happened} — {nextStep}',
|
|
819
867
|
'session.steerRefusal.hostQueue.queued': 'it stays queued and will be submitted as-is when this turn ends',
|
|
820
868
|
'session.steerRefusal.hostQueue.dropped': 'it was not kept; {nextStep}',
|
|
869
|
+
'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',
|
|
870
|
+
'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',
|
|
871
|
+
'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',
|
|
872
|
+
'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
873
|
'session.permissionModeSwitch.applied': 'The running turn now uses the {mode} permission mode.',
|
|
822
874
|
'session.permissionModeSwitch.folded': 'The running turn now uses the {mode} permission mode instead of the one you chose — {reason}.',
|
|
823
875
|
'session.permissionModeSwitch.reason.entryFloor': 'this deployment does not allow a looser mode than its floor',
|
|
@@ -954,6 +1006,8 @@ const EN = {
|
|
|
954
1006
|
'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
1007
|
'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
1008
|
'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.',
|
|
1009
|
+
'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.',
|
|
1010
|
+
'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
1011
|
'notice.failure.quota.fiveHour': 'Your 5-hour quota is used up',
|
|
958
1012
|
'notice.failure.quota.weekly': 'Your weekly quota is used up',
|
|
959
1013
|
'notice.failure.quota.budgetPersonal': 'Your personal budget is used up',
|
|
@@ -1108,6 +1162,16 @@ const EN = {
|
|
|
1108
1162
|
'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
1163
|
'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
1164
|
'notice.wireRefusal.runConcurrencyCap.unknownWait': 'Send it again once one of the runs in flight has finished',
|
|
1165
|
+
'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',
|
|
1166
|
+
'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',
|
|
1167
|
+
'notice.wireRefusal.unreadMembers.where': 'Where: {where}',
|
|
1168
|
+
'notice.wireRefusal.unreadMembers.remedy': 'Send the request again with that part in the current form',
|
|
1169
|
+
'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',
|
|
1170
|
+
'notice.wireRefusal.unreadMembers.part.settingsHooks': 'hook settings',
|
|
1171
|
+
'notice.wireRefusal.unreadMembers.part.settingsEnv': 'environment variables',
|
|
1172
|
+
'notice.wireRefusal.unreadMembers.part.settingsOther': 'a setting',
|
|
1173
|
+
'notice.wireRefusal.unreadMembers.part.mcpTransport': "an MCP server's connection settings",
|
|
1174
|
+
'notice.wireRefusal.unreadMembers.part.a2aHeaders': "an A2A peer's request headers",
|
|
1111
1175
|
'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
1176
|
'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
1177
|
'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 +1233,20 @@ const EN = {
|
|
|
1169
1233
|
'session.subagent.delegatedPrompt.absence.forbidden': "This subagent's prompt cannot be shown: the engine refused access to its conversation.",
|
|
1170
1234
|
'session.subagent.delegatedPrompt.absence.promptAbsent': "This subagent's conversation was read, but it holds no delegated prompt to show.",
|
|
1171
1235
|
'session.subagent.delegatedPrompt.absence.unknown': "This subagent's prompt could not be read just now.",
|
|
1236
|
+
'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.',
|
|
1237
|
+
'rules.sessionPolicy.remove.loosenForbidden': '{stem} Ask an operator to remove them, or continue in a new session.',
|
|
1172
1238
|
'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
1239
|
'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
1240
|
'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': '
|
|
1241
|
+
'rules.sessionPolicy.deployment.noOperator.removeLoosenForbidden': '{stem} This deployment has no operator to remove them. Continue in a new session.',
|
|
1176
1242
|
'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
1243
|
'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
1244
|
'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
1245
|
'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
1246
|
'config.hooks.plan.disableAllHooks': 'All hooks are turned off by managed settings (disableAllHooks).',
|
|
1247
|
+
'config.hooks.plan.reason.closedUntrusted': 'this workspace is not trusted, so no hooks run in it',
|
|
1248
|
+
'config.hooks.plan.reason.closedGovernanceUnreadable': 'the managed policy could not be read, so no hooks run this turn',
|
|
1249
|
+
'config.hooks.plan.reason.closedDisableAll': 'managed settings turn off all hooks (disableAllHooks)',
|
|
1181
1250
|
'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
1251
|
'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
1252
|
'config.hooks.plan.keyNotRead.more': '{shown} and {rest} more',
|
|
@@ -1224,8 +1293,11 @@ const EN = {
|
|
|
1224
1293
|
'config.mods.loader.failed': '{name} could not be loaded: {reason}',
|
|
1225
1294
|
'config.mods.loader.failedNoReason': '{name} could not be loaded',
|
|
1226
1295
|
'config.mods.refusal.by': 'Refused by {by}',
|
|
1296
|
+
'config.mods.request.by': 'Requested by {by}',
|
|
1227
1297
|
'config.mods.rewrite.resultInPlace': 'Answered by {by} in place of the tool',
|
|
1228
1298
|
'config.mods.rewrite.inputBy': 'Arguments changed by {by} before the call was let through',
|
|
1299
|
+
'config.mods.session.unreadable': "The mods used by this conversation's last run couldn't be read",
|
|
1300
|
+
'config.mods.session.unarmed': 'Mods show up here once this conversation has run on this engine',
|
|
1229
1301
|
'follow.notFollowed.headRun': 'This screen is no longer following run {taskId}{reason}{ending}{exit}',
|
|
1230
1302
|
'follow.notFollowed.headTurn': "This screen is no longer following this turn's run{reason}{ending}{exit}",
|
|
1231
1303
|
'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.",
|
|
@@ -1337,5 +1409,17 @@ const EN = {
|
|
|
1337
1409
|
'localEngine.restartOutcome.pendingBusy': 'Other sessions are using the local engine; it restarts once nothing is using it.',
|
|
1338
1410
|
'localEngine.restartOutcome.failedPrepare': 'The local engine was not restarted; the current engine keeps running.',
|
|
1339
1411
|
'localEngine.restartOutcome.failedDown': 'The local engine could not be restarted: {detail}',
|
|
1412
|
+
'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.",
|
|
1413
|
+
'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.",
|
|
1414
|
+
'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.",
|
|
1415
|
+
'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.',
|
|
1416
|
+
'session.devices.repoint.storeFailed': "The device record could not be moved, so nothing was changed. Run the command again; if it keeps failing, enroll this machine again at the engine's own address.",
|
|
1417
|
+
'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).',
|
|
1418
|
+
'session.devices.repoint.refused.sameAddress': 'Nothing was changed: the new address is the same engine address as the old one.',
|
|
1419
|
+
'session.devices.repoint.refused.recordAbsent': 'Nothing was changed: this machine has no device record for the old address.',
|
|
1420
|
+
'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.",
|
|
1421
|
+
'session.devices.repoint.refused.recordUnreadable': 'Nothing was changed: a device record could not be read, so it was left alone.',
|
|
1422
|
+
'session.devices.repoint.refused.targetOccupied': 'Nothing was changed: this machine already has a different device record for the new address.',
|
|
1423
|
+
'session.devices.repoint.refused.unarmed': 'Nothing was changed: this app is not set up to move the device record and its sessions.',
|
|
1340
1424
|
};
|
|
1341
1425
|
export const EN_MESSAGES = Object.freeze(EN);
|
package/dist/i18n/messages.zh.js
CHANGED
|
@@ -117,6 +117,7 @@ const ZH = {
|
|
|
117
117
|
'model.subagent.ambiguous': '子代理模型 {word} 同时对上了几个只差大小写的模型名 —— 请照原样拼写;子代理将沿用父代理的模型。',
|
|
118
118
|
'model.catalogDefault.refused.named': '不点名模型的任务会被拒:引擎从它的模型配置里解析不出缺省模型(设置里的缺省是 {name}) · 设一个引擎跑得了的缺省模型,或添加 / 修好一个',
|
|
119
119
|
'model.catalogDefault.refused.select': '不点名模型的任务会被拒:引擎从它的模型配置里解析不出缺省模型(设置里的缺省是挑选条件) · 改挑选条件,或添加 / 修好一个引擎跑得了的模型',
|
|
120
|
+
'session.sync.pushRowBitsWriterSide': '会话已推送 · 它在目的端是只读镜像,标题与置顶由写入它的那一端持有,这一次没有在目的端更改',
|
|
120
121
|
'session.devices.laneAbsent': '这个后端没有远程控制车道',
|
|
121
122
|
'session.devices.laneUnreported': '这个后端没有报告远程控制车道',
|
|
122
123
|
'session.devices.verbsOff': '这个后端的设备车道开着,但设备管理动作关着 —— 这里列不出也改不了设备',
|
|
@@ -130,6 +131,24 @@ const ZH = {
|
|
|
130
131
|
'session.engine.dispatch.scopeUnproven': '确认不了你当前的登录能到达这只会话所在的引擎,什么都没发。先登录那台引擎所在的空间(或直接连上那台引擎),再试一次。',
|
|
131
132
|
'session.engine.dispatch.unresolved': '这只会话所在的引擎还不知道,什么都没发。先为这只会话选一次引擎,再试一次。',
|
|
132
133
|
'session.engine.dispatch.sessionAmbiguous': '这个会话同时登记在两台引擎上,先停下不发 —— 请先确认它属于哪一台。',
|
|
134
|
+
'session.mcpReconnect.notRunning': '这只会话此刻在这台引擎上没有存活的任务(可能在等你回答、已经结束,或在别处运行),所以没有重连 {server};之后启动或恢复的任务会重新连接它声明的服务器。',
|
|
135
|
+
'session.mcpReconnect.unsupported': '这台引擎不支持在会话进行中重连 MCP 服务器,所以没有重连 {server}。',
|
|
136
|
+
'session.mcpReconnect.notFound': '引擎没有找到这个会话,所以没有重连 {server}。',
|
|
137
|
+
'session.mcpReconnect.invalid': '重连 {server} 的请求不合规(会话标识或服务器名称不可用),所以没有重连。',
|
|
138
|
+
'session.mcpReconnect.failed': '没能在引擎上重连 {server}:请求没有完成。',
|
|
139
|
+
'session.mcpReconnect.noSession': '还没有引擎会话,所以没有在引擎上重连 {server}。',
|
|
140
|
+
'session.mcpReconnect.unavailable': '这里不能在引擎上重连 {server}。',
|
|
141
|
+
'session.mcpReconnect.accepted.one': 'MCP 服务器 {server} 已重连:为这次运行挂载了 {toolCount} 个工具(新增 {added} 个,移除 {removed} 个)',
|
|
142
|
+
'session.mcpReconnect.accepted.other': 'MCP 服务器 {server} 已重连:为这次运行挂载了 {toolCount} 个工具(新增 {added} 个,移除 {removed} 个)',
|
|
143
|
+
'session.mcpReconnect.refused.untouched': 'MCP 服务器 {server} 没有重连,它的连接和工具原样未动{why}。',
|
|
144
|
+
'session.mcpReconnect.refused.noTools': 'MCP 服务器 {server} 没有重连;这次运行的工具列表里此刻没有它的工具(重连失败,或这次运行的工具设置没放行它的任何工具){why}。',
|
|
145
|
+
'session.mcpReconnect.refused.listed.one': 'MCP 服务器 {server} 没有重连;这次尝试之后,引擎报告它有 {toolCount} 个工具{why}。',
|
|
146
|
+
'session.mcpReconnect.refused.listed.other': 'MCP 服务器 {server} 没有重连;这次尝试之后,引擎报告它有 {toolCount} 个工具{why}。',
|
|
147
|
+
'session.mcpReconnect.undeclared': '这次运行没有声明任何 MCP 服务器,所以没有可重连的对象({server} 不属于这次运行){why}。',
|
|
148
|
+
'session.mcpReconnect.unsettled': 'MCP 重连在本次请求愿意等待的时间内没有落定,所以还没有结果:重连没有被取消,可能仍在进行。再次重连这台服务器前,请先确认它的状态——拨号落定之后再发一次请求,会先关闭连接、再重新拨号。',
|
|
149
|
+
'session.mcpReconnect.reasonTail': ' —— {reason}',
|
|
150
|
+
'session.mcpFailure.reauthorizeSuffix': '(需要重新授权)',
|
|
151
|
+
'session.mcpFailure.serverDownSuffix': '(服务器不可用)',
|
|
133
152
|
'config.cloudLogin.accessDenied': '登录被拒绝了。',
|
|
134
153
|
'config.cloudLogin.expiredToken': '登录码在批准之前过期了 —— 请重新开始。',
|
|
135
154
|
'config.cloudLogin.invalidGrant': 'Cloud 登录已无法续期 —— 请重新登录。',
|
|
@@ -252,6 +271,7 @@ const ZH = {
|
|
|
252
271
|
'approval.settle.cause.streamDisconnected': '承载这张卡的连接断了',
|
|
253
272
|
'approval.settle.cause.undeliverable': '它没能送达任何审批界面',
|
|
254
273
|
'approval.resolution.engineUnavailable': '引擎暂不可用 —— 待引擎回来再答。',
|
|
274
|
+
'approval.allowNote.notCarried': '这台引擎不能在「Yes」上附带备注 —— 写在这里的备注不会送达模型。',
|
|
255
275
|
'approval.decide.requiresBinding': '这次决定没有带上把它绑到审批卡上那个具体动作的绑定,引擎拒绝了 · 什么都没有决定,这条审批仍在等待 · 请重新获取待决审批,按现在列出的那张卡再决定;如果列出的卡本身就没有绑定,{wayOut}',
|
|
256
276
|
'approval.decide.unboundWayOut.armed': '这里决不了 —— 取消这次运行,或等这条审批过期',
|
|
257
277
|
'approval.decide.unboundWayOut.none': '这里决不了 —— 取消这次运行(这条审批没有到期计时)',
|
|
@@ -261,6 +281,8 @@ const ZH = {
|
|
|
261
281
|
'approval.rowUnresumable.askNotSurfaced': '这条待决行(任务 {taskId})这台引擎续不了,所以没有呈成可作答的卡:{sentence}',
|
|
262
282
|
'approval.park.stillParked': '{gate} 这道门没能作答:{reason} —— 这一跑仍停在这条审批上。',
|
|
263
283
|
'approval.park.refusedNotResumable': '{gate} 这道门没能作答:{reason} —— 这台引擎目前续不了这条审批;若这一跑仍停着,请取消它。',
|
|
284
|
+
'approval.park.resume.card': '{gate} 这道门没能作答:{reason} —— 这一跑仍停在这条审批上:卡再次出现时在卡上决,或取消这一跑。',
|
|
285
|
+
'approval.park.resume.speak': '{gate} 这道门没能作答:{reason} —— 这一跑仍停在这条审批上:发一句话把这张卡重新打开,再在卡上决,或取消这一跑。',
|
|
264
286
|
'approval.park.argsFromModelCall': '这条待决审批的记录里没有将执行的工具入参,下面显示的是对话里模型的原始调用 —— 若它在那之后被改写过(例如被钩子),实际执行的会与所见不同。这张卡不接受编辑后批准:所见入参不是将执行的那一份',
|
|
265
287
|
'approval.park.questionsFromModelCall': '这条待决审批的记录里没有可呈现的问题,下面显示的是对话里模型的原始调用 —— 若它在那之后被改写过(例如被钩子),引擎实际在问的问题会与所见不同',
|
|
266
288
|
'approval.policyDeny.denyRule': '这次工具调用被权限设置里的拒绝规则拒绝了。{tail}',
|
|
@@ -269,6 +291,7 @@ const ZH = {
|
|
|
269
291
|
'approval.policyDeny.tail': '该操作没有执行。不要声称它已成功,也不要在本会话里重试 —— 请向用户说明这一限制,或建议别的做法。',
|
|
270
292
|
'approval.decision.grantChanged': '引擎拒收了这次批准:它绑定的技能授予在卡呈出之后已经变了 · 什么都没有决定,这一请求仍在等待,但再批一次会以同样的理由被拒 · 请拒绝这一请求,让模型重新激活那个技能',
|
|
271
293
|
'approval.decision.answerInvalid': '引擎拒收了这次回答本身:它与所问的问题对不上 · 什么都没有决定,这一问仍在等待 · 请改正回答后重新发送',
|
|
294
|
+
'approval.editRefusal.line': '这次批准没有发出:这条请求在此处看不到工具入参,所以收不了改写后的批准。原卡照旧在等你决断——请按原样批准或拒绝。',
|
|
272
295
|
'approval.decision.settledElsewhereContrary.deniedFirst': '这一请求已在别处被答复为拒绝,你的批准没有生效。',
|
|
273
296
|
'approval.decision.settledElsewhereContrary.approvedFirst': '这一请求已在别处被答复为批准,你的拒绝没有生效。',
|
|
274
297
|
'approval.decision.unconfirmedAfterRetry': '不知道你的答复有没有生效:之前那一发没有得到确认,重发时这一请求已不在等待 · 动手之前先看任务当前的状态',
|
|
@@ -634,6 +657,8 @@ const ZH = {
|
|
|
634
657
|
'session.hostSettings.heldPrevious': '刚才有一份设置文件没能完整读出(可能正在保存),所以仍按上一次完整读到的权限规则执行。',
|
|
635
658
|
'session.hostSettings.styleMissing': '设置里选中的输出风格「{name}」找不到或读不出,这一次请求不套用它。',
|
|
636
659
|
'session.hostSettings.styleSafeMode': '安全模式已开启,设置里的输出风格不套用。',
|
|
660
|
+
'session.hostSettings.styleOversize': '你的输出风格这一次请求没有套用:加上内置的产品背景说明后超过了 {limit} 个字符的上限。请缩短风格正文后再用。',
|
|
661
|
+
'session.hostSettings.styleUnreadable': '输出风格的正文读不成文本,这一次请求不套用它。',
|
|
637
662
|
'model.identity.lane.processEnv': '本客户端启动时的环境',
|
|
638
663
|
'model.identity.lane.settingsEnv': '本客户端的设置文件',
|
|
639
664
|
'model.identity.lane.modelCatalogFile': '本地模型目录文件',
|
|
@@ -675,7 +700,7 @@ const ZH = {
|
|
|
675
700
|
'notice.durableGate.exit.other': '要使用持久审批,需要有可用的检查点存储。',
|
|
676
701
|
'notice.durableGate.exitAlt.forceDurableGate': '或者请运维这套部署的人撤掉对这个账号的此项要求。',
|
|
677
702
|
'notice.durableGate.exitAlt.durableApproval': '或者让这个任务在有实时审批人的地方运行。',
|
|
678
|
-
'notice.memory.sessionPolluted': '
|
|
703
|
+
'notice.memory.sessionPolluted': '本会话的记忆已标记为暴露于外部({reason})。从现在起,它写入的记忆可能被扣下候审,而不是存入长期记忆库;每一批实际扣下了什么,会另行通知。',
|
|
679
704
|
'notice.memory.harvestQuarantined.counts': '记忆收集把本会话写入或修改的条目文件扣下了,没有加入长期记忆库 —— 扣下 {count} 个,移到一旁候审 {moved} 个,需要跟进 {escalated} 个;后两个数字可能有重叠。',
|
|
680
705
|
'notice.memory.harvestQuarantined.indexOnly': '记忆收集把本会话对记忆索引的改动回滚到了原样;没有条目文件被扣下。',
|
|
681
706
|
'notice.memory.harvestQuarantined.indexAlso': '记忆索引也已回滚。',
|
|
@@ -708,6 +733,27 @@ const ZH = {
|
|
|
708
733
|
'notice.peer.inbound.resupplyExhausted': '{subject}:模型可能从未读到它 —— 上下文压缩两次把它从模型的上下文里丢掉,发送方也没有被告知。',
|
|
709
734
|
'notice.peer.inbound.other': '{subject}:本版本认不出引擎报告的处置方式。',
|
|
710
735
|
'notice.peer.inbound.cause': '原因:{cause}。',
|
|
736
|
+
'notice.sessionBox.peer.another': '另一个会话',
|
|
737
|
+
'notice.sessionBox.peer.anotherStart': '另一个会话',
|
|
738
|
+
'notice.sessionBox.inbox.one': '有 1 条跨会话消息待读',
|
|
739
|
+
'notice.sessionBox.inbox.many': '有 {pending} 条跨会话消息待读',
|
|
740
|
+
'notice.sessionBox.inbox.urgent': '(其中 {urgent} 条紧急)',
|
|
741
|
+
'notice.sessionBox.inbox.resupplied': '(补投 {resupplied} 条)',
|
|
742
|
+
'notice.sessionBox.delivery.delivered': '你发给 {peer} 的消息已送达。',
|
|
743
|
+
'notice.sessionBox.delivery.held': '你发给 {peer} 的消息正在等待对方会话批准。',
|
|
744
|
+
'notice.sessionBox.delivery.heldByPolicy': '你发给 {peer} 的消息被对方会话自身的设置暂扣,对方没有人被请求批准它。',
|
|
745
|
+
'notice.sessionBox.delivery.denied': '你发给 {peer} 的消息被对方会话拒绝了。',
|
|
746
|
+
'notice.sessionBox.delivery.refused': '{peer} 不接收跨会话消息,你的消息没有送达。',
|
|
747
|
+
'notice.sessionBox.delivery.expired': '你发给 {peer} 的消息在获批前已过期。',
|
|
748
|
+
'notice.sessionBox.delivery.dropped': '你发给 {peer} 的消息被丢弃了({reason})。',
|
|
749
|
+
'notice.sessionBox.delivery.droppedPlain': '你发给 {peer} 的消息被丢弃了。',
|
|
750
|
+
'notice.sessionBox.delivery.other': '你发给 {peer} 的消息有新的投递状态。',
|
|
751
|
+
'notice.sessionBox.idle.finished': '{peer} 已结束本轮。',
|
|
752
|
+
'notice.sessionBox.idle.finishedDetail': '{peer} 已结束本轮:{detail}',
|
|
753
|
+
'notice.sessionBox.idle.exited': '{peer} 已退出。',
|
|
754
|
+
'notice.sessionBox.idle.unavailable': '{peer} 不可用。',
|
|
755
|
+
'notice.sessionBox.idle.expired': '{peer} 在等待结束前没有应答。',
|
|
756
|
+
'notice.sessionBox.idle.other': '{peer} 有新的状态通知。',
|
|
711
757
|
'notice.peer.held.deliveredApproved': '{subject} 已获批准并送达。',
|
|
712
758
|
'notice.peer.held.deliveredRejudged': '{subject} 经重新判断后送达,因为策略现在接受它。',
|
|
713
759
|
'notice.peer.held.droppedRejudged': '{subject} 曾获批准,但策略现在拒绝它,所以被丢弃了。',
|
|
@@ -736,6 +782,7 @@ const ZH = {
|
|
|
736
782
|
'notice.task.lateApproval': '你对"{tool}"的批准没有被采用:一次运行或回合中断在你的决定落地之前就放掉了这个请求,所以这个工具没有运行,你的答复也没有结算任何东西。这只是时序上的事实,不是错误;如果还需要那一步,请再问一次。',
|
|
737
783
|
'notice.task.haltUnconsumed': '你的停止请求没有切断任何东西:它到达时这次运行已经因自身原因在收尾,所以它没有停下任何东西,以这次运行自己的结局为准。',
|
|
738
784
|
'notice.steering.parkedInputBlocked': '你在这次运行暂停期间发出的一条指令,在运行恢复时被拦下了:这套部署的输入筛查把它扣住,所以它没有到达模型。如果仍然适用,请再发一次。',
|
|
785
|
+
'notice.model.capabilityDowngraded.image': '这段对话里的图片没有发给 {model}:它的目录条目声明了不收图片输入,所以每张图只以一行占位说明的形式到达它。如果它其实能看图,请在该模型条目里声明(input: ["text", "image"]);否则请换一个能看图的模型。',
|
|
739
786
|
'rules.refusal.sentence.one': '权限:有 1 条规则不会被执行 —— {list}',
|
|
740
787
|
'rules.refusal.sentence.other': '权限:有 {count} 条规则不会被执行 —— {list}',
|
|
741
788
|
'rules.refusal.item': '{rule}({reason})',
|
|
@@ -818,6 +865,10 @@ const ZH = {
|
|
|
818
865
|
'session.steerRefusal.advice': '{happened} —— {nextStep}',
|
|
819
866
|
'session.steerRefusal.hostQueue.queued': '它留在队列里,在这个 turn 结束时会原样提交',
|
|
820
867
|
'session.steerRefusal.hostQueue.dropped': '它没有被保留;{nextStep}',
|
|
868
|
+
'session.interruptRefusal.nothingInFlight': '这次打断没有被接受:这条 run 正在等待一个待决的决定,所以没有在飞的一轮可以切 · run 本身没有变化,仍在等待 · 要结束它,请停止整条 run;要给它留一条消息,直接发送 —— 消息会在 run 继续时送达',
|
|
869
|
+
'session.interruptRefusal.notHeld': '这次打断没有被接受:这台服务器上没有这条 run 可以切的在飞一轮 —— 这条 run 可能在另一台服务器上运行,或走的是没有在飞一轮的路径 · run 本身没有变化 · 要结束它,请停止整条 run',
|
|
870
|
+
'session.interruptRefusal.notRunning': '这次打断没有被接受:这条 run 已经不在运行 —— 它刚刚结束,或已不再接受打断 · 没有切掉任何东西,也没有改变任何东西 · 动手之前先看一下它当前的状态',
|
|
871
|
+
'session.interruptRefusal.unrecognised': '这次打断没有被接受,原因这一版认不出来 · 不要假定这条 run 已经停了,或有哪一轮被切掉了 · 请看一下它当前的状态;如果反复出现,请反馈错误码(如果引擎给了的话)',
|
|
821
872
|
'session.permissionModeSwitch.applied': '正在跑的这一轮现在用 {mode} 权限模式。',
|
|
822
873
|
'session.permissionModeSwitch.folded': '正在跑的这一轮现在用 {mode} 权限模式,不是你选的那一档 —— {reason}。',
|
|
823
874
|
'session.permissionModeSwitch.reason.entryFloor': '这台部署不允许比它的下限更宽松的模式',
|
|
@@ -954,6 +1005,8 @@ const ZH = {
|
|
|
954
1005
|
'notice.failure.headline.parked': '事件流结束时这次 run 还没到终态 —— 这次 run 很可能是 parked 在等一个决断,而不是崩溃了。请查看它的状态并处理待决的事项;这个 turn 没有在这里完成。',
|
|
955
1006
|
'notice.failure.headline.internal': '这个客户端遇到了内部错误 —— 这是客户端的 bug,不是引擎故障,这个 turn 没有完成。',
|
|
956
1007
|
'notice.failure.headline.causeUnreadable': '这次失败的原因读不出(错误对象有一部分不可读)—— 不知道引擎是否收到了你的消息。重新发送之前,请先查看这次 run 的状态,或者重新接上它。',
|
|
1008
|
+
'notice.streamEnded.emptyLegs.headline': '事件流连着两次打开都没收到任何内容,结束时这次 run 还没到终态 —— 这次 run 很可能是 parked 在等一个决断,而不是崩溃了。请查看它的状态并处理待决的事项;这个 turn 没有在这里完成。',
|
|
1009
|
+
'notice.streamEnded.consecutiveFailures.headline': '事件流一直断在没有进展的地方,客户端已经不再重新打开它 —— 不知道这次 run 是仍在运行,还是在等一个决断。重新发送之前,请先查看它的状态,或者重新接上它;这个 turn 没有在这里完成。',
|
|
957
1010
|
'notice.failure.quota.fiveHour': '你的 5 小时额度已用完',
|
|
958
1011
|
'notice.failure.quota.weekly': '你的每周额度已用完',
|
|
959
1012
|
'notice.failure.quota.budgetPersonal': '你的个人预算已用完',
|
|
@@ -1108,6 +1161,16 @@ const ZH = {
|
|
|
1108
1161
|
'notice.wireRefusal.sessionIdRetired.folded': '这件停驻的工作无法继续:它的会话 id 属于这台服务端上一只已删除的会话,这个 id 下的工作现在只为那只会话原来的属主运行;什么都没有续跑,这张卡仍在等待',
|
|
1109
1162
|
'notice.wireRefusal.runConcurrencyCap.head': '这个部署在飞的运行已达到它允许的数量,所以引擎没有受理这个请求 · 请求本身没有任何问题',
|
|
1110
1163
|
'notice.wireRefusal.runConcurrencyCap.unknownWait': '请等在飞的运行有一条结束后再发送',
|
|
1164
|
+
'notice.wireRefusal.unreadMembers': '引擎没有受理这个请求:它带着{part},这个版本的服务端读不出原样的写法,照它跑会悄悄把这一部分漏掉',
|
|
1165
|
+
'notice.wireRefusal.unreadMembers.folded': '这件停驻的工作无法继续:为它保存的请求带着{part},这个版本的服务端读不出原样的写法,续跑会悄悄把这一部分漏掉;什么都没有续跑,这张卡仍在等待',
|
|
1166
|
+
'notice.wireRefusal.unreadMembers.where': '位置:{where}',
|
|
1167
|
+
'notice.wireRefusal.unreadMembers.remedy': '请把这一部分改成当前的写法后重新发送请求',
|
|
1168
|
+
'notice.wireRefusal.unreadMembers.folded.remedy': '若这件工作仍停驻着,请先取消它,然后作为新请求重新提交,并把这一部分改成当前的写法',
|
|
1169
|
+
'notice.wireRefusal.unreadMembers.part.settingsHooks': '钩子设置',
|
|
1170
|
+
'notice.wireRefusal.unreadMembers.part.settingsEnv': '环境变量',
|
|
1171
|
+
'notice.wireRefusal.unreadMembers.part.settingsOther': '一项设置',
|
|
1172
|
+
'notice.wireRefusal.unreadMembers.part.mcpTransport': '某个 MCP 服务的连接设置',
|
|
1173
|
+
'notice.wireRefusal.unreadMembers.part.a2aHeaders': '某个 A2A 对端的请求头',
|
|
1111
1174
|
'notice.wireRefusal.unsupportedRule': '引擎拒绝了这个请求,所以其中任何内容都没有生效:里面有一条规则是引擎不支持的写法 —— {detail} · 请删掉或改写那条规则(要整只拦下一个工具,请只写工具名),再重新发送',
|
|
1112
1175
|
'notice.wireRefusal.unsupportedRule.other': '引擎拒绝了这个请求,所以其中任何内容都没有生效:里面有 {count} 条规则是引擎不支持的写法 —— {detail} · 请删掉或改写这些规则(要整只拦下一个工具,请只写工具名),再重新发送',
|
|
1113
1176
|
'notice.wireRefusal.unsupportedRule.stored': '引擎拒绝继续这件工作:为它保存的请求里有一条规则是引擎不支持的写法 —— {detail} · 它无法按保存的样子继续。请删掉或改写那条规则(要整只拦下一个工具,请只写工具名);若这件工作仍停驻着,请先取消它,然后作为新请求重新提交',
|
|
@@ -1169,15 +1232,20 @@ const ZH = {
|
|
|
1169
1232
|
'session.subagent.delegatedPrompt.absence.forbidden': '这个子代的 prompt 显示不了:引擎不允许读取它的对话。',
|
|
1170
1233
|
'session.subagent.delegatedPrompt.absence.promptAbsent': '读到了这个子代的对话,但里面没有可显示的委派 prompt。',
|
|
1171
1234
|
'session.subagent.delegatedPrompt.absence.unknown': '这个子代的 prompt 这次读取不到。',
|
|
1235
|
+
'rules.sessionPolicy.remove.loosenForbiddenStem': '引擎拒绝把这些条目从这个会话的规则记录里拿掉,所以记录没有变:引擎把其中至少一条算作运维方写下的、而不是会话属主自己加的,而属主只能撤自己加的条目。',
|
|
1236
|
+
'rules.sessionPolicy.remove.loosenForbidden': '{stem}请让运维方来撤,或者在新会话里继续。',
|
|
1172
1237
|
'rules.sessionPolicy.tighten.unknown.sessionOwnerless.noIdentity': '这个会话没有属主,为它写的规则之后永远读不回来;没有写入任何内容。',
|
|
1173
1238
|
'rules.sessionPolicy.tighten.unknown.storeCorrupt.noOperator': '引擎确认不了这个会话的规则当前在哪一版,拒绝盖新版本,所以没有写入任何内容。送去的条目没有问题 —— 这台部署没有运维方可以查看规则库,要由运行它的人处理。',
|
|
1174
1239
|
'rules.sessionPolicy.deployment.noOperator.readStoreCorrupt': '引擎确认不了这个会话的规则当前在哪一版,所以没有交出这份记录。这台部署没有运维方可以查看规则库,要由运行它的人处理。',
|
|
1175
|
-
'rules.sessionPolicy.deployment.noOperator.removeLoosenForbidden': '
|
|
1240
|
+
'rules.sessionPolicy.deployment.noOperator.removeLoosenForbidden': '{stem}这台部署没有运维方来撤。请在新会话里继续。',
|
|
1176
1241
|
'rules.sessionPolicy.deployment.noOperator.removeReadStoreCorrupt': '引擎确认不了这个会话的规则当前在哪一版,所以没有改动任何内容。这台部署没有运维方可以查看规则库,要由运行它的人处理。',
|
|
1177
1242
|
'rules.sessionPolicy.deployment.noOperator.removeWriteStoreCorrupt': '引擎确认不了这个会话的规则当前在哪一版,拒绝盖新版本,所以没有改动任何内容。这台部署没有运维方可以查看规则库,要由运行它的人处理。',
|
|
1178
1243
|
'config.hooks.plan.reason.compactionLocalFallback': '这一次压缩的摘要因引擎会话不可用而在本客户端本地生成,引擎不会替它运行这只 hook,所以由本客户端自己运行',
|
|
1179
1244
|
'config.hooks.plan.reason.keyNotRead': '所连服务端不读这只 hook 上写的某个键(删掉该键,或改用会读它的服务端)',
|
|
1180
1245
|
'config.hooks.plan.disableAllHooks': '托管设置关闭了全部 hooks(disableAllHooks)。',
|
|
1246
|
+
'config.hooks.plan.reason.closedUntrusted': '这个工作区未受信任,所以其中不运行任何 hook',
|
|
1247
|
+
'config.hooks.plan.reason.closedGovernanceUnreadable': '托管策略读不出来,所以这一回合不运行任何 hook',
|
|
1248
|
+
'config.hooks.plan.reason.closedDisableAll': '托管设置关闭了全部 hooks(disableAllHooks)',
|
|
1181
1249
|
'config.hooks.plan.keyNotRead.oneKey': '{layer}:{hooks} 不会运行 —— 所连服务端不读键 {coordinates}。删掉该键,或改用会读它的服务端。',
|
|
1182
1250
|
'config.hooks.plan.keyNotRead.manyKeys': '{layer}:{hooks} 不会运行 —— 所连服务端不读这些键:{coordinates}。删掉这些键,或改用会读它们的服务端。',
|
|
1183
1251
|
'config.hooks.plan.keyNotRead.more': '{shown} 等另 {rest} 处',
|
|
@@ -1224,8 +1292,11 @@ const ZH = {
|
|
|
1224
1292
|
'config.mods.loader.failed': '{name} 装载失败:{reason}',
|
|
1225
1293
|
'config.mods.loader.failedNoReason': '{name} 装载失败',
|
|
1226
1294
|
'config.mods.refusal.by': '被 {by} 拒绝',
|
|
1295
|
+
'config.mods.request.by': '由 {by} 发起',
|
|
1227
1296
|
'config.mods.rewrite.resultInPlace': '由 {by} 代替工具作答',
|
|
1228
1297
|
'config.mods.rewrite.inputBy': '参数在放行前被 {by} 改过',
|
|
1298
|
+
'config.mods.session.unreadable': '读不出这个对话最近一次运行用了哪些 mod',
|
|
1299
|
+
'config.mods.session.unarmed': '这个对话在当前引擎上运行过之后,这里会显示 mod',
|
|
1229
1300
|
'follow.notFollowed.headRun': '这块屏已不再跟着 run {taskId}{reason}{ending}{exit}',
|
|
1230
1301
|
'follow.notFollowed.headTurn': '这块屏已不再跟着这一轮的 run{reason}{ending}{exit}',
|
|
1231
1302
|
'follow.notFollowed.reason.exhaustedDraining': ':服务它的那台引擎实例在它最后一条事件流关闭时正在下线,而这个客户端的重新附着次数已经用完。',
|
|
@@ -1337,10 +1408,31 @@ const ZH = {
|
|
|
1337
1408
|
'localEngine.restartOutcome.pendingBusy': '有别的会话在用本机引擎;没人用时就重启。',
|
|
1338
1409
|
'localEngine.restartOutcome.failedPrepare': '本机引擎没有重启;当前引擎照常运行。',
|
|
1339
1410
|
'localEngine.restartOutcome.failedDown': '本机引擎没能重启:{detail}',
|
|
1411
|
+
'session.devices.repoint.done': '已改指:这台机器的设备档和会话现在跟着新的引擎地址走。设备身份没变 —— 没有重新注册。',
|
|
1412
|
+
'session.devices.repoint.unverified': '什么都没改:确认不了新地址上有这台设备。如果它就是同一台引擎,请确认你是用这台设备所属账号登录的,然后再试一次;否则请到引擎自己的地址重新注册这台机器,再到引擎的设备列表里移除旧设备。',
|
|
1413
|
+
'session.devices.repoint.undetermined': '什么都没改:对新地址的一项核对没读到结果,所以不知道这台设备是否登记在那边。请再试一次;或者到引擎自己的地址重新注册这台机器,再到引擎的设备列表里移除旧设备。',
|
|
1414
|
+
'session.devices.repoint.partial': '设备档已跟着新地址走,但不是每只会话都改成了。再运行一次同样的命令即可补完 —— 已改好的会话不会再动。',
|
|
1415
|
+
'session.devices.repoint.storeFailed': '设备档没能迁过去,所以什么都没改。请再运行一次命令;一直失败的话,到引擎自己的地址重新注册这台机器。',
|
|
1416
|
+
'session.devices.repoint.refused.addressInvalid': '什么都没改:有一个地址用不了。请给引擎完整的 https:// 地址(明文 http:// 只收本机地址)。',
|
|
1417
|
+
'session.devices.repoint.refused.sameAddress': '什么都没改:新地址和旧地址是同一个引擎地址。',
|
|
1418
|
+
'session.devices.repoint.refused.recordAbsent': '什么都没改:这台机器上没有旧地址对应的设备档。',
|
|
1419
|
+
'session.devices.repoint.refused.recordNotActive': '什么都没改:这个地址上的设备档不是已完成的注册(还在注册中,或设备已被移除)。请到引擎自己的地址重新注册。',
|
|
1420
|
+
'session.devices.repoint.refused.recordUnreadable': '什么都没改:有一份设备档读不了,所以原样没动。',
|
|
1421
|
+
'session.devices.repoint.refused.targetOccupied': '什么都没改:这台机器在新地址上已经有一份不同设备的设备档。',
|
|
1422
|
+
'session.devices.repoint.refused.unarmed': '什么都没改:这个应用没有接好迁移设备档和会话的能力。',
|
|
1340
1423
|
};
|
|
1341
1424
|
export const ZH_MESSAGES = Object.freeze(ZH);
|
|
1342
1425
|
export const TERM_SLOTS = Object.freeze({
|
|
1343
1426
|
'session.background.refusal.envOff': ['SEMA_HEADLESS_DETACH'],
|
|
1427
|
+
'session.mcpReconnect.unsupported': ['MCP'],
|
|
1428
|
+
'session.mcpReconnect.accepted.one': ['MCP'],
|
|
1429
|
+
'session.mcpReconnect.accepted.other': ['MCP'],
|
|
1430
|
+
'session.mcpReconnect.refused.untouched': ['MCP'],
|
|
1431
|
+
'session.mcpReconnect.refused.noTools': ['MCP'],
|
|
1432
|
+
'session.mcpReconnect.refused.listed.one': ['MCP'],
|
|
1433
|
+
'session.mcpReconnect.refused.listed.other': ['MCP'],
|
|
1434
|
+
'session.mcpReconnect.undeclared': ['MCP'],
|
|
1435
|
+
'session.mcpReconnect.unsettled': ['MCP'],
|
|
1344
1436
|
'session.permissionModeSwitch.reason.disableAutoMode': ['auto'],
|
|
1345
1437
|
'session.thinking.offWithUltracodeOnBody': ['Ultracode'],
|
|
1346
1438
|
'config.mcp.toolAxesInvalid': ['toolAxes'],
|
|
@@ -1495,6 +1587,8 @@ export const TERM_SLOTS = Object.freeze({
|
|
|
1495
1587
|
'notice.failure.headline.connectionLost': ['run'],
|
|
1496
1588
|
'notice.failure.headline.timeout': ['run'],
|
|
1497
1589
|
'notice.failure.headline.parked': ['parked', 'run', 'turn'],
|
|
1590
|
+
'notice.streamEnded.emptyLegs.headline': ['parked', 'run', 'turn'],
|
|
1591
|
+
'notice.streamEnded.consecutiveFailures.headline': ['run', 'turn'],
|
|
1498
1592
|
'notice.failure.headline.internal': ['turn'],
|
|
1499
1593
|
'notice.failure.headline.causeUnreadable': ['run'],
|
|
1500
1594
|
'notice.failure.settings.safety': ['turn'],
|