@qilin-agent/client-ui-settings-models 3.1.5 → 3.1.7

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/index.js CHANGED
@@ -1,6 +1,26 @@
1
+ import z from "@qilin-agent/schemastery";
2
+ //#region lib/types/onboarding-config.js
3
+ /** Public page-bootstrap options shared by the Host and Client halves. */
4
+ /** Validate Host configuration and its public page-bootstrap payload. */
5
+ const Config = z.object({ credentialOnboarding: z.boolean().default(true) });
6
+ /** Page-global key carrying only the public onboarding options. */
7
+ const ONBOARDING_CONFIG_GLOBAL = "__QILIN_MODELS_ONBOARDING__";
8
+ //#endregion
1
9
  //#region lib/types/index.js
2
- /** Host loader entry for the browser implementation exported from `./client`. */
3
- /** Host plugin body — no host-side behavior for the models settings plugin. */
4
- function apply() {}
10
+ /** Host configuration and page bootstrap for Models credential onboarding. */
11
+ /**
12
+ * Publish the credential-onboarding choice before browser plugins activate.
13
+ * @param ctx - Host context collecting the page's initialization data.
14
+ * @param config - plugin options with schema defaults applied by the Loader.
15
+ */
16
+ function apply(ctx, config) {
17
+ ctx.on("webserver/index-inject", (table) => {
18
+ table.push({
19
+ kind: "global",
20
+ name: ONBOARDING_CONFIG_GLOBAL,
21
+ value: { credentialOnboarding: config.credentialOnboarding }
22
+ });
23
+ });
24
+ }
5
25
  //#endregion
6
- export { apply };
26
+ export { Config, apply };
@@ -0,0 +1,17 @@
1
+ import type { InputHTMLAttributes, ReactNode } from 'react';
2
+ import type { en } from './locales.ts';
3
+ /** Input attributes and section copy for the current credential draft. */
4
+ interface ApiKeyInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'type' | 'className' | 'autoComplete'> {
5
+ /** Unsaved input; stored credentials are never read into this field. */
6
+ readonly value: string;
7
+ /** Section copy, including the same reveal labels as SecretText. */
8
+ readonly t: (key: keyof typeof en) => string;
9
+ }
10
+ /**
11
+ * Reveal only a nonempty draft; a different value starts masked, as in SecretText.
12
+ * @param props - current draft, input attributes, and translated control labels.
13
+ * @returns a password input with an optional reveal button.
14
+ */
15
+ export declare function ApiKeyInput({ value, t, ...props }: ApiKeyInputProps): ReactNode;
16
+ export {};
17
+ //# sourceMappingURL=ApiKeyInput.d.ts.map
@@ -14,11 +14,12 @@
14
14
  * and at least one model — are required here rather than at load, so the
15
15
  * failure names the field while the user is still looking at it.
16
16
  *
17
- * There is deliberately no reasoning-effort control, here or on the editor
18
- * card: effort is a per-MODEL capability, and the models under one provider
19
- * disagree about it, so a provider-scoped control can only be set to a value
20
- * some of them reject. The composer's model picker offers each model its own
21
- * levels instead.
17
+ * There is deliberately no provider-scoped reasoning-effort control, here or
18
+ * on the editor card: effort is a per-MODEL capability, and the models under
19
+ * one provider disagree about it, so a provider-scoped control can only be set
20
+ * to a value some of them reject. Each model row of a hand-declared route
21
+ * declares its own `reasoningEfforts` instead, and the composer's model picker
22
+ * offers each model those levels.
22
23
  */
23
24
  import type { ReactNode } from 'react';
24
25
  import type { ModelsOperations } from './operations.ts';
@@ -29,6 +30,8 @@ export interface CustomProviderCardProps {
29
30
  taken: readonly string[];
30
31
  /** Wire protocols the adapter can serve, in the order it reports them. */
31
32
  protocols: readonly string[];
33
+ /** Reasoning levels the adapter's schema accepts, in escalation order; empty shows no reasoning control. */
34
+ reasoningLevels: readonly string[];
32
35
  /**
33
36
  * Revision of the `llm-pi-ai` user section this card opened at, sent with
34
37
  * the create so a route another tab declared meanwhile is a refusal rather
@@ -43,6 +46,11 @@ export interface CustomProviderCardProps {
43
46
  readOnly: boolean;
44
47
  /** Close the card; `changed` reports whether a provider was created. */
45
48
  onClose: (changed: boolean) => void;
49
+ /**
50
+ * Called once per change with whether the create or the list's endpoint
51
+ * interrogation is in flight, so the owner can hold its surface still.
52
+ */
53
+ onBusyChange?: (busy: boolean) => void;
46
54
  }
