@yadsh/dsh-qa-surface 0.19.0 → 0.21.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 (252) hide show
  1. package/README.md +235 -0
  2. package/lib/access/model-choices.js +103 -0
  3. package/lib/access/model-choices.js.map +1 -0
  4. package/lib/access/model-policy.js +79 -7
  5. package/lib/access/model-policy.js.map +1 -1
  6. package/lib/access/model.js +29 -1
  7. package/lib/access/model.js.map +1 -1
  8. package/lib/access/queue-policy.js +36 -0
  9. package/lib/access/queue-policy.js.map +1 -0
  10. package/lib/access/service.js +124 -7
  11. package/lib/access/service.js.map +1 -1
  12. package/lib/account-remotes.js +10 -1
  13. package/lib/account-remotes.js.map +1 -1
  14. package/lib/accounts/database.js +44 -3
  15. package/lib/accounts/database.js.map +1 -1
  16. package/lib/accounts/store.js +28 -0
  17. package/lib/accounts/store.js.map +1 -1
  18. package/lib/admin/service.js +6 -1
  19. package/lib/admin/service.js.map +1 -1
  20. package/lib/chat-sharing/transport.js +6 -2
  21. package/lib/chat-sharing/transport.js.map +1 -1
  22. package/lib/client/QaAccountsController.js +43 -8
  23. package/lib/client/QaAccountsController.js.map +1 -1
  24. package/lib/client/QaSessionController.js +55 -23
  25. package/lib/client/QaSessionController.js.map +1 -1
  26. package/lib/client/QaSurface.js +61 -3
  27. package/lib/client/QaSurface.js.map +1 -1
  28. package/lib/client/QaTranscriptAdapter.js +36 -1
  29. package/lib/client/QaTranscriptAdapter.js.map +1 -1
  30. package/lib/client/admin/ModelPolicyEditor.js +28 -2
  31. package/lib/client/admin/ModelPolicyEditor.js.map +1 -1
  32. package/lib/client/admin/RoleEditor.js +18 -1
  33. package/lib/client/admin/RoleEditor.js.map +1 -1
  34. package/lib/client/admin/pages/SkillFiles.js +1 -1
  35. package/lib/client/admin/pages/SkillFiles.js.map +1 -1
  36. package/lib/client/admin/pages/Users.js +36 -16
  37. package/lib/client/admin/pages/Users.js.map +1 -1
  38. package/lib/client/admin/styles.js +3 -0
  39. package/lib/client/admin/styles.js.map +1 -1
  40. package/lib/client/chat-artifacts.js +1 -0
  41. package/lib/client/chat-artifacts.js.map +1 -1
  42. package/lib/client/code-source-styles.js +12 -0
  43. package/lib/client/code-source-styles.js.map +1 -0
  44. package/lib/client/components/QaArtifactAttachment.js +12 -0
  45. package/lib/client/components/QaArtifactAttachment.js.map +1 -0
  46. package/lib/client/components/QaChangelog.js +94 -0
  47. package/lib/client/components/QaChangelog.js.map +1 -1
  48. package/lib/client/components/QaChatActions.js +36 -14
  49. package/lib/client/components/QaChatActions.js.map +1 -1
  50. package/lib/client/components/QaCodeSourcePicker.js +18 -0
  51. package/lib/client/components/QaCodeSourcePicker.js.map +1 -0
  52. package/lib/client/components/QaComposer.js +11 -12
  53. package/lib/client/components/QaComposer.js.map +1 -1
  54. package/lib/client/components/QaComposerSettings.js +202 -0
  55. package/lib/client/components/QaComposerSettings.js.map +1 -0
  56. package/lib/client/components/QaFilesPanel.js +2 -8
  57. package/lib/client/components/QaFilesPanel.js.map +1 -1
  58. package/lib/client/components/QaFormItem.js +74 -38
  59. package/lib/client/components/QaFormItem.js.map +1 -1
  60. package/lib/client/components/QaHistoryCatalog.js +261 -0
  61. package/lib/client/components/QaHistoryCatalog.js.map +1 -0
  62. package/lib/client/components/QaInputForm.js +115 -32
  63. package/lib/client/components/QaInputForm.js.map +1 -1
  64. package/lib/client/components/QaMessage.js +3 -8
  65. package/lib/client/components/QaMessage.js.map +1 -1
  66. package/lib/client/components/QaModelSelector.js +21 -0
  67. package/lib/client/components/QaModelSelector.js.map +1 -0
  68. package/lib/client/components/QaSidebar.js +25 -24
  69. package/lib/client/components/QaSidebar.js.map +1 -1
  70. package/lib/client/components/QaWorkGroup.js +1 -3
  71. package/lib/client/components/QaWorkGroup.js.map +1 -1
  72. package/lib/client/composer-settings-styles.js +21 -0
  73. package/lib/client/composer-settings-styles.js.map +1 -0
  74. package/lib/client/forms-styles.js +35 -11
  75. package/lib/client/forms-styles.js.map +1 -1
  76. package/lib/client/history-organization-styles.js +31 -0
  77. package/lib/client/history-organization-styles.js.map +1 -0
  78. package/lib/client/history-organization.js +155 -0
  79. package/lib/client/history-organization.js.map +1 -0
  80. package/lib/client/index.js +13 -4
  81. package/lib/client/index.js.map +1 -1
  82. package/lib/client/settings/card.js +2 -2
  83. package/lib/client/settings/card.js.map +1 -1
  84. package/lib/client/settings/sections/attachments.js +7 -1
  85. package/lib/client/settings/sections/attachments.js.map +1 -1
  86. package/lib/client/settings/sections/file-writes.js +15 -0
  87. package/lib/client/settings/sections/file-writes.js.map +1 -0
  88. package/lib/client/settings/sections/session.js +1 -1
  89. package/lib/client/settings/sections/session.js.map +1 -1
  90. package/lib/client/settings/sections.js +1 -0
  91. package/lib/client/settings/sections.js.map +1 -1
  92. package/lib/client/styles.js +18 -1
  93. package/lib/client/styles.js.map +1 -1
  94. package/lib/client/tool-presentation.js +21 -3
  95. package/lib/client/tool-presentation.js.map +1 -1
  96. package/lib/client/types.js.map +1 -1
  97. package/lib/client/use-chat-code-source.js +156 -0
  98. package/lib/client/use-chat-code-source.js.map +1 -0
  99. package/lib/client/use-history-organization.js +48 -0
  100. package/lib/client/use-history-organization.js.map +1 -0
  101. package/lib/client/use-model-selection.js +96 -0
  102. package/lib/client/use-model-selection.js.map +1 -0
  103. package/lib/client/use-qa-file-drop.js +81 -0
  104. package/lib/client/use-qa-file-drop.js.map +1 -0
  105. package/lib/client/user-settings/IntegrationTokensPage.js +42 -6
  106. package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
  107. package/lib/client/user-settings/UserSettingsDialog.js +1 -1
  108. package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
  109. package/lib/client.js +125 -27
  110. package/lib/client.js.map +1 -1
  111. package/lib/code-source-selection.js +102 -0
  112. package/lib/code-source-selection.js.map +1 -0
  113. package/lib/config-resolvers/accounts.js +26 -1
  114. package/lib/config-resolvers/accounts.js.map +1 -1
  115. package/lib/config-resolvers/defaults.js +7 -0
  116. package/lib/config-resolvers/defaults.js.map +1 -1
  117. package/lib/config-resolvers/integration.js +8 -1
  118. package/lib/config-resolvers/integration.js.map +1 -1
  119. package/lib/config-resolvers/session.js +2 -0
  120. package/lib/config-resolvers/session.js.map +1 -1
  121. package/lib/config-resolvers/tools.js +2 -0
  122. package/lib/config-resolvers/tools.js.map +1 -1
  123. package/lib/config.js +77 -4
  124. package/lib/config.js.map +1 -1
  125. package/lib/enforcement/skill-policy.js +37 -2
  126. package/lib/enforcement/skill-policy.js.map +1 -1
  127. package/lib/forms/errors.js +6 -1
  128. package/lib/forms/errors.js.map +1 -1
  129. package/lib/forms/gate.js +28 -2
  130. package/lib/forms/gate.js.map +1 -1
  131. package/lib/forms/schema-errors.js +47 -0
  132. package/lib/forms/schema-errors.js.map +1 -0
  133. package/lib/forms/schema.js +29 -20
  134. package/lib/forms/schema.js.map +1 -1
  135. package/lib/index.js +161 -9
  136. package/lib/index.js.map +1 -1
  137. package/lib/integration/http.js +9 -10
  138. package/lib/integration/http.js.map +1 -1
  139. package/lib/integration/service.js +9 -0
  140. package/lib/integration/service.js.map +1 -1
  141. package/lib/personal-skills/provider.js +9 -1
  142. package/lib/personal-skills/provider.js.map +1 -1
  143. package/lib/personal-skills/service.js +4 -0
  144. package/lib/personal-skills/service.js.map +1 -1
  145. package/lib/personal-skills/shared-seed.js +65 -0
  146. package/lib/personal-skills/shared-seed.js.map +1 -0
  147. package/lib/prompt-notes.js +24 -2
  148. package/lib/prompt-notes.js.map +1 -1
  149. package/lib/provenance/collector.js +1 -0
  150. package/lib/provenance/collector.js.map +1 -1
  151. package/lib/provenance/extractors.js +6 -1
  152. package/lib/provenance/extractors.js.map +1 -1
  153. package/lib/qa-tools/catalog.js +33 -1
  154. package/lib/qa-tools/catalog.js.map +1 -1
  155. package/lib/qa-tools/code-files.js +207 -0
  156. package/lib/qa-tools/code-files.js.map +1 -0
  157. package/lib/qa-tools/code-tools.js +158 -0
  158. package/lib/qa-tools/code-tools.js.map +1 -0
  159. package/lib/qa-tools/docs-tools.js +49 -12
  160. package/lib/qa-tools/docs-tools.js.map +1 -1
  161. package/lib/qa-tools/file-write-gate.js +47 -0
  162. package/lib/qa-tools/file-write-gate.js.map +1 -0
  163. package/lib/qa-tools/index.js +10 -0
  164. package/lib/qa-tools/index.js.map +1 -1
  165. package/lib/qa-tools/request-user-form.js +26 -6
  166. package/lib/qa-tools/request-user-form.js.map +1 -1
  167. package/lib/qa-tools/subagent-tools.js +159 -0
  168. package/lib/qa-tools/subagent-tools.js.map +1 -0
  169. package/lib/request-scheduler.js +32 -5
  170. package/lib/request-scheduler.js.map +1 -1
  171. package/lib/resolve-config.js +9 -1
  172. package/lib/resolve-config.js.map +1 -1
  173. package/lib/secure-session.js +16 -4
  174. package/lib/secure-session.js.map +1 -1
  175. package/lib/session-model.js +43 -1
  176. package/lib/session-model.js.map +1 -1
  177. package/lib/shared/file-write-policy.js +29 -0
  178. package/lib/shared/file-write-policy.js.map +1 -0
  179. package/lib/shared/history-folder.js +18 -0
  180. package/lib/shared/history-folder.js.map +1 -0
  181. package/lib/typert.host.js +757 -162
  182. package/lib/typert.remote-client.d.ts +19 -7
  183. package/lib/typert.remote-client.js +688 -153
  184. package/lib/types/access/model-choices.d.ts +16 -0
  185. package/lib/types/access/model-policy.d.ts +13 -7
  186. package/lib/types/access/model.d.ts +9 -0
  187. package/lib/types/access/queue-policy.d.ts +30 -0
  188. package/lib/types/access/service.d.ts +27 -0
  189. package/lib/types/account-remotes.d.ts +5 -4
  190. package/lib/types/accounts/database.d.ts +5 -0
  191. package/lib/types/accounts/store.d.ts +6 -0
  192. package/lib/types/chat-sharing/transport.d.ts +1 -1
  193. package/lib/types/client/QaAccountsController.d.ts +3 -1
  194. package/lib/types/client/QaSessionController.d.ts +19 -5
  195. package/lib/types/client/QaSurface.d.ts +2 -0
  196. package/lib/types/client/admin/ModelPolicyEditor.d.ts +2 -0
  197. package/lib/types/client/code-source-styles.d.ts +2 -0
  198. package/lib/types/client/components/QaArtifactAttachment.d.ts +8 -0
  199. package/lib/types/client/components/QaChatActions.d.ts +3 -1
  200. package/lib/types/client/components/QaCodeSourcePicker.d.ts +9 -0
  201. package/lib/types/client/components/QaComposer.d.ts +2 -0
  202. package/lib/types/client/components/QaComposerSettings.d.ts +16 -0
  203. package/lib/types/client/components/QaFormItem.d.ts +4 -2
  204. package/lib/types/client/components/QaHistoryCatalog.d.ts +19 -0
  205. package/lib/types/client/components/QaInputForm.d.ts +3 -2
  206. package/lib/types/client/components/QaModelSelector.d.ts +4 -0
  207. package/lib/types/client/components/QaSidebar.d.ts +3 -0
  208. package/lib/types/client/composer-settings-styles.d.ts +2 -0
  209. package/lib/types/client/forms-styles.d.ts +1 -1
  210. package/lib/types/client/history-organization-styles.d.ts +3 -0
  211. package/lib/types/client/history-organization.d.ts +38 -0
  212. package/lib/types/client/settings/sections/file-writes.d.ts +4 -0
  213. package/lib/types/client/settings/sections.d.ts +1 -0
  214. package/lib/types/client/tool-presentation.d.ts +1 -0
  215. package/lib/types/client/types.d.ts +12 -4
  216. package/lib/types/client/use-chat-code-source.d.ts +20 -0
  217. package/lib/types/client/use-history-organization.d.ts +8 -0
  218. package/lib/types/client/use-model-selection.d.ts +24 -0
  219. package/lib/types/client/use-qa-file-drop.d.ts +12 -0
  220. package/lib/types/code-source-selection.d.ts +28 -0
  221. package/lib/types/code-sources.js +2 -0
  222. package/lib/types/code-sources.js.map +1 -0
  223. package/lib/types/config-resolvers/integration.d.ts +7 -1
  224. package/lib/types/forms/errors.d.ts +3 -2
  225. package/lib/types/forms/gate.d.ts +4 -2
  226. package/lib/types/forms/schema-errors.d.ts +7 -0
  227. package/lib/types/forms/types.d.ts +14 -0
  228. package/lib/types/index.d.ts +38 -5
  229. package/lib/types/integration/http.d.ts +1 -3
  230. package/lib/types/integration/service.d.ts +2 -0
  231. package/lib/types/personal-skills/shared-seed.d.ts +12 -0
  232. package/lib/types/prompt-notes.d.ts +6 -2
  233. package/lib/types/qa-tools/catalog.d.ts +5 -2
  234. package/lib/types/qa-tools/code-files.d.ts +59 -0
  235. package/lib/types/qa-tools/code-tools.d.ts +7 -0
  236. package/lib/types/qa-tools/docs-tools.d.ts +4 -0
  237. package/lib/types/qa-tools/file-write-gate.d.ts +6 -0
  238. package/lib/types/qa-tools/index.d.ts +3 -0
  239. package/lib/types/qa-tools/subagent-tools.d.ts +40 -0
  240. package/lib/types/request-scheduler.d.ts +21 -2
  241. package/lib/types/session-model.d.ts +11 -2
  242. package/lib/types/shared/file-write-policy.d.ts +10 -0
  243. package/lib/types/shared/history-folder.d.ts +4 -0
  244. package/lib/types/types/accounts.d.ts +11 -0
  245. package/lib/types/types/capability.d.ts +31 -4
  246. package/lib/types/types/code-sources.d.ts +12 -0
  247. package/lib/types/types/config.d.ts +23 -0
  248. package/lib/types/types/documents.d.ts +2 -0
  249. package/lib/types/types.d.ts +1 -0
  250. package/lib/user-workspace.js +7 -4
  251. package/lib/user-workspace.js.map +1 -1
  252. package/package.json +6 -5
