@qilin-agent/client-test-runtime 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/README.i18n.yaml CHANGED
@@ -45,8 +45,8 @@
45
45
  en: d9d7e2f11d3dfbc9
46
46
  zh: bfddde279a836900
47
47
  /qilin-agent-client-test-runtime/understand-the-implementation/source-map:
48
- en: b77fd15bc12265db
49
- zh: 1a14b6999978b72a
48
+ en: bf31d10735c9a3b3
49
+ zh: 095ac3e7a8361383
50
50
  /qilin-agent-client-test-runtime/understand-the-implementation/lifecycle:
51
51
  en: b42779f364504719
52
52
  zh: a10bad7ea1161388
package/README.md CHANGED
@@ -124,6 +124,7 @@ The bench copies no production logic: it mounts the production `SlotRegistry`, p
124
124
  | [`src/remote.ts`](src/remote.ts) | `TestRemote` double for host RPC, `RemoteError` value re-export |
125
125
  | [`src/translate.ts`](src/translate.ts) + [`src/locale-env.ts`](src/locale-env.ts) | Translation and pinned-browser-language test helpers |
126
126
  | [`src/config-form.ts`](src/config-form.ts) | `stubConfigForm` with test-driven publications and write spies |
127
+ | [`src/access.ts`](src/access.ts) | `allowAllAccess`: the access-Hook share hand-built component props spread |
127
128
  | [`src/assembly/roster.ts`](src/assembly/roster.ts) | `ClientRosterRow`, `ClientRoster` (`of`/`closure`/`pick`/`without`), the `AssemblyPlan` it annotates, and `graphFromRoster` |
128
129
  | [`src/assembly/modules.ts`](src/assembly/modules.ts) | Source `/client` imports and replacements, registered through the production module facade's pending factory queue |
129
130
  | [`src/assembly/test-client.ts`](src/assembly/test-client.ts) | `TestClient`: instance-bound Connection, shared jsdom shims, `bootClient`, mount, readiness wait, `reload`/`unload`/`dispose` |
