@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.
- package/README.md +235 -0
- package/lib/access/model-choices.js +103 -0
- package/lib/access/model-choices.js.map +1 -0
- package/lib/access/model-policy.js +79 -7
- package/lib/access/model-policy.js.map +1 -1
- package/lib/access/model.js +29 -1
- package/lib/access/model.js.map +1 -1
- package/lib/access/queue-policy.js +36 -0
- package/lib/access/queue-policy.js.map +1 -0
- package/lib/access/service.js +124 -7
- package/lib/access/service.js.map +1 -1
- package/lib/account-remotes.js +10 -1
- package/lib/account-remotes.js.map +1 -1
- package/lib/accounts/database.js +44 -3
- package/lib/accounts/database.js.map +1 -1
- package/lib/accounts/store.js +28 -0
- package/lib/accounts/store.js.map +1 -1
- package/lib/admin/service.js +6 -1
- package/lib/admin/service.js.map +1 -1
- package/lib/chat-sharing/transport.js +6 -2
- package/lib/chat-sharing/transport.js.map +1 -1
- package/lib/client/QaAccountsController.js +43 -8
- package/lib/client/QaAccountsController.js.map +1 -1
- package/lib/client/QaSessionController.js +55 -23
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +61 -3
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +36 -1
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/admin/ModelPolicyEditor.js +28 -2
- package/lib/client/admin/ModelPolicyEditor.js.map +1 -1
- package/lib/client/admin/RoleEditor.js +18 -1
- package/lib/client/admin/RoleEditor.js.map +1 -1
- package/lib/client/admin/pages/SkillFiles.js +1 -1
- package/lib/client/admin/pages/SkillFiles.js.map +1 -1
- package/lib/client/admin/pages/Users.js +36 -16
- package/lib/client/admin/pages/Users.js.map +1 -1
- package/lib/client/admin/styles.js +3 -0
- package/lib/client/admin/styles.js.map +1 -1
- package/lib/client/chat-artifacts.js +1 -0
- package/lib/client/chat-artifacts.js.map +1 -1
- package/lib/client/code-source-styles.js +12 -0
- package/lib/client/code-source-styles.js.map +1 -0
- package/lib/client/components/QaArtifactAttachment.js +12 -0
- package/lib/client/components/QaArtifactAttachment.js.map +1 -0
- package/lib/client/components/QaChangelog.js +94 -0
- package/lib/client/components/QaChangelog.js.map +1 -1
- package/lib/client/components/QaChatActions.js +36 -14
- package/lib/client/components/QaChatActions.js.map +1 -1
- package/lib/client/components/QaCodeSourcePicker.js +18 -0
- package/lib/client/components/QaCodeSourcePicker.js.map +1 -0
- package/lib/client/components/QaComposer.js +11 -12
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaComposerSettings.js +202 -0
- package/lib/client/components/QaComposerSettings.js.map +1 -0
- package/lib/client/components/QaFilesPanel.js +2 -8
- package/lib/client/components/QaFilesPanel.js.map +1 -1
- package/lib/client/components/QaFormItem.js +74 -38
- package/lib/client/components/QaFormItem.js.map +1 -1
- package/lib/client/components/QaHistoryCatalog.js +261 -0
- package/lib/client/components/QaHistoryCatalog.js.map +1 -0
- package/lib/client/components/QaInputForm.js +115 -32
- package/lib/client/components/QaInputForm.js.map +1 -1
- package/lib/client/components/QaMessage.js +3 -8
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaModelSelector.js +21 -0
- package/lib/client/components/QaModelSelector.js.map +1 -0
- package/lib/client/components/QaSidebar.js +25 -24
- package/lib/client/components/QaSidebar.js.map +1 -1
- package/lib/client/components/QaWorkGroup.js +1 -3
- package/lib/client/components/QaWorkGroup.js.map +1 -1
- package/lib/client/composer-settings-styles.js +21 -0
- package/lib/client/composer-settings-styles.js.map +1 -0
- package/lib/client/forms-styles.js +35 -11
- package/lib/client/forms-styles.js.map +1 -1
- package/lib/client/history-organization-styles.js +31 -0
- package/lib/client/history-organization-styles.js.map +1 -0
- package/lib/client/history-organization.js +155 -0
- package/lib/client/history-organization.js.map +1 -0
- package/lib/client/index.js +13 -4
- package/lib/client/index.js.map +1 -1
- package/lib/client/settings/card.js +2 -2
- package/lib/client/settings/card.js.map +1 -1
- package/lib/client/settings/sections/attachments.js +7 -1
- package/lib/client/settings/sections/attachments.js.map +1 -1
- package/lib/client/settings/sections/file-writes.js +15 -0
- package/lib/client/settings/sections/file-writes.js.map +1 -0
- package/lib/client/settings/sections/session.js +1 -1
- package/lib/client/settings/sections/session.js.map +1 -1
- package/lib/client/settings/sections.js +1 -0
- package/lib/client/settings/sections.js.map +1 -1
- package/lib/client/styles.js +18 -1
- package/lib/client/styles.js.map +1 -1
- package/lib/client/tool-presentation.js +21 -3
- package/lib/client/tool-presentation.js.map +1 -1
- package/lib/client/types.js.map +1 -1
- package/lib/client/use-chat-code-source.js +156 -0
- package/lib/client/use-chat-code-source.js.map +1 -0
- package/lib/client/use-history-organization.js +48 -0
- package/lib/client/use-history-organization.js.map +1 -0
- package/lib/client/use-model-selection.js +96 -0
- package/lib/client/use-model-selection.js.map +1 -0
- package/lib/client/use-qa-file-drop.js +81 -0
- package/lib/client/use-qa-file-drop.js.map +1 -0
- package/lib/client/user-settings/IntegrationTokensPage.js +42 -6
- package/lib/client/user-settings/IntegrationTokensPage.js.map +1 -1
- package/lib/client/user-settings/UserSettingsDialog.js +1 -1
- package/lib/client/user-settings/UserSettingsDialog.js.map +1 -1
- package/lib/client.js +125 -27
- package/lib/client.js.map +1 -1
- package/lib/code-source-selection.js +102 -0
- package/lib/code-source-selection.js.map +1 -0
- package/lib/config-resolvers/accounts.js +26 -1
- package/lib/config-resolvers/accounts.js.map +1 -1
- package/lib/config-resolvers/defaults.js +7 -0
- package/lib/config-resolvers/defaults.js.map +1 -1
- package/lib/config-resolvers/integration.js +8 -1
- package/lib/config-resolvers/integration.js.map +1 -1
- package/lib/config-resolvers/session.js +2 -0
- package/lib/config-resolvers/session.js.map +1 -1
- package/lib/config-resolvers/tools.js +2 -0
- package/lib/config-resolvers/tools.js.map +1 -1
- package/lib/config.js +77 -4
- package/lib/config.js.map +1 -1
- package/lib/enforcement/skill-policy.js +37 -2
- package/lib/enforcement/skill-policy.js.map +1 -1
- package/lib/forms/errors.js +6 -1
- package/lib/forms/errors.js.map +1 -1
- package/lib/forms/gate.js +28 -2
- package/lib/forms/gate.js.map +1 -1
- package/lib/forms/schema-errors.js +47 -0
- package/lib/forms/schema-errors.js.map +1 -0
- package/lib/forms/schema.js +29 -20
- package/lib/forms/schema.js.map +1 -1
- package/lib/index.js +161 -9
- package/lib/index.js.map +1 -1
- package/lib/integration/http.js +9 -10
- package/lib/integration/http.js.map +1 -1
- package/lib/integration/service.js +9 -0
- package/lib/integration/service.js.map +1 -1
- package/lib/personal-skills/provider.js +9 -1
- package/lib/personal-skills/provider.js.map +1 -1
- package/lib/personal-skills/service.js +4 -0
- package/lib/personal-skills/service.js.map +1 -1
- package/lib/personal-skills/shared-seed.js +65 -0
- package/lib/personal-skills/shared-seed.js.map +1 -0
- package/lib/prompt-notes.js +24 -2
- package/lib/prompt-notes.js.map +1 -1
- package/lib/provenance/collector.js +1 -0
- package/lib/provenance/collector.js.map +1 -1
- package/lib/provenance/extractors.js +6 -1
- package/lib/provenance/extractors.js.map +1 -1
- package/lib/qa-tools/catalog.js +33 -1
- package/lib/qa-tools/catalog.js.map +1 -1
- package/lib/qa-tools/code-files.js +207 -0
- package/lib/qa-tools/code-files.js.map +1 -0
- package/lib/qa-tools/code-tools.js +158 -0
- package/lib/qa-tools/code-tools.js.map +1 -0
- package/lib/qa-tools/docs-tools.js +49 -12
- package/lib/qa-tools/docs-tools.js.map +1 -1
- package/lib/qa-tools/file-write-gate.js +47 -0
- package/lib/qa-tools/file-write-gate.js.map +1 -0
- package/lib/qa-tools/index.js +10 -0
- package/lib/qa-tools/index.js.map +1 -1
- package/lib/qa-tools/request-user-form.js +26 -6
- package/lib/qa-tools/request-user-form.js.map +1 -1
- package/lib/qa-tools/subagent-tools.js +159 -0
- package/lib/qa-tools/subagent-tools.js.map +1 -0
- package/lib/request-scheduler.js +32 -5
- package/lib/request-scheduler.js.map +1 -1
- package/lib/resolve-config.js +9 -1
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +16 -4
- package/lib/secure-session.js.map +1 -1
- package/lib/session-model.js +43 -1
- package/lib/session-model.js.map +1 -1
- package/lib/shared/file-write-policy.js +29 -0
- package/lib/shared/file-write-policy.js.map +1 -0
- package/lib/shared/history-folder.js +18 -0
- package/lib/shared/history-folder.js.map +1 -0
- package/lib/typert.host.js +757 -162
- package/lib/typert.remote-client.d.ts +19 -7
- package/lib/typert.remote-client.js +688 -153
- package/lib/types/access/model-choices.d.ts +16 -0
- package/lib/types/access/model-policy.d.ts +13 -7
- package/lib/types/access/model.d.ts +9 -0
- package/lib/types/access/queue-policy.d.ts +30 -0
- package/lib/types/access/service.d.ts +27 -0
- package/lib/types/account-remotes.d.ts +5 -4
- package/lib/types/accounts/database.d.ts +5 -0
- package/lib/types/accounts/store.d.ts +6 -0
- package/lib/types/chat-sharing/transport.d.ts +1 -1
- package/lib/types/client/QaAccountsController.d.ts +3 -1
- package/lib/types/client/QaSessionController.d.ts +19 -5
- package/lib/types/client/QaSurface.d.ts +2 -0
- package/lib/types/client/admin/ModelPolicyEditor.d.ts +2 -0
- package/lib/types/client/code-source-styles.d.ts +2 -0
- package/lib/types/client/components/QaArtifactAttachment.d.ts +8 -0
- package/lib/types/client/components/QaChatActions.d.ts +3 -1
- package/lib/types/client/components/QaCodeSourcePicker.d.ts +9 -0
- package/lib/types/client/components/QaComposer.d.ts +2 -0
- package/lib/types/client/components/QaComposerSettings.d.ts +16 -0
- package/lib/types/client/components/QaFormItem.d.ts +4 -2
- package/lib/types/client/components/QaHistoryCatalog.d.ts +19 -0
- package/lib/types/client/components/QaInputForm.d.ts +3 -2
- package/lib/types/client/components/QaModelSelector.d.ts +4 -0
- package/lib/types/client/components/QaSidebar.d.ts +3 -0
- package/lib/types/client/composer-settings-styles.d.ts +2 -0
- package/lib/types/client/forms-styles.d.ts +1 -1
- package/lib/types/client/history-organization-styles.d.ts +3 -0
- package/lib/types/client/history-organization.d.ts +38 -0
- package/lib/types/client/settings/sections/file-writes.d.ts +4 -0
- package/lib/types/client/settings/sections.d.ts +1 -0
- package/lib/types/client/tool-presentation.d.ts +1 -0
- package/lib/types/client/types.d.ts +12 -4
- package/lib/types/client/use-chat-code-source.d.ts +20 -0
- package/lib/types/client/use-history-organization.d.ts +8 -0
- package/lib/types/client/use-model-selection.d.ts +24 -0
- package/lib/types/client/use-qa-file-drop.d.ts +12 -0
- package/lib/types/code-source-selection.d.ts +28 -0
- package/lib/types/code-sources.js +2 -0
- package/lib/types/code-sources.js.map +1 -0
- package/lib/types/config-resolvers/integration.d.ts +7 -1
- package/lib/types/forms/errors.d.ts +3 -2
- package/lib/types/forms/gate.d.ts +4 -2
- package/lib/types/forms/schema-errors.d.ts +7 -0
- package/lib/types/forms/types.d.ts +14 -0
- package/lib/types/index.d.ts +38 -5
- package/lib/types/integration/http.d.ts +1 -3
- package/lib/types/integration/service.d.ts +2 -0
- package/lib/types/personal-skills/shared-seed.d.ts +12 -0
- package/lib/types/prompt-notes.d.ts +6 -2
- package/lib/types/qa-tools/catalog.d.ts +5 -2
- package/lib/types/qa-tools/code-files.d.ts +59 -0
- package/lib/types/qa-tools/code-tools.d.ts +7 -0
- package/lib/types/qa-tools/docs-tools.d.ts +4 -0
- package/lib/types/qa-tools/file-write-gate.d.ts +6 -0
- package/lib/types/qa-tools/index.d.ts +3 -0
- package/lib/types/qa-tools/subagent-tools.d.ts +40 -0
- package/lib/types/request-scheduler.d.ts +21 -2
- package/lib/types/session-model.d.ts +11 -2
- package/lib/types/shared/file-write-policy.d.ts +10 -0
- package/lib/types/shared/history-folder.d.ts +4 -0
- package/lib/types/types/accounts.d.ts +11 -0
- package/lib/types/types/capability.d.ts +31 -4
- package/lib/types/types/code-sources.d.ts +12 -0
- package/lib/types/types/config.d.ts +23 -0
- package/lib/types/types/documents.d.ts +2 -0
- package/lib/types/types.d.ts +1 -0
- package/lib/user-workspace.js +7 -4
- package/lib/user-workspace.js.map +1 -1
- 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":"AAAA,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,
|
|
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":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mCAAmC,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EACL,8BAA8B,EAC9B,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;
|
|
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":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
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;
|
|
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: {
|
|
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({
|
|
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
|
/**
|