@@ -0,0 +1,102 @@
1
+ import { SqliteDatabase } from "@yadsh/dsh-plugin-kit/sqlite";
2
+ import { qaDelegatedHeader } from "./shared/session-lineage.js";
3
+ /** Durable chat preference and immutable snapshots for delegated/forked children. */
4
+ export class QaCodeSourceSelection {
5
+ configured;
6
+ session;
7
+ busy;
8
+ storage;
9
+ constructor(filePath, configured, session, busy) {
10
+ this.configured = configured;
11
+ this.session = session;
12
+ this.busy = busy;
13
+ this.storage = new SqliteDatabase(filePath, [
14
+ {
15
+ version: 1,
16
+ up: `
17
+ CREATE TABLE selections (session_id TEXT PRIMARY KEY, source_id TEXT);
18
+ `,
19
+ },
20
+ ]);
21
+ }
22
+ stored(id) {
23
+ return this.storage.db
24
+ .prepare("SELECT source_id FROM selections WHERE session_id=?")
25
+ .get(id);
26
+ }
27
+ /** Resolve old/resumed children through their durable lineage when no snapshot exists. */
28
+ selected(id) {
29
+ const seen = new Set();
30
+ let current = id;
31
+ while (!seen.has(current) && seen.size < 64) {
32
+ seen.add(current);
33
+ const stored = this.stored(current);
34
+ if (stored !== undefined)
35
+ return stored.source_id;
36
+ const header = this.session(current)?.header;
37
+ if (header === undefined && current !== id)
38
+ throw new Error("Code source parent session is unavailable; no default was substituted.");
39
+ if (header === undefined ||
40
+ !qaDelegatedHeader(header) ||
41
+ typeof header.parentSession !== "string")
42
+ return null;
43
+ current = header.parentSession;
44
+ }
45
+ throw new Error("Code source session lineage is unavailable.");
46
+ }
47
+ catalog(id) {
48
+ const catalog = this.configured();
49
+ const source = id === undefined ? null : this.selected(id);
50
+ // Preserve a removed id: the tool resolver must refuse, never silently switch.
51
+ return source === null ? catalog : { ...catalog, defaultSource: source };
52
+ }
53
+ view(id, owner) {
54
+ const selectedSource = this.selected(id);
55
+ const catalog = this.catalog(id);
56
+ const effectiveSource = catalog.defaultSource ||
57
+ (catalog.entries.length === 1 ? catalog.entries[0].id : null);
58
+ return {
59
+ selectedSource,
60
+ effectiveSource,
61
+ entries: catalog.entries.map(({ id, label }) => ({ id, label })),
62
+ unavailable: effectiveSource !== null &&
63
+ !catalog.entries.some((entry) => entry.id === effectiveSource),
64
+ writable: owner &&
65
+ !qaDelegatedHeader(this.session(id)?.header ?? {}) &&
66
+ !this.busy(id),
67
+ };
68
+ }
69
+ select(id, source) {
70
+ if (this.busy(id))
71
+ throw new Error("Дождитесь завершения ответа и очереди перед сменой версии.");
72
+ if (qaDelegatedHeader(this.session(id)?.header ?? {}))
73
+ throw new Error("Источник подагента задаётся родительским чатом.");
74
+ if (source !== null &&
75
+ (typeof source !== "string" ||
76
+ !this.configured().entries.some((entry) => entry.id === source)))
77
+ throw new Error("Выбранный источник кода недоступен.");
78
+ this.save(id, source);
79
+ return this.view(id, true);
80
+ }
81
+ inherit(id, parent, managedParent = false) {
82
+ const parentPreference = this.stored(parent);
83
+ if (!managedParent && parentPreference === undefined)
84
+ return;
85
+ if (this.stored(id) !== undefined)
86
+ return;
87
+ const catalog = this.catalog(parent);
88
+ if (catalog.entries.length === 0 && parentPreference === undefined)
89
+ return;
90
+ this.save(id, catalog.defaultSource ||
91
+ (catalog.entries.length === 1 ? catalog.entries[0].id : null));
92
+ }
93
+ save(id, source) {
94
+ this.storage.db
95
+ .prepare("INSERT INTO selections(session_id,source_id) VALUES(?,?) ON CONFLICT(session_id) DO UPDATE SET source_id=excluded.source_id")
96
+ .run(id, source);
97
+ }
98
+ close() {
99
+ this.storage.close();
100
+ }
101
+ }
102
+ //# sourceMappingURL=code-source-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-source-selection.js","sourceRoot":"","sources":["../src/code-source-selection.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { QA_PROFILE_INSTRUCTIONS_MAX_MAX, QA_PROFILE_INSTRUCTIONS_MAX_MIN, validateIdentityFields, } from "../profile.js";
2
- import { QA_SKILL_ENABLED_BY_DEFAULT, QA_SKILL_MAX_BYTES_MAX, QA_SKILL_MAX_BYTES_MIN, skillRelativeRootProblem, } from "../personal-skills/skill-format.js";
2
+ import { QA_SKILL_ENABLED_BY_DEFAULT, QA_SKILL_MAX_BYTES_MAX, QA_SKILL_MAX_BYTES_MIN, skillRelativeRootProblem, skillNameProblem, } from "../personal-skills/skill-format.js";
3
3
  import { DEFAULT_QA_SURFACE_CONFIG } from "./defaults.js";