47
55
  /**
48
56
  * Render the custom-provider creation card.
@@ -45,6 +45,12 @@ export interface ModelListEditorProps {
45
45
  models: readonly ModelDraft[];
46
46
  /** Installed provider whose catalog supplies defaults without endpoint I/O. */
47
47
  catalogProvider?: string | undefined;
48
+ /**
49
+ * Reasoning levels a hand-declared route's rows may declare in
50
+ * `reasoningEfforts`, in escalation order; absent or empty shows no
51
+ * reasoning control, leaving a catalog model's levels to the catalog.
52
+ */
53
+ reasoningLevels?: readonly string[] | undefined;
48
54
  /** Route input types for models absent from the installed catalog. */
49
55
  defaultInput?: readonly string[] | undefined;
50
56
  /** Whether the user layer currently owns the whole array; absent on a create. */
@@ -68,6 +74,13 @@ export interface ModelListEditorProps {
68
74
  t: (key: keyof typeof en) => string;
69
75
  /** Disable every control (read-only deployment or a pending write). */
70
76
  disabled: boolean;
77
+ /**
78
+ * Called once per change with whether an endpoint interrogation is in
79
+ * flight. The owning card folds it into its own busy state so the surface
80
+ * around the card — a mode switch, say — can refuse to move while the
81
+ * answer, and the picker it opens, is still bound for this list.
82
+ */
83
+ onBusyChange: (busy: boolean) => void;
71
84
  }
72
85
  /**
73
86
  * Render the model list with its fetch action.
@@ -0,0 +1,43 @@
1
+ /** Reasoning-level declarations for a model on a hand-declared pi-ai route. */
2
+ import type { ReactNode } from 'react';
3
+ import type { DeepSeekModelDraft } from './DeepSeekModelsEditor.tsx';
4
+ import type { ModelsKey } from './locales.ts';
5
+ /** A reasoning-level failure the Models cards name by row. */
6
+ export interface ReasoningEffortsFailure {
7
+ /** Zero-based model position. */
8
+ index: number;
9
+ /** Message key owned by the Models settings section. */
10
+ key: 'modelReasoningValueRequired' | 'modelReasoningNeedsLevel';
11
+ }
12
+ /**
13
+ * Mirror the pi-ai refusals of a hand-declared `reasoningEfforts`, so a card
14
+ * names the row instead of failing at the write.
15
+ * @param value - drafted `models` value, or `undefined` while inherited.
16
+ * @returns the first refused row, or `undefined` when the adapter will accept every row.
17
+ */
18
+ export declare function validateReasoningEfforts(value: unknown): ReasoningEffortsFailure | undefined;
19
+ /** Props of {@link ModelReasoningEfforts}. */
20
+ interface ModelReasoningEffortsProps {
21
+ /** Effective model row, including fields outside the curated editor. */
22
+ model: DeepSeekModelDraft;
23
+ /** Levels the adapter's schema accepts as `reasoningEfforts` keys, in escalation order. */
24
+ levels: readonly string[];
25
+ /** One-based row position for accessible names. */
26
+ position: number;
27
+ /** Prevent changes while read-only or saving. */
28
+ disabled: boolean;
29
+ /** Section copy. */
30
+ t: (key: ModelsKey) => string;
31
+ /** Replace this row, preserving unrelated configuration. */
32
+ onChange: (model: DeepSeekModelDraft) => void;
33
+ }
34
+ /**
35
+ * Edit the `reasoningEfforts` a hand-declared pi-ai model offers: a switch,
36
+ * then one row per level pairing the level with the value sent for it. Every
37
+ * row is read from the model, so a reused instance shows its new model.
38
+ * @param props - model declaration and row replacement action.
39
+ * @returns the reasoning-level group.
40
+ */
41
+ export declare function ModelReasoningEfforts({ model, levels, position, disabled, t, onChange }: ModelReasoningEffortsProps): ReactNode;
42
+ export {};
43
+ //# sourceMappingURL=ModelReasoningEfforts.d.ts.map
@@ -16,6 +16,8 @@ interface ModelRowProps {
16
16
  inputField: 'inputModalities' | 'input';
17
17
  inputFallback?: readonly string[] | undefined;
18
18
  inputLoading?: boolean;
19
+ /** Levels the row's `reasoningEfforts` may declare; absent or empty shows no reasoning control. */
20
+ reasoningLevels?: readonly string[] | undefined;
19
21
  expanded: boolean;
20
22
  disabled: boolean;
21
23
  t: (key: ModelsKey) => string;
@@ -11,17 +11,18 @@
11
11
  * display name and wire protocol of a pi-ai route the adapter does not ship —
12
12
  * the two fields the create card asked that route for, editable here for the
13
13
  * same reason).
