@yadsh/dsh-qa-surface 0.15.2 → 0.15.3
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/access/model.js +15 -0
- package/lib/access/model.js.map +1 -1
- package/lib/access/service.js +56 -16
- package/lib/access/service.js.map +1 -1
- package/lib/client/components/QaChangelog.js +13 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client.js +86 -78
- package/lib/client.js.map +1 -1
- package/lib/enforcement/skill-policy.js +2 -1
- package/lib/enforcement/skill-policy.js.map +1 -1
- package/lib/index.js +11 -9
- package/lib/index.js.map +1 -1
- package/lib/slash/catalog.js.map +1 -1
- package/lib/typert.host.js +75 -75
- package/lib/typert.remote-client.js +75 -75
- package/lib/types/access/model.d.ts +13 -0
- package/lib/types/access/service.d.ts +26 -0
- package/lib/types/index.d.ts +6 -4
- package/lib/types/slash/catalog.d.ts +5 -0
- package/package.json +3 -3
|
@@ -64,6 +64,19 @@ export declare function withdrawnSkillNames(config: QaCapabilityConfig): Readonl
|
|
|
64
64
|
*/
|
|
65
65
|
export declare function personalUserSkillNames(config: QaCapabilityConfig, ownSkills: ReadonlySet<string> | undefined): readonly string[];
|
|
66
66
|
export declare function resolveCapabilityPolicy({ config, subroleId, systemTools, systemSkills, available: installed, skillMetadata, revision, }: ResolveCapabilityPolicyInput): QaEffectiveCapabilityPolicy;
|
|
67
|
+
/**
|
|
68
|
+
* The skills a person may invoke under one policy — the whole of the
|
|
69
|
+
* user-facing allow-list, and the one place it is read.
|
|
70
|
+
*
|
|
71
|
+
* An empty `userSkills` means the role keeps no separate user list, not that it
|
|
72
|
+
* grants nothing, so the model-facing set stands in for it. A typed gesture is
|
|
73
|
+
* admitted or refused by this list and the palette is narrowed by it, so both
|
|
74
|
+
* have to derive it here: a name the palette offers but the line refuses, or
|
|
75
|
+
* one the palette hides while the line would accept, is one rule read two ways.
|
|
76
|
+
*
|
|
77
|
+
* @param policy - the effective capability policy of one session.
|
|
78
|
+
*/
|
|
79
|
+
export declare function userInvocableSkillNames(policy: QaEffectiveCapabilityPolicy): readonly string[];
|
|
67
80
|
export interface ResolveSkillAccessInput {
|
|
68
81
|
readonly config: QaCapabilityConfig;
|
|
69
82
|
/** Every discovered skill with its normalized metadata. */
|
|
@@ -158,6 +158,32 @@ export declare class QaAccessService {
|
|
|
158
158
|
policyForSessionOwner(owner: {
|
|
159
159
|
readonly id: string;
|
|
160
160
|
} | undefined, sessionId: string, agent: Agent): Promise<QaResolvedSessionPolicy | undefined>;
|
|
161
|
+
/**
|
|
162
|
+
* The policy one session record answers with: the snapshot it froze, or the
|
|
163
|
+
* role as it is configured now when the chat has never frozen one.
|
|
164
|
+
*
|
|
165
|
+
* Every read of a session's capabilities goes through here, so a chat that is
|
|
166
|
+
* running and a chat nobody has woken cannot disagree about what its role
|
|
167
|
+
* grants.
|
|
168
|
+
*/
|
|
169
|
+
private policyForRecord;
|
|
170
|
+
/**
|
|
171
|
+
* The policy of a chat this process holds no live agent for.
|
|
172
|
+
*
|
|
173
|
+
* A cold chat has an owner and a role, and the reads that name its
|
|
174
|
+
* capabilities must narrow it by the rule above — the same one a live chat is
|
|
175
|
+
* narrowed by — rather than answer "no role opinion" because the agent that
|
|
176
|
+
* carries the capability snapshot happens to be asleep. What a cold chat has
|
|
177
|
+
* no answer for is that snapshot: the catalog the deployment mounts for every
|
|
178
|
+
* chat stands in for the agent's own, which is why the project layer of this
|
|
179
|
+
* chat's workspace is missing from it, and why nothing is frozen onto the
|
|
180
|
+
* session record here — a palette read must not decide what a later turn may
|
|
181
|
+
* do.
|
|
182
|
+
*
|
|
183
|
+
* @returns the resolved policy; the ownership check is the refusal, so a
|
|
184
|
+
* foreign browser never reaches it.
|
|
185
|
+
*/
|
|
186
|
+
policyForColdSession(token: string, sessionId: string): Promise<QaEffectiveCapabilityPolicy>;
|
|
161
187
|
/** The browser's entry point: the token resolves the owning account. */
|
|
162
188
|
policyForSession(token: string, sessionId: string, agent: Agent): Promise<QaResolvedSessionPolicy | undefined>;
|
|
163
189
|
/** Activation history of one session, for review and quality analysis. */
|
package/lib/types/index.d.ts
CHANGED
|
@@ -107,10 +107,12 @@ export declare class QaSurface extends TypertRemoteService {
|
|
|
107
107
|
* check and the deployment's lockdown is the boundary, exactly as it is for
|
|
108
108
|
* every other remote.
|
|
109
109
|
*
|
|
110
|
-
* The grant
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
110
|
+
* The grant is {@link userInvocableSkillNames} — the one list the typed
|
|
111
|
+
* gesture is admitted or refused by — for every chat that has a role, woken
|
|
112
|
+
* or not: the palette a visitor sees before the chat runs is narrowed by that
|
|
113
|
+
* same rule, so it can neither offer a name the line would refuse nor hide
|
|
114
|
+
* one it would accept. `undefined` is answered only where the deployment has
|
|
115
|
+
* no roles to consult at all.
|
|
114
116
|
*/
|
|
115
117
|
private slashSessionGrant;
|
|
116
118
|
/**
|
|
@@ -39,6 +39,11 @@ export interface BuildSlashCatalogOptions {
|
|
|
39
39
|
* The session role's own user-skill grant, when the access system is on.
|
|
40
40
|
* `undefined` means the role system has no opinion, which is its state on a
|
|
41
41
|
* deployment that never enabled roles — not "grant nothing".
|
|
42
|
+
*
|
|
43
|
+
* This is the only grant a read may answer with, whatever the chat looks
|
|
44
|
+
* like: a chat that is running and a chat nobody has woken are narrowed by
|
|
45
|
+
* the same allow-list and the same role, because the palette that names a
|
|
46
|
+
* skill this chat may not invoke teaches the visitor a gesture that fails.
|
|
42
47
|
*/
|
|
43
48
|
readonly grantedSkills?: readonly string[] | undefined;
|
|
44
49
|
readonly commandSurface: QaSlashCommandSurface;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yadsh/dsh-qa-surface",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.3",
|
|
4
4
|
"description": "A focused end-user QA surface backed by native DeepSeek Harness sessions",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -135,10 +135,10 @@
|
|
|
135
135
|
"dependencies": {
|
|
136
136
|
"yaml": "^2.9.0",
|
|
137
137
|
"zod": "^4.4.3",
|
|
138
|
-
"@yadsh/dsh-audit-core": "^0.1.1",
|
|
139
138
|
"@yadsh/dsh-audit-ui": "^0.1.2",
|
|
140
|
-
"@yadsh/dsh-plugin-kit": "^0.5.0",
|
|
141
139
|
"@yadsh/dsh-documents": "^0.6.2",
|
|
140
|
+
"@yadsh/dsh-plugin-kit": "^0.5.0",
|
|
141
|
+
"@yadsh/dsh-audit-core": "^0.1.1",
|
|
142
142
|
"@yadsh/dsh-plugin-log": "^0.4.1"
|
|
143
143
|
},
|
|
144
144
|
"devDependencies": {
|