4
4
  import { assertIntInRange } from "./shared.js";
5
5
  import { resolveOidc } from "./oidc.js";
@@ -50,6 +50,25 @@ export function resolveAccounts(input, dependencies) {
50
50
  }
51
51
  const maxSkillBytes = input.accounts?.skills?.maxSkillBytes ??
52
52
  DEFAULT_QA_SURFACE_CONFIG.accounts.skills.maxSkillBytes;
53
+ const sharedSeedInput = input.accounts?.skills?.sharedSeed;
54
+ const sharedSeed = sharedSeedInput == null
55
+ ? null
56
+ : {
57
+ root: sharedSeedInput.root.trim(),
58
+ names: [...new Set(sharedSeedInput.names)],
59
+ };
60
+ if (sharedSeed !== null) {
61
+ const absolute = sharedSeed.root.startsWith("/") ||
62
+ sharedSeed.root.startsWith("\\\\") ||
63
+ /^[A-Za-z]:[/\\]/u.test(sharedSeed.root);
64
+ if (!absolute || sharedSeed.root.includes("\0")) {
65
+ throw new TypeError("dsh-qa-surface: accounts.skills.sharedSeed.root must be an absolute directory");
66
+ }
67
+ if (sharedSeed.names.length > 100 ||
68
+ sharedSeed.names.some((name) => skillNameProblem(name) !== null)) {
69
+ throw new TypeError("dsh-qa-surface: accounts.skills.sharedSeed.names must contain at most 100 skill directory names");
70
+ }
71
+ }
53
72
  assertIntInRange("accounts.skills.maxSkillBytes", maxSkillBytes, QA_SKILL_MAX_BYTES_MIN, QA_SKILL_MAX_BYTES_MAX);