14
- * Reasoning effort is deliberately absent: it is a per-MODEL capability, and
15
- * the models under one provider disagree about it, so a provider-scoped
16
- * control can only be set to a value some of them reject. The composer's
17
- * model picker offers each model its own levels; `settings.yaml` keeps the
18
- * profile field for a deployment that knows its route. Everything else stays
14
+ * There is deliberately no provider-scoped reasoning-effort control, here or
15
+ * on the editor card: effort is a per-MODEL capability, and the models under
16
+ * one provider disagree about it, so a provider-scoped control can only be set
17
+ * to a value some of them reject. Each model row of a hand-declared route
18
+ * declares its own `reasoningEfforts` instead, and the composer's model picker
19
+ * offers each model those levels. Everything else stays
19
20
  * owned by `settings.yaml`. Profile edits land as minimal `settings.mutate`
20
21
  * path ops against the stored section — the card names only the fields it can
21
22
  * see instead of rebuilding the whole subtree from a partial descriptor.
22
23
  */
23
24
  import type { ReactNode } from 'react';
24
- import type { SettingsNamespaceView, SettingsPathOpView } from '@qilin-agent/api-remotes/client';
25
+ import type { CredentialInfo, LlmNativeAuth, SettingsNamespaceView, SettingsPathOpView } from '@qilin-agent/api-remotes/client';
25
26
  import type { ModelsOperations } from './operations.ts';
26
27
  import type { SettingsSchemaOperations } from './schema-operations.ts';
27
28
  import type { en } from './locales.ts';
