@qilin-agent/client-ui-permission-presets 3.1.5 → 3.1.6
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/README.i18n.yaml +2 -2
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/lib/client.js +56 -43
- package/lib/types/client/locales.d.ts +4 -0
- package/lib/types/client/settings-store.d.ts +24 -14
- package/package.json +19 -19
package/README.i18n.yaml
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
en: 91606bff7da02253
|
|
19
19
|
zh: ef68e813d64c89be
|
|
20
20
|
/qilin-agent-client-ui-permission-presets/use-this-package/the-picker:
|
|
21
|
-
en:
|
|
22
|
-
zh:
|
|
21
|
+
en: d330757a5562d174
|
|
22
|
+
zh: d4cc99873fa3b699
|
|
23
23
|
/qilin-agent-client-ui-permission-presets/use-this-package/the-settings-row:
|
|
24
24
|
en: 5067f6aa12496225
|
|
25
25
|
zh: cfa6796684f97535
|
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ Mount this plugin alongside the settings, commands, and conversation packages. G
|
|
|
29
29
|
|
|
30
30
|
### The picker
|
|
31
31
|
|
|
32
|
-
A pick submits the `/permission <preset>` command line. The argument-bearing form (`/permission <preset>` typed directly) still switches directly; the decoration replaces only the bare invocation. The built-in labels are `Read Only`, `Workspace Write`, `Full access`, and `Auto review` in English and `仅可查看`, `工作区内修改`, `完全权限`, and `Auto review` in Chinese. Explicit host labels remain unchanged, unknown kebab-case names render in title case, and `auto` carries an `EXP` badge plus an experimental-risk confirmation. `custom` is display state, never a target.
|
|
32
|
+
A pick submits the `/permission <preset>` command line. The argument-bearing form (`/permission <preset>` typed directly) still switches directly; the decoration replaces only the bare invocation. The built-in labels are `Read Only`, `Workspace Write`, `Full access`, and `Auto review` in English and `仅可查看`, `工作区内修改`, `完全权限`, and `Auto review` in Chinese. Explicit host labels remain unchanged, unknown kebab-case names render in title case, and `auto` carries an `EXP` badge in menu options plus an experimental-risk confirmation. The selected composer control shows the mode without the badge. `custom` is display state, never a target.
|
|
33
33
|
|
|
34
34
|
When the live catalog withdraws a preset, the composer closes its pending confirmation and shows the Session's current value instead of an unavailable optimistic pick. Every catalog invalidation — the payload-free notification or a connection-generation change — closes an open slash picker or its confirmation without consuming the draft, while publishing the result of a read the picker waits for leaves it open with its failure and retry state; reopening reads the current catalog. A submitted command remains busy until its response settles.
|
|
35
35
|
|
package/README.zh.md
CHANGED
|
@@ -29,7 +29,7 @@ kind: "package-reference"
|
|
|
29
29
|
|
|
30
30
|
### 选择器
|
|
31
31
|
|
|
32
|
-
选中即提交 `/permission <preset>` 命令行。带参形式(直接键入 `/permission <preset>`)仍直接切换;装饰只替换裸调用。内置标签在英文界面中是 `Read Only`、`Workspace Write`、`Full access` 和 `Auto review`,在中文界面中是「仅可查看」「工作区内修改」「完全权限」和 `Auto review`。显式 host 标签保持原样,未知 kebab-case 名称渲染为 Title Case;`auto`
|
|
32
|
+
选中即提交 `/permission <preset>` 命令行。带参形式(直接键入 `/permission <preset>`)仍直接切换;装饰只替换裸调用。内置标签在英文界面中是 `Read Only`、`Workspace Write`、`Full access` 和 `Auto review`,在中文界面中是「仅可查看」「工作区内修改」「完全权限」和 `Auto review`。显式 host 标签保持原样,未知 kebab-case 名称渲染为 Title Case;`auto` 在菜单选项中带有 `EXP` 标记,并在可见选择时要求实验风险确认。选中后的 composer 控件显示模式,不展示该标记。`custom` 只是显示状态,绝非目标。
|
|
33
33
|
|
|
34
34
|
实时目录撤销某个预设时,composer 关闭对应的待确认对话框,并用 Session 的当前值替代已不可用的乐观选择。每次目录失效(无 payload 的通知或连接代际变更)会关闭已打开的 slash 选择器或其确认对话框,不消费草稿;而发布某个 picker 正在等待的读取结果时,该 picker 保持打开并保留失败与重试状态;重新打开时读取当前目录。已经提交的命令在响应结束前继续保持忙碌状态。
|
|
35
35
|
|
package/lib/client.js
CHANGED
|
@@ -159,6 +159,8 @@ window.__ModuleLoader__.load({
|
|
|
159
159
|
const zh = {
|
|
160
160
|
"title": "权限",
|
|
161
161
|
"description": "选择新会话的默认权限模式",
|
|
162
|
+
"unset": "未设定",
|
|
163
|
+
"unsetDescription": "尚未设定;新会话先使用主机默认,可在此选择一个预设固定下来",
|
|
162
164
|
"loading": "加载中",
|
|
163
165
|
"unavailable": "不可用",
|
|
164
166
|
"preset.readOnly": "仅可查看",
|
|
@@ -174,6 +176,8 @@ window.__ModuleLoader__.load({
|
|
|
174
176
|
const en = {
|
|
175
177
|
"title": "Permission",
|
|
176
178
|
"description": "Choose the default permission mode for new sessions",
|
|
179
|
+
"unset": "Not set",
|
|
180
|
+
"unsetDescription": "Not set yet; new sessions use the host default. Pick a preset here to pin it.",
|
|
177
181
|
"loading": "Loading",
|
|
178
182
|
"unavailable": "Unavailable",
|
|
179
183
|
"preset.readOnly": "Read Only",
|
|
@@ -262,7 +266,7 @@ window.__ModuleLoader__.load({
|
|
|
262
266
|
}
|
|
263
267
|
//#endregion
|
|
264
268
|
//#region \0qilin-css:/home/runner/work/QiLin/QiLin/packages/client/ui-permission-presets/src/client/PermissionSelect.module.css.mjs
|
|
265
|
-
const css$1 = ".OiI-WW_trigger{min-width:0;max-width:220px;height:28px;color:var(--qilin-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.OiI-WW_trigger:hover:not(:disabled){background:var(--qilin-alias-interactive-bg-hover)}.OiI-WW_trigger:focus-visible{box-shadow:0 0 0 2px var(--qilin-focus-ring-color,var(--qilin-alias-state-business-primary))}.OiI-WW_trigger:disabled{color:var(--qilin-alias-label-dimmed);cursor:default}.OiI-WW_triggerIcon{flex:none;display:inline-flex}.OiI-WW_triggerIcon svg{width:14px;height:14px}.OiI-WW_triggerLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.OiI-WW_optionLabel{align-items:
|
|
269
|
+
const css$1 = ".OiI-WW_trigger{min-width:0;max-width:220px;height:28px;color:var(--qilin-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.OiI-WW_trigger:hover:not(:disabled){background:var(--qilin-alias-interactive-bg-hover)}.OiI-WW_trigger:focus-visible{box-shadow:0 0 0 2px var(--qilin-focus-ring-color,var(--qilin-alias-state-business-primary))}.OiI-WW_trigger:disabled{color:var(--qilin-alias-label-dimmed);cursor:default}.OiI-WW_triggerIcon{flex:none;display:inline-flex}.OiI-WW_triggerIcon svg{width:14px;height:14px}.OiI-WW_triggerLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.OiI-WW_optionLabel{align-items:center;gap:4px;min-width:0;max-width:100%;display:inline-flex}.OiI-WW_optionLabelText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.OiI-WW_badge{color:var(--qilin-alias-label-tertiary);letter-spacing:.2px;flex:none;font-size:8px;font-weight:500;line-height:10px}.OiI-WW_chevron{color:var(--qilin-alias-label-caption);flex:none;transition:transform .12s;display:inline-flex}@container (width<=460px){.OiI-WW_trigger:has(.OiI-WW_triggerIcon) .OiI-WW_triggerLabel{display:none}}.OiI-WW_chevronOpen{transform:rotate(180deg)}";
|
|
266
270
|
const tagId$1 = "@qilin-agent/client-ui-permission-presets/PermissionSelect.module.css";
|
|
267
271
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
268
272
|
const tag = document.createElement("style");
|
|
@@ -403,7 +407,7 @@ window.__ModuleLoader__.load({
|
|
|
403
407
|
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
404
408
|
className: PermissionSelect_module_css_default.optionLabelText,
|
|
405
409
|
children: label
|
|
406
|
-
}), (0, react_jsx_runtime.jsx)("
|
|
410
|
+
}), (0, react_jsx_runtime.jsx)("span", {
|
|
407
411
|
className: PermissionSelect_module_css_default.badge,
|
|
408
412
|
children: badge
|
|
409
413
|
})]
|
|
@@ -439,8 +443,6 @@ window.__ModuleLoader__.load({
|
|
|
439
443
|
const confirmationDescription = confirmation === "auto" ? t("auto.confirm.description") : t("confirm.description");
|
|
440
444
|
const confirmationAcknowledge = confirmation === "auto" ? t("auto.confirm.acknowledge") : t("confirm.acknowledge");
|
|
441
445
|
const confirmationEnable = confirmation === "auto" ? t("auto.confirm.enable") : t("confirm.enable");
|
|
442
|
-
const currentBadge = optionBadge(currentValue, t);
|
|
443
|
-
const currentAccessibleLabel = currentBadge === void 0 ? currentLabel : `${currentLabel} ${currentBadge}`;
|
|
444
446
|
return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_qilin_agent_client_ui_primitives.Menu, {
|
|
445
447
|
open,
|
|
446
448
|
items,
|
|
@@ -454,7 +456,7 @@ window.__ModuleLoader__.load({
|
|
|
454
456
|
anchor: (0, react_jsx_runtime.jsxs)("button", {
|
|
455
457
|
type: "button",
|
|
456
458
|
className: PermissionSelect_module_css_default.trigger,
|
|
457
|
-
"aria-label": t("mode", { name:
|
|
459
|
+
"aria-label": t("mode", { name: currentLabel }),
|
|
458
460
|
title: current === void 0 ? void 0 : optionDescription(current, t),
|
|
459
461
|
disabled: locked || busy,
|
|
460
462
|
onClick: () => {
|
|
@@ -470,10 +472,6 @@ window.__ModuleLoader__.load({
|
|
|
470
472
|
className: PermissionSelect_module_css_default.triggerLabel,
|
|
471
473
|
children: currentLabel
|
|
472
474
|
}),
|
|
473
|
-
currentBadge !== void 0 && (0, react_jsx_runtime.jsx)("sup", {
|
|
474
|
-
className: PermissionSelect_module_css_default.badge,
|
|
475
|
-
children: currentBadge
|
|
476
|
-
}),
|
|
477
475
|
(0, react_jsx_runtime.jsx)("span", {
|
|
478
476
|
className: clsx(PermissionSelect_module_css_default.chevron, open && PermissionSelect_module_css_default.chevronOpen),
|
|
479
477
|
"aria-hidden": true,
|
|
@@ -547,8 +545,9 @@ window.__ModuleLoader__.load({
|
|
|
547
545
|
const selected = state.options.find((option) => option.id === state.currentValue);
|
|
548
546
|
const busy = state.status === "loading" || state.status === "saving" || confirmingFullAccess;
|
|
549
547
|
const optionLabel = (option) => displayPermissionPreset(option.id, option.label, t);
|
|
550
|
-
const
|
|
551
|
-
const
|
|
548
|
+
const unset = state.currentValue === "" && state.error === null;
|
|
549
|
+
const label = selected !== void 0 ? optionLabel(selected) : busy ? t("loading") : t("unset");
|
|
550
|
+
const description = state.error ?? (unset ? t("unsetDescription") : t("description"));
|
|
552
551
|
return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
553
552
|
className: PermissionRow_module_css_default.row,
|
|
554
553
|
children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -621,34 +620,33 @@ window.__ModuleLoader__.load({
|
|
|
621
620
|
//#region lib/types/client/settings-store.js
|
|
622
621
|
/**
|
|
623
622
|
* Permission default-settings controller. The permission descriptor comes
|
|
624
|
-
* from the shared describe mirror
|
|
625
|
-
*
|
|
626
|
-
*
|
|
627
|
-
* back into the mirror.
|
|
623
|
+
* from the shared describe mirror and the selectable presets from the shared
|
|
624
|
+
* permission catalog directory (the namespace schema carries a plain string,
|
|
625
|
+
* so it cannot enumerate the presets); writes target only `defaultPreset`,
|
|
626
|
+
* carry the descriptor revision, and fold their answer back into the mirror.
|
|
628
627
|
*/
|
|
629
628
|
/** Permission's settings namespace on the host wire. */
|
|
630
629
|
const PERMISSION_SETTINGS_NS = "permission";
|
|
631
630
|
/**
|
|
632
|
-
* Read the
|
|
631
|
+
* Read the new-session default and its selectable presets from the shared
|
|
632
|
+
* catalog.
|
|
633
633
|
* @param view - permission namespace descriptor.
|
|
634
|
-
* @param
|
|
635
|
-
* @returns current value and selectable options.
|
|
634
|
+
* @param catalog - the host's permission catalog.
|
|
635
|
+
* @returns current value (empty when never set) and selectable options.
|
|
636
636
|
*/
|
|
637
|
-
function permissionDefaultOf(view,
|
|
637
|
+
function permissionDefaultOf(view, catalog) {
|
|
638
638
|
const value = view.value?.defaultPreset;
|
|
639
|
-
if (typeof value !== "string") throw new Error("permission settings has
|
|
640
|
-
const
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
});
|
|
651
|
-
if (options.length === 0 || !options.some((option) => option.id === value)) throw new Error("permission settings schema does not advertise its current preset");
|
|
639
|
+
if (value !== void 0 && typeof value !== "string") throw new Error("permission settings has a non-string defaultPreset value");
|
|
640
|
+
const options = catalog.defaultOptions.map((option) => ({
|
|
641
|
+
id: option.value,
|
|
642
|
+
label: displayPermissionPreset(option.value, option.name)
|
|
643
|
+
}));
|
|
644
|
+
if (options.length === 0) throw new Error("permission catalog advertises no default presets");
|
|
645
|
+
if (value === void 0) return {
|
|
646
|
+
currentValue: "",
|
|
647
|
+
options
|
|
648
|
+
};
|
|
649
|
+
if (!options.some((option) => option.id === value)) throw new Error("permission settings value does not match any default preset");
|
|
652
650
|
return {
|
|
653
651
|
currentValue: value,
|
|
654
652
|
options
|
|
@@ -657,8 +655,8 @@ window.__ModuleLoader__.load({
|
|
|
657
655
|
/** Controller deriving the row from the shared mirror and writing the default through it. */
|
|
658
656
|
var PermissionPresetSettingsController = class {
|
|
659
657
|
describeFace;
|
|
658
|
+
catalogFace;
|
|
660
659
|
ctx;
|
|
661
|
-
schema;
|
|
662
660
|
/** Row snapshot consumed through a bound selector hook. */
|
|
663
661
|
store = (0, _qilin_agent_client_store.createSnapshotStore)({
|
|
664
662
|
status: "idle",
|
|
@@ -672,25 +670,35 @@ window.__ModuleLoader__.load({
|
|
|
672
670
|
saving = false;
|
|
673
671
|
disposed = false;
|
|
674
672
|
/**
|
|
675
|
-
* @param describeFace - the shared mirror's read/fold face (descriptor
|
|
673
|
+
* @param describeFace - the shared mirror's read/fold face (descriptor source).
|
|
674
|
+
* @param catalogFace - the shared catalog directory's store, narrowed.
|
|
676
675
|
* @param ctx - the row plugin's context, whose `remote.settings` namespace
|
|
677
676
|
* carries the `defaultPreset` write.
|
|
678
|
-
* @param schema - settings-owned schema operations.
|
|
679
677
|
*/
|
|
680
|
-
constructor(describeFace,
|
|
678
|
+
constructor(describeFace, catalogFace, ctx) {
|
|
681
679
|
this.describeFace = describeFace;
|
|
680
|
+
this.catalogFace = catalogFace;
|
|
682
681
|
this.ctx = ctx;
|
|
683
|
-
this.schema = schema;
|
|
684
682
|
}
|
|
685
683
|
/**
|
|
686
|
-
* Begin following the mirror (idempotent) and reflect
|
|
684
|
+
* Begin following the mirror and the catalog (idempotent) and reflect their
|
|
685
|
+
* current answer.
|
|
687
686
|
* @returns settlement once the snapshot reflects the mirror.
|
|
688
687
|
*/
|
|
689
688
|
async load() {
|
|
690
689
|
if (this.disposed) return;
|
|
691
|
-
this.following ??=
|
|
692
|
-
this.
|
|
693
|
-
|
|
690
|
+
this.following ??= (() => {
|
|
691
|
+
const stopDescriptor = this.describeFace.subscribe(() => {
|
|
692
|
+
this.derive();
|
|
693
|
+
});
|
|
694
|
+
const stopCatalog = this.catalogFace.subscribe(() => {
|
|
695
|
+
this.derive();
|
|
696
|
+
});
|
|
697
|
+
return () => {
|
|
698
|
+
stopDescriptor();
|
|
699
|
+
stopCatalog();
|
|
700
|
+
};
|
|
701
|
+
})();
|
|
694
702
|
this.store.update((state) => {
|
|
695
703
|
state.status = "loading";
|
|
696
704
|
state.error = null;
|
|
@@ -765,7 +773,9 @@ window.__ModuleLoader__.load({
|
|
|
765
773
|
return;
|
|
766
774
|
}
|
|
767
775
|
try {
|
|
768
|
-
const
|
|
776
|
+
const catalog = this.catalogFace.snapshot();
|
|
777
|
+
if (catalog === null) return;
|
|
778
|
+
const resolved = permissionDefaultOf(view, catalog);
|
|
769
779
|
const { writable } = mirrored.view;
|
|
770
780
|
this.store.update((state) => {
|
|
771
781
|
state.status = "ready";
|
|
@@ -855,7 +865,10 @@ window.__ModuleLoader__.load({
|
|
|
855
865
|
zh,
|
|
856
866
|
en
|
|
857
867
|
}), "ui-permission: settings row dictionaries");
|
|
858
|
-
const controller = new PermissionPresetSettingsController(ctx.configForms.describe(),
|
|
868
|
+
const controller = new PermissionPresetSettingsController(ctx.configForms.describe(), {
|
|
869
|
+
snapshot: () => catalog.store.getSnapshot().value,
|
|
870
|
+
subscribe: (listener) => catalog.store.subscribe(listener)
|
|
871
|
+
}, ctx);
|
|
859
872
|
const load = () => controller.load();
|
|
860
873
|
const select = (preset) => controller.select(preset);
|
|
861
874
|
const injected = () => ({
|
|
@@ -5,6 +5,8 @@ export declare const PERMISSION_ACCESS_NS = "permission.access";
|
|
|
5
5
|
export declare const zh: {
|
|
6
6
|
title: string;
|
|
7
7
|
description: string;
|
|
8
|
+
unset: string;
|
|
9
|
+
unsetDescription: string;
|
|
8
10
|
loading: string;
|
|
9
11
|
unavailable: string;
|
|
10
12
|
'preset.readOnly': string;
|
|
@@ -22,6 +24,8 @@ export type PermissionSettingsKey = keyof typeof zh;
|
|
|
22
24
|
export declare const en: {
|
|
23
25
|
title: string;
|
|
24
26
|
description: string;
|
|
27
|
+
unset: string;
|
|
28
|
+
unsetDescription: string;
|
|
25
29
|
loading: string;
|
|
26
30
|
unavailable: string;
|
|
27
31
|
'preset.readOnly': string;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Permission default-settings controller. The permission descriptor comes
|
|
3
|
-
* from the shared describe mirror
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* back into the mirror.
|
|
3
|
+
* from the shared describe mirror and the selectable presets from the shared
|
|
4
|
+
* permission catalog directory (the namespace schema carries a plain string,
|
|
5
|
+
* so it cannot enumerate the presets); writes target only `defaultPreset`,
|
|
6
|
+
* carry the descriptor revision, and fold their answer back into the mirror.
|
|
7
7
|
*/
|
|
8
8
|
import type { Context as ClientContext } from '@qilin-agent/kylin';
|
|
9
9
|
import type { SettingsNamespaceView } from '@qilin-agent/api-remotes/client';
|
|
10
10
|
import { type SnapshotStore } from '@qilin-agent/client-store';
|
|
11
|
-
import type {
|
|
11
|
+
import type { PermissionCatalog } from '@qilin-agent/permission-presets/client';
|
|
12
|
+
import type { SettingsDescribeFace } from '@qilin-agent/client-ui-settings/client';
|
|
12
13
|
/** Permission's settings namespace on the host wire. */
|
|
13
14
|
export declare const PERMISSION_SETTINGS_NS = "permission";
|
|
14
15
|
/** One selectable new-session default. */
|
|
@@ -27,35 +28,44 @@ export interface PermissionSettingsState {
|
|
|
27
28
|
options: readonly PermissionDefaultOption[];
|
|
28
29
|
revision: number;
|
|
29
30
|
}
|
|
31
|
+
/** Catalog face the row follows: the shared directory's store, narrowed. */
|
|
32
|
+
export interface PermissionCatalogFace {
|
|
33
|
+
/** Latest complete catalog, or null before the first read settles. */
|
|
34
|
+
snapshot(): PermissionCatalog | null;
|
|
35
|
+
/** Subscribe to catalog publications; returns the disposer. */
|
|
36
|
+
subscribe(listener: () => void): () => void;
|
|
37
|
+
}
|
|
30
38
|
/**
|
|
31
|
-
* Read the
|
|
39
|
+
* Read the new-session default and its selectable presets from the shared
|
|
40
|
+
* catalog.
|
|
32
41
|
* @param view - permission namespace descriptor.
|
|
33
|
-
* @param
|
|
34
|
-
* @returns current value and selectable options.
|
|
42
|
+
* @param catalog - the host's permission catalog.
|
|
43
|
+
* @returns current value (empty when never set) and selectable options.
|
|
35
44
|
*/
|
|
36
|
-
export declare function permissionDefaultOf(view: SettingsNamespaceView,
|
|
45
|
+
export declare function permissionDefaultOf(view: SettingsNamespaceView, catalog: PermissionCatalog): {
|
|
37
46
|
currentValue: string;
|
|
38
47
|
options: PermissionDefaultOption[];
|
|
39
48
|
};
|
|
40
49
|
/** Controller deriving the row from the shared mirror and writing the default through it. */
|
|
41
50
|
export declare class PermissionPresetSettingsController {
|
|
42
51
|
private readonly describeFace;
|
|
52
|
+
private readonly catalogFace;
|
|
43
53
|
private readonly ctx;
|
|
44
|
-
private readonly schema;
|
|
45
54
|
/** Row snapshot consumed through a bound selector hook. */
|
|
46
55
|
readonly store: SnapshotStore<PermissionSettingsState>;
|
|
47
56
|
private following;
|
|
48
57
|
private saving;
|
|
49
58
|
private disposed;
|
|
50
59
|
/**
|
|
51
|
-
* @param describeFace - the shared mirror's read/fold face (descriptor
|
|
60
|
+
* @param describeFace - the shared mirror's read/fold face (descriptor source).
|
|
61
|
+
* @param catalogFace - the shared catalog directory's store, narrowed.
|
|
52
62
|
* @param ctx - the row plugin's context, whose `remote.settings` namespace
|
|
53
63
|
* carries the `defaultPreset` write.
|
|
54
|
-
* @param schema - settings-owned schema operations.
|
|
55
64
|
*/
|
|
56
|
-
constructor(describeFace: SettingsDescribeFace,
|
|
65
|
+
constructor(describeFace: SettingsDescribeFace, catalogFace: PermissionCatalogFace, ctx: ClientContext);
|
|
57
66
|
/**
|
|
58
|
-
* Begin following the mirror (idempotent) and reflect
|
|
67
|
+
* Begin following the mirror and the catalog (idempotent) and reflect their
|
|
68
|
+
* current answer.
|
|
59
69
|
* @returns settlement once the snapshot reflects the mirror.
|
|
60
70
|
*/
|
|
61
71
|
load(): Promise<void>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qilin-agent/client-ui-permission-presets",
|
|
3
3
|
"description": "Permission surfaces: a new-session default in General settings and a current-session /permission popup over the permissions projection",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.6",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -44,29 +44,29 @@
|
|
|
44
44
|
},
|
|
45
45
|
"license": "MIT",
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@qilin-agent/kylin": "~4.0.
|
|
47
|
+
"@qilin-agent/kylin": "~4.0.5"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/react": "~18.3.1",
|
|
51
51
|
"clsx": "^2.0.0",
|
|
52
52
|
"react": "^18.2.0",
|
|
53
|
-
"@qilin-agent/
|
|
54
|
-
"@qilin-agent/
|
|
55
|
-
"@qilin-agent/
|
|
56
|
-
"@qilin-agent/
|
|
57
|
-
"@qilin-agent/
|
|
58
|
-
"@qilin-agent/client-
|
|
59
|
-
"@qilin-agent/client-
|
|
60
|
-
"@qilin-agent/client-test-runtime": "3.1.
|
|
61
|
-
"@qilin-agent/client-ui-
|
|
62
|
-
"@qilin-agent/client-ui-
|
|
63
|
-
"@qilin-agent/client-ui-
|
|
64
|
-
"@qilin-agent/
|
|
65
|
-
"@qilin-agent/client-ui-
|
|
66
|
-
"@qilin-agent/client-ui-
|
|
67
|
-
"@qilin-agent/
|
|
68
|
-
"@qilin-agent/client-ui-
|
|
69
|
-
"@qilin-agent/client-ui-
|
|
53
|
+
"@qilin-agent/kylin": "~4.0.5",
|
|
54
|
+
"@qilin-agent/api-session-controller": "3.1.6",
|
|
55
|
+
"@qilin-agent/remote-mock": "3.1.6",
|
|
56
|
+
"@qilin-agent/client-connection": "3.1.6",
|
|
57
|
+
"@qilin-agent/api-remotes": "3.1.6",
|
|
58
|
+
"@qilin-agent/client-locale": "3.1.6",
|
|
59
|
+
"@qilin-agent/client-store": "3.1.6",
|
|
60
|
+
"@qilin-agent/client-test-runtime": "3.1.6",
|
|
61
|
+
"@qilin-agent/client-ui-commands": "3.1.6",
|
|
62
|
+
"@qilin-agent/client-ui-primitives": "3.1.6",
|
|
63
|
+
"@qilin-agent/client-ui-input-trigger": "3.1.6",
|
|
64
|
+
"@qilin-agent/permission-presets": "3.1.6",
|
|
65
|
+
"@qilin-agent/client-ui-renderer": "3.1.6",
|
|
66
|
+
"@qilin-agent/client-ui-session": "3.1.6",
|
|
67
|
+
"@qilin-agent/client-ui-settings": "3.1.6",
|
|
68
|
+
"@qilin-agent/client-ui-slots": "3.1.6",
|
|
69
|
+
"@qilin-agent/client-ui-conversation": "3.1.6"
|
|
70
70
|
},
|
|
71
71
|
"files": [
|
|
72
72
|
"lib/index.js",
|