package/README.zh.md CHANGED
@@ -124,6 +124,7 @@ test('registers into the sidebar', async ({ remote, start }) => {
124
124
  | [`src/remote.ts`](src/remote.ts) | 用于 host RPC 的 `TestRemote` 替身、`RemoteError` 值转出 |
125
125
  | [`src/translate.ts`](src/translate.ts) + [`src/locale-env.ts`](src/locale-env.ts) | 翻译与固定浏览器语言测试辅助 |
126
126
  | [`src/config-form.ts`](src/config-form.ts) | 带测试驱动发布与写入 spy 的 `stubConfigForm` |
127
+ | [`src/access.ts`](src/access.ts) | `allowAllAccess`:手写组件 props 铺开的访问 Hook 份额 |
127
128
  | [`src/assembly/roster.ts`](src/assembly/roster.ts) | `ClientRosterRow`、`ClientRoster`(`of`/`closure`/`pick`/`without`)、它所标注的 `AssemblyPlan`,以及 `graphFromRoster` |
128
129
  | [`src/assembly/modules.ts`](src/assembly/modules.ts) | 源码 `/client` 导入及替换,通过生产模块 facade 的待注册工厂队列登记 |
129
130
  | [`src/assembly/test-client.ts`](src/assembly/test-client.ts) | `TestClient`:绑定实例的 Connection、共享 jsdom 桩、`bootClient`、挂载、等就绪、`reload`/`unload`/`dispose` |
package/lib/index.js CHANGED
@@ -23,7 +23,9 @@ import { EMPTY_CHAT_SNAPSHOT } from "@qilin-agent/client-ui-chat/client";
23
23
  * CSS edits do not churn snapshots.
24
24
  * - `<svg>` internals collapse to a `data-content` fingerprint on the svg
25
25
  * element: path geometry is print noise, but the fingerprint still flips
26
- * when an icon's artwork actually changes.
26
+ * when an icon's artwork actually changes. Instance ids (`useId` gradient
27
+ * and mask names) and their `url(#…)` references are mount-order noise and
28
+ * are stripped before hashing, so the fingerprint moves only with artwork.
27
29
  */
28
30
  /** One scoped class token: `_<local>_<hash>` (local may itself contain underscores). */
29
31
  const SCOPED_CLASS = /^_(.+)_[a-z0-9]+$/;
@@ -31,11 +33,15 @@ const SCOPED_CLASS = /^_(.+)_[a-z0-9]+$/;
31
33
  function normalizeClassValue(value) {
32
34
  return value.split(/\s+/).filter((token) => token !== "").map((token) => token.replace(SCOPED_CLASS, "$1")).join(" ");
33
35
  }
36
+ /** Instance ids and their references: they shift with mount order, not artwork. */
37
+ const SVG_INSTANCE_ID = /\sid="[^"]*"/g;
38
+ const SVG_ID_REFERENCE = /url\(#[^)]*\)/g;
34
39
  /** FNV-1a 32-bit over the svg markup: deterministic, dependency-free fingerprint. */
35
40
  function fingerprint(markup) {
41
+ const stable = markup.replace(SVG_INSTANCE_ID, "").replace(SVG_ID_REFERENCE, "url(#)");
36
42
  let hash = 2166136261;
37
- for (let i = 0; i < markup.length; i++) {
38
- hash ^= markup.charCodeAt(i);
43
+ for (let i = 0; i < stable.length; i++) {
44
+ hash ^= stable.charCodeAt(i);
39
45
  hash = Math.imul(hash, 16777619);
40
46
  }
41
47
  return (hash >>> 0).toString(16).padStart(8, "0");
@@ -1296,6 +1302,17 @@ function makeTranslate(...dicts) {
1296
1302
  };
1297
1303
  }
1298
1304
  //#endregion
1305
+ //#region lib/types/access.js
1306
+ /**
1307
+ * Allow-all access for client specs. Production pages receive the
1308
+ * `remoteAccess` Client service and the global-resource `useRemoteAccess` Hook
1309
+ * from the remote-access Client plugin. Hand-built component props spread
1310
+ * {@link allowAllAccess}; a spec of a refused path overrides the Hook.
1311
+ * @module @qilin-agent/client-test-runtime/src/access
1312
+ */
1313
+ /** Access Hooks that allow every action on every resource, for hand-built component props. */
1314
+ const allowAllAccess = { useRemoteAccess: () => true };
1315
+ //#endregion
1299
1316
  //#region lib/types/locale-env.js
1300
1317
  /**
1301
1318
  * Browser-language pin for specs that assert localized copy. A fresh
@@ -1713,4 +1730,4 @@ var SlotTestRuntime = class SlotTestRuntime {
1713
1730
  }
1714
1731
  };
1715
1732
  //#endregion
1716
- export { FixtureSession, RemoteError, SlotTestRuntime, TestRemote, TestRoot, TestSessions, TestWorkspaces, bindSnapshotSelector, chatSnapshot, conversationSnapshot, createSlotRenderer, domSnapshotSerializer, makeTranslate, registerDomSnapshotSerializer, scriptedSettingsRemote, sessionSnapshot, stubConfigForm, usePinnedBrowserLanguages, workspaceSnapshot };
1733
+ export { FixtureSession, RemoteError, SlotTestRuntime, TestRemote, TestRoot, TestSessions, TestWorkspaces, allowAllAccess, bindSnapshotSelector, chatSnapshot, conversationSnapshot, createSlotRenderer, domSnapshotSerializer, makeTranslate, registerDomSnapshotSerializer, scriptedSettingsRemote, sessionSnapshot, stubConfigForm, usePinnedBrowserLanguages, workspaceSnapshot };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Allow-all access for client specs. Production pages receive the
3
+ * `remoteAccess` Client service and the global-resource `useRemoteAccess` Hook
4
+ * from the remote-access Client plugin. Hand-built component props spread
5
+ * {@link allowAllAccess}; a spec of a refused path overrides the Hook.
6
+ * @module @qilin-agent/client-test-runtime/src/access
7
+ */
8
+ import type { GlobalStandardProps } from '@qilin-agent/client-ui-slots';
9
+ /** The access Hooks every Slot component receives. */
10
+ export type AccessStandardProps = Pick<GlobalStandardProps, 'useRemoteAccess'>;
11
+ /** Access Hooks that allow every action on every resource, for hand-built component props. */
12
+ export declare const allowAllAccess: AccessStandardProps;
13
+ //# sourceMappingURL=access.d.ts.map
@@ -36,6 +36,8 @@ export { RemoteError, TestRemote } from './remote.ts';
36
36
  export { chatSnapshot, conversationSnapshot, sessionSnapshot, workspaceSnapshot, } from './fixtures.ts';
37
37
  export type { FixtureSnapshot, SessionBehaviorOverrides, SessionFixture, SessionFixtureSnapshot, Stabilizer, } from './fixtures.ts';
38
38
  export { makeTranslate } from './translate.ts';
39
+ export { allowAllAccess } from './access.ts';
40
+ export type { AccessStandardProps } from './access.ts';
39
41
  export { usePinnedBrowserLanguages } from './locale-env.ts';
40
42
  /**
41
43
  * Bind an observable source to the production renderer's selector hook.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@qilin-agent/client-test-runtime",
3
3
  "description": "Browser test runtimes: a jsdom slot bench with test-owned Session and Workspace doubles, and a whole-client tier that boots the web roster through the production bootClient over an endpoint-named Remote mock",
4
- "version": "3.1.5",
4
+ "version": "3.1.7",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -28,35 +28,35 @@
28
28
  "dependencies": {
29
29
  "@testing-library/dom": "^10.4.1",
30
30
  "@testing-library/react": "^16.3.2",
31
- "js-yaml": "^4.2.0",
31
+ "js-yaml": "^4.3.2",
32
32
  "vitest": "^4.1.8",
33
- "@qilin-agent/dsh-compat": "3.1.5"
33
+ "@qilin-agent/dsh-compat": "3.1.7"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "react": "^18.2.0",
37
37
  "react-dom": "^18.2.0",
38
- "@qilin-agent/kylin": "~4.0.3",
39
- "@qilin-agent/kylin-plugin-loader": "~1.0.4",
40
- "@qilin-agent/api-gateway": "3.1.5",
41
- "@qilin-agent/kylin-plugin-include": "~1.0.8",
42
- "@qilin-agent/api-session-controller": "3.1.5",
43
- "@qilin-agent/api-workspace-controller": "3.1.5",
44
- "@qilin-agent/attachment": "3.1.5",
45
- "@qilin-agent/client-connection": "3.1.5",
46
- "@qilin-agent/client-hmr": "3.1.5",
47
- "@qilin-agent/client-modules": "3.1.5",
48
- "@qilin-agent/client-store": "3.1.5",
49
- "@qilin-agent/client-ui-conversation": "3.1.5",
50
- "@qilin-agent/client-ui-renderer": "3.1.5",
51
- "@qilin-agent/client-ui-session": "3.1.5",
52
- "@qilin-agent/client-ui-settings": "3.1.5",
53
- "@qilin-agent/client-ui-chat": "3.1.5",
54
- "@qilin-agent/client-ui-slots": "3.1.5",
55
- "@qilin-agent/session": "3.1.5",
56
- "@qilin-agent/subagent": "3.1.5",
57
- "@qilin-agent/remote-mock": "3.1.5",
58
- "@qilin-agent/typert-protocol": "3.1.5",
59
- "@qilin-agent/client-web": "3.1.5"
38
+ "@qilin-agent/kylin": "~4.0.5",
39
+ "@qilin-agent/kylin-plugin-loader": "~1.0.6",
40
+ "@qilin-agent/kylin-plugin-include": "~1.0.10",
41
+ "@qilin-agent/api-gateway": "3.1.7",
42
+ "@qilin-agent/api-session-controller": "3.1.7",
43
+ "@qilin-agent/api-workspace-controller": "3.1.7",
44
+ "@qilin-agent/attachment": "3.1.7",
45
+ "@qilin-agent/client-connection": "3.1.7",
46
+ "@qilin-agent/client-hmr": "3.1.7",
47
+ "@qilin-agent/client-store": "3.1.7",
48
+ "@qilin-agent/client-ui-chat": "3.1.7",
49
+ "@qilin-agent/client-ui-conversation": "3.1.7",
50
+ "@qilin-agent/client-modules": "3.1.7",
51
+ "@qilin-agent/client-ui-renderer": "3.1.7",
52
+ "@qilin-agent/client-ui-session": "3.1.7",
53
+ "@qilin-agent/client-ui-slots": "3.1.7",
54
+ "@qilin-agent/client-web": "3.1.7",
55
+ "@qilin-agent/remote-mock": "3.1.7",
56
+ "@qilin-agent/client-ui-settings": "3.1.7",
57
+ "@qilin-agent/session": "3.1.7",
58
+ "@qilin-agent/typert-protocol": "3.1.7",
59
+ "@qilin-agent/subagent": "3.1.7"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/js-yaml": "^4.0.9",
@@ -64,84 +64,85 @@
64
64
  "@types/react-dom": "~18.3.0",
65
65
  "react": "^18.2.0",
66
66
  "react-dom": "^18.2.0",
67
- "@qilin-agent/api-gateway": "3.1.5",
68
- "@qilin-agent/api-workspace-controller": "3.1.5",
69
- "@qilin-agent/api-remotes": "3.1.5",
70
- "@qilin-agent/api-session-controller": "3.1.5",
71
- "@qilin-agent/api-terminal-controller": "3.1.5",
72
- "@qilin-agent/attachment": "3.1.5",
73
- "@qilin-agent/api-workspace-files": "3.1.5",
74
- "@qilin-agent/client-connection": "3.1.5",
75
- "@qilin-agent/client-file-upload": "3.1.5",
76
- "@qilin-agent/client-hmr": "3.1.5",
77
- "@qilin-agent/base": "3.1.5",
78
- "@qilin-agent/client-locale": "3.1.5",
79
- "@qilin-agent/client-modules": "3.1.5",
80
- "@qilin-agent/client-resources": "3.1.5",
81
- "@qilin-agent/client-ui-account": "3.1.5",
82
- "@qilin-agent/client-store": "3.1.5",
83
- "@qilin-agent/client-ui-agent-preset": "3.1.5",
84
- "@qilin-agent/client-ui-approval": "3.1.5",
85
- "@qilin-agent/client-ui-attachment": "3.1.5",
86
- "@qilin-agent/client-ui-chat": "3.1.5",
87
- "@qilin-agent/client-ui-brand": "3.1.5",
88
- "@qilin-agent/client-ui-commands": "3.1.5",
89
- "@qilin-agent/client-ui-conversation": "3.1.5",
90
- "@qilin-agent/client-ui-deliverables": "3.1.5",
91
- "@qilin-agent/client-ui-goal": "3.1.5",
92
- "@qilin-agent/client-ui-input-trigger": "3.1.5",
93
- "@qilin-agent/client-ui-kylin": "3.1.5",
94
- "@qilin-agent/client-ui-jobs": "3.1.5",
95
- "@qilin-agent/client-ui-layout": "3.1.5",
96
- "@qilin-agent/client-ui-message-feedback": "3.1.5",
97
- "@qilin-agent/client-ui-model-selection": "3.1.5",
98
- "@qilin-agent/client-ui-permission-presets": "3.1.5",
99
- "@qilin-agent/client-ui-plan": "3.1.5",
100
- "@qilin-agent/client-ui-open-in-app": "3.1.5",
101
- "@qilin-agent/client-ui-reference": "3.1.5",
102
- "@qilin-agent/client-ui-plugin-manager": "3.1.5",
103
- "@qilin-agent/client-ui-renderer": "3.1.5",
104
- "@qilin-agent/client-ui-schedule": "3.1.5",
105
- "@qilin-agent/client-ui-session": "3.1.5",
106
- "@qilin-agent/client-ui-settings": "3.1.5",
107
- "@qilin-agent/client-ui-settings-general": "3.1.5",
108
- "@qilin-agent/client-ui-settings-mcp": "3.1.5",
109
- "@qilin-agent/client-ui-settings-models": "3.1.5",
110
- "@qilin-agent/client-ui-settings-plugin-inventory": "3.1.5",
111
- "@qilin-agent/client-ui-settings-plugins": "3.1.5",
112
- "@qilin-agent/client-ui-settings-unarchive-sessions": "3.1.5",
113
- "@qilin-agent/client-ui-sidebar": "3.1.5",
114
- "@qilin-agent/client-ui-settings-skills": "3.1.5",
115
- "@qilin-agent/client-ui-sidebar-browser": "3.1.5",
116
- "@qilin-agent/client-ui-sidebar-documentpreview": "3.1.5",
117
- "@qilin-agent/client-ui-sidebar-files": "3.1.5",
118
- "@qilin-agent/client-ui-sidebar-plans": "3.1.5",
119
- "@qilin-agent/client-ui-sidebar-right": "3.1.5",
120
- "@qilin-agent/client-ui-sidebar-tasks": "3.1.5",
121
- "@qilin-agent/client-ui-sidebar-terminal": "3.1.5",
122
- "@qilin-agent/client-ui-skill": "3.1.5",
123
- "@qilin-agent/client-ui-subagent": "3.1.5",
124
- "@qilin-agent/client-ui-slots": "3.1.5",
125
- "@qilin-agent/client-ui-theme": "3.1.5",
126
- "@qilin-agent/client-ui-theme-brand": "3.1.5",
127
- "@qilin-agent/client-ui-tool": "3.1.5",
128
- "@qilin-agent/client-ui-user-questions": "3.1.5",
129
- "@qilin-agent/client-ui-trajectory": "3.1.5",
130
- "@qilin-agent/client-ui-workspace": "3.1.5",
131
- "@qilin-agent/client-ui-workflow-run": "3.1.5",
132
- "@qilin-agent/client-web": "3.1.5",
133
- "@qilin-agent/kylin-plugin-include": "~1.0.8",
134
- "@qilin-agent/kylin": "~4.0.3",
135
- "@qilin-agent/kylin-client-runner": "3.1.5",
136
- "@qilin-agent/session": "3.1.5",
137
- "@qilin-agent/kylin-plugin-loader": "~1.0.4",
138
- "@qilin-agent/session-log-export": "3.1.5",
139
- "@qilin-agent/remote-mock": "3.1.5",
140
- "@qilin-agent/subagent": "3.1.5",
141
- "@qilin-agent/typert-protocol": "3.1.5",
142
- "@qilin-agent/settings": "3.1.5",
143
- "@qilin-agent/typert-registry": "3.1.5",
144
- "@qilin-agent/web-app": "3.1.5"
67
+ "@qilin-agent/api-remote-access": "3.1.7",
68
+ "@qilin-agent/api-terminal-controller": "3.1.7",
69
+ "@qilin-agent/api-gateway": "3.1.7",
70
+ "@qilin-agent/api-session-controller": "3.1.7",
71
+ "@qilin-agent/api-remotes": "3.1.7",
72
+ "@qilin-agent/api-workspace-controller": "3.1.7",
73
+ "@qilin-agent/attachment": "3.1.7",
74
+ "@qilin-agent/client-connection": "3.1.7",
75
+ "@qilin-agent/api-workspace-files": "3.1.7",
76
+ "@qilin-agent/client-file-upload": "3.1.7",
77
+ "@qilin-agent/client-hmr": "3.1.7",
78
+ "@qilin-agent/client-locale": "3.1.7",
79
+ "@qilin-agent/client-modules": "3.1.7",
80
+ "@qilin-agent/client-resources": "3.1.7",
81
+ "@qilin-agent/base": "3.1.7",
82
+ "@qilin-agent/client-store": "3.1.7",
83
+ "@qilin-agent/client-ui-agent-preset": "3.1.7",
84
+ "@qilin-agent/client-ui-account": "3.1.7",
85
+ "@qilin-agent/client-ui-attachment": "3.1.7",
86
+ "@qilin-agent/client-ui-brand": "3.1.7",
87
+ "@qilin-agent/client-ui-approval": "3.1.7",
88
+ "@qilin-agent/client-ui-chat": "3.1.7",
89
+ "@qilin-agent/client-ui-conversation": "3.1.7",
90
+ "@qilin-agent/client-ui-commands": "3.1.7",
91
+ "@qilin-agent/client-ui-deliverables": "3.1.7",
92
+ "@qilin-agent/client-ui-goal": "3.1.7",
93
+ "@qilin-agent/client-ui-input-trigger": "3.1.7",
94
+ "@qilin-agent/client-ui-kylin": "3.1.7",
95
+ "@qilin-agent/client-ui-model-selection": "3.1.7",
96
+ "@qilin-agent/client-ui-layout": "3.1.7",
97
+ "@qilin-agent/client-ui-open-in-app": "3.1.7",
98
+ "@qilin-agent/client-ui-permission-presets": "3.1.7",
99
+ "@qilin-agent/client-ui-message-feedback": "3.1.7",
100
+ "@qilin-agent/client-ui-plugin-manager": "3.1.7",
101
+ "@qilin-agent/client-ui-plan": "3.1.7",
102
+ "@qilin-agent/client-ui-reference": "3.1.7",
103
+ "@qilin-agent/client-ui-renderer": "3.1.7",
104
+ "@qilin-agent/client-ui-jobs": "3.1.7",
105
+ "@qilin-agent/client-ui-session": "3.1.7",
106
+ "@qilin-agent/client-ui-settings": "3.1.7",
107
+ "@qilin-agent/client-ui-settings-general": "3.1.7",
108
+ "@qilin-agent/client-ui-settings-models": "3.1.7",
109
+ "@qilin-agent/client-ui-settings-mcp": "3.1.7",
110
+ "@qilin-agent/client-ui-settings-unarchive-sessions": "3.1.7",
111
+ "@qilin-agent/client-ui-settings-plugin-inventory": "3.1.7",
112
+ "@qilin-agent/client-ui-sidebar": "3.1.7",
113
+ "@qilin-agent/client-ui-sidebar-browser": "3.1.7",
114
+ "@qilin-agent/client-ui-sidebar-documentpreview": "3.1.7",
115
+ "@qilin-agent/client-ui-settings-skills": "3.1.7",
116
+ "@qilin-agent/client-ui-schedule": "3.1.7",
117
+ "@qilin-agent/client-ui-sidebar-plans": "3.1.7",
118
+ "@qilin-agent/client-ui-sidebar-files": "3.1.7",
119
+ "@qilin-agent/client-ui-sidebar-right": "3.1.7",
120
+ "@qilin-agent/client-ui-sidebar-tasks": "3.1.7",
121
+ "@qilin-agent/client-ui-sidebar-terminal": "3.1.7",
122
+ "@qilin-agent/client-ui-skill": "3.1.7",
123
+ "@qilin-agent/client-ui-slots": "3.1.7",
124
+ "@qilin-agent/client-ui-theme-brand": "3.1.7",
125
+ "@qilin-agent/client-ui-settings-plugins": "3.1.7",
126
+ "@qilin-agent/client-ui-subagent": "3.1.7",
127
+ "@qilin-agent/client-ui-theme": "3.1.7",
128
+ "@qilin-agent/client-ui-tool": "3.1.7",
129
+ "@qilin-agent/client-ui-trajectory": "3.1.7",
130
+ "@qilin-agent/client-ui-user-questions": "3.1.7",
131
+ "@qilin-agent/client-ui-workflow-run": "3.1.7",
132
+ "@qilin-agent/client-ui-workspace": "3.1.7",
133
+ "@qilin-agent/client-web": "3.1.7",
134
+ "@qilin-agent/kylin": "~4.0.5",
135
+ "@qilin-agent/kylin-client-runner": "3.1.7",
136
+ "@qilin-agent/kylin-plugin-include": "~1.0.10",
137
+ "@qilin-agent/kylin-plugin-loader": "~1.0.6",
138
+ "@qilin-agent/session": "3.1.7",
139
+ "@qilin-agent/session-log-export": "3.1.7",
140
+ "@qilin-agent/remote-mock": "3.1.7",
141
+ "@qilin-agent/subagent": "3.1.7",
142
+ "@qilin-agent/typert-protocol": "3.1.7",
143
+ "@qilin-agent/settings": "3.1.7",
144
+ "@qilin-agent/web-app": "3.1.7",
145
+ "@qilin-agent/typert-registry": "3.1.7"
145
146
  },
146
147
  "files": [
147
148
  "lib/index.js",