@@ -45,6 +46,16 @@ export interface ProviderEditorProps {
45
46
  namespace: SettingsNamespaceView;
46
47
  /** Settings-owned synchronous schema and immutable path operations. */
47
48
  schema: SettingsSchemaOperations;
49
+ /** Endpoint the route uses when its profile sets no `baseURL`; absent when the adapter reports none. */
50
+ defaultBaseURL?: string;
51
+ /** Environment variables used by the provider to construct its endpoint. */
52
+ baseURLEnv?: readonly string[];
53
+ /** Authentication the route performs when its profile names no credential reference; absent when the adapter reports none. */
54
+ nativeAuth?: LlmNativeAuth;
55
+ /** Redacted state of the profile's named credential reference, from the page snapshot. */
56
+ credential?: CredentialInfo;
57
+ /** Redacted checks for the profile's named reference or the provider's native variables. */
58
+ credentialChecks?: Readonly<Record<string, CredentialInfo>>;
48
59
  /** Path from the section root to this provider's profile. */
49
60
  settingsPath: readonly string[];
50
61
  /** The Host operations this card writes and interrogates through. */
@@ -67,6 +78,14 @@ export interface ProviderEditorProps {
67
78
  submitBusyLabelKey?: keyof typeof en;
68
79
  /** Close the editor; `changed` reports whether an Apply committed. */
69
80
  onClose: (changed: boolean) => void;
81
+ /** Called on a credential form submission before the save starts. */
82
+ onSubmitCredential?: () => void;
83
+ /**
84
+ * Called once per change with whether the apply or the model list's
85
+ * endpoint interrogation is in flight, so the owner can hold its surface
86
+ * still.
87
+ */
88
+ onBusyChange?: (busy: boolean) => void;
70
89
  }
71
90
  /**
72
91
  * The minimal path ops carrying `after` over `before`, both as the card sees
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * Models settings and product-onboarding plugin, browser half. It registers
3
3
  * the Models page plus the official-DeepSeek onboarding dialog, whose UI is
4
- * this package's modal wrapper. The Host settings and credential contracts
5
- * stay behind their existing wire APIs. Export discipline:
4
+ * this package's modal wrapper; the dialog registers only when the Host's
5
+ * published credentialOnboarding choice leaves the API-key step to the
6
+ * browser. The Host settings and credential contracts stay behind their
7
+ * existing wire APIs. Export discipline:
6
8
  * packages/client/AGENTS.md.
7
9
  */
8
10
  import type { Context as ClientContext } from '@qilin-agent/kylin';
@@ -27,13 +27,23 @@ export declare const en: {
27
27
  conflict: string;
28
28
  retry: string;
29
29
  keyInput: string;
30
+ keyReveal: string;
31
+ keyHide: string;
30
32
  keyPlaceholder: string;
31
- keyPlaceholderNative: string;
32
- keyStored: string;
33
- keyEnvLocked: string;
33
+ keyPlaceholderFallback: string;
34
+ keyPlaceholderSaved: string;
35
+ keyFallbackMissing: string;
36
+ keyFallbackDetected: string;
37
+ keyFallbackDetectedHidden: string;
38
+ keyFallbackUnchecked: string;
39
+ keyHelp: string;
40
+ authHelp: string;
34
41
  customized: string;
35
42
  baseUrl: string;
36
43
  baseUrlDefault: string;
44
+ baseUrlEnvironment: string;
45
+ baseUrlConfigured: string;
46
+ baseUrlPlaceholder: string;
37
47
  deepSeekBaseUrl: string;
38
48
  deepSeekEndpointHint: string;
39
49
  models: string;
@@ -52,6 +62,16 @@ export declare const en: {
52
62
  modelInputTypes: string;
53
63
  modelInputText: string;
54
64
  modelInputImage: string;
65
+ modelReasoning: string;
66
+ modelReasoningLevel: string;
67
+ modelReasoningValue: string;
68
+ modelReasoningHelp: string;
69
+ modelReasoningHelpText: string;
70
+ modelReasoningNeedsLevel: string;
71
+ modelReasoningValueRequired: string;
72
+ modelReasoningAdd: string;
73
+ modelReasoningRemove: string;
74
+ modelReasoningOffValuePlaceholder: string;
55
75
  addModel: string;
56
76
  removeModel: string;
57
77
  modelsEmpty: string;
@@ -94,6 +114,7 @@ export declare const en: {
94
114
  customBaseUrlInvalid: string;
95
115
  customNeedsModels: string;
96
116
  customBaseUrlPlaceholder: string;
117
+ customAnthropicBaseUrlPlaceholder: string;
97
118
  settingsPathUnresolvable: string;
98
119
  create: string;
99
120
  creating: string;
@@ -5,7 +5,7 @@
5
5
  * failure codes and Remote namespaces stay in the apply world.
6
6
  */
7
7
  import type { Context as ClientContext } from '@qilin-agent/kylin';
8
- import type { CredentialInfo, LlmDiscoveredModel, LlmModelDiscoveryRequest, SettingsNamespaceView, SettingsPathOpView } from '@qilin-agent/api-remotes/client';
8
+ import type { LlmDiscoveredModel, LlmModelDiscoveryRequest, SettingsNamespaceView, SettingsPathOpView } from '@qilin-agent/api-remotes/client';
9
9
  /** What one namespace write answered. */
10
10
  export type SettingsWriteOutcome =
11
11
  /** Committed; the view carries the stored user subtree and the new revision. */
@@ -40,12 +40,6 @@ export type ModelDiscoveryOutcome =
40
40
  };
41
41
  /** The Host operations the Models page and its cards invoke. */
42
42
  export interface ModelsOperations {
43
- /**
44
- * Read one credential reference's state.
45
- * @param ref - credential reference name.
46
- * @returns the state, or undefined when the reference is unknown or the read was refused.
47
- */
48
- describeCredential(ref: string): Promise<CredentialInfo | undefined>;
49
43
  /**
50
44
  * Store one credential literal under its reference.
51
45
  * @param ref - credential reference name.
@@ -7,7 +7,7 @@
7
7
  * re-renders from the next describe, pushed or refetched.
8
8
  */
9
9
  import type { Context as ClientContext } from '@qilin-agent/kylin';
10
- import type { CredentialInfo, LlmConfigurableProvider, LlmProviderInfo, SettingsNamespaceView } from '@qilin-agent/api-remotes/client';
10
+ import type { CredentialInfo, LlmConfigurableProvider, LlmNativeAuth, LlmProviderInfo, SettingsNamespaceView } from '@qilin-agent/api-remotes/client';
11
11
  import type { SnapshotStore } from '@qilin-agent/client-store';
12
12
  import type { SettingsDescribeFace } from '@qilin-agent/client-ui-settings/client';
13
13
  import type { SettingsSchemaOperations } from './schema-operations.ts';
@@ -19,6 +19,9 @@ export interface ProviderDirectoryEntry {
19
19
  readonly settingsPath: readonly string[];
20
20
  readonly active: boolean;
21
21
  readonly declared?: boolean;
22
+ readonly defaultBaseURL?: string;
23
+ readonly baseURLEnv?: readonly string[];
24
+ readonly nativeAuth?: LlmNativeAuth;
22
25
  readonly error?: string;
23
26
  }
24
27
  /**
@@ -47,6 +50,8 @@ export interface ProviderRow {
47
50
  * own derivation rule.
48
51
  */
49
52
  derivedCredential?: CredentialInfo;
53
+ /** Redacted checks for named or native references; absent when their read failed. */
54
+ credentialChecks?: Readonly<Record<string, CredentialInfo>>;
50
55
  }
51
56
  /** Page snapshot. */
52
57
  export interface ModelsSettingsState {
@@ -80,6 +85,16 @@ export declare function deriveKeyRef(provider: string): string;
80
85
  * @returns the protocol identifiers, or an empty list when the schema has none.
81
86
  */
82
87
  export declare function protocolChoices(namespace: SettingsNamespaceView | undefined, schema: SettingsSchemaOperations): string[];
88
+ /**
89
+ * The reasoning levels a hand-declared route's models may declare, read out of
90
+ * the owning namespace's own schema for the same reason as
91
+ * {@link protocolChoices}: the levels the page offers and the keys the
92
+ * adapter accepts in `reasoningEfforts` come from the same `Config`.
93
+ * @param namespace - the namespace view whose schema declares the profile shape.
94
+ * @param schema - settings schema operations.
95
+ * @returns the levels in the schema's escalation order, or an empty list when the schema has none.
96
+ */
97
+ export declare function reasoningLevelChoices(namespace: SettingsNamespaceView | undefined, schema: SettingsSchemaOperations): string[];
83
98
  /** The models settings page controller (one per settings surface). */
84
99
  export declare class ModelsSettingsStore {
85
100
  private readonly ctx;
@@ -89,6 +104,8 @@ export declare class ModelsSettingsStore {
89
104
  readonly store: SnapshotStore<ModelsSettingsState>;
90
105
  /** Latest load wins; an older response never overwrites a newer one. */
91
106
  private generation;
107
+ /** Callers follow the current refresh's outcome, including callers whose read was superseded. */
108
+ private readonly pendingLoads;
92
109
  /**
93
110
  * @param ctx - the page plugin's context, whose `remote.llm` and
94
111
  * `remote.credentials` namespaces carry the directory and credential reads.
@@ -101,11 +118,17 @@ export declare class ModelsSettingsStore {
101
118
  * settings answer in parallel, then one batched credential describe over
102
119
  * every referenced ref. Provider failure or absence of an initial settings
103
120
  * answer keeps the last good rows and surfaces an error; a failed settings
104
- * refresh reuses the mirror's held view.
105
- * @returns nothing; the snapshot carries the outcome.
121
+ * refresh reuses the mirror's held view. Concurrent callers resolve only
122
+ * after the current refresh publishes its ready or error snapshot.
123
+ * @returns resolution after the current snapshot is published.
124
+ * @throws the current read's unexpected rejection; superseded rejections are ignored.
106
125
  */
107
126
  load(): Promise<void>;
108
- /** Publish one load's failure text, unless a newer load already took over. */
127
+ /** Publish one joined answer; stale answers leave the current refresh in charge. */
128
+ private read;
129
+ /** Settle callers only while this read still owns the current refresh. */
130
+ private settleLoads;
131
+ /** Publish one load's failure text; the caller checked the current generation. */
109
132
  private failLoad;
110
133
  }
111
134
  /**
@@ -1,4 +1,11 @@
1
- /** Host loader entry for the browser implementation exported from `./client`. */
2
- /** Host plugin body — no host-side behavior for the models settings plugin. */
3
- export declare function apply(): void;
1
+ /** Host configuration and page bootstrap for Models credential onboarding. */
2
+ import type { Context } from '@qilin-agent/kylin';
3
+ import { type Config } from './onboarding-config.ts';
4
+ export { Config } from './onboarding-config.ts';
5
+ /**
6
+ * Publish the credential-onboarding choice before browser plugins activate.
7
+ * @param ctx - Host context collecting the page's initialization data.
8
+ * @param config - plugin options with schema defaults applied by the Loader.
9
+ */
10
+ export declare function apply(ctx: Context, config: Config): void;
4
11
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,16 @@
1
+ /** Public page-bootstrap options shared by the Host and Client halves. */
2
+ import z from '@qilin-agent/schemastery';
3
+ /** Onboarding options after schema defaults are applied. */
4
+ export interface Config {
5
+ /** Offer the browser API-key step when no native shell owns credential onboarding. */
6
+ credentialOnboarding: boolean;
7
+ }
8
+ /** Validate Host configuration and its public page-bootstrap payload. */
9
+ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
10
+ credentialOnboarding: z<boolean, boolean, "defined">;
11
+ }>>, Schemastery.ObjectT<NoInfer<{
12
+ credentialOnboarding: z<boolean, boolean, "defined">;
13
+ }>>, "plain">;
14
+ /** Page-global key carrying only the public onboarding options. */
15
+ export declare const ONBOARDING_CONFIG_GLOBAL = "__QILIN_MODELS_ONBOARDING__";
16
+ //# sourceMappingURL=onboarding-config.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@qilin-agent/client-ui-settings-models",
3
3
  "description": "Models settings and shared product-onboarding dialogs over existing settings and credential joins",
4
- "version": "3.1.5",
4
+ "version": "3.1.7",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -40,22 +40,27 @@
40
40
  },
41
41
  "license": "MIT",
42
42
  "peerDependencies": {
43
- "@qilin-agent/kylin": "~4.0.3"
43
+ "@qilin-agent/kylin": "~4.0.5"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/react": "~18.3.1",
47
+ "@testing-library/react": "^16.3.2",
47
48
  "react": "^18.2.0",
48
- "@qilin-agent/api-remotes": "3.1.5",
49
- "@qilin-agent/remote-mock": "3.1.5",
50
- "@qilin-agent/client-store": "3.1.5",
51
- "@qilin-agent/client-test-runtime": "3.1.5",
52
- "@qilin-agent/client-locale": "3.1.5",
53
- "@qilin-agent/client-ui-primitives": "3.1.5",
54
- "@qilin-agent/client-ui-settings": "3.1.5",
55
- "@qilin-agent/kylin": "~4.0.3",
56
- "@qilin-agent/client-ui-renderer": "3.1.5",
57
- "@qilin-agent/util-values": "3.1.5",
58
- "@qilin-agent/client-ui-slots": "3.1.5"
49
+ "@qilin-agent/remote-mock": "3.1.7",
50
+ "@qilin-agent/client-locale": "3.1.7",
51
+ "@qilin-agent/api-remotes": "3.1.7",
52
+ "@qilin-agent/client-store": "3.1.7",
53
+ "@qilin-agent/client-test-runtime": "3.1.7",
54
+ "@qilin-agent/client-ui-primitives": "3.1.7",
55
+ "@qilin-agent/client-ui-settings": "3.1.7",
56
+ "@qilin-agent/client-ui-slots": "3.1.7",
57
+ "@qilin-agent/kylin": "~4.0.5",
58
+ "@qilin-agent/host-webserver": "3.1.7",
59
+ "@qilin-agent/client-ui-renderer": "3.1.7",
60
+ "@qilin-agent/util-values": "3.1.7"
61
+ },
62
+ "dependencies": {
63
+ "@qilin-agent/schemastery": "~3.18.5"
59
64
  },
60
65
  "files": [
61
66
  "lib/index.js",