ds4-context-core 0.1.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/LICENSE +21 -0
- package/README.md +80 -0
- package/dist/artifacts/artifact-manager.d.ts +58 -0
- package/dist/artifacts/artifact-manager.d.ts.map +1 -0
- package/dist/artifacts/artifact-manager.js +445 -0
- package/dist/artifacts/artifact-manager.js.map +1 -0
- package/dist/artifacts/artifact-store.d.ts +33 -0
- package/dist/artifacts/artifact-store.d.ts.map +1 -0
- package/dist/artifacts/artifact-store.js +116 -0
- package/dist/artifacts/artifact-store.js.map +1 -0
- package/dist/compaction/compaction-record.d.ts +74 -0
- package/dist/compaction/compaction-record.d.ts.map +1 -0
- package/dist/compaction/compaction-record.js +113 -0
- package/dist/compaction/compaction-record.js.map +1 -0
- package/dist/compaction/summary-contract.d.ts +68 -0
- package/dist/compaction/summary-contract.d.ts.map +1 -0
- package/dist/compaction/summary-contract.js +315 -0
- package/dist/compaction/summary-contract.js.map +1 -0
- package/dist/compaction/summary-graph.d.ts +48 -0
- package/dist/compaction/summary-graph.d.ts.map +1 -0
- package/dist/compaction/summary-graph.js +123 -0
- package/dist/compaction/summary-graph.js.map +1 -0
- package/dist/config/config-loader.d.ts +18 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +305 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config.d.ts +113 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +89 -0
- package/dist/config/config.js.map +1 -0
- package/dist/continuation/native-continuation.d.ts +107 -0
- package/dist/continuation/native-continuation.d.ts.map +1 -0
- package/dist/continuation/native-continuation.js +374 -0
- package/dist/continuation/native-continuation.js.map +1 -0
- package/dist/core/budget-manager.d.ts +26 -0
- package/dist/core/budget-manager.d.ts.map +1 -0
- package/dist/core/budget-manager.js +42 -0
- package/dist/core/budget-manager.js.map +1 -0
- package/dist/core/canonical-message.d.ts +69 -0
- package/dist/core/canonical-message.d.ts.map +1 -0
- package/dist/core/canonical-message.js +2 -0
- package/dist/core/canonical-message.js.map +1 -0
- package/dist/core/model-awareness.d.ts +59 -0
- package/dist/core/model-awareness.d.ts.map +1 -0
- package/dist/core/model-awareness.js +177 -0
- package/dist/core/model-awareness.js.map +1 -0
- package/dist/core/model-profile.d.ts +27 -0
- package/dist/core/model-profile.d.ts.map +1 -0
- package/dist/core/model-profile.js +29 -0
- package/dist/core/model-profile.js.map +1 -0
- package/dist/core/token-estimator.d.ts +4 -0
- package/dist/core/token-estimator.d.ts.map +1 -0
- package/dist/core/token-estimator.js +64 -0
- package/dist/core/token-estimator.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/context-manifest.d.ts +163 -0
- package/dist/manifest/context-manifest.d.ts.map +1 -0
- package/dist/manifest/context-manifest.js +2 -0
- package/dist/manifest/context-manifest.js.map +1 -0
- package/dist/manifest/observer.d.ts +63 -0
- package/dist/manifest/observer.d.ts.map +1 -0
- package/dist/manifest/observer.js +150 -0
- package/dist/manifest/observer.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +112 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +499 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/memory/memory-types.d.ts +126 -0
- package/dist/memory/memory-types.d.ts.map +1 -0
- package/dist/memory/memory-types.js +73 -0
- package/dist/memory/memory-types.js.map +1 -0
- package/dist/persistence/migrations.d.ts +17 -0
- package/dist/persistence/migrations.d.ts.map +1 -0
- package/dist/persistence/migrations.js +588 -0
- package/dist/persistence/migrations.js.map +1 -0
- package/dist/persistence/repositories/artifact-repository.d.ts +50 -0
- package/dist/persistence/repositories/artifact-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/artifact-repository.js +186 -0
- package/dist/persistence/repositories/artifact-repository.js.map +1 -0
- package/dist/persistence/repositories/context-manifest-repository.d.ts +19 -0
- package/dist/persistence/repositories/context-manifest-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/context-manifest-repository.js +144 -0
- package/dist/persistence/repositories/context-manifest-repository.js.map +1 -0
- package/dist/persistence/repositories/memory-repository.d.ts +33 -0
- package/dist/persistence/repositories/memory-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/memory-repository.js +429 -0
- package/dist/persistence/repositories/memory-repository.js.map +1 -0
- package/dist/persistence/repositories/project-knowledge-repository.d.ts +65 -0
- package/dist/persistence/repositories/project-knowledge-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/project-knowledge-repository.js +248 -0
- package/dist/persistence/repositories/project-knowledge-repository.js.map +1 -0
- package/dist/persistence/repositories/session-index-repository.d.ts +81 -0
- package/dist/persistence/repositories/session-index-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/session-index-repository.js +220 -0
- package/dist/persistence/repositories/session-index-repository.js.map +1 -0
- package/dist/persistence/repositories/summary-repository.d.ts +16 -0
- package/dist/persistence/repositories/summary-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/summary-repository.js +242 -0
- package/dist/persistence/repositories/summary-repository.js.map +1 -0
- package/dist/persistence/sqlite.d.ts +45 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +137 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/planner/atomic-groups.d.ts +15 -0
- package/dist/planner/atomic-groups.d.ts.map +1 -0
- package/dist/planner/atomic-groups.js +177 -0
- package/dist/planner/atomic-groups.js.map +1 -0
- package/dist/planner/context-planner.d.ts +49 -0
- package/dist/planner/context-planner.d.ts.map +1 -0
- package/dist/planner/context-planner.js +367 -0
- package/dist/planner/context-planner.js.map +1 -0
- package/dist/privacy/privacy-policy.d.ts +58 -0
- package/dist/privacy/privacy-policy.d.ts.map +1 -0
- package/dist/privacy/privacy-policy.js +412 -0
- package/dist/privacy/privacy-policy.js.map +1 -0
- package/dist/project/file-indexer.d.ts +32 -0
- package/dist/project/file-indexer.d.ts.map +1 -0
- package/dist/project/file-indexer.js +374 -0
- package/dist/project/file-indexer.js.map +1 -0
- package/dist/project/git-state.d.ts +12 -0
- package/dist/project/git-state.d.ts.map +1 -0
- package/dist/project/git-state.js +109 -0
- package/dist/project/git-state.js.map +1 -0
- package/dist/project/project-knowledge.d.ts +63 -0
- package/dist/project/project-knowledge.d.ts.map +1 -0
- package/dist/project/project-knowledge.js +332 -0
- package/dist/project/project-knowledge.js.map +1 -0
- package/dist/retrieval/retrieval-engine.d.ts +55 -0
- package/dist/retrieval/retrieval-engine.d.ts.map +1 -0
- package/dist/retrieval/retrieval-engine.js +290 -0
- package/dist/retrieval/retrieval-engine.js.map +1 -0
- package/dist/retrieval/task-descriptor.d.ts +17 -0
- package/dist/retrieval/task-descriptor.d.ts.map +1 -0
- package/dist/retrieval/task-descriptor.js +107 -0
- package/dist/retrieval/task-descriptor.js.map +1 -0
- package/dist/shared/hash.d.ts +2 -0
- package/dist/shared/hash.d.ts.map +1 -0
- package/dist/shared/hash.js +5 -0
- package/dist/shared/hash.js.map +1 -0
- package/dist/shared/logging.d.ts +27 -0
- package/dist/shared/logging.d.ts.map +1 -0
- package/dist/shared/logging.js +83 -0
- package/dist/shared/logging.js.map +1 -0
- package/dist/shared/stable-json.d.ts +2 -0
- package/dist/shared/stable-json.d.ts.map +1 -0
- package/dist/shared/stable-json.js +38 -0
- package/dist/shared/stable-json.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { PRIVACY_CLASSIFICATIONS, isPrivacyClassification } from "../privacy/privacy-policy.js";
|
|
5
|
+
import { createDefaultConfig } from "./config.js";
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
function mergeKnown(base, override, warnings, prefix = "") {
|
|
10
|
+
const result = structuredClone(base);
|
|
11
|
+
const known = base;
|
|
12
|
+
for (const [key, incoming] of Object.entries(override)) {
|
|
13
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
14
|
+
if (!(key in known)) {
|
|
15
|
+
warnings.push(`Unknown configuration key ignored: ${path}`);
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const expected = known[key];
|
|
19
|
+
if (isRecord(expected)) {
|
|
20
|
+
if (!isRecord(incoming)) {
|
|
21
|
+
warnings.push(`Invalid configuration value ignored: ${path} must be an object`);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
result[key] = path === "privacy.remoteProviders" || path === "modelAwareness.overrides"
|
|
25
|
+
? { ...structuredClone(expected), ...structuredClone(incoming) }
|
|
26
|
+
: Object.keys(expected).length === 0
|
|
27
|
+
? structuredClone(incoming)
|
|
28
|
+
: mergeKnown(expected, incoming, warnings, path);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (typeof incoming !== typeof expected || (typeof incoming === "number" && !Number.isFinite(incoming))) {
|
|
32
|
+
warnings.push(`Invalid configuration value ignored: ${path} has the wrong type`);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
result[key] = incoming;
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
function validateConfig(config) {
|
|
40
|
+
if (!["observer", "managed"].includes(config.context.mode)) {
|
|
41
|
+
throw new Error("context.mode must be observer or managed");
|
|
42
|
+
}
|
|
43
|
+
const ratios = [
|
|
44
|
+
["context.targetFillRatio", config.context.targetFillRatio],
|
|
45
|
+
["context.softLimitRatio", config.context.softLimitRatio],
|
|
46
|
+
["context.hardLimitRatio", config.context.hardLimitRatio],
|
|
47
|
+
];
|
|
48
|
+
for (const [name, value] of ratios) {
|
|
49
|
+
if (value <= 0 || value > 1)
|
|
50
|
+
throw new Error(`${name} must be greater than 0 and at most 1`);
|
|
51
|
+
}
|
|
52
|
+
if (!(config.context.targetFillRatio <= config.context.softLimitRatio &&
|
|
53
|
+
config.context.softLimitRatio <= config.context.hardLimitRatio)) {
|
|
54
|
+
throw new Error("context ratios must satisfy targetFillRatio <= softLimitRatio <= hardLimitRatio");
|
|
55
|
+
}
|
|
56
|
+
const nonNegative = [
|
|
57
|
+
["context.minimumOutputReserve", config.context.minimumOutputReserve],
|
|
58
|
+
["context.preferredOutputReserve", config.context.preferredOutputReserve],
|
|
59
|
+
["context.recentTailTokens", config.context.recentTailTokens],
|
|
60
|
+
["context.maxPinnedTokens", config.context.maxPinnedTokens],
|
|
61
|
+
["context.maxMemoryTokens", config.context.maxMemoryTokens],
|
|
62
|
+
["context.maxRetrievedHistoryTokens", config.context.maxRetrievedHistoryTokens],
|
|
63
|
+
["context.maxProjectTokens", config.context.maxProjectTokens],
|
|
64
|
+
["context.maxSummaryTokens", config.context.maxSummaryTokens],
|
|
65
|
+
["compaction.segmentTargetTokens", config.compaction.segmentTargetTokens],
|
|
66
|
+
["project.maxFileBytes", config.project.maxFileBytes],
|
|
67
|
+
["project.maxTotalBytes", config.project.maxTotalBytes],
|
|
68
|
+
["memory.maxPinChars", config.memory.maxPinChars],
|
|
69
|
+
["memory.maxClaimChars", config.memory.maxClaimChars],
|
|
70
|
+
["artifacts.maxInlineToolResultChars", config.artifacts.maxInlineToolResultChars],
|
|
71
|
+
["artifacts.maxArtifactBytes", config.artifacts.maxArtifactBytes],
|
|
72
|
+
["artifacts.maxSearchBytes", config.artifacts.maxSearchBytes],
|
|
73
|
+
["artifacts.excerptChars", config.artifacts.excerptChars],
|
|
74
|
+
];
|
|
75
|
+
for (const [name, value] of nonNegative) {
|
|
76
|
+
if (!Number.isInteger(value) || value < 0)
|
|
77
|
+
throw new Error(`${name} must be a non-negative integer`);
|
|
78
|
+
}
|
|
79
|
+
if (config.context.preferredOutputReserve < config.context.minimumOutputReserve) {
|
|
80
|
+
throw new Error("context.preferredOutputReserve must be at least context.minimumOutputReserve");
|
|
81
|
+
}
|
|
82
|
+
if (!Number.isInteger(config.retrieval.maxResults) || config.retrieval.maxResults <= 0 || config.retrieval.maxResults > 100) {
|
|
83
|
+
throw new Error("retrieval.maxResults must be a positive integer at most 100");
|
|
84
|
+
}
|
|
85
|
+
const positiveProjectIntegers = [
|
|
86
|
+
["project.maxFiles", config.project.maxFiles, 100_000],
|
|
87
|
+
["project.snippetLines", config.project.snippetLines, 500],
|
|
88
|
+
["project.maxResults", config.project.maxResults, 100],
|
|
89
|
+
];
|
|
90
|
+
for (const [name, value, maximum] of positiveProjectIntegers) {
|
|
91
|
+
if (!Number.isInteger(value) || value <= 0 || value > maximum) {
|
|
92
|
+
throw new Error(`${name} must be a positive integer at most ${maximum}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!Number.isInteger(config.project.snippetOverlapLines)
|
|
96
|
+
|| config.project.snippetOverlapLines < 0
|
|
97
|
+
|| config.project.snippetOverlapLines >= config.project.snippetLines) {
|
|
98
|
+
throw new Error("project.snippetOverlapLines must be a non-negative integer below project.snippetLines");
|
|
99
|
+
}
|
|
100
|
+
if (config.memory.maxPinChars < 1 || config.memory.maxPinChars > 20_000) {
|
|
101
|
+
throw new Error("memory.maxPinChars must be between 1 and 20000");
|
|
102
|
+
}
|
|
103
|
+
if (config.memory.maxClaimChars < 1 || config.memory.maxClaimChars > 20_000) {
|
|
104
|
+
throw new Error("memory.maxClaimChars must be between 1 and 20000");
|
|
105
|
+
}
|
|
106
|
+
if (!Number.isInteger(config.memory.maxResults)
|
|
107
|
+
|| config.memory.maxResults <= 0
|
|
108
|
+
|| config.memory.maxResults > 100) {
|
|
109
|
+
throw new Error("memory.maxResults must be a positive integer at most 100");
|
|
110
|
+
}
|
|
111
|
+
if (config.artifacts.maxInlineToolResultChars < 1_000) {
|
|
112
|
+
throw new Error("artifacts.maxInlineToolResultChars must be at least 1000");
|
|
113
|
+
}
|
|
114
|
+
if (config.artifacts.excerptChars > config.artifacts.maxInlineToolResultChars) {
|
|
115
|
+
throw new Error("artifacts.excerptChars must not exceed artifacts.maxInlineToolResultChars");
|
|
116
|
+
}
|
|
117
|
+
if (!Number.isInteger(config.artifacts.maxSearchMatches)
|
|
118
|
+
|| config.artifacts.maxSearchMatches <= 0
|
|
119
|
+
|| config.artifacts.maxSearchMatches > 100) {
|
|
120
|
+
throw new Error("artifacts.maxSearchMatches must be a positive integer at most 100");
|
|
121
|
+
}
|
|
122
|
+
if (config.artifacts.maxSearchBytes > config.artifacts.maxArtifactBytes) {
|
|
123
|
+
throw new Error("artifacts.maxSearchBytes must not exceed artifacts.maxArtifactBytes");
|
|
124
|
+
}
|
|
125
|
+
if (config.compaction.mode !== "hierarchical") {
|
|
126
|
+
throw new Error("compaction.mode must be hierarchical");
|
|
127
|
+
}
|
|
128
|
+
if (!config.compaction.preserveRecentVerbatim) {
|
|
129
|
+
throw new Error("compaction.preserveRecentVerbatim must remain true for non-destructive compaction");
|
|
130
|
+
}
|
|
131
|
+
if (!isPrivacyClassification(config.privacy.defaultClassification)) {
|
|
132
|
+
throw new Error("privacy.defaultClassification is invalid");
|
|
133
|
+
}
|
|
134
|
+
const validateClassifications = (name, values) => {
|
|
135
|
+
if (!Array.isArray(values) || values.some((value) => !isPrivacyClassification(value))) {
|
|
136
|
+
throw new Error(`${name} must contain only ${PRIVACY_CLASSIFICATIONS.join(", ")}`);
|
|
137
|
+
}
|
|
138
|
+
if (new Set(values).size !== values.length)
|
|
139
|
+
throw new Error(`${name} must not contain duplicates`);
|
|
140
|
+
if (values.includes("local-only"))
|
|
141
|
+
throw new Error(`${name} cannot allow local-only content to a remote provider`);
|
|
142
|
+
};
|
|
143
|
+
if (!Array.isArray(config.privacy.localProviders)
|
|
144
|
+
|| config.privacy.localProviders.some((provider) => typeof provider !== "string" || provider.trim().length === 0)) {
|
|
145
|
+
throw new Error("privacy.localProviders must contain non-empty provider names");
|
|
146
|
+
}
|
|
147
|
+
const normalizedLocalProviders = config.privacy.localProviders.map((provider) => provider.trim().toLowerCase());
|
|
148
|
+
if (new Set(normalizedLocalProviders).size !== normalizedLocalProviders.length) {
|
|
149
|
+
throw new Error("privacy.localProviders must not contain duplicates");
|
|
150
|
+
}
|
|
151
|
+
validateClassifications("privacy.remoteDefaultAllowed", config.privacy.remoteDefaultAllowed);
|
|
152
|
+
for (const [provider, allowed] of Object.entries(config.privacy.remoteProviders)) {
|
|
153
|
+
if (provider.trim().length === 0)
|
|
154
|
+
throw new Error("privacy.remoteProviders keys must not be empty");
|
|
155
|
+
if (normalizedLocalProviders.includes(provider.trim().toLowerCase())) {
|
|
156
|
+
throw new Error(`privacy provider ${provider} cannot be both local and remote`);
|
|
157
|
+
}
|
|
158
|
+
validateClassifications(`privacy.remoteProviders.${provider}`, allowed);
|
|
159
|
+
}
|
|
160
|
+
if (!Number.isInteger(config.modelAwareness.calibrationWindow)
|
|
161
|
+
|| config.modelAwareness.calibrationWindow < 3
|
|
162
|
+
|| config.modelAwareness.calibrationWindow > 200) {
|
|
163
|
+
throw new Error("modelAwareness.calibrationWindow must be an integer between 3 and 200");
|
|
164
|
+
}
|
|
165
|
+
if (!Number.isInteger(config.modelAwareness.minimumCalibrationSamples)
|
|
166
|
+
|| config.modelAwareness.minimumCalibrationSamples < 1
|
|
167
|
+
|| config.modelAwareness.minimumCalibrationSamples > config.modelAwareness.calibrationWindow) {
|
|
168
|
+
throw new Error("modelAwareness.minimumCalibrationSamples must be between 1 and calibrationWindow");
|
|
169
|
+
}
|
|
170
|
+
const lowerRatio = config.modelAwareness.calibrationRatioLowerBound;
|
|
171
|
+
const upperRatio = config.modelAwareness.calibrationRatioUpperBound;
|
|
172
|
+
if (!Number.isFinite(lowerRatio) || !Number.isFinite(upperRatio)
|
|
173
|
+
|| lowerRatio < 0.25 || upperRatio > 4 || lowerRatio >= upperRatio) {
|
|
174
|
+
throw new Error("modelAwareness calibration ratio bounds must satisfy 0.25 <= lower < upper <= 4");
|
|
175
|
+
}
|
|
176
|
+
const overrideFields = new Set([
|
|
177
|
+
"contextWindow",
|
|
178
|
+
"maxOutputTokens",
|
|
179
|
+
"safetyMarginTokens",
|
|
180
|
+
"recentTailTokens",
|
|
181
|
+
"maxRetrievedHistoryTokens",
|
|
182
|
+
"maxProjectTokens",
|
|
183
|
+
]);
|
|
184
|
+
for (const [key, override] of Object.entries(config.modelAwareness.overrides)) {
|
|
185
|
+
const trimmed = key.trim();
|
|
186
|
+
const separator = trimmed.indexOf("/");
|
|
187
|
+
if (trimmed !== key || (trimmed !== "*" && (separator <= 0
|
|
188
|
+
|| separator === trimmed.length - 1
|
|
189
|
+
|| trimmed.slice(0, separator) === "*"))) {
|
|
190
|
+
throw new Error(`modelAwareness override ${key} must be provider/model, provider/*, or *`);
|
|
191
|
+
}
|
|
192
|
+
if (!isRecord(override))
|
|
193
|
+
throw new Error(`modelAwareness.overrides.${key} must be an object`);
|
|
194
|
+
const overrideRecord = override;
|
|
195
|
+
for (const field of Object.keys(overrideRecord)) {
|
|
196
|
+
if (!overrideFields.has(field)) {
|
|
197
|
+
throw new Error(`Unknown modelAwareness override field: ${key}.${field}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const positive = [overrideRecord.contextWindow, overrideRecord.maxOutputTokens];
|
|
201
|
+
if (positive.some((value) => value !== undefined
|
|
202
|
+
&& (typeof value !== "number" || !Number.isInteger(value) || value <= 0 || value > 10_000_000))) {
|
|
203
|
+
throw new Error(`modelAwareness override ${key} context/output limits must be positive integers at most 10000000`);
|
|
204
|
+
}
|
|
205
|
+
const nonNegativeOverride = [
|
|
206
|
+
overrideRecord.safetyMarginTokens,
|
|
207
|
+
overrideRecord.recentTailTokens,
|
|
208
|
+
overrideRecord.maxRetrievedHistoryTokens,
|
|
209
|
+
overrideRecord.maxProjectTokens,
|
|
210
|
+
];
|
|
211
|
+
if (nonNegativeOverride.some((value) => value !== undefined
|
|
212
|
+
&& (typeof value !== "number" || !Number.isInteger(value) || value < 0 || value > 10_000_000))) {
|
|
213
|
+
throw new Error(`modelAwareness override ${key} token limits must be non-negative integers at most 10000000`);
|
|
214
|
+
}
|
|
215
|
+
const effectiveWindow = overrideRecord.contextWindow;
|
|
216
|
+
const maxOutputTokens = overrideRecord.maxOutputTokens;
|
|
217
|
+
if (typeof effectiveWindow === "number" && typeof maxOutputTokens === "number"
|
|
218
|
+
&& maxOutputTokens > effectiveWindow) {
|
|
219
|
+
throw new Error(`modelAwareness override ${key} maxOutputTokens must not exceed contextWindow`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (!Array.isArray(config.nativeContinuation.profiles)
|
|
223
|
+
|| config.nativeContinuation.profiles.length === 0) {
|
|
224
|
+
throw new Error("nativeContinuation.profiles must contain at least one provider/model profile");
|
|
225
|
+
}
|
|
226
|
+
const continuationProfiles = new Set();
|
|
227
|
+
for (const profile of config.nativeContinuation.profiles) {
|
|
228
|
+
if (typeof profile !== "string" || profile.trim() !== profile || /\s/u.test(profile)) {
|
|
229
|
+
throw new Error("nativeContinuation.profiles must contain trimmed provider/model profiles without whitespace");
|
|
230
|
+
}
|
|
231
|
+
const separator = profile.indexOf("/");
|
|
232
|
+
const provider = separator > 0 ? profile.slice(0, separator) : "";
|
|
233
|
+
const model = separator > 0 ? profile.slice(separator + 1) : "";
|
|
234
|
+
if (!provider || !model || provider.includes("*") || (model.includes("*") && model !== "*")) {
|
|
235
|
+
throw new Error(`nativeContinuation profile ${profile} must be provider/model or provider/*`);
|
|
236
|
+
}
|
|
237
|
+
if (continuationProfiles.has(profile)) {
|
|
238
|
+
throw new Error("nativeContinuation.profiles must not contain duplicates");
|
|
239
|
+
}
|
|
240
|
+
continuationProfiles.add(profile);
|
|
241
|
+
}
|
|
242
|
+
if (config.nativeContinuation.enabled && !config.nativeContinuation.allowProviderStorage) {
|
|
243
|
+
throw new Error("nativeContinuation.allowProviderStorage must be true when native continuation is enabled");
|
|
244
|
+
}
|
|
245
|
+
if (!Number.isInteger(config.nativeContinuation.maxStateAgeMs)
|
|
246
|
+
|| config.nativeContinuation.maxStateAgeMs < 10_000
|
|
247
|
+
|| config.nativeContinuation.maxStateAgeMs > 86_400_000) {
|
|
248
|
+
throw new Error("nativeContinuation.maxStateAgeMs must be an integer between 10000 and 86400000");
|
|
249
|
+
}
|
|
250
|
+
if (!["error", "warn", "info", "debug", "trace"].includes(config.diagnostics.logLevel)) {
|
|
251
|
+
throw new Error("diagnostics.logLevel is invalid");
|
|
252
|
+
}
|
|
253
|
+
if (config.storage.databasePath.trim().length === 0) {
|
|
254
|
+
throw new Error("storage.databasePath must not be empty");
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function applyConfigFile(path, base, warnings) {
|
|
258
|
+
if (!existsSync(path))
|
|
259
|
+
return { config: base, loaded: false };
|
|
260
|
+
try {
|
|
261
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
262
|
+
if (!isRecord(parsed))
|
|
263
|
+
throw new Error("top-level JSON value must be an object");
|
|
264
|
+
const sourceWarnings = [];
|
|
265
|
+
const candidate = mergeKnown(base, parsed, sourceWarnings);
|
|
266
|
+
validateConfig(candidate);
|
|
267
|
+
warnings.push(...sourceWarnings.map((warning) => `${path}: ${warning}`));
|
|
268
|
+
return { config: candidate, loaded: true };
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
272
|
+
warnings.push(`${path}: configuration ignored: ${message}`);
|
|
273
|
+
return { config: base, loaded: false };
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
export function loadConfig(options) {
|
|
277
|
+
const globalPath = join(options.agentDir, "ds4-context.json");
|
|
278
|
+
const projectPath = join(options.cwd, options.configDirName, "ds4-context.json");
|
|
279
|
+
const warnings = [];
|
|
280
|
+
const loadedFiles = [];
|
|
281
|
+
let config = createDefaultConfig();
|
|
282
|
+
const global = applyConfigFile(globalPath, config, warnings);
|
|
283
|
+
config = global.config;
|
|
284
|
+
if (global.loaded)
|
|
285
|
+
loadedFiles.push(globalPath);
|
|
286
|
+
if (options.projectTrusted) {
|
|
287
|
+
const project = applyConfigFile(projectPath, config, warnings);
|
|
288
|
+
config = project.config;
|
|
289
|
+
if (project.loaded)
|
|
290
|
+
loadedFiles.push(projectPath);
|
|
291
|
+
}
|
|
292
|
+
else if (existsSync(projectPath)) {
|
|
293
|
+
warnings.push(`${projectPath}: project configuration skipped because the project is not trusted`);
|
|
294
|
+
}
|
|
295
|
+
return { config, globalPath, projectPath, loadedFiles, warnings };
|
|
296
|
+
}
|
|
297
|
+
export function resolveDatabasePath(configuredPath, agentDir, homeDir = homedir()) {
|
|
298
|
+
const expanded = configuredPath === "~"
|
|
299
|
+
? homeDir
|
|
300
|
+
: configuredPath.startsWith("~/")
|
|
301
|
+
? join(homeDir, configuredPath.slice(2))
|
|
302
|
+
: configuredPath;
|
|
303
|
+
return isAbsolute(expanded) ? resolve(expanded) : resolve(agentDir, expanded);
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { PrivacyClassification } from "../privacy/privacy-policy.ts";
|
|
2
|
+
import type { LogLevel } from "../shared/logging.ts";
|
|
3
|
+
export interface ContextConfig {
|
|
4
|
+
mode: "observer" | "managed";
|
|
5
|
+
targetFillRatio: number;
|
|
6
|
+
softLimitRatio: number;
|
|
7
|
+
hardLimitRatio: number;
|
|
8
|
+
minimumOutputReserve: number;
|
|
9
|
+
preferredOutputReserve: number;
|
|
10
|
+
recentTailTokens: number;
|
|
11
|
+
maxPinnedTokens: number;
|
|
12
|
+
maxMemoryTokens: number;
|
|
13
|
+
maxRetrievedHistoryTokens: number;
|
|
14
|
+
maxProjectTokens: number;
|
|
15
|
+
maxSummaryTokens: number;
|
|
16
|
+
}
|
|
17
|
+
export interface CompactionConfig {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
mode: "hierarchical";
|
|
20
|
+
validate: boolean;
|
|
21
|
+
segmentTargetTokens: number;
|
|
22
|
+
preserveRecentVerbatim: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface RetrievalConfig {
|
|
25
|
+
exact: boolean;
|
|
26
|
+
fts: boolean;
|
|
27
|
+
semantic: boolean;
|
|
28
|
+
maxResults: number;
|
|
29
|
+
}
|
|
30
|
+
export interface ProjectKnowledgeConfig {
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
maxFiles: number;
|
|
33
|
+
maxFileBytes: number;
|
|
34
|
+
maxTotalBytes: number;
|
|
35
|
+
snippetLines: number;
|
|
36
|
+
snippetOverlapLines: number;
|
|
37
|
+
maxResults: number;
|
|
38
|
+
}
|
|
39
|
+
export interface MemoryConfig {
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
maxPinChars: number;
|
|
42
|
+
maxClaimChars: number;
|
|
43
|
+
maxResults: number;
|
|
44
|
+
}
|
|
45
|
+
export interface ArtifactConfig {
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
maxInlineToolResultChars: number;
|
|
48
|
+
maxArtifactBytes: number;
|
|
49
|
+
maxSearchBytes: number;
|
|
50
|
+
excerptChars: number;
|
|
51
|
+
maxSearchMatches: number;
|
|
52
|
+
storeLargeOutputs: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface PrivacyConfig {
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
defaultClassification: PrivacyClassification;
|
|
57
|
+
localProviders: string[];
|
|
58
|
+
remoteDefaultAllowed: PrivacyClassification[];
|
|
59
|
+
remoteProviders: Record<string, PrivacyClassification[]>;
|
|
60
|
+
redactSecrets: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface ModelProfileOverride {
|
|
63
|
+
contextWindow?: number;
|
|
64
|
+
maxOutputTokens?: number;
|
|
65
|
+
safetyMarginTokens?: number;
|
|
66
|
+
recentTailTokens?: number;
|
|
67
|
+
maxRetrievedHistoryTokens?: number;
|
|
68
|
+
maxProjectTokens?: number;
|
|
69
|
+
}
|
|
70
|
+
export interface ModelAwarenessConfig {
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
calibrationWindow: number;
|
|
73
|
+
minimumCalibrationSamples: number;
|
|
74
|
+
calibrationRatioLowerBound: number;
|
|
75
|
+
calibrationRatioUpperBound: number;
|
|
76
|
+
/** Exact `provider/model`, provider wildcard `provider/*`, or global `*`. */
|
|
77
|
+
overrides: Record<string, ModelProfileOverride>;
|
|
78
|
+
}
|
|
79
|
+
export interface NativeContinuationConfig {
|
|
80
|
+
enabled: boolean;
|
|
81
|
+
/** Explicit acknowledgement that eligible Responses API calls set `store: true`. */
|
|
82
|
+
allowProviderStorage: boolean;
|
|
83
|
+
/** Exact `provider/model` or provider wildcard `provider/*`; no global wildcard. */
|
|
84
|
+
profiles: string[];
|
|
85
|
+
maxStateAgeMs: number;
|
|
86
|
+
retryManagedReplay: boolean;
|
|
87
|
+
}
|
|
88
|
+
export interface DiagnosticsConfig {
|
|
89
|
+
storeContextManifest: boolean;
|
|
90
|
+
storeFullRenderedContext: boolean;
|
|
91
|
+
logLevel: LogLevel;
|
|
92
|
+
}
|
|
93
|
+
export interface StorageConfig {
|
|
94
|
+
/** Absolute, `~`-relative, or relative to Pi's agent directory. */
|
|
95
|
+
databasePath: string;
|
|
96
|
+
}
|
|
97
|
+
export interface Ds4ContextConfig {
|
|
98
|
+
enabled: boolean;
|
|
99
|
+
context: ContextConfig;
|
|
100
|
+
compaction: CompactionConfig;
|
|
101
|
+
retrieval: RetrievalConfig;
|
|
102
|
+
project: ProjectKnowledgeConfig;
|
|
103
|
+
memory: MemoryConfig;
|
|
104
|
+
artifacts: ArtifactConfig;
|
|
105
|
+
privacy: PrivacyConfig;
|
|
106
|
+
modelAwareness: ModelAwarenessConfig;
|
|
107
|
+
nativeContinuation: NativeContinuationConfig;
|
|
108
|
+
diagnostics: DiagnosticsConfig;
|
|
109
|
+
storage: StorageConfig;
|
|
110
|
+
}
|
|
111
|
+
export declare const DEFAULT_CONFIG: Ds4ContextConfig;
|
|
112
|
+
export declare function createDefaultConfig(): Ds4ContextConfig;
|
|
113
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export const DEFAULT_CONFIG = {
|
|
2
|
+
enabled: true,
|
|
3
|
+
context: {
|
|
4
|
+
mode: "managed",
|
|
5
|
+
targetFillRatio: 0.7,
|
|
6
|
+
softLimitRatio: 0.8,
|
|
7
|
+
hardLimitRatio: 0.9,
|
|
8
|
+
minimumOutputReserve: 8192,
|
|
9
|
+
preferredOutputReserve: 32768,
|
|
10
|
+
recentTailTokens: 64000,
|
|
11
|
+
maxPinnedTokens: 16000,
|
|
12
|
+
maxMemoryTokens: 8000,
|
|
13
|
+
maxRetrievedHistoryTokens: 16000,
|
|
14
|
+
maxProjectTokens: 20000,
|
|
15
|
+
maxSummaryTokens: 12000,
|
|
16
|
+
},
|
|
17
|
+
compaction: {
|
|
18
|
+
enabled: true,
|
|
19
|
+
mode: "hierarchical",
|
|
20
|
+
validate: true,
|
|
21
|
+
segmentTargetTokens: 30000,
|
|
22
|
+
preserveRecentVerbatim: true,
|
|
23
|
+
},
|
|
24
|
+
retrieval: {
|
|
25
|
+
exact: true,
|
|
26
|
+
fts: true,
|
|
27
|
+
semantic: false,
|
|
28
|
+
maxResults: 12,
|
|
29
|
+
},
|
|
30
|
+
project: {
|
|
31
|
+
enabled: true,
|
|
32
|
+
maxFiles: 10_000,
|
|
33
|
+
maxFileBytes: 512_000,
|
|
34
|
+
maxTotalBytes: 50_000_000,
|
|
35
|
+
snippetLines: 80,
|
|
36
|
+
snippetOverlapLines: 12,
|
|
37
|
+
maxResults: 8,
|
|
38
|
+
},
|
|
39
|
+
memory: {
|
|
40
|
+
enabled: true,
|
|
41
|
+
maxPinChars: 4000,
|
|
42
|
+
maxClaimChars: 2000,
|
|
43
|
+
maxResults: 12,
|
|
44
|
+
},
|
|
45
|
+
artifacts: {
|
|
46
|
+
enabled: true,
|
|
47
|
+
maxInlineToolResultChars: 12000,
|
|
48
|
+
maxArtifactBytes: 100_000_000,
|
|
49
|
+
maxSearchBytes: 50_000_000,
|
|
50
|
+
excerptChars: 6000,
|
|
51
|
+
maxSearchMatches: 12,
|
|
52
|
+
storeLargeOutputs: true,
|
|
53
|
+
},
|
|
54
|
+
privacy: {
|
|
55
|
+
enabled: false,
|
|
56
|
+
defaultClassification: "normal",
|
|
57
|
+
localProviders: ["faux", "ollama", "llama-cpp", "lmstudio"],
|
|
58
|
+
remoteDefaultAllowed: ["normal", "internal"],
|
|
59
|
+
remoteProviders: {},
|
|
60
|
+
redactSecrets: true,
|
|
61
|
+
},
|
|
62
|
+
modelAwareness: {
|
|
63
|
+
enabled: true,
|
|
64
|
+
calibrationWindow: 24,
|
|
65
|
+
minimumCalibrationSamples: 3,
|
|
66
|
+
calibrationRatioLowerBound: 0.5,
|
|
67
|
+
calibrationRatioUpperBound: 2,
|
|
68
|
+
overrides: {},
|
|
69
|
+
},
|
|
70
|
+
nativeContinuation: {
|
|
71
|
+
enabled: false,
|
|
72
|
+
allowProviderStorage: false,
|
|
73
|
+
profiles: ["openai/*"],
|
|
74
|
+
maxStateAgeMs: 1_800_000,
|
|
75
|
+
retryManagedReplay: true,
|
|
76
|
+
},
|
|
77
|
+
diagnostics: {
|
|
78
|
+
storeContextManifest: true,
|
|
79
|
+
storeFullRenderedContext: false,
|
|
80
|
+
logLevel: "info",
|
|
81
|
+
},
|
|
82
|
+
storage: {
|
|
83
|
+
databasePath: "ds4-context/context.db",
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
export function createDefaultConfig() {
|
|
87
|
+
return structuredClone(DEFAULT_CONFIG);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AA4HA,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,OAAO,EAAE,IAAI;IACb,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,GAAG;QACpB,cAAc,EAAE,GAAG;QACnB,cAAc,EAAE,GAAG;QACnB,oBAAoB,EAAE,IAAI;QAC1B,sBAAsB,EAAE,KAAK;QAC7B,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,KAAK;QACtB,eAAe,EAAE,IAAI;QACrB,yBAAyB,EAAE,KAAK;QAChC,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;KACxB;IACD,UAAU,EAAE;QACV,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,IAAI;QACd,mBAAmB,EAAE,KAAK;QAC1B,sBAAsB,EAAE,IAAI;KAC7B;IACD,SAAS,EAAE;QACT,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,EAAE;KACf;IACD,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;QAChB,YAAY,EAAE,OAAO;QACrB,aAAa,EAAE,UAAU;QACzB,YAAY,EAAE,EAAE;QAChB,mBAAmB,EAAE,EAAE;QACvB,UAAU,EAAE,CAAC;KACd;IACD,MAAM,EAAE;QACN,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,EAAE;KACf;IACD,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,wBAAwB,EAAE,KAAK;QAC/B,gBAAgB,EAAE,WAAW;QAC7B,cAAc,EAAE,UAAU;QAC1B,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,EAAE;QACpB,iBAAiB,EAAE,IAAI;KACxB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,qBAAqB,EAAE,QAAQ;QAC/B,cAAc,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC;QAC3D,oBAAoB,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC5C,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,IAAI;KACpB;IACD,cAAc,EAAE;QACd,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,EAAE;QACrB,yBAAyB,EAAE,CAAC;QAC5B,0BAA0B,EAAE,GAAG;QAC/B,0BAA0B,EAAE,CAAC;QAC7B,SAAS,EAAE,EAAE;KACd;IACD,kBAAkB,EAAE;QAClB,OAAO,EAAE,KAAK;QACd,oBAAoB,EAAE,KAAK;QAC3B,QAAQ,EAAE,CAAC,UAAU,CAAC;QACtB,aAAa,EAAE,SAAS;QACxB,kBAAkB,EAAE,IAAI;KACzB;IACD,WAAW,EAAE;QACX,oBAAoB,EAAE,IAAI;QAC1B,wBAAwB,EAAE,KAAK;QAC/B,QAAQ,EAAE,MAAM;KACjB;IACD,OAAO,EAAE;QACP,YAAY,EAAE,wBAAwB;KACvC;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { NativeContinuationConfig } from "../config/config.ts";
|
|
2
|
+
export declare const NATIVE_CONTINUATION_STRATEGY: "openai-previous-response-v1";
|
|
3
|
+
export type NativeContinuationMode = "disabled" | "pending" | "managed-replay" | "native-continuation" | "external-continuation";
|
|
4
|
+
export type NativeContinuationRetry = "none" | "pending" | "succeeded" | "failed";
|
|
5
|
+
export interface NativeContinuationManifest {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
eligible: boolean;
|
|
8
|
+
strategy: typeof NATIVE_CONTINUATION_STRATEGY;
|
|
9
|
+
providerStorage: "disabled" | "opt-in";
|
|
10
|
+
mode: NativeContinuationMode;
|
|
11
|
+
attempted: boolean;
|
|
12
|
+
stateReused: boolean;
|
|
13
|
+
fullInputItems: number;
|
|
14
|
+
sentInputItems: number;
|
|
15
|
+
omittedInputItems: number;
|
|
16
|
+
retry: NativeContinuationRetry;
|
|
17
|
+
stateAgeMs?: number;
|
|
18
|
+
fallbackReason?: string;
|
|
19
|
+
invalidationReason?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface NativeContinuationDiagnostics {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
allowProviderStorage: boolean;
|
|
24
|
+
strategy: typeof NATIVE_CONTINUATION_STRATEGY;
|
|
25
|
+
profiles: string[];
|
|
26
|
+
registeredProviders: string[];
|
|
27
|
+
status: "disabled" | "idle" | "ready" | "continuing" | "fallback" | "error";
|
|
28
|
+
stateAvailable: boolean;
|
|
29
|
+
requests: number;
|
|
30
|
+
fullReplayRequests: number;
|
|
31
|
+
continuationRequests: number;
|
|
32
|
+
continuationSuccesses: number;
|
|
33
|
+
invalidations: number;
|
|
34
|
+
retryAttempts: number;
|
|
35
|
+
retrySuccesses: number;
|
|
36
|
+
retryFailures: number;
|
|
37
|
+
last?: NativeContinuationManifest;
|
|
38
|
+
lastProvider?: string;
|
|
39
|
+
lastModel?: string;
|
|
40
|
+
lastInvalidationReason?: string;
|
|
41
|
+
warnings: string[];
|
|
42
|
+
}
|
|
43
|
+
export interface NativeContinuationRequest {
|
|
44
|
+
payload: unknown;
|
|
45
|
+
provider: string;
|
|
46
|
+
model: string;
|
|
47
|
+
api?: string;
|
|
48
|
+
requestSessionId?: string;
|
|
49
|
+
canonicalSessionId: string;
|
|
50
|
+
manifestId?: string;
|
|
51
|
+
branchLeafId?: string;
|
|
52
|
+
managed: boolean;
|
|
53
|
+
forceManagedReplay?: boolean;
|
|
54
|
+
retryOfContinuation?: boolean;
|
|
55
|
+
fallbackReason?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface NativeContinuationAttempt {
|
|
58
|
+
readonly sequence: number;
|
|
59
|
+
readonly key: string;
|
|
60
|
+
readonly manifestId?: string;
|
|
61
|
+
readonly branchLeafId?: string;
|
|
62
|
+
readonly provider: string;
|
|
63
|
+
readonly model: string;
|
|
64
|
+
readonly requestItemHashes: readonly string[];
|
|
65
|
+
readonly requestBodyHash: string;
|
|
66
|
+
readonly fullInputItems: number;
|
|
67
|
+
readonly sentInputItems: number;
|
|
68
|
+
readonly usedContinuation: boolean;
|
|
69
|
+
readonly retryOfContinuation: boolean;
|
|
70
|
+
readonly decision: NativeContinuationManifest;
|
|
71
|
+
}
|
|
72
|
+
export interface PreparedNativeContinuation {
|
|
73
|
+
payload: unknown;
|
|
74
|
+
tracked: boolean;
|
|
75
|
+
attempt?: NativeContinuationAttempt;
|
|
76
|
+
decision?: NativeContinuationManifest;
|
|
77
|
+
}
|
|
78
|
+
export declare function nativeContinuationProfileMatches(profiles: readonly string[], provider: string, model: string): boolean;
|
|
79
|
+
export declare function nativeContinuationProviderIds(profiles: readonly string[]): string[];
|
|
80
|
+
export declare function continuationItemHashes(items: readonly unknown[]): string[];
|
|
81
|
+
export declare function disabledNativeContinuationDiagnostics(config?: NativeContinuationConfig): NativeContinuationDiagnostics;
|
|
82
|
+
export declare class NativeContinuationManager {
|
|
83
|
+
private readonly config;
|
|
84
|
+
private readonly now;
|
|
85
|
+
private state?;
|
|
86
|
+
private sequence;
|
|
87
|
+
private pendingSequence?;
|
|
88
|
+
private registeredProviders;
|
|
89
|
+
private registrationWarnings;
|
|
90
|
+
private diagnosticsValue;
|
|
91
|
+
constructor(config: NativeContinuationConfig, now?: () => number);
|
|
92
|
+
providerIds(): string[];
|
|
93
|
+
registerProvider(provider: string): void;
|
|
94
|
+
providerRegistrationFailed(provider: string): void;
|
|
95
|
+
private refreshRegistrationDiagnostics;
|
|
96
|
+
initialManifest(provider: string, model: string, managed: boolean, api?: string): NativeContinuationManifest;
|
|
97
|
+
prepare(request: NativeContinuationRequest): PreparedNativeContinuation;
|
|
98
|
+
beginManagedReplayRetry(attempt: NativeContinuationAttempt): void;
|
|
99
|
+
complete(attempt: NativeContinuationAttempt, responseId: string | undefined, responseItemHashes: readonly string[]): NativeContinuationManifest;
|
|
100
|
+
fail(attempt: NativeContinuationAttempt, reason: string): NativeContinuationManifest;
|
|
101
|
+
invalidate(reason: string): void;
|
|
102
|
+
shouldRetryManagedReplay(): boolean;
|
|
103
|
+
diagnostics(): NativeContinuationDiagnostics;
|
|
104
|
+
private invalidateState;
|
|
105
|
+
private recordDecision;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=native-continuation.d.ts.map
|