dsh-perm-gate 5.1.2-compat.7 → 5.1.2

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/lib/client.js CHANGED
@@ -173,7 +173,17 @@ window.__ModuleLoader__.load({
173
173
  "card.rulesTruncated": "规则过大,仅显示前 512 KB。",
174
174
  "card.rulesError": "加载失败:",
175
175
  "card.rulesStale": "路由不存在(插件未重启?)",
176
- "card.rulesNote": "此处只读:面板无法修改规则;白名单段与“始终允许”会写回本插件的入口配置。"
176
+ "card.rulesNote": "此处只读:面板无法修改规则;白名单段与“始终允许”会写回本插件的入口配置。",
177
+ "doubt.no-rule": "没有规则覆盖这次调用,按默认策略交给人 — 这不表示它危险",
178
+ "doubt.opaque": "命令载荷读不懂(编码过 / 工作区外的脚本 / 认不出程序名),规则层无法定位目标",
179
+ "doubt.irreversible": "规则判定不可逆:跑完无法撤回",
180
+ "doubt.never-learn": "这类确认不会沉淀,下次同样的操作还会再问",
181
+ "doubt.delete": "会删除内容",
182
+ "doubt.remote-write": "会产生对外可见的副作用(推送 / 发布 / 写请求),撤回需要额外手动操作",
183
+ "doubt.exec-external": "会执行工作区之外的代码,本次调用无法静态看清它做什么",
184
+ "doubt.outside-paths": "涉及工作区之外的路径",
185
+ "doubt.model-flagged": "风险模型认为可疑(它只能升级,不能放行)",
186
+ "doubt.write": "会写入或修改文件"
177
187
  },
178
188
  en: {
179
189
  "card.title": "自动审查 (Auto review)",
@@ -325,7 +335,17 @@ window.__ModuleLoader__.load({
325
335
  "card.rulesTruncated": "Rules are large; showing the first 512 KB only.",
326
336
  "card.rulesError": "Load failed: ",
327
337
  "card.rulesStale": "route missing (plugin not restarted?)",
328
- "card.rulesNote": "Read-only: this panel cannot modify the rules. The allowlist section and \"allow always\" write back to this plugin's entry config."
338
+ "card.rulesNote": "Read-only: this panel cannot modify the rules. The allowlist section and \"allow always\" write back to this plugin's entry config.",
339
+ "doubt.no-rule": "no rule covers this call, so the default is to ask — that does not mean it is dangerous",
340
+ "doubt.opaque": "the payload cannot be read (encoded, a script outside the workspace, or no recognisable program), so no rule can locate its target",
341
+ "doubt.irreversible": "a rule says this is irreversible: it cannot be undone once run",
342
+ "doubt.never-learn": "this answer will not be learned; the same call will ask again next time",
343
+ "doubt.delete": "it deletes content",
344
+ "doubt.remote-write": "it has an externally visible effect (push / publish / write request); undoing it takes extra manual steps",
345
+ "doubt.exec-external": "it runs code from outside the workspace, which this call cannot inspect",
346
+ "doubt.outside-paths": "it touches paths outside the workspace",
347
+ "doubt.model-flagged": "the risk model flagged it (it can only escalate, never clear)",
348
+ "doubt.write": "it writes or modifies files"
329
349
  },
330
350
  ja: {
331
351
  "card.title": "自动审查(自動審査)ティア",
@@ -477,7 +497,17 @@ window.__ModuleLoader__.load({
477
497
  "card.rulesTruncated": "ルールが大きいため、先頭 512 KB のみ表示します。",
478
498
  "card.rulesError": "読み込みに失敗しました:",
479
499
  "card.rulesStale": "ルートが存在しません(プラグイン未再起動?)",
480
- "card.rulesNote": "読み取り専用:このパネルからルールは変更できません。許可リストと「常に許可」は本プラグインのエントリ設定に書き戻されます。"
500
+ "card.rulesNote": "読み取り専用:このパネルからルールは変更できません。許可リストと「常に許可」は本プラグインのエントリ設定に書き戻されます。",
501
+ "doubt.no-rule": "この呼び出しを覆うルールがなく、既定で人間に委ねました — 危険という意味ではありません",
502
+ "doubt.opaque": "ペイロードを読み取れません(エンコード済み / ワークスペース外スクリプト / プログラム名不明)、ルールは対象を特定できません",
503
+ "doubt.irreversible": "ルール上 不可逆:実行後は取り消せません",
504
+ "doubt.never-learn": "この承認は学習されません。次回も同じ確認が出ます",
505
+ "doubt.delete": "内容を削除します",
506
+ "doubt.remote-write": "外部から見える変更(push / publish / 書き込みリクエスト)が発生し、取り消しに手作業が必要",
507
+ "doubt.exec-external": "ワークスペース外のコードを実行します。この呼び出しでは内容を抜き取れません",
508
+ "doubt.outside-paths": "ワークスペース外のパ스에接触します",
509
+ "doubt.model-flagged": "风险モデルが疑わしいと判定(エスカレートののみ可能、クリアは不可)",
510
+ "doubt.write": "ファイルを書き込みまたは変更します"
481
511
  },
482
512
  ko: {
483
513
  "card.title": "自动审查(자동 검토) 티어",
@@ -629,7 +659,17 @@ window.__ModuleLoader__.load({
629
659
  "card.rulesTruncated": "규칙이 커서 앞 512 KB만 표시합니다.",
630
660
  "card.rulesError": "불러오기 실패: ",
631
661
  "card.rulesStale": "라우트가 없습니다(플러그인 미재시작?)",
632
- "card.rulesNote": "읽기 전용: 이 패널은 규칙을 수정할 수 없습니다. 허용 목록과 \"항상 허용\"은 이 플러그인의 엔트리 설정에 기록됩니다."
662
+ "card.rulesNote": "읽기 전용: 이 패널은 규칙을 수정할 수 없습니다. 허용 목록과 \"항상 허용\"은 이 플러그인의 엔트리 설정에 기록됩니다.",
663
+ "doubt.no-rule": "이 호출을 작용하는 규칙이 없어 기본 전략으로 사람에게 양도합니다 — 위험하다는 의미가 아닙니다",
664
+ "doubt.opaque": "페이로드를 읽을 수 없음 (인코딩됨 / 작업 공간 밖 스크립트 / 프로그램명 불명) → 규칙이 대상을 특정할 수 없음",
665
+ "doubt.irreversible": "규칙상 불가역: 실행 후 채취 불가",
666
+ "doubt.never-learn": "이 승인은 학습되지 않습니다. 다음에도 같은 확인이 나옵니다",
667
+ "doubt.delete": "내용을 삭제합니다",
668
+ "doubt.remote-write": "외부에 보이는 변경(push / publish / 쓰기 요청)이 발생하며, 취소하려면 수동 작업이 필요합니다",
669
+ "doubt.exec-external": "작업 공간 밖의 코드를 실행합니다. 이 호출에서는 내용을 확인할 수 없습니다",
670
+ "doubt.outside-paths": "작업 공간 밖 경로에 접촉합니다",
671
+ "doubt.model-flagged": "위험 모델이 의심됨 (증액만 가능, 해소 불가)",
672
+ "doubt.write": "파일을 쓰거나 수정합니다"
633
673
  },
634
674
  fr: {
635
675
  "card.title": "Examen automatique",
@@ -781,7 +821,17 @@ window.__ModuleLoader__.load({
781
821
  "card.rulesTruncated": "Règles volumineuses ; affichage des 512 Ko premiers uniquement.",
782
822
  "card.rulesError": "Échec du chargement : ",
783
823
  "card.rulesStale": "route manquante (plugin non redémarré ?)",
784
- "card.rulesNote": "Lecture seule : ce panneau ne peut pas modifier les règles. La section liste blanche et « toujours autoriser » écrivent dans la configuration d'entrée de ce plugin."
824
+ "card.rulesNote": "Lecture seule : ce panneau ne peut pas modifier les règles. La section liste blanche et « toujours autoriser » écrivent dans la configuration d'entrée de ce plugin.",
825
+ "doubt.no-rule": "aucune règle ne couvre cet appel, le défaut est de demander — cela ne signifie pas qu’il est dangereux",
826
+ "doubt.opaque": "le payload est illisible (encodé, script hors workspace, ou programme non reconnu), aucune règle ne peut localiser sa cible",
827
+ "doubt.irreversible": "règle irréversible : après exécution, annulation impossible",
828
+ "doubt.never-learn": "cette réponse ne sera pas mémorisée ; la même question se reposera",
829
+ "doubt.delete": "supprime du contenu",
830
+ "doubt.remote-write": "effet visible de l’extérieur (push / publish / écriture) ; annuler nécessite des étapes manuelles",
831
+ "doubt.exec-external": "exécute du code hors workspace, non inspectable par cet appel",
832
+ "doubt.outside-paths": "accède à des chemins hors workspace",
833
+ "doubt.model-flagged": "le modèle de risque l’a signalé (il peut uniquement escalader, jamais lever)",
834
+ "doubt.write": "écrit ou modifie des fichiers"
785
835
  },
786
836
  de: {
787
837
  "card.title": "Automatische Überprüfung",
@@ -933,7 +983,17 @@ window.__ModuleLoader__.load({
933
983
  "card.rulesTruncated": "Regeln sind groß; nur die ersten 512 KB werden angezeigt.",
934
984
  "card.rulesError": "Laden fehlgeschlagen: ",
935
985
  "card.rulesStale": "Route fehlt (Plugin nicht neu gestartet?)",
936
- "card.rulesNote": "Nur-Lesen: Dieses Panel kann die Regeln nicht ändern. Der Whitelist-Abschnitt und „Immer erlauben\" schreiben in die Konfiguration dieses Plugin-Eintrags zurück."
986
+ "card.rulesNote": "Nur-Lesen: Dieses Panel kann die Regeln nicht ändern. Der Whitelist-Abschnitt und „Immer erlauben\" schreiben in die Konfiguration dieses Plugin-Eintrags zurück.",
987
+ "doubt.no-rule": "keine Regel deckt diesen Aufruf ab, daher wird standardmäßig gefragt — das bedeutet nicht, dass er gefährlich ist",
988
+ "doubt.opaque": "der Payload ist nicht lesbar (kodiert, Script außerhalb des Workspace, oder kein erkennbares Programm), keine Regel kann das Ziel bestimmen",
989
+ "doubt.irreversible": "Regel besagt: irreversibel — nach der Ausführung nicht mehr rückgängig",
990
+ "doubt.never-learn": "diese Antwort wird nicht gelernt; dieselbe Frage wird erneut gestellt",
991
+ "doubt.delete": "es löscht Inhalte",
992
+ "doubt.remote-write": "extern sichtbare Wirkung (push / publish / Schreib-Request); Rückgängig machen erfordert manuelle Schritte",
993
+ "doubt.exec-external": "führt Code außerhalb des Workspaces aus, nicht überprüfbar durch diesen Aufruf",
994
+ "doubt.outside-paths": "berührt Pfade außerhalb des Workspaces",
995
+ "doubt.model-flagged": "das Risikomodell hat es markiert (nur Eskalation möglich, keine Freigabe)",
996
+ "doubt.write": "schreibt oder ändert Dateien"
937
997
  },
938
998
  it: {
939
999
  "card.title": "Revisione automatica",
@@ -1085,7 +1145,17 @@ window.__ModuleLoader__.load({
1085
1145
  "card.rulesTruncated": "Regole grandi; mostrati solo i primi 512 KB.",
1086
1146
  "card.rulesError": "Caricamento non riuscito: ",
1087
1147
  "card.rulesStale": "route mancante (plugin non riavviato?)",
1088
- "card.rulesNote": "Sola lettura: questo pannello non può modificare le regole. La sezione whitelist e «consenti sempre» scrivono nella configurazione di questa voce plugin."
1148
+ "card.rulesNote": "Sola lettura: questo pannello non può modificare le regole. La sezione whitelist e «consenti sempre» scrivono nella configurazione di questa voce plugin.",
1149
+ "doubt.no-rule": "nessuna regola copre questa chiamata, la scelta predefinita è chiedere — non significa che sia pericolosa",
1150
+ "doubt.opaque": "il payload non è leggibile (codificato, script fuori dal workspace, o programma non riconosciuto), nessuna regola può individuare il bersaglio",
1151
+ "doubt.irreversible": "regola irreversibile: dopo l’esecuzione non si può annullare",
1152
+ "doubt.never-learn": "questa risposta non verrà imparata; la stessa domanda si ripresenterà",
1153
+ "doubt.delete": "elimina contenuto",
1154
+ "doubt.remote-write": "effetto visibile all’esterno (push / publish / richiesta di scrittura); annullare richiede intervento manuale",
1155
+ "doubt.exec-external": "esegue codice fuori dal workspace, non ispezionabile da questa chiamata",
1156
+ "doubt.outside-paths": "tocca percorsi fuori dal workspace",
1157
+ "doubt.model-flagged": "il modello di rischio lo ha segnalato (può solo elevare, non autorizzare)",
1158
+ "doubt.write": "scrive o modifica file"
1089
1159
  },
1090
1160
  ru: {
1091
1161
  "card.title": "Автоматическая проверка",
@@ -1237,7 +1307,17 @@ window.__ModuleLoader__.load({
1237
1307
  "card.rulesTruncated": "Правила большие; показаны только первые 512 КБ.",
1238
1308
  "card.rulesError": "Ошибка загрузки: ",
1239
1309
  "card.rulesStale": "маршрут отсутствует (плагин не перезапущен?)",
1240
- "card.rulesNote": "Только чтение: эта панель не может изменять правила. Секция белого списка и «всегда разрешать» записывают обратно в конфигурацию этой записи плагина."
1310
+ "card.rulesNote": "Только чтение: эта панель не может изменять правила. Секция белого списка и «всегда разрешать» записывают обратно в конфигурацию этой записи плагина.",
1311
+ "doubt.no-rule": "ни одно правило не покрывает этот вызов, по умолчанию спрашивается человек — это не значит что он опасен",
1312
+ "doubt.opaque": "нагрузка не читается (закодирована, скрипт за пределами рабочей зоны, или не распознаётся программа), правило не может определить цель",
1313
+ "doubt.irreversible": "правило: необратимо, отменить после выполнения нельзя",
1314
+ "doubt.never-learn": "это решение не запомнится, тот же вызов спросит снова",
1315
+ "doubt.delete": "удаляет данные",
1316
+ "doubt.remote-write": "видимый снаружи эффект (push / publish / запись); отмена требует ручных действий",
1317
+ "doubt.exec-external": "выполняет код за пределами рабочего пространства, не подлежит инспекции",
1318
+ "doubt.outside-paths": "затрагивает пути вне рабочего пространства",
1319
+ "doubt.model-flagged": "модель риска пометила (только усиливает, не снижает)",
1320
+ "doubt.write": "записывает или изменяет файлы"
1241
1321
  },
1242
1322
  es: {
1243
1323
  "card.title": "Revisión automática",
@@ -1389,7 +1469,17 @@ window.__ModuleLoader__.load({
1389
1469
  "card.rulesTruncated": "Reglas grandes; se muestran solo los primeros 512 KB.",
1390
1470
  "card.rulesError": "Error de carga: ",
1391
1471
  "card.rulesStale": "ruta ausente (¿plugin no reiniciado?)",
1392
- "card.rulesNote": "Solo lectura: este panel no puede modificar las reglas. La sección de lista blanca y «permitir siempre» escriben de vuelta en la configuración de esta entrada de plugin."
1472
+ "card.rulesNote": "Solo lectura: este panel no puede modificar las reglas. La sección de lista blanca y «permitir siempre» escriben de vuelta en la configuración de esta entrada de plugin.",
1473
+ "doubt.no-rule": "ninguna regla cubre esta llamada, el valor por defecto es preguntar — eso no significa que sea peligrosa",
1474
+ "doubt.opaque": "el payload no puede leerse (codificado, script fuera del workspace o programa no reconocido), ninguna regla puede localizar su objetivo",
1475
+ "doubt.irreversible": "regla irreversible: tras la ejecución no se puede deshacer",
1476
+ "doubt.never-learn": "esta respuesta no se aprenderá; la misma llamada volverá a preguntar",
1477
+ "doubt.delete": "elimina contenido",
1478
+ "doubt.remote-write": "efecto visible externamente (push / publish / solicitud de escritura); deshacer requiere pasos manuales",
1479
+ "doubt.exec-external": "ejecuta código fuera del workspace, no inspeccionable por esta llamada",
1480
+ "doubt.outside-paths": "usa rutas fuera del workspace",
1481
+ "doubt.model-flagged": "el modelo de riesgo lo marcó (solo puede escalar, nunca aprobar)",
1482
+ "doubt.write": "escribe o modifica archivos"
1393
1483
  }
1394
1484
  };
1395
1485
  //#endregion
@@ -3100,83 +3190,6 @@ window.__ModuleLoader__.load({
3100
3190
  }) : null]
3101
3191
  });
3102
3192
  }
3103
- /** 浮窗齿轮 + 固定定位浮层承载完整审批门卡。自绘定位,不依赖宿主容器布局。 */
3104
- function FloatingPermissiveGate(props) {
3105
- const [open, setOpen] = (0, react.useState)(false);
3106
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3107
- style: {
3108
- position: "fixed",
3109
- right: 16,
3110
- bottom: 64,
3111
- zIndex: 1e4
3112
- },
3113
- children: [
3114
- open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3115
- onClick: () => setOpen(false),
3116
- style: {
3117
- position: "fixed",
3118
- top: 0,
3119
- left: 0,
3120
- right: 0,
3121
- bottom: 0,
3122
- background: "rgba(0,0,0,.45)",
3123
- zIndex: 1e4
3124
- }
3125
- }) : null,
3126
- open ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3127
- style: {
3128
- position: "fixed",
3129
- top: "6vh",
3130
- left: "50%",
3131
- transform: "translateX(-50%)",
3132
- width: "min(760px, 92vw)",
3133
- maxHeight: "84vh",
3134
- overflowY: "auto",
3135
- zIndex: 10001
3136
- },
3137
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3138
- type: "button",
3139
- onClick: () => setOpen(false),
3140
- style: {
3141
- position: "sticky",
3142
- top: 6,
3143
- float: "right",
3144
- marginRight: 8,
3145
- zIndex: 2,
3146
- font: "inherit",
3147
- cursor: "pointer",
3148
- borderRadius: 8,
3149
- border: "1px solid rgba(127,127,127,.4)",
3150
- background: "rgba(30,30,32,.85)",
3151
- color: "inherit",
3152
- padding: "2px 10px"
3153
- },
3154
- children: "✕ 关闭"
3155
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PermissiveCard, {
3156
- t: props.t,
3157
- scope: props.scope
3158
- })]
3159
- }) : null,
3160
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3161
- type: "button",
3162
- title: "审批门设置",
3163
- onClick: () => setOpen(!open),
3164
- style: {
3165
- width: 40,
3166
- height: 40,
3167
- borderRadius: "50%",
3168
- border: "1px solid rgba(127,127,127,.4)",
3169
- background: "rgba(30,30,32,.85)",
3170
- color: "inherit",
3171
- cursor: "pointer",
3172
- fontSize: 16,
3173
- boxShadow: "0 4px 16px rgba(0,0,0,.35)"
3174
- },
3175
- children: "🛡"
3176
- })
3177
- ]
3178
- });
3179
- }
3180
3193
  //#endregion
3181
3194
  //#region src/client/feed.ts
3182
3195
  /** Fetch decision events for one session; `since > 0` returns only newer ones. */
@@ -3564,7 +3577,7 @@ window.__ModuleLoader__.load({
3564
3577
  children: notice.tool
3565
3578
  }),
3566
3579
  " — ",
3567
- notice.reason
3580
+ notice.doubtKinds !== void 0 && notice.doubtKinds.length > 0 ? notice.doubtKinds.map((k) => t(`doubt.${k}`)).join(" · ") : notice.reason
3568
3581
  ]
3569
3582
  }),