54
73
  // A deployment without per-account directories has no personal root to
55
74
  // resolve, so the feature reports itself off rather than offering a screen
@@ -95,6 +114,12 @@ export function resolveAccounts(input, dependencies) {
95
114
  skills: Object.freeze({
96
115
  enabled: skillsEnabled,
97
116
  relativeRoot: relativeRoot.trim(),
117
+ sharedSeed: sharedSeed === null
118
+ ? null
119
+ : Object.freeze({
120
+ root: sharedSeed.root,
121
+ names: Object.freeze(sharedSeed.names),
122
+ }),
98
123
  watch: input.accounts?.skills?.watch ??
99
124
  DEFAULT_QA_SURFACE_CONFIG.accounts.skills.watch,
100
125
  maxSkillBytes,
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/config-resolvers/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/config-resolvers/accounts.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { DEFAULT_QA_ATTACHMENT_EXTENSIONS } from "../attachment-rules.js";
2
+ import { EMPTY_CODE_SOURCES } from "@yadsh/dsh-plugin-kit/code-sources";
2
3
  import { DEFAULT_FORM_POLICY } from "../forms/schema.js";
3
4
  import { QA_PROFILE_DEFAULT_INSTRUCTIONS_MAX } from "../profile.js";
4
5
  import { DEFAULT_QA_PROVENANCE_RETENTION } from "../provenance/retention.js";
5
6
  import { QA_SKILL_DEFAULT_RELATIVE_ROOT, QA_SKILL_FILE_MAX_BYTES, } from "../personal-skills/skill-format.js";
6
7
  import { DEFAULT_THINKING_PHRASES } from "../thinking-phrases.js";
8
+ import { DEFAULT_QA_FILE_WRITE_POLICY } from "../shared/file-write-policy.js";
7
9
  /** The canonical resolved config; every domain resolver defaults from it. */
8
10
  export const DEFAULT_QA_SURFACE_CONFIG = Object.freeze({
11
+ codeSources: EMPTY_CODE_SOURCES,
9
12
  forms: DEFAULT_FORM_POLICY,
10
13
  enabled: true,
11
14
  route: Object.freeze({ path: "/qa", matchChildren: true }),
@@ -27,6 +30,7 @@ export const DEFAULT_QA_SURFACE_CONFIG = Object.freeze({
27
30
  provider: null,
28
31
  model: null,
29
32
  reasoningEffort: null,
33
+ modelReplacements: Object.freeze([]),
30
34
  maxActiveRequests: 0,
31
35
  }),
32
36
  ui: Object.freeze({
@@ -138,6 +142,7 @@ export const DEFAULT_QA_SURFACE_CONFIG = Object.freeze({
138
142
  // `resolveAccounts` turns the intent back on wherever one exists.
139
143
  enabled: false,
140
144
  relativeRoot: QA_SKILL_DEFAULT_RELATIVE_ROOT,
145
+ sharedSeed: null,
141
146
  watch: true,
142
147
  maxSkillBytes: QA_SKILL_FILE_MAX_BYTES,
143
148
  allowResourceEditing: false,
@@ -154,6 +159,7 @@ export const DEFAULT_QA_SURFACE_CONFIG = Object.freeze({
154
159
  allowOs: true,
155
160
  }),
156
161
  tools: Object.freeze({
162
+ fileWritePolicy: DEFAULT_QA_FILE_WRITE_POLICY,
157
163
  dynamicActivation: true,
158
164
  activationSkill: "qa-surface",
159
165
  activationMode: "all",
@@ -228,6 +234,7 @@ export const DEFAULT_QA_SURFACE_CONFIG = Object.freeze({
228
234
  requestsPerMinute: 60,
229
235
  maxRequestBytes: 33_554_432,
230
236
  maxAttachmentBytes: 10_485_760,
237
+ maxAttachments: 8,
231
238
  // The caller publishes the answer as a ticket comment, and its own
232
239
  // contract names this size. Four thousand characters is a long comment
233
240
  // and a short answer: a longer one is cut at a paragraph boundary rather
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config-resolvers/defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config-resolvers/defaults.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { DEFAULT_QA_SURFACE_CONFIG } from "./defaults.js";
2
2
  import { assertIntInRange } from "./shared.js";
3
+ import { QA_MAX_PENDING_MAX } from "../attachment-rules.js";
3
4
  /** Operator-tunable bounds; the values the settings card shows as hard limits. */
4
5
  export const QA_INTEGRATION_TTL_DAYS_MIN = 1;
5
6
  export const QA_INTEGRATION_TTL_DAYS_MAX = 3650;
@@ -64,7 +65,7 @@ export function normalizeIntegrationBasePath(value) {
64
65
  * @param accounts - the resolved accounts domain, for the cross-check.
65
66
  * @returns the frozen resolved slice.
66
67
  */
67
- export function resolveIntegration(input, accounts) {
68
+ export function resolveIntegration(input, accounts, attachments = DEFAULT_QA_SURFACE_CONFIG.attachments) {
68
69
  const fallback = DEFAULT_QA_SURFACE_CONFIG.integration;
69
70
  const enabled = input?.enabled ?? fallback.enabled;
70
71
  const basePath = normalizeIntegrationBasePath(input?.basePath ?? fallback.basePath);
@@ -74,6 +75,11 @@ export function resolveIntegration(input, accounts) {
74
75
  const requestsPerMinute = input?.requestsPerMinute ?? fallback.requestsPerMinute;
75
76
  const maxRequestBytes = input?.maxRequestBytes ?? fallback.maxRequestBytes;
76
77
  const maxAttachmentBytes = input?.maxAttachmentBytes ?? fallback.maxAttachmentBytes;
78
+ const configuredMaxAttachments = input?.maxAttachments ?? 0;
79
+ assertIntInRange("integration.maxAttachments", configuredMaxAttachments, 0, QA_MAX_PENDING_MAX);
80
+ const maxAttachments = configuredMaxAttachments === 0
81
+ ? attachments.maxPending
82
+ : configuredMaxAttachments;
77
83
  const maxAnswerCharacters = input?.maxAnswerCharacters ?? fallback.maxAnswerCharacters;
78
84
  assertIntInRange("integration.tokenTtlDays", tokenTtlDays, QA_INTEGRATION_TTL_DAYS_MIN, QA_INTEGRATION_TTL_DAYS_MAX);
79
85
  assertIntInRange("integration.requestTimeoutMs", requestTimeoutMs, QA_INTEGRATION_TIMEOUT_MS_MIN, QA_INTEGRATION_TIMEOUT_MS_MAX);
@@ -94,6 +100,7 @@ export function resolveIntegration(input, accounts) {
94
100
  requestsPerMinute,
95
101
  maxRequestBytes,
96
102
  maxAttachmentBytes,
103
+ maxAttachments,
97
104
  maxAnswerCharacters,
98
105
  });
99
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"integration.js","sourceRoot":"","sources":["../../src/config-resolvers/integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integration.js","sourceRoot":"","sources":["../../src/config-resolvers/integration.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { DEFAULT_QA_SURFACE_CONFIG } from "./defaults.js";
2
+ import { normalizeModelReplacements } from "../access/model-policy.js";
2
3
  import { assertIntInRange, isAbsoluteDirectoryPath, optionalText, } from "./shared.js";
3
4
  /**
4
5
  * Ceiling of `session.maxActiveRequests`. The floor is 0 — "no ceiling" — and
@@ -46,6 +47,7 @@ export function resolveSession(input) {
46
47
  provider,
47
48
  model,
48
49
  reasoningEffort: optionalText(input.session?.reasoningEffort),
50
+ modelReplacements: normalizeModelReplacements(input.session?.modelReplacements),
49
51
  maxActiveRequests,
50
52
  });
51
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/config-resolvers/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,GACb,MAAM,aAAa,CAAC;AAIrB;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,MAAM,MAAM,GACV,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC;IACpE,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,OAAO,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,SAAS,CACjB,qEAAqE,CACtE,CAAC;IACJ,CAAC;IACD,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,SAAS,CACjB,gEAAgE,CACjE,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,IAAI,WAAW,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CACjB,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CACjB,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,iBAAiB,GACrB,KAAK,CAAC,OAAO,EAAE,iBAAiB;QAChC,yBAAyB,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACtD,gBAAgB,CACd,2BAA2B,EAC3B,iBAAiB,EACjB,CAAC,EACD,0BAA0B,CAC3B,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,UAAU;QACV,GAAG;QACH,WAAW;QACX,cAAc;QACd,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC;QACrD,QAAQ;QACR,KAAK;QACL,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC;QAC7D,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/config-resolvers/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,GACb,MAAM,aAAa,CAAC;AAIrB;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,MAAM,MAAM,GACV,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC;IACpE,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,OAAO,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,SAAS,CACjB,qEAAqE,CACtE,CAAC;IACJ,CAAC;IACD,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,SAAS,CACjB,gEAAgE,CACjE,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,IAAI,WAAW,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CACjB,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CACjB,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GACd,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;QACjC,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/C,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,iBAAiB,GACrB,KAAK,CAAC,OAAO,EAAE,iBAAiB;QAChC,yBAAyB,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACtD,gBAAgB,CACd,2BAA2B,EAC3B,iBAAiB,EACjB,CAAC,EACD,0BAA0B,CAC3B,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,UAAU;QACV,GAAG;QACH,WAAW;QACX,cAAc;QACd,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC;QACrD,QAAQ;QACR,KAAK;QACL,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC;QAC7D,iBAAiB,EAAE,0BAA0B,CAC3C,KAAK,CAAC,OAAO,EAAE,iBAAiB,CACjC;QACD,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { isDocumentationVersion } from "../shared/docs-version.js";
2
2
  import { DEFAULT_QA_SURFACE_CONFIG } from "./defaults.js";
3
+ import { resolveFileWritePolicy } from "../shared/file-write-policy.js";
3
4
  /**
4
5
  * The public skill-name grammar (`@deepseek-ai/dsh-skill`): lowercase
5
6
  * kebab-case. Validating here keeps a typo in `activationSkill` from silently
@@ -36,6 +37,7 @@ export function resolveTools(input) {
36
37
  throw new Error(`tools.docsDefaultVersion must be a documentation version such as "3.8", got "${defaultVersion}"`);
37
38
  }
38
39
  return Object.freeze({
40
+ fileWritePolicy: resolveFileWritePolicy(input.tools?.fileWritePolicy),
39
41
  activationSkill,
40
42
  activationMode,
41
43
  activationPresets: Object.freeze(activationPresets),
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config-resolvers/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAI1D;;;;GAIG;AACH,MAAM,UAAU,GAAG,6BAA6B,CAAC;AAEjD,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,MAAM,eAAe,GACnB,KAAK,CAAC,KAAK,EAAE,eAAe;QAC5B,yBAAyB,CAAC,KAAK,CAAC,eAAe,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,+DAA+D,eAAe,GAAG,CAClF,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAClB,KAAK,CAAC,KAAK,EAAE,cAAc;QAC3B,yBAAyB,CAAC,KAAK,CAAC,cAAc,CAAC;IACjD,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,CAAC,cAAc,CAAC,GAAG,CACtE,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG;QACxB,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB;YAChC,yBAAyB,CAAC,KAAK,CAAC,iBAAiB,CAAC;KACrD,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,MAAM,cAAc,GAAG,CACrB,KAAK,CAAC,KAAK,EAAE,kBAAkB;QAC/B,yBAAyB,CAAC,KAAK,CAAC,kBAAkB,CACnD,CAAC,IAAI,EAAE,CAAC;IACT,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,IAAI,cAAc,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CACb,gFAAgF,cAAc,GAAG,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe;QACf,cAAc;QACd,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACnD,iBAAiB,EACf,KAAK,CAAC,KAAK,EAAE,iBAAiB;YAC9B,yBAAyB,CAAC,KAAK,CAAC,iBAAiB;QACnD,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,yBAAyB,CAAC,KAAK,CAAC,QAAQ;QAC3E,4EAA4E;QAC5E,uEAAuE;QACvE,kBAAkB,EAAE,cAAc;QAClC,yBAAyB,EACvB,KAAK,CAAC,KAAK,EAAE,yBAAyB;YACtC,yBAAyB,CAAC,KAAK,CAAC,yBAAyB;KAC5D,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAuC;IAEvC,OAAO,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config-resolvers/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAIxE;;;;GAIG;AACH,MAAM,UAAU,GAAG,6BAA6B,CAAC;AAEjD,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,MAAM,eAAe,GACnB,KAAK,CAAC,KAAK,EAAE,eAAe;QAC5B,yBAAyB,CAAC,KAAK,CAAC,eAAe,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,+DAA+D,eAAe,GAAG,CAClF,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAClB,KAAK,CAAC,KAAK,EAAE,cAAc;QAC3B,yBAAyB,CAAC,KAAK,CAAC,cAAc,CAAC;IACjD,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,CAAC,cAAc,CAAC,GAAG,CACtE,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG;QACxB,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB;YAChC,yBAAyB,CAAC,KAAK,CAAC,iBAAiB,CAAC;KACrD,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,MAAM,cAAc,GAAG,CACrB,KAAK,CAAC,KAAK,EAAE,kBAAkB;QAC/B,yBAAyB,CAAC,KAAK,CAAC,kBAAkB,CACnD,CAAC,IAAI,EAAE,CAAC;IACT,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,IAAI,cAAc,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CACb,gFAAgF,cAAc,GAAG,CAClG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe,EAAE,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC;QACrE,eAAe;QACf,cAAc;QACd,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;QACnD,iBAAiB,EACf,KAAK,CAAC,KAAK,EAAE,iBAAiB;YAC9B,yBAAyB,CAAC,KAAK,CAAC,iBAAiB;QACnD,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,yBAAyB,CAAC,KAAK,CAAC,QAAQ;QAC3E,4EAA4E;QAC5E,uEAAuE;QACvE,kBAAkB,EAAE,cAAc;QAClC,yBAAyB,EACvB,KAAK,CAAC,KAAK,EAAE,yBAAyB;YACtC,yBAAyB,CAAC,KAAK,CAAC,yBAAyB;KAC5D,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAuC;IAEvC,OAAO,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC"}
package/lib/config.js CHANGED
@@ -7,6 +7,7 @@ import { QA_PROFILE_INSTRUCTIONS_MAX_MAX, QA_PROFILE_INSTRUCTIONS_MAX_MIN, } fro
7
7
  import { QA_SKILL_ENABLED_BY_DEFAULT, QA_SKILL_MAX_BYTES_MAX, QA_SKILL_MAX_BYTES_MIN, } from "./personal-skills/skill-format.js";
8
8
  import { QA_MAX_ACTIVE_REQUESTS_MAX } from "./config-resolvers/session.js";
9
9
  import { QA_SLASH_MAX_VISIBLE_MAX, QA_SLASH_MAX_VISIBLE_MIN, } from "./config-resolvers/slash-commands.js";
10
+ import { QA_FILE_WRITE_EXTENSION_PATTERN } from "./shared/file-write-policy.js";
10
11
  // Every schema default derives from the canonical resolved defaults: the Host
11
12
  // feeds the schema-parsed config into resolveConfig, so a default that exists
12
13
  // only here would reach the resolver as an explicit value (and, for
@@ -41,6 +42,21 @@ function readManifestVersion() {
41
42
  }
42
43
  const nullableString = z.union([z.string(), z.const(null)]);
43
44
  const configSchema = z.object({
45
+ codeSources: z
46
+ .object({
47
+ defaultSource: z.string().default(""),
48
+ entries: z
49
+ .array(z.object({
50
+ id: z.string().required(),
51
+ label: z.string().required(),
52
+ path: z.string().required(),
53
+ docsVersion: z.string(),
54
+ }))
55
+ .default([]),
56
+ })
57
+ .default({ defaultSource: "", entries: [] })
58
+ .description("Named code trees shared with Git. Access still requires sharedReadOnlyRoots and repositoryRoots.")
59
+ .volatile(),
44
60
  forms: z
45
61
  .object({
46
62
  enabled: z.boolean().default(D.forms.enabled),
@@ -125,6 +141,20 @@ const configSchema = z.object({
125
141
  provider: nullableString.default(D.session.provider),
126
142
  model: nullableString.default(D.session.model),
127
143
  reasoningEffort: nullableString.default(D.session.reasoningEffort),
144
+ modelReplacements: z
145
+ .array(z.object({
146
+ from: z.object({
147
+ provider: z.string().required(),
148
+ model: z.string().required(),
149
+ }),
150
+ to: z.object({
151
+ provider: z.string().required(),
152
+ model: z.string().required(),
153
+ reasoningEffort: z.string(),
154
+ }),
155
+ }))
156
+ .default([])
157
+ .description("Exact model replacements for all policy layers. A target must be offered by the Host; unrelated account and role pins remain unchanged."),
128
158
  maxActiveRequests: z
129
159
  .number()
130
160
  .step(1)
@@ -132,7 +162,7 @@ const configSchema = z.object({
132
162
  .max(QA_MAX_ACTIVE_REQUESTS_MAX)
133
163
  .default(D.session.maxActiveRequests),
134
164
  })
135
- .default({ ...D.session })
165
+ .default({ ...D.session, modelReplacements: [] })
136
166
  .volatile(),
137
167
  ui: z
138
168
  .object({
@@ -378,6 +408,15 @@ const configSchema = z.object({
378
408
  .object({
379
409
  enabled: z.boolean().default(QA_SKILL_ENABLED_BY_DEFAULT),
380
410
  relativeRoot: z.string().default(D.accounts.skills.relativeRoot),
411
+ sharedSeed: z
412
+ .union([
413
+ z.object({
414
+ root: z.string(),
415
+ names: z.array(z.string()).max(100),
416
+ }),
417
+ z.const(null),
418
+ ])
419
+ .default(null),
381
420
  watch: z.boolean().default(D.accounts.skills.watch),
382
421
  maxSkillBytes: z
383
422
  .number()
@@ -391,6 +430,7 @@ const configSchema = z.object({
391
430
  })
392
431
  .default({
393
432
  ...D.accounts.skills,
433
+ sharedSeed: null,
394
434
  enabled: QA_SKILL_ENABLED_BY_DEFAULT,
395
435
  }),
396
436
  })
@@ -402,7 +442,11 @@ const configSchema = z.object({
402
442
  identities: [...D.accounts.profile.identities],
403
443
  },
404
444
  starters: { ...D.accounts.starters },
405
- skills: { ...D.accounts.skills, enabled: QA_SKILL_ENABLED_BY_DEFAULT },
445
+ skills: {
446
+ ...D.accounts.skills,
447
+ sharedSeed: null,
448
+ enabled: QA_SKILL_ENABLED_BY_DEFAULT,
449
+ },
406
450
  })
407
451
  .volatile(),
408
452
  entry: z
@@ -421,6 +465,23 @@ const configSchema = z.object({
421
465
  .volatile(),
422
466
  tools: z
423
467
  .object({
468
+ fileWritePolicy: z
469
+ .object({
470
+ blockedExtensions: z
471
+ .array(z.string().max(64).pattern(QA_FILE_WRITE_EXTENSION_PATTERN))
472
+ .max(100)
473
+ .default([...D.tools.fileWritePolicy.blockedExtensions]),
474
+ message: z
475
+ .string()
476
+ .min(1)
477
+ .max(4000)
478
+ .pattern(/\S/u)
479
+ .default(D.tools.fileWritePolicy.message),
480
+ })
481
+ .default({
482
+ ...D.tools.fileWritePolicy,
483
+ blockedExtensions: [...D.tools.fileWritePolicy.blockedExtensions],
484
+ }),
424
485
  dynamicActivation: z.boolean().default(D.tools.dynamicActivation),
425
486
  activationSkill: z.string().default(D.tools.activationSkill),
426
487
  activationMode: z.union(["all"]).default(D.tools.activationMode),
@@ -449,7 +510,14 @@ const configSchema = z.object({
449
510
  .boolean()
450
511
  .default(D.tools.docsDefaultVersionEnabled),
451
512
  })
452
- .default({ ...D.tools, activationPresets: [...D.tools.activationPresets] })
513
+ .default({
514
+ ...D.tools,
515
+ activationPresets: [...D.tools.activationPresets],
516
+ fileWritePolicy: {
517
+ ...D.tools.fileWritePolicy,
518
+ blockedExtensions: [...D.tools.fileWritePolicy.blockedExtensions],
519
+ },
520
+ })
453
521
  .volatile(),
454
522
  sources: z
455
523
  .object({
@@ -700,12 +768,17 @@ const configSchema = z.object({
700
768
  .number()
701
769
  .step(1)
702
770
  .default(D.integration.maxAttachmentBytes),
771
+ maxAttachments: z
772
+ .number()
773
+ .step(1)
774
+ .default(0)
775
+ .description("Files per integration request; 0 inherits attachments.maxPending."),
703
776
  maxAnswerCharacters: z
704
777
  .number()
705
778
  .step(1)
706
779
  .default(D.integration.maxAnswerCharacters),
707
780
  })
708
- .default({ ...D.integration })
781
+ .default({ ...D.integration, maxAttachments: 0 })
709
782
  .volatile(),
710
783
  });
711
784
  /**