@yadsh/dsh-qa-surface 0.7.4 → 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.
Files changed (146) hide show
  1. package/README.md +56 -9
  2. package/lib/access/model.js +24 -4
  3. package/lib/access/model.js.map +1 -1
  4. package/lib/access/role-repository.js +199 -91
  5. package/lib/access/role-repository.js.map +1 -1
  6. package/lib/access/service.js +194 -6
  7. package/lib/access/service.js.map +1 -1
  8. package/lib/account-remotes.js +2 -4
  9. package/lib/account-remotes.js.map +1 -1
  10. package/lib/accounts/database.js +447 -0
  11. package/lib/accounts/database.js.map +1 -0
  12. package/lib/accounts/file.js +27 -90
  13. package/lib/accounts/file.js.map +1 -1
  14. package/lib/accounts/store.js +210 -59
  15. package/lib/accounts/store.js.map +1 -1
  16. package/lib/admin/quality-store.js +199 -54
  17. package/lib/admin/quality-store.js.map +1 -1
  18. package/lib/admin/service.js +39 -6
  19. package/lib/admin/service.js.map +1 -1
  20. package/lib/cli.js +2 -1
  21. package/lib/cli.js.map +1 -1
  22. package/lib/client/QaSessionController.js +20 -2
  23. package/lib/client/QaSessionController.js.map +1 -1
  24. package/lib/client/QaSurface.js +69 -31
  25. package/lib/client/QaSurface.js.map +1 -1
  26. package/lib/client/QaTranscriptAdapter.js +4 -0
  27. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  28. package/lib/client/admin/QaAdmin.js +17 -7
  29. package/lib/client/admin/QaAdmin.js.map +1 -1
  30. package/lib/client/admin/{format.js → copy.js} +1 -1
  31. package/lib/client/admin/copy.js.map +1 -0
  32. package/lib/client/admin/pages/Conversations.js +1 -1
  33. package/lib/client/admin/pages/Conversations.js.map +1 -1
  34. package/lib/client/admin/pages/Overview.js +1 -1
  35. package/lib/client/admin/pages/Overview.js.map +1 -1
  36. package/lib/client/admin/pages/Quality.js +1 -1
  37. package/lib/client/admin/pages/Quality.js.map +1 -1
  38. package/lib/client/admin/pages/Review.js +1 -1
  39. package/lib/client/admin/pages/Review.js.map +1 -1
  40. package/lib/client/admin/pages/Users.js +6 -2
  41. package/lib/client/admin/pages/Users.js.map +1 -1
  42. package/lib/client/admin/shared.js +1 -1
  43. package/lib/client/admin/shared.js.map +1 -1
  44. package/lib/client/components/Markdown.js +14 -206
  45. package/lib/client/components/Markdown.js.map +1 -1
  46. package/lib/client/components/QaChangelog.js +48 -0
  47. package/lib/client/components/QaChangelog.js.map +1 -1
  48. package/lib/client/components/QaHeader.js +1 -3
  49. package/lib/client/components/QaHeader.js.map +1 -1
  50. package/lib/client/components/QaMessage.js +9 -4
  51. package/lib/client/components/QaMessage.js.map +1 -1
  52. package/lib/client/components/QaSidebar.js +5 -2
  53. package/lib/client/components/QaSidebar.js.map +1 -1
  54. package/lib/client/components/QaSourcesPanel.js +3 -18
  55. package/lib/client/components/QaSourcesPanel.js.map +1 -1
  56. package/lib/client/components/QaWorkGroup.js +4 -8
  57. package/lib/client/components/QaWorkGroup.js.map +1 -1
  58. package/lib/client/components/source-icon.js +26 -0
  59. package/lib/client/components/source-icon.js.map +1 -0
  60. package/lib/client/components/thinking-phrases.js +2 -11
  61. package/lib/client/components/thinking-phrases.js.map +1 -1
  62. package/lib/client/components/use-now.js +21 -0
  63. package/lib/client/components/use-now.js.map +1 -0
  64. package/lib/client/index.js +11 -3
  65. package/lib/client/index.js.map +1 -1
  66. package/lib/client/lineage.js +18 -0
  67. package/lib/client/lineage.js.map +1 -0
  68. package/lib/client/markdown/CodeBlock.js +28 -0
  69. package/lib/client/markdown/CodeBlock.js.map +1 -0
  70. package/lib/client/markdown/blocks.js +342 -0
  71. package/lib/client/markdown/blocks.js.map +1 -0
  72. package/lib/client/markdown/highlight.js +1089 -0
  73. package/lib/client/markdown/highlight.js.map +1 -0
  74. package/lib/client/markdown/inline.js +377 -0
  75. package/lib/client/markdown/inline.js.map +1 -0
  76. package/lib/client/markdown/render.js +147 -0
  77. package/lib/client/markdown/render.js.map +1 -0
  78. package/lib/client/markdown/source-chip.js +55 -0
  79. package/lib/client/markdown/source-chip.js.map +1 -0
  80. package/lib/client/markdown/use-transient-flag.js +27 -0
  81. package/lib/client/markdown/use-transient-flag.js.map +1 -0
  82. package/lib/client/role/RoleSelector.js +11 -2
  83. package/lib/client/role/RoleSelector.js.map +1 -1
  84. package/lib/client/role/preview.js +123 -0
  85. package/lib/client/role/preview.js.map +1 -0
  86. package/lib/client/styles.js +73 -19
  87. package/lib/client/styles.js.map +1 -1
  88. package/lib/client.js +3129 -761
  89. package/lib/client.js.map +1 -1
  90. package/lib/config-resolvers/accounts.js +15 -0
  91. package/lib/config-resolvers/accounts.js.map +1 -1
  92. package/lib/config-resolvers/defaults.js +8 -0
  93. package/lib/config-resolvers/defaults.js.map +1 -1
  94. package/lib/config-resolvers/sources.js +16 -0
  95. package/lib/config-resolvers/sources.js.map +1 -1
  96. package/lib/config.js +57 -0
  97. package/lib/config.js.map +1 -1
  98. package/lib/index.js +25 -10
  99. package/lib/index.js.map +1 -1
  100. package/lib/lockdown-policy.js +19 -0
  101. package/lib/lockdown-policy.js.map +1 -1
  102. package/lib/provenance/host-store.js +7 -3
  103. package/lib/provenance/host-store.js.map +1 -1
  104. package/lib/provenance/retention.js +25 -0
  105. package/lib/provenance/retention.js.map +1 -0
  106. package/lib/provenance/snapshot-store.js +290 -35
  107. package/lib/provenance/snapshot-store.js.map +1 -1
  108. package/lib/questions.js +16 -3
  109. package/lib/questions.js.map +1 -1
  110. package/lib/secure-session.js +115 -21
  111. package/lib/secure-session.js.map +1 -1
  112. package/lib/typert.host.js +79 -52
  113. package/lib/typert.remote-client.js +75 -48
  114. package/lib/types/access/role-repository.d.ts +38 -7
  115. package/lib/types/access/service.d.ts +77 -3
  116. package/lib/types/account-remotes.d.ts +8 -4
  117. package/lib/types/accounts/database.d.ts +84 -0
  118. package/lib/types/accounts/file.d.ts +17 -39
  119. package/lib/types/accounts/store.d.ts +98 -19
  120. package/lib/types/admin/quality-store.d.ts +20 -2
  121. package/lib/types/client/admin/{format.d.ts → copy.d.ts} +1 -1
  122. package/lib/types/client/components/Markdown.d.ts +7 -8
  123. package/lib/types/client/components/QaSidebar.d.ts +3 -1
  124. package/lib/types/client/components/QaSourcesPanel.d.ts +1 -3
  125. package/lib/types/client/components/source-icon.d.ts +12 -0
  126. package/lib/types/client/components/use-now.d.ts +8 -0
  127. package/lib/types/client/lineage.d.ts +15 -0
  128. package/lib/types/client/markdown/CodeBlock.d.ts +14 -0
  129. package/lib/types/client/markdown/blocks.d.ts +74 -0
  130. package/lib/types/client/markdown/highlight.d.ts +29 -0
  131. package/lib/types/client/markdown/inline.d.ts +40 -0
  132. package/lib/types/client/markdown/render.d.ts +13 -0
  133. package/lib/types/client/markdown/source-chip.d.ts +32 -0
  134. package/lib/types/client/markdown/use-transient-flag.d.ts +12 -0
  135. package/lib/types/client/role/RoleSelector.d.ts +11 -1
  136. package/lib/types/client/role/preview.d.ts +109 -0
  137. package/lib/types/index.d.ts +5 -1
  138. package/lib/types/lockdown-policy.d.ts +16 -0
  139. package/lib/types/provenance/host-store.d.ts +7 -3
  140. package/lib/types/provenance/retention.d.ts +46 -0
  141. package/lib/types/provenance/snapshot-store.d.ts +63 -7
  142. package/lib/types/questions.d.ts +5 -0
  143. package/lib/types/secure-session.d.ts +27 -1
  144. package/lib/types/types.d.ts +54 -0
  145. package/package.json +4 -4
  146. package/lib/client/admin/format.js.map +0 -1