3570
3583
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
@@ -4259,7 +4272,19 @@ window.__ModuleLoader__.load({
4259
4272
  color: "var(--dsw-alias-label-secondary, inherit)",
4260
4273
  overflowWrap: "anywhere"
4261
4274
  },
4262
- children: ev.justification ?? ev.reason
4275
+ children: ev.doubtKinds !== void 0 && ev.doubtKinds.length > 0 ? ev.doubtKinds.map((k) => t(`doubt.${k}`)).join(" · ") : ev.humanBrief ?? ev.justification ?? ev.reason
4276
+ }),
4277
+ ev.humanCommand === void 0 || ev.humanCommand === "" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4278
+ style: {
4279
+ marginTop: "4px",
4280
+ fontFamily: "var(--ds-font-family-code, monospace)",
4281
+ fontSize: "12px",
4282
+ lineHeight: "18px",
4283
+ whiteSpace: "pre-wrap",
4284
+ overflowWrap: "anywhere",
4285
+ color: "var(--dsw-alias-label-primary, inherit)"
4286
+ },
4287
+ children: ev.humanCommand
4263
4288
  }),
4264
4289
  chips.length === 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4265
4290
  style: {
@@ -4338,8 +4363,13 @@ window.__ModuleLoader__.load({
4338
4363
  }
4339
4364
  //#endregion
4340
4365
  //#region src/client/bridge-scope.ts
4341
- const DESCRIBE = "/api/dsh-perm-gate/settings/describe";
4342
- const MUTATE = "/api/dsh-perm-gate/settings/mutate";
4366
+ /** 与 server 侧 bridgeRoutesFor(src/bridge.ts)必须逐字符一致。 */
4367
+ function bridgeRoutesFor(ns) {
4368
+ return {
4369
+ describe: `/api/${ns}/settings/describe`,
4370
+ mutate: `/api/${ns}/settings/mutate`
4371
+ };
4372
+ }
4343
4373
  var BridgeDocHandle = class {
4344
4374
  snapshot = {
4345
4375
  status: "pending",
@@ -4349,7 +4379,9 @@ window.__ModuleLoader__.load({
4349
4379
  listeners = /* @__PURE__ */ new Set();
4350
4380
  revision;
4351
4381
  inflight;
4352
- constructor() {
4382
+ routes;
4383
+ constructor(ns) {
4384
+ this.routes = bridgeRoutesFor(ns);
4353
4385
  this.refresh();
4354
4386
  }
4355
4387
  getSnapshot() {
@@ -4390,7 +4422,7 @@ window.__ModuleLoader__.load({
4390
4422
  if (this.inflight !== void 0) return this.inflight;
4391
4423
  this.inflight = (async () => {
4392
4424
  try {
4393
- const body = await this.request(DESCRIBE);
4425
+ const body = await this.request(this.routes.describe);
4394
4426
  if (body.ok && body.value?.descriptor !== void 0) {
4395
4427
  const d = body.value.descriptor;
4396
4428
  this.revision = typeof d.revision === "number" ? d.revision : void 0;
@@ -4418,7 +4450,7 @@ window.__ModuleLoader__.load({
4418
4450
  return this.inflight;
4419
4451
  }
4420
4452
  async mutate(ops) {
4421
- const body = await this.request(MUTATE, {
4453
+ const body = await this.request(this.routes.mutate, {
4422
4454
  ops,
4423
4455
  expectedRevision: this.revision
4424
4456
  });
@@ -4486,7 +4518,7 @@ window.__ModuleLoader__.load({
4486
4518
  resolveSettingsScope(ctx, PERMISSIVE_NS, (scope, _generation) => {
4487
4519
  scopeRef.scope = scope;
4488
4520
  });
4489
- const bridgeScope = new BridgeDocHandle();
4521
+ const bridgeScope = new BridgeDocHandle(PERMISSIVE_NS);
4490
4522
  const cardInjected = () => ({ scope: scopeRef.scope ?? bridgeScope });
4491
4523
  safe("settings.section", () => {
4492
4524
  ctx.slots.inject("settings.section", function* () {
@@ -4508,38 +4540,6 @@ window.__ModuleLoader__.load({
4508
4540
  inject: cardInjected
4509
4541
  }, PermissiveCard));
4510
4542
  });
4511
- safe("settings.plugins.tab", () => {
4512
- ctx.slots.inject("settings.plugins.tab", () => ctx.slots.register({
4513
- name: "settings.plugins.tab",
4514
- id: PERMISSIVE_NS,
4515
- order: 50,
4516
- label: () => t("section.title"),
4517
- locale: NS,
4518
- inject: cardInjected
4519
- }, PermissiveCard));
4520
- });
4521
- safe("settings.plugin.item", () => {
4522
- const itemSlots = ctx.slots;
4523
- itemSlots.inject("settings.plugin.item", () => itemSlots.register({
4524
- name: "settings.plugin.item",
4525
- id: PERMISSIVE_NS,
4526
- key: PERMISSIVE_NS,
4527
- order: 40,
4528
- locale: NS,
4529
- inject: cardInjected
4530
- }, PermissiveCard));
4531
- });
4532
- safe("shell.overlay", () => {
4533
- const overlaySlots = ctx.slots;
4534
- overlaySlots.inject("shell.overlay", () => overlaySlots.register({
4535
- name: "shell.overlay",
4536
- id: PERMISSIVE_NS,
4537
- inject: () => ({
4538
- t,
4539
- scope: scopeRef.scope ?? bridgeScope
4540
- })
4541
- }, FloatingPermissiveGate));
4542
- });
4543
4543
  }
4544
4544
  //#endregion
4545
4545
  exports.apply = apply;