@yadsh/dsh-qa-surface 0.7.3 → 0.8.0
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.md +56 -9
- package/lib/access/model.js +24 -4
- package/lib/access/model.js.map +1 -1
- package/lib/access/role-repository.js +199 -91
- package/lib/access/role-repository.js.map +1 -1
- package/lib/access/service.js +194 -6
- package/lib/access/service.js.map +1 -1
- package/lib/account-remotes.js +2 -4
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +447 -0
- package/lib/accounts/database.js.map +1 -0
- package/lib/accounts/file.js +27 -90
- package/lib/accounts/file.js.map +1 -1
- package/lib/accounts/store.js +210 -59
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/quality-store.js +199 -54
- package/lib/admin/quality-store.js.map +1 -1
- package/lib/admin/service.js +39 -6
- package/lib/admin/service.js.map +1 -1
- package/lib/cli.js +2 -1
- package/lib/cli.js.map +1 -1
- package/lib/client/QaSessionController.js +20 -2
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +69 -31
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +4 -0
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/admin/QaAdmin.js +17 -7
- package/lib/client/admin/QaAdmin.js.map +1 -1
- package/lib/client/admin/{format.js → copy.js} +1 -1
- package/lib/client/admin/copy.js.map +1 -0
- package/lib/client/admin/pages/Conversations.js +1 -1
- package/lib/client/admin/pages/Conversations.js.map +1 -1
- package/lib/client/admin/pages/Overview.js +1 -1
- package/lib/client/admin/pages/Overview.js.map +1 -1
- package/lib/client/admin/pages/Quality.js +1 -1
- package/lib/client/admin/pages/Quality.js.map +1 -1
- package/lib/client/admin/pages/Review.js +1 -1
- package/lib/client/admin/pages/Review.js.map +1 -1
- package/lib/client/admin/pages/Users.js +6 -2
- package/lib/client/admin/pages/Users.js.map +1 -1
- package/lib/client/admin/shared.js +1 -1
- package/lib/client/admin/shared.js.map +1 -1
- package/lib/client/components/Markdown.js +14 -206
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaChangelog.js +60 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaHeader.js +1 -3
- package/lib/client/components/QaHeader.js.map +1 -1
- package/lib/client/components/QaMessage.js +9 -4
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaSidebar.js +5 -2
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaSourcesPanel.js +3 -18
- package/lib/client/components/QaSourcesPanel.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +4 -8
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/components/source-icon.js +26 -0
- package/lib/client/components/source-icon.js.map +1 -0
- package/lib/client/components/thinking-phrases.js +2 -11
- package/lib/client/components/thinking-phrases.js.map +1 -1
- package/lib/client/components/use-now.js +21 -0
- package/lib/client/components/use-now.js.map +1 -0
- package/lib/client/index.js +11 -3
- package/lib/client/index.js.map +1 -1
- package/lib/client/lineage.js +18 -0
- package/lib/client/lineage.js.map +1 -0
- package/lib/client/markdown/CodeBlock.js +28 -0
- package/lib/client/markdown/CodeBlock.js.map +1 -0
- package/lib/client/markdown/blocks.js +342 -0
- package/lib/client/markdown/blocks.js.map +1 -0
- package/lib/client/markdown/highlight.js +1089 -0
- package/lib/client/markdown/highlight.js.map +1 -0
- package/lib/client/markdown/inline.js +377 -0
- package/lib/client/markdown/inline.js.map +1 -0
- package/lib/client/markdown/render.js +147 -0
- package/lib/client/markdown/render.js.map +1 -0
- package/lib/client/markdown/source-chip.js +55 -0
- package/lib/client/markdown/source-chip.js.map +1 -0
- package/lib/client/markdown/use-transient-flag.js +27 -0
- package/lib/client/markdown/use-transient-flag.js.map +1 -0
- package/lib/client/role/RoleSelector.js +11 -2
- package/lib/client/role/RoleSelector.js.map +1 -1
- package/lib/client/role/preview.js +123 -0
- package/lib/client/role/preview.js.map +1 -0
- package/lib/client/styles.js +73 -19
- package/lib/client/styles.js.map +1 -1
- package/lib/client.js +3137 -761
- package/lib/client.js.map +1 -1
- package/lib/config-resolvers/accounts.js +15 -0
- package/lib/config-resolvers/accounts.js.map +1 -1
- package/lib/config-resolvers/defaults.js +8 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/sources.js +16 -0
- package/lib/config-resolvers/sources.js.map +1 -1
- package/lib/config.js +57 -0
- package/lib/config.js.map +1 -1
- package/lib/index.js +25 -10
- package/lib/index.js.map +1 -1
- package/lib/lockdown-policy.js +19 -0
- package/lib/lockdown-policy.js.map +1 -1
- package/lib/provenance/host-store.js +7 -3
- package/lib/provenance/host-store.js.map +1 -1
- package/lib/provenance/retention.js +25 -0
- package/lib/provenance/retention.js.map +1 -0
- package/lib/provenance/snapshot-store.js +290 -35
- package/lib/provenance/snapshot-store.js.map +1 -1
- package/lib/questions.js +16 -3
- package/lib/questions.js.map +1 -1
- package/lib/secure-session.js +136 -23
- package/lib/secure-session.js.map +1 -1
- package/lib/typert.host.js +79 -52
- package/lib/typert.remote-client.js +75 -48
- package/lib/types/access/role-repository.d.ts +38 -7
- package/lib/types/access/service.d.ts +77 -3
- package/lib/types/account-remotes.d.ts +8 -4
- package/lib/types/accounts/database.d.ts +84 -0
- package/lib/types/accounts/file.d.ts +17 -39
- package/lib/types/accounts/store.d.ts +98 -19
- package/lib/types/admin/quality-store.d.ts +20 -2
- package/lib/types/client/admin/{format.d.ts → copy.d.ts} +1 -1
- package/lib/types/client/components/Markdown.d.ts +7 -8
- package/lib/types/client/components/QaSidebar.d.ts +3 -1
- package/lib/types/client/components/QaSourcesPanel.d.ts +1 -3
- package/lib/types/client/components/source-icon.d.ts +12 -0
- package/lib/types/client/components/use-now.d.ts +8 -0
- package/lib/types/client/lineage.d.ts +15 -0
- package/lib/types/client/markdown/CodeBlock.d.ts +14 -0
- package/lib/types/client/markdown/blocks.d.ts +74 -0
- package/lib/types/client/markdown/highlight.d.ts +29 -0
- package/lib/types/client/markdown/inline.d.ts +40 -0
- package/lib/types/client/markdown/render.d.ts +13 -0
- package/lib/types/client/markdown/source-chip.d.ts +32 -0
- package/lib/types/client/markdown/use-transient-flag.d.ts +12 -0
- package/lib/types/client/role/RoleSelector.d.ts +11 -1
- package/lib/types/client/role/preview.d.ts +109 -0
- package/lib/types/index.d.ts +5 -1
- package/lib/types/lockdown-policy.d.ts +16 -0
- package/lib/types/provenance/host-store.d.ts +7 -3
- package/lib/types/provenance/retention.d.ts +46 -0
- package/lib/types/provenance/snapshot-store.d.ts +63 -7
- package/lib/types/questions.d.ts +5 -0
- package/lib/types/secure-session.d.ts +27 -1
- package/lib/types/types.d.ts +54 -0
- package/package.json +3 -3
- package/lib/client/admin/format.js.map +0 -1
package/README.md
CHANGED
|
@@ -13,6 +13,15 @@ Session and Agent Loop.
|
|
|
13
13
|
- renders only user text, assistant-visible text and safe status messages;
|
|
14
14
|
- supports streaming, Stop, optional New chat, safe Markdown, copy actions and
|
|
15
15
|
a responsive first-party-style conversation layout;
|
|
16
|
+
- renders assistant Markdown with this plugin's own GFM grammar — headings
|
|
17
|
+
through `######`, nested and task lists, tables, quotes, images, autolinks,
|
|
18
|
+
reference links — inside an HTML-free renderer, and relays the host theme's
|
|
19
|
+
own typography and syntax colors (`--dsw-font-markdown-*`,
|
|
20
|
+
`--dsw-alias-markdown-*`, `--shiki-token-*`) so a fenced block here reads
|
|
21
|
+
like one in DSH's own transcript, in either theme and at any font-size
|
|
22
|
+
preference. A fence carries the language banner, a copy button and a built-in
|
|
23
|
+
highlighter for the languages answers use; an unknown or absent language
|
|
24
|
+
stays plain monospace;
|
|
16
25
|
- optionally shows a minimal per-browser chat-history sidebar
|
|
17
26
|
(`ui.showSessionList`) whose switching re-runs policy attestation;
|
|
18
27
|
- blocks unsupported approvals/questions instead of auto-approving them, and can
|
|
@@ -145,6 +154,10 @@ config:
|
|
|
145
154
|
enabled: false
|
|
146
155
|
allowRegistration: true
|
|
147
156
|
sessionTtlDays: 30
|
|
157
|
+
# Login/registration attempts accepted per rolling minute, store-wide
|
|
158
|
+
# (optional). The limit backs the password checks; raise it only when a
|
|
159
|
+
# shared kiosk genuinely needs the headroom.
|
|
160
|
+
maxAuthAttemptsPerMinute: 30
|
|
148
161
|
showOtherUsersChats: false
|
|
149
162
|
perUserWorkspace: false
|
|
150
163
|
profile:
|
|
@@ -178,6 +191,13 @@ config:
|
|
|
178
191
|
# unsupported: refuse ask_user_question with an actionable reason.
|
|
179
192
|
# interactive: park the request over the composer as an answerable form.
|
|
180
193
|
questions: unsupported
|
|
194
|
+
# Root-page entry behavior (optional; see "Serving the QA rig over the LAN").
|
|
195
|
+
entry:
|
|
196
|
+
# Inject the root → /qa redirect for non-loopback hostnames.
|
|
197
|
+
redirectNonLoopback: true
|
|
198
|
+
# Let the /qa route run the one-time ?token= host-cookie exchange itself,
|
|
199
|
+
# so transparent entry works without the deploy proxy.
|
|
200
|
+
cookieBootstrap: true
|
|
181
201
|
lockdown:
|
|
182
202
|
enabled: true
|
|
183
203
|
enforceFixedAgentPreset: true
|
|
@@ -630,7 +650,10 @@ still opens in an explicit compatibility read-only mode. Send, stop, approvals
|
|
|
630
650
|
and questions stay disabled so the historical session cannot bypass the
|
|
631
651
|
current workspace or permission boundary; use New chat to continue under the
|
|
632
652
|
current configuration. A chat the Host no longer lists is pruned from the
|
|
633
|
-
index
|
|
653
|
+
index, and so is a delegated subagent session: the rows, the chat counter in
|
|
654
|
+
the account settings and the first-login claim batch all read the same lineage
|
|
655
|
+
marks the host list carries, so a subagent's transcript can never be reopened,
|
|
656
|
+
counted or migrated as a chat. Each
|
|
634
657
|
row carries a two-click delete control that removes the chat from this
|
|
635
658
|
browser's index; deleting the chat that is currently open continues in a
|
|
636
659
|
fresh attested session. Host-side sessions are not deleted — DSH 0.1.x
|
|
@@ -710,10 +733,17 @@ audit trail at `/qa/admin`. Capability choices come from the live tool and
|
|
|
710
733
|
skill registries; configured-but-missing entries remain visible and are not
|
|
711
734
|
deleted. Admin authorization affects only the management API and never grants
|
|
712
735
|
agent capabilities. `Preview as role` creates an ordinary session using the
|
|
713
|
-
selected role's real server-enforced policy and shows
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
736
|
+
selected role's real server-enforced policy and shows the preview banner, which
|
|
737
|
+
carries the way out. The preview belongs to the navigation that opened it: it
|
|
738
|
+
ends when that entry is left, and an ordinary account never holds it, so a chat
|
|
739
|
+
started later in the same tab runs under the account's own default profile.
|
|
740
|
+
A user page reports each assigned profile's effective capabilities the way a
|
|
741
|
+
session resolves them: the deployment's pinned tools plus Common and the role,
|
|
742
|
+
the skill-grantable ceiling separately, and declared audiences among the
|
|
743
|
+
skills.
|
|
744
|
+
|
|
745
|
+
The configuration lives in `$DSH_HOME/qa-capability-policies.db` (a pre-0.8.0
|
|
746
|
+
`qa-capability-policies.json` beside it is imported on first use); user
|
|
717
747
|
assignments and session snapshots stay with the existing account store. Tools
|
|
718
748
|
are filtered with an agent-scoped restriction and a pre-execution gate. Skills
|
|
719
749
|
use an agent-scoped `skill` consumer that publishes only the allow-listed
|
|
@@ -721,15 +751,24 @@ catalog and rejects direct out-of-policy loads with `SKILL_NOT_AVAILABLE`.
|
|
|
721
751
|
The browser selector is hidden for a single assigned role. Switching roles
|
|
722
752
|
after a meaningful turn requires confirmation and creates a new conversation.
|
|
723
753
|
|
|
724
|
-
### Tools that arrive with a skill
|
|
754
|
+
### Tools that arrive with a skill, and tools taken away
|
|
725
755
|
|
|
726
|
-
A role's tools are split into
|
|
727
|
-
first model step. `skillGrantable` tools are a ceiling, not a grant: they
|
|
728
|
-
out of the model's tool list until an activated skill requires them, which
|
|
756
|
+
A role's tools are split into three classes. `always` tools are visible from
|
|
757
|
+
the first model step. `skillGrantable` tools are a ceiling, not a grant: they
|
|
758
|
+
stay out of the model's tool list until an activated skill requires them, which
|
|
729
759
|
keeps a large catalog such as browser automation out of every step of every
|
|
730
760
|
conversation. An older flat `tools: []` list is read as `always`, so an
|
|
731
761
|
upgraded deployment never hands out more than it did before.
|
|
732
762
|
|
|
763
|
+
`deny` withdraws a tool. The deployment's pinned `toolPolicy.allow` reaches
|
|
764
|
+
every profile, so a pinned name cannot simply be unchecked in a role; a denial
|
|
765
|
+
beats it, beats the Common layer and beats every skill, and it narrows the
|
|
766
|
+
ceiling below. Because the ceiling is a property of the conversation rather
|
|
767
|
+
than of one agent, the agents a chat delegates to — subagents and the named
|
|
768
|
+
domain experts — are held to it as well: they may reach anything the role can
|
|
769
|
+
reach, including tools a skill would grant, and nothing beyond it. Withdrawing
|
|
770
|
+
`dsh_git_*` from a role therefore withdraws it from that role's experts too.
|
|
771
|
+
|
|
733
772
|
### Skills declare their own audience
|
|
734
773
|
|
|
735
774
|
A skill describes itself inside the ordinary `metadata` block of its
|
|
@@ -858,6 +897,14 @@ the `qaSurface/describe` Host Remote, so branding, session pinning and
|
|
|
858
897
|
lockdown UI switches keep working over the LAN. Host-side enforcement was
|
|
859
898
|
never dependent on that read path.
|
|
860
899
|
|
|
900
|
+
`describe` takes no token on purpose — the browser needs the configuration
|
|
901
|
+
before it can render anything — so treat its answer as public deployment
|
|
902
|
+
metadata: any `/qa` visitor can read the full resolved configuration, not
|
|
903
|
+
only the audience-facing projection, including operator-side values such as
|
|
904
|
+
the `lockdown.sharedReadOnlyRoots` paths. Keep credentials and secrets out of
|
|
905
|
+
the `qa-surface` configuration entirely; the plugin declares no field for
|
|
906
|
+
them, and nothing in the channel redacts the resolved values.
|
|
907
|
+
|
|
861
908
|
What a LAN deployment does not change:
|
|
862
909
|
|
|
863
910
|
- DSH has no authentication or TLS on this port; anyone who can reach it can
|
package/lib/access/model.js
CHANGED
|
@@ -29,12 +29,14 @@ export function normalizeToolSelection(value, label = "tools") {
|
|
|
29
29
|
return Object.freeze({
|
|
30
30
|
always: uniqueIds(value, label),
|
|
31
31
|
skillGrantable: Object.freeze([]),
|
|
32
|
+
deny: Object.freeze([]),
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
const selection = value;
|
|
35
36
|
return Object.freeze({
|
|
36
37
|
always: uniqueIds(selection?.always ?? [], `${label}.always`),
|
|
37
38
|
skillGrantable: uniqueIds(selection?.skillGrantable ?? [], `${label}.skillGrantable`),
|
|
39
|
+
deny: uniqueIds(selection?.deny ?? [], `${label}.deny`),
|
|
38
40
|
});
|
|
39
41
|
}
|
|
40
42
|
export function normalizeCapabilitySelection(value) {
|
|
@@ -149,12 +151,25 @@ export function roleToolSelection(config, subroleId) {
|
|
|
149
151
|
const role = config.subroles.find((candidate) => candidate.id === subroleId && candidate.enabled);
|
|
150
152
|
if (role === undefined)
|
|
151
153
|
throw new TypeError("QA subrole is unavailable");
|
|
154
|
+
// A denial from either layer wins over every grant, including the pinned
|
|
155
|
+
// system tools: that is the only way an administrator can withdraw a name
|
|
156
|
+
// the deployment hands out to every profile. It narrows the grant ceiling
|
|
157
|
+
// too, so a skill cannot hand back what the role takes away.
|
|
158
|
+
const denied = new Set([
|
|
159
|
+
...(config.common.tools.deny ?? []),
|
|
160
|
+
...(role.capabilities.tools.deny ?? []),
|
|
161
|
+
]);
|
|
162
|
+
const granted = (values) => uniqueIds(values, "tools").filter((name) => !denied.has(name));
|
|
152
163
|
return Object.freeze({
|
|
153
|
-
always:
|
|
154
|
-
|
|
164
|
+
always: granted([
|
|
165
|
+
...config.common.tools.always,
|
|
166
|
+
...role.capabilities.tools.always,
|
|
167
|
+
]),
|
|
168
|
+
skillGrantable: granted([
|
|
155
169
|
...config.common.tools.skillGrantable,
|
|
156
170
|
...role.capabilities.tools.skillGrantable,
|
|
157
|
-
]
|
|
171
|
+
]),
|
|
172
|
+
deny: Object.freeze([...denied]),
|
|
158
173
|
});
|
|
159
174
|
}
|
|
160
175
|
/** The ceiling that bounds what one activated skill may add to the toolset. */
|
|
@@ -227,7 +242,12 @@ export function resolveCapabilityPolicy({ config, subroleId, systemTools, system
|
|
|
227
242
|
const systemToolIds = uniqueIds(systemTools, "system tools");
|
|
228
243
|
const systemSkillIds = uniqueIds(systemSkills, "system skills");
|
|
229
244
|
const selection = roleToolSelection(config, role.id);
|
|
230
|
-
|
|
245
|
+
// The denial reaches the system tools too: the deployment pins them for every
|
|
246
|
+
// profile, and withdrawing one is the only reason this list exists.
|
|
247
|
+
const denied = new Set(selection.deny ?? []);
|
|
248
|
+
const configuredBase = [
|
|
249
|
+
...new Set([...systemToolIds, ...selection.always]),
|
|
250
|
+
].filter((name) => !denied.has(name));
|
|
231
251
|
const configuredGrantable = selection.skillGrantable;
|
|
232
252
|
const { visible: configuredSkills, declared: declaredSkills } = resolveVisibleSkills(config, role, systemSkillIds, skillMetadata ?? new Map());
|
|
233
253
|
const baseTools = [...available(configuredBase, installed.tools)];
|
package/lib/access/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/access/model.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/access/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +1,107 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import path from "node:path";
|
|
1
|
+
import { readFileSync, renameSync } from "node:fs";
|
|
2
|
+
import { SqliteDatabase, } from "@yadsh/dsh-plugin-kit/sqlite";
|
|
4
3
|
import { defaultCapabilityConfig, normalizeCapabilityConfig, normalizeCapabilitySelection, normalizeSubrole, } from "./model.js";
|
|
5
4
|
import { normalizeSkillOverride } from "./skill-metadata.js";
|
|
6
5
|
const MAX_AUDIT_EVENTS = 1_000;
|
|
6
|
+
const MIGRATIONS = [
|
|
7
|
+
{
|
|
8
|
+
version: 1,
|
|
9
|
+
up: `
|
|
10
|
+
CREATE TABLE role_config (
|
|
11
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
12
|
+
json TEXT NOT NULL
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
-- One row per policy change. The trail is bounded by count and not by
|
|
16
|
+
-- age: policies change rarely, and who granted what to whom is worth
|
|
17
|
+
-- keeping exactly as long as the store it replaces did.
|
|
18
|
+
CREATE TABLE role_audit (
|
|
19
|
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
20
|
+
timestamp TEXT NOT NULL,
|
|
21
|
+
actor_id TEXT NOT NULL,
|
|
22
|
+
action TEXT NOT NULL,
|
|
23
|
+
target_id TEXT,
|
|
24
|
+
before TEXT,
|
|
25
|
+
after TEXT
|
|
26
|
+
);
|
|
27
|
+
`,
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
/** SQLite hands back null-prototype records; the row shapes describe them. */
|
|
31
|
+
function asRows(value) {
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* One audit payload as text. Absent or unserializable values become NULL: the
|
|
36
|
+
* trail records that there was nothing to compare, and SQLite has no
|
|
37
|
+
* `undefined` to bind.
|
|
38
|
+
*/
|
|
7
39
|
function auditSnapshot(value) {
|
|
8
|
-
return JSON.stringify(value);
|
|
40
|
+
return JSON.stringify(value) ?? null;
|
|
9
41
|
}
|
|
10
|
-
|
|
42
|
+
function defaultBasePath() {
|
|
11
43
|
const home = process.env.DSH_HOME?.trim();
|
|
12
|
-
return
|
|
44
|
+
return home !== undefined && home !== "" ? home : process.cwd();
|
|
13
45
|
}
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
return { mtimeMs: stat.mtimeMs, size: stat.size };
|
|
46
|
+
export function defaultCapabilityFilePath() {
|
|
47
|
+
return `${defaultBasePath()}/qa-capability-policies.db`;
|
|
17
48
|
}
|
|
18
|
-
|
|
19
|
-
|
|
49
|
+
/** The `.json` sibling of a `.db` path: what a deployment upgraded from. */
|
|
50
|
+
function legacySiblingOf(filePath) {
|
|
51
|
+
return filePath.endsWith(".db")
|
|
52
|
+
? `${filePath.slice(0, -".db".length)}.json`
|
|
53
|
+
: undefined;
|
|
20
54
|
}
|
|
21
|
-
|
|
22
|
-
|
|
55
|
+
/** The pre-SQLite policy file, imported once on first use. */
|
|
56
|
+
export function defaultLegacyCapabilityFilePath() {
|
|
57
|
+
return `${defaultBasePath()}/qa-capability-policies.json`;
|
|
23
58
|
}
|
|
24
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Atomic, externally reloadable source of truth for roles and their audit.
|
|
61
|
+
*
|
|
62
|
+
* The policy is one row and a change appends one row beside it, so an edit
|
|
63
|
+
* writes what it changed instead of rewriting a growing document — the cost of
|
|
64
|
+
* an administrative change no longer depends on how long the deployment has
|
|
65
|
+
* been administering anything.
|
|
66
|
+
*
|
|
67
|
+
* Only the configuration is cached. An audit trail carries the full policy
|
|
68
|
+
* that preceded each change, so reading it is reserved for the callers that
|
|
69
|
+
* ask for it, and dropped whenever another process writes.
|
|
70
|
+
*/
|
|
25
71
|
export class QaRoleRepository {
|
|
26
72
|
filePath;
|
|
27
|
-
|
|
28
|
-
|
|
73
|
+
storage;
|
|
74
|
+
config;
|
|
75
|
+
auditCache;
|
|
76
|
+
observedDataVersion;
|
|
29
77
|
constructor(filePath = defaultCapabilityFilePath()) {
|
|
30
78
|
this.filePath = filePath;
|
|
31
|
-
this.
|
|
79
|
+
this.storage = new SqliteDatabase(filePath, MIGRATIONS);
|
|
80
|
+
this.observedDataVersion = this.readDataVersion();
|
|
81
|
+
try {
|
|
82
|
+
// The pre-SQLite file sat beside the database, so it is looked for as
|
|
83
|
+
// the `.json` sibling of the path this repository was given.
|
|
84
|
+
this.importLegacyFile(legacySiblingOf(filePath) ?? defaultLegacyCapabilityFilePath());
|
|
85
|
+
this.config = this.readConfig();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// A store that cannot start must not hold the database open: the caller
|
|
89
|
+
// may retry, and a held handle blocks cleaning up after the failure.
|
|
90
|
+
this.storage.close();
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
close() {
|
|
95
|
+
this.storage.close();
|
|
32
96
|
}
|
|
33
97
|
snapshot() {
|
|
34
|
-
this.
|
|
35
|
-
return this.
|
|
98
|
+
this.refresh();
|
|
99
|
+
return this.config;
|
|
36
100
|
}
|
|
37
101
|
audit() {
|
|
38
|
-
this.
|
|
39
|
-
|
|
102
|
+
this.refresh();
|
|
103
|
+
this.auditCache ??= this.readAudit();
|
|
104
|
+
return this.auditCache;
|
|
40
105
|
}
|
|
41
106
|
create(actorId, input) {
|
|
42
107
|
const role = normalizeSubrole(input);
|
|
@@ -87,7 +152,7 @@ export class QaRoleRepository {
|
|
|
87
152
|
* Replace one skill's administrator overlay.
|
|
88
153
|
*
|
|
89
154
|
* An overlay with nothing left to declare is removed outright, so clearing a
|
|
90
|
-
* row in the administration surface leaves the
|
|
155
|
+
* row in the administration surface leaves the store as if it was never set.
|
|
91
156
|
* @param actorId - the administrator performing the change.
|
|
92
157
|
* @param input - the overlay as edited in the browser.
|
|
93
158
|
* @returns every overlay in force after the change.
|
|
@@ -108,88 +173,131 @@ export class QaRoleRepository {
|
|
|
108
173
|
return after.skillOverrides;
|
|
109
174
|
}
|
|
110
175
|
recordAssignment(actorId, targetId, before, after) {
|
|
111
|
-
this.
|
|
112
|
-
this.
|
|
113
|
-
|
|
114
|
-
audit: this.appendAudit("assignment.updated", actorId, targetId, before, after),
|
|
176
|
+
this.refresh();
|
|
177
|
+
this.storage.transaction(() => {
|
|
178
|
+
this.appendAudit("assignment.updated", actorId, targetId, before, after);
|
|
115
179
|
});
|
|
116
180
|
}
|
|
117
181
|
replace(actorId, action, targetId, before, after) {
|
|
118
|
-
this.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
182
|
+
this.storage.transaction(() => {
|
|
183
|
+
this.writeConfig(after);
|
|
184
|
+
this.appendAudit(action, actorId, targetId, before, after);
|
|
185
|
+
this.config = after;
|
|
122
186
|
});
|
|
123
187
|
}
|
|
188
|
+
/** Append one change and trim the trail to its newest events. */
|
|
124
189
|
appendAudit(action, actorId, targetId, before, after) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
190
|
+
this.storage.db
|
|
191
|
+
.prepare(`INSERT INTO role_audit
|
|
192
|
+
(timestamp, actor_id, action, target_id, before, after)
|
|
193
|
+
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
194
|
+
.run(new Date().toISOString(), actorId, action, targetId ?? null, auditSnapshot(before), auditSnapshot(after));
|
|
195
|
+
this.storage.db
|
|
196
|
+
.prepare("DELETE FROM role_audit WHERE seq <= (SELECT MAX(seq) - ? FROM role_audit)")
|
|
197
|
+
.run(MAX_AUDIT_EVENTS);
|
|
198
|
+
this.auditCache = undefined;
|
|
199
|
+
}
|
|
200
|
+
writeConfig(config) {
|
|
201
|
+
this.storage.db
|
|
202
|
+
.prepare(`INSERT INTO role_config (id, json) VALUES (1, ?)
|
|
203
|
+
ON CONFLICT(id) DO UPDATE SET json = excluded.json`)
|
|
204
|
+
.run(JSON.stringify(config));
|
|
205
|
+
}
|
|
206
|
+
readConfig() {
|
|
207
|
+
const row = this.storage.db
|
|
208
|
+
.prepare("SELECT json FROM role_config WHERE id = 1")
|
|
209
|
+
.get();
|
|
210
|
+
return row === undefined
|
|
211
|
+
? defaultCapabilityConfig()
|
|
212
|
+
: normalizeCapabilityConfig(JSON.parse(row.json));
|
|
213
|
+
}
|
|
214
|
+
readAudit() {
|
|
215
|
+
return Object.freeze(asRows(this.storage.db.prepare("SELECT * FROM role_audit ORDER BY seq").all()).map((row) => ({
|
|
216
|
+
timestamp: row.timestamp,
|
|
217
|
+
actorId: row.actor_id,
|
|
218
|
+
action: row.action,
|
|
219
|
+
...(row.target_id === null ? {} : { targetId: row.target_id }),
|
|
220
|
+
...(row.before === null ? {} : { before: row.before }),
|
|
221
|
+
...(row.after === null ? {} : { after: row.after }),
|
|
222
|
+
})));
|
|
223
|
+
}
|
|
224
|
+
readDataVersion() {
|
|
225
|
+
const row = this.storage.db.prepare("PRAGMA data_version").get();
|
|
226
|
+
return row.data_version;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Re-read the policy when another process wrote it. The `qa-admin` surfaces
|
|
230
|
+
* and this store share one database, so a configuration an administrator
|
|
231
|
+
* just saved must be the one the next policy resolution sees.
|
|
232
|
+
*/
|
|
233
|
+
refresh() {
|
|
234
|
+
const version = this.readDataVersion();
|
|
235
|
+
if (version === this.observedDataVersion)
|
|
146
236
|
return;
|
|
147
|
-
this.
|
|
237
|
+
this.observedDataVersion = version;
|
|
238
|
+
this.config = this.readConfig();
|
|
239
|
+
this.auditCache = undefined;
|
|
148
240
|
}
|
|
149
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Import a pre-SQLite `qa-capability-policies.json` exactly once, then rename
|
|
243
|
+
* it aside. A configuration the database already holds wins: a leftover file
|
|
244
|
+
* must not silently revert an administrator's policy.
|
|
245
|
+
*/
|
|
246
|
+
importLegacyFile(legacyFilePath) {
|
|
247
|
+
let raw;
|
|
150
248
|
try {
|
|
151
|
-
|
|
152
|
-
if (parsed.version !== 1 || !Array.isArray(parsed.audit)) {
|
|
153
|
-
throw new TypeError("unrecognized QA capability policy file");
|
|
154
|
-
}
|
|
155
|
-
this.fileStamp = stamp(this.filePath);
|
|
156
|
-
return {
|
|
157
|
-
version: 1,
|
|
158
|
-
config: normalizeCapabilityConfig(parsed.config),
|
|
159
|
-
audit: Object.freeze(parsed.audit.map((event) => ({
|
|
160
|
-
...event,
|
|
161
|
-
...(event.before === undefined
|
|
162
|
-
? {}
|
|
163
|
-
: {
|
|
164
|
-
before: typeof event.before === "string"
|
|
165
|
-
? event.before
|
|
166
|
-
: auditSnapshot(event.before),
|
|
167
|
-
}),
|
|
168
|
-
...(event.after === undefined
|
|
169
|
-
? {}
|
|
170
|
-
: {
|
|
171
|
-
after: typeof event.after === "string"
|
|
172
|
-
? event.after
|
|
173
|
-
: auditSnapshot(event.after),
|
|
174
|
-
}),
|
|
175
|
-
}))),
|
|
176
|
-
};
|
|
249
|
+
raw = readFileSync(legacyFilePath, "utf8");
|
|
177
250
|
}
|
|
178
251
|
catch (error) {
|
|
179
|
-
if (error.code
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
252
|
+
if (error.code === "ENOENT")
|
|
253
|
+
return;
|
|
254
|
+
throw error;
|
|
255
|
+
}
|
|
256
|
+
const parsed = JSON.parse(raw);
|
|
257
|
+
if (typeof parsed !== "object" ||
|
|
258
|
+
parsed === null ||
|
|
259
|
+
parsed.version !== 1 ||
|
|
260
|
+
!Array.isArray(parsed.audit)) {
|
|
261
|
+
throw new Error(`qa-capability-policies: ${legacyFilePath} is not a recognizable policy file; refusing to import it`);
|
|
184
262
|
}
|
|
263
|
+
const file = parsed;
|
|
264
|
+
const existing = this.storage.db
|
|
265
|
+
.prepare("SELECT json FROM role_config WHERE id = 1")
|
|
266
|
+
.get();
|
|
267
|
+
if (existing !== undefined)
|
|
268
|
+
return;
|
|
269
|
+
this.storage.transaction(() => {
|
|
270
|
+
this.writeConfig(normalizeCapabilityConfig(file.config));
|
|
271
|
+
const insert = this.storage.db.prepare(`INSERT INTO role_audit
|
|
272
|
+
(timestamp, actor_id, action, target_id, before, after)
|
|
273
|
+
VALUES (?, ?, ?, ?, ?, ?)`);
|
|
274
|
+
for (const event of file.audit) {
|
|
275
|
+
insert.run(event.timestamp, event.actorId, event.action, event.targetId ?? null, event.before === undefined ? null : String(event.before), event.after === undefined ? null : String(event.after));
|
|
276
|
+
}
|
|
277
|
+
this.assertImportArrived(file.audit.length);
|
|
278
|
+
});
|
|
279
|
+
this.config = this.readConfig();
|
|
280
|
+
this.auditCache = undefined;
|
|
281
|
+
this.observedDataVersion = this.readDataVersion();
|
|
282
|
+
renameSync(legacyFilePath, `${legacyFilePath}.migrated-${new Date().toISOString().replace(/[:.]/gu, "-")}`);
|
|
185
283
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
284
|
+
assertImportArrived(expectedAudit) {
|
|
285
|
+
const config = this.storage.db
|
|
286
|
+
.prepare("SELECT COUNT(*) AS count FROM role_config")
|
|
287
|
+
.get();
|
|
288
|
+
const audit = this.storage.db
|
|
289
|
+
.prepare("SELECT COUNT(*) AS count FROM role_audit")
|
|
290
|
+
.get();
|
|
291
|
+
const expectedEvents = Math.min(expectedAudit, MAX_AUDIT_EVENTS);
|
|
292
|
+
const problems = [];
|
|
293
|
+
if (config.count !== 1)
|
|
294
|
+
problems.push("the policy did not arrive");
|
|
295
|
+
if (audit.count !== expectedEvents) {
|
|
296
|
+
problems.push(`expected ${expectedEvents} audit events, imported ${audit.count}`);
|
|
297
|
+
}
|
|
298
|
+
if (problems.length > 0) {
|
|
299
|
+
throw new Error(`qa-capability-policies: importing the pre-SQLite file failed verification (${problems.join("; ")}); the file is left in place and the import was rolled back`);
|
|
300
|
+
}
|
|
193
301
|
}
|
|
194
302
|
}
|
|
195
303
|
//# sourceMappingURL=role-repository.js.map
|