@@ -45,6 +45,17 @@ export type QaPermission = "users.read" | "users.manage" | "roles.read" | "roles
45
45
  export interface QaToolSelection {
46
46
  readonly always: readonly string[];
47
47
  readonly skillGrantable: readonly string[];
48
+ /**
49
+ * Names this layer takes away, whatever grants them.
50
+ *
51
+ * The deployment's pinned tools and the Common layer reach every role, so
52
+ * without this a system tool could only be withdrawn by editing the profile
53
+ * and restarting the Host. A denial beats every grant — system, Common, the
54
+ * role's own list and every skill — and it narrows the ceiling a delegated
55
+ * assistant is held to, so one checkbox takes a tool away from a role and
56
+ * from the experts that role may spawn.
57
+ */
58
+ readonly deny?: readonly string[];
48
59
  }
49
60
  /** Tool/skill selection shared by the common layer and one QA subrole. */
50
61
  export interface QaCapabilitySelection {
@@ -434,6 +445,16 @@ export interface QaSkillRemoval {
434
445
  }
435
446
  export interface QaSourcesConfig {
436
447
  readonly enabled?: boolean;
448
+ /**
449
+ * How much durable provenance the deployment keeps. Every bound counts
450
+ * turns, shards or days, and zero keeps everything for that bound.
451
+ */
452
+ readonly retention?: {
453
+ readonly maxTurnsPerSession?: number;
454
+ readonly maxSessions?: number;
455
+ readonly maxAgeDays?: number;
456
+ readonly sweepIntervalMinutes?: number;
457
+ };
437
458
  readonly collect?: {
438
459
  readonly parentAgent?: boolean;
439
460
  readonly subagents?: boolean;
@@ -582,6 +603,21 @@ export interface QaSurfaceConfig {
582
603
  readonly enabled?: boolean;
583
604
  readonly allowRegistration?: boolean;
584
605
  readonly sessionTtlDays?: number;
606
+ /**
607
+ * Login/registration attempts accepted per rolling minute, store-wide.
608
+ * The limit backs the password checks, so the default stays tight.
609
+ */
610
+ readonly maxAuthAttemptsPerMinute?: number;
611
+ /**
612
+ * What happens to ownership records of chats the Harness no longer knows.
613
+ * A record is a chat's auth boundary, so only vanished chats are ever
614
+ * swept, and only after `ownershipGraceHours`.
615
+ */
616
+ readonly retention?: {
617
+ readonly pruneVanishedSessions?: boolean;
618
+ readonly ownershipGraceHours?: number;
619
+ readonly sweepIntervalMinutes?: number;
620
+ };
585
621
  /** Let admins see chats owned by other QA accounts. */
586
622
  readonly showOtherUsersChats?: boolean;
587
623
  /**
@@ -720,8 +756,15 @@ export interface ResolvedQaSurfaceConfig {
720
756
  readonly enabled: boolean;
721
757
  readonly allowRegistration: boolean;
722
758
  readonly sessionTtlDays: number;
759
+ /** Login/registration attempts accepted per rolling minute, store-wide. */
760
+ readonly maxAuthAttemptsPerMinute: number;
723
761
  readonly showOtherUsersChats: boolean;
724
762
  readonly perUserWorkspace: boolean;
763
+ readonly retention: {
764
+ readonly pruneVanishedSessions: boolean;
765
+ readonly ownershipGraceHours: number;
766
+ readonly sweepIntervalMinutes: number;
767
+ };
725
768
  readonly profile: {
726
769
  readonly enabled: boolean;
727
770
  readonly inject: boolean;
@@ -757,6 +800,12 @@ export interface ResolvedQaSurfaceConfig {
757
800
  };
758
801
  readonly sources: {
759
802
  readonly enabled: boolean;
803
+ readonly retention: {
804
+ readonly maxTurnsPerSession: number;
805
+ readonly maxSessions: number;
806
+ readonly maxAgeDays: number;
807
+ readonly sweepIntervalMinutes: number;
808
+ };
760
809
  readonly collect: {
761
810
  readonly parentAgent: boolean;
762
811
  readonly subagents: boolean;
@@ -1360,7 +1409,12 @@ export interface QaAdminUserDetail {
1360
1409
  readonly effective: readonly {
1361
1410
  readonly subroleId: string;
1362
1411
  readonly name: string;
1412
+ /** Visible from the first step: system-required, Common and the role. */
1363
1413
  readonly tools: number;
1414
+ /** The role's ceiling for tools a loaded skill requires. */
1415
+ readonly grantableTools: number;
1416
+ /** Tools the profile withdraws, whatever else grants them. */
1417
+ readonly deniedTools: number;
1364
1418
  readonly skills: number;
1365
1419
  }[];
1366
1420
  readonly activity: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yadsh/dsh-qa-surface",
3
- "version": "0.7.4",
3
+ "version": "0.8.0",
4
4
  "description": "A focused end-user QA surface backed by native DeepSeek Harness sessions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -131,7 +131,8 @@
131
131
  "dependencies": {
132
132
  "yaml": "^2.9.0",
133
133
  "zod": "^4.4.3",
134
- "@yadsh/dsh-plugin-log": "^0.3.1"
134
+ "@yadsh/dsh-plugin-kit": "^0.2.0",
135
+ "@yadsh/dsh-plugin-log": "^0.4.0"
135
136
  },
136
137
  "devDependencies": {
137
138
  "@deepseek-ai/cordis": "4.0.2",
@@ -175,8 +176,7 @@
175
176
  "typescript": "^7.0.2",
176
177
  "vitest": "^4.1.11",
177
178
  "@yadsh/dsh-config": "^0.0.0",
178
- "@yadsh/dsh-plugin-scripts": "^0.0.0",
179
- "@yadsh/dsh-plugin-kit": "^0.1.0"
179
+ "@yadsh/dsh-plugin-scripts": "^0.0.0"
180
180
  },
181
181
  "publishConfig": {
182
182
  "access": "public",
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/client/admin/format.ts"],"names":[],"mappings":"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"}