dsh-super-code 0.3.5 → 0.3.6
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 +10 -4
- package/client/index.js +250 -19
- package/cordis.patch.yml +2 -2
- package/docs/Changelog.md +6 -0
- package/docs/Compatibility.md +42 -0
- package/docs/UsageGuide.md +51 -0
- package/lib/dsh/budget-settings.d.ts +51 -0
- package/lib/dsh/budget-settings.d.ts.map +1 -0
- package/lib/dsh/budget-settings.js +188 -0
- package/lib/dsh/budget-settings.js.map +1 -0
- package/lib/dsh/budgets.d.ts +34 -0
- package/lib/dsh/budgets.d.ts.map +1 -0
- package/lib/dsh/budgets.js +65 -0
- package/lib/dsh/budgets.js.map +1 -0
- package/lib/dsh/compaction.d.ts +40 -0
- package/lib/dsh/compaction.d.ts.map +1 -0
- package/lib/dsh/compaction.js +146 -0
- package/lib/dsh/compaction.js.map +1 -0
- package/lib/dsh/index.d.ts +4 -1
- package/lib/dsh/index.d.ts.map +1 -1
- package/lib/dsh/index.js +7 -1
- package/lib/dsh/index.js.map +1 -1
- package/lib/dsh/official-budgets.d.ts +3 -0
- package/lib/dsh/official-budgets.d.ts.map +1 -0
- package/lib/dsh/official-budgets.js +114 -0
- package/lib/dsh/official-budgets.js.map +1 -0
- package/lib/dsh/ptc-budget.d.ts +5 -0
- package/lib/dsh/ptc-budget.d.ts.map +1 -0
- package/lib/dsh/ptc-budget.js +65 -0
- package/lib/dsh/ptc-budget.js.map +1 -0
- package/lib/dsh/super-code.d.ts.map +1 -1
- package/lib/dsh/super-code.js +26 -8
- package/lib/dsh/super-code.js.map +1 -1
- package/lib/index.d.ts +5 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -2
- package/lib/index.js.map +1 -1
- package/package.json +17 -7
- package/presets/super-code/agent.cordis.yml +2 -2
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Persist UI overrides through Harness settings; Agents take creation-time snapshots. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import type { SettingsScope } from '@deepseek-ai/dsh-settings';
|
|
4
|
+
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
5
|
+
import type { Configuration } from './budgets.js';
|
|
6
|
+
interface SettingsWriter {
|
|
7
|
+
readonly writable: boolean;
|
|
8
|
+
describe(options: {
|
|
9
|
+
redactSecrets: boolean;
|
|
10
|
+
}): {
|
|
11
|
+
ns: string;
|
|
12
|
+
revision: number;
|
|
13
|
+
}[];
|
|
14
|
+
replace(namespace: string, config: object, revision: number): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export interface BudgetSettingsSnapshot {
|
|
17
|
+
readonly configuration: Configuration;
|
|
18
|
+
readonly revision: number;
|
|
19
|
+
readonly writable: boolean;
|
|
20
|
+
readonly ptcMaxTimeoutMs: number | false;
|
|
21
|
+
readonly defaults: Configuration;
|
|
22
|
+
}
|
|
23
|
+
export type BudgetSettingsResult = {
|
|
24
|
+
readonly ok: true;
|
|
25
|
+
readonly snapshot: BudgetSettingsSnapshot;
|
|
26
|
+
} | {
|
|
27
|
+
readonly ok: false;
|
|
28
|
+
readonly error: 'invalid' | 'conflict' | 'read-only' | 'ptc-unavailable' | 'ptc-ceiling' | 'save-failed';
|
|
29
|
+
};
|
|
30
|
+
export declare class BudgetSettings {
|
|
31
|
+
private readonly settings;
|
|
32
|
+
private readonly scope;
|
|
33
|
+
private readonly ptcCeiling;
|
|
34
|
+
private readonly key;
|
|
35
|
+
private readonly defaults;
|
|
36
|
+
constructor(settings: SettingsWriter, scope: Pick<SettingsScope<Configuration>, 'get'>, ptcCeiling: () => number | false, key?: string, defaults?: () => Configuration);
|
|
37
|
+
read(): BudgetSettingsSnapshot;
|
|
38
|
+
save(content: string, expected: string): Promise<BudgetSettingsResult>;
|
|
39
|
+
reset(expected: string): Promise<BudgetSettingsResult>;
|
|
40
|
+
private replace;
|
|
41
|
+
}
|
|
42
|
+
export declare class SuperCodeBudgets extends TypertRemoteService {
|
|
43
|
+
private readonly settings;
|
|
44
|
+
constructor(ctx: Context, settings: BudgetSettings);
|
|
45
|
+
readConfig(): BudgetSettingsSnapshot;
|
|
46
|
+
saveConfig(content: string, expected: string): Promise<BudgetSettingsResult>;
|
|
47
|
+
resetConfig(expected: string): Promise<BudgetSettingsResult>;
|
|
48
|
+
}
|
|
49
|
+
export declare function applyBudgetSettings(ctx: Context, config: Configuration): void;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=budget-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget-settings.d.ts","sourceRoot":"","sources":["../../src/dsh/budget-settings.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKjD,UAAU,cAAc;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACjF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,KAAK,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACjC;AACD,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,iBAAiB,GAAG,aAAa,GAAG,aAAa,CAAA;CAAE,CAAA;AAgBpI,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAkB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAwB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAFE,QAAQ,EAAE,cAAc,EAAmB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,EACrG,UAAU,EAAE,MAAM,MAAM,GAAG,KAAK,EAAmB,GAAG,GAAE,MAAkB,EAC1E,QAAQ,GAAE,MAAM,aAA0B;IAE7D,IAAI,IAAI,sBAAsB;IAOxB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgBtE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAE9C,OAAO;CAUtB;AAED,qBAAa,gBAAiB,SAAQ,mBAAmB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAvC,GAAG,EAAE,OAAO,EAAmB,QAAQ,EAAE,cAAc;IAEnE,UAAU,IAAI,sBAAsB;IAEpC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAE5E,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAC7D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA8C7E"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
36
|
+
import { settingsConfigurationSchema, configurationValues, validateConfiguration } from './budgets.js';
|
|
37
|
+
import { BasicCompactionEngine } from '@deepseek-ai/dsh-compaction-basic';
|
|
38
|
+
const namespace = 'super-code-budgets';
|
|
39
|
+
/** Keep the evaluated budgets independent of changes to the host's defaults. */
|
|
40
|
+
function withLegacyBudgets(config, ptcCeiling) {
|
|
41
|
+
const maxTimeout = ptcCeiling === false ? false : Math.min(ptcCeiling, config.budgets?.ptcMaxTimeoutMs ?? Math.max(600000, config.budgets?.ptcTimeoutMs ?? 0));
|
|
42
|
+
return {
|
|
43
|
+
applyToOfficialPresets: false, maxTasks: 32, maxContextBytes: 32768, ...config,
|
|
44
|
+
budgets: { pressureBasis: 'window', thresholdRatio: 0.8, retainRatio: 0.16,
|
|
45
|
+
summaryMaxTokens: 8192, compactionRetries: 1, maxOverflowRetries: 1,
|
|
46
|
+
...(maxTimeout === false ? {} : { ptcTimeoutMs: Math.min(600000, maxTimeout), ptcMaxTimeoutMs: maxTimeout }),
|
|
47
|
+
...config.budgets,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export class BudgetSettings {
|
|
52
|
+
settings;
|
|
53
|
+
scope;
|
|
54
|
+
ptcCeiling;
|
|
55
|
+
key;
|
|
56
|
+
defaults;
|
|
57
|
+
constructor(settings, scope, ptcCeiling, key = namespace, defaults = () => ({})) {
|
|
58
|
+
this.settings = settings;
|
|
59
|
+
this.scope = scope;
|
|
60
|
+
this.ptcCeiling = ptcCeiling;
|
|
61
|
+
this.key = key;
|
|
62
|
+
this.defaults = defaults;
|
|
63
|
+
}
|
|
64
|
+
read() {
|
|
65
|
+
const descriptor = this.settings.describe({ redactSecrets: true }).find(row => row.ns === this.key);
|
|
66
|
+
if (!descriptor)
|
|
67
|
+
throw new Error('Super Code budget settings are unavailable');
|
|
68
|
+
return { configuration: structuredClone(this.scope.get()), revision: descriptor.revision,
|
|
69
|
+
writable: this.settings.writable, ptcMaxTimeoutMs: this.ptcCeiling(), defaults: structuredClone(this.defaults()) };
|
|
70
|
+
}
|
|
71
|
+
async save(content, expected) {
|
|
72
|
+
if (!this.settings.writable)
|
|
73
|
+
return { ok: false, error: 'read-only' };
|
|
74
|
+
let config;
|
|
75
|
+
try {
|
|
76
|
+
if (content.length > 4096)
|
|
77
|
+
throw new Error('Configuration is too large');
|
|
78
|
+
config = validateConfiguration(JSON.parse(content));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return { ok: false, error: 'invalid' };
|
|
82
|
+
}
|
|
83
|
+
const budgets = config.budgets;
|
|
84
|
+
if (budgets?.ptcTimeoutMs !== undefined || budgets?.ptcMaxTimeoutMs !== undefined) {
|
|
85
|
+
const ceiling = this.ptcCeiling();
|
|
86
|
+
if (ceiling === false)
|
|
87
|
+
return { ok: false, error: 'ptc-unavailable' };
|
|
88
|
+
if ((budgets.ptcTimeoutMs ?? 0) > ceiling || (budgets.ptcMaxTimeoutMs ?? 0) > ceiling)
|
|
89
|
+
return { ok: false, error: 'ptc-ceiling' };
|
|
90
|
+
}
|
|
91
|
+
return this.replace(config, expected);
|
|
92
|
+
}
|
|
93
|
+
async reset(expected) { return this.replace({}, expected); }
|
|
94
|
+
async replace(config, expected) {
|
|
95
|
+
if (!this.settings.writable)
|
|
96
|
+
return { ok: false, error: 'read-only' };
|
|
97
|
+
if (!/^(0|[1-9]\d*)$/.test(expected) || !Number.isSafeInteger(Number(expected)))
|
|
98
|
+
return { ok: false, error: 'invalid' };
|
|
99
|
+
try {
|
|
100
|
+
await this.settings.replace(this.key, config, Number(expected));
|
|
101
|
+
return { ok: true, snapshot: this.read() };
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return { ok: false, error: error.code === 'SETTINGS_CONFLICT' ? 'conflict' : 'save-failed' };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
let SuperCodeBudgets = (() => {
|
|
109
|
+
let _classSuper = TypertRemoteService;
|
|
110
|
+
let _instanceExtraInitializers = [];
|
|
111
|
+
let _readConfig_decorators;
|
|
112
|
+
let _saveConfig_decorators;
|
|
113
|
+
let _resetConfig_decorators;
|
|
114
|
+
return class SuperCodeBudgets extends _classSuper {
|
|
115
|
+
static {
|
|
116
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
117
|
+
_readConfig_decorators = [Remote];
|
|
118
|
+
_saveConfig_decorators = [Remote];
|
|
119
|
+
_resetConfig_decorators = [Remote];
|
|
120
|
+
__esDecorate(this, null, _readConfig_decorators, { kind: "method", name: "readConfig", static: false, private: false, access: { has: obj => "readConfig" in obj, get: obj => obj.readConfig }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
121
|
+
__esDecorate(this, null, _saveConfig_decorators, { kind: "method", name: "saveConfig", static: false, private: false, access: { has: obj => "saveConfig" in obj, get: obj => obj.saveConfig }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
122
|
+
__esDecorate(this, null, _resetConfig_decorators, { kind: "method", name: "resetConfig", static: false, private: false, access: { has: obj => "resetConfig" in obj, get: obj => obj.resetConfig }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
123
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
124
|
+
}
|
|
125
|
+
settings = __runInitializers(this, _instanceExtraInitializers);
|
|
126
|
+
constructor(ctx, settings) {
|
|
127
|
+
super(ctx, 'superCodeBudgets');
|
|
128
|
+
this.settings = settings;
|
|
129
|
+
}
|
|
130
|
+
readConfig() { return this.settings.read(); }
|
|
131
|
+
saveConfig(content, expected) { return this.settings.save(content, expected); }
|
|
132
|
+
resetConfig(expected) { return this.settings.reset(expected); }
|
|
133
|
+
};
|
|
134
|
+
})();
|
|
135
|
+
export { SuperCodeBudgets };
|
|
136
|
+
export function applyBudgetSettings(ctx, config) {
|
|
137
|
+
const base = configurationValues(config);
|
|
138
|
+
const hostDefaults = new BasicCompactionEngine(ctx.isolate('compaction'), { auto: false }).config;
|
|
139
|
+
const snapshots = new WeakMap();
|
|
140
|
+
let timeout = false;
|
|
141
|
+
let read = () => configurationValues(config);
|
|
142
|
+
const source = {
|
|
143
|
+
get: () => withLegacyBudgets(read(), timeout ? timeout.maxMs : false),
|
|
144
|
+
forAgent(agent) {
|
|
145
|
+
let snapshot = snapshots.get(agent);
|
|
146
|
+
if (!snapshot) {
|
|
147
|
+
snapshot = structuredClone(source.get());
|
|
148
|
+
snapshots.set(agent, snapshot);
|
|
149
|
+
}
|
|
150
|
+
return structuredClone(snapshot);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
ctx.provide('superCodeConfiguration', source);
|
|
154
|
+
ctx.inject(['ptcRuntime'], ready => {
|
|
155
|
+
const runtime = ready.get('ptcRuntime');
|
|
156
|
+
timeout = runtime.timeout ?? false;
|
|
157
|
+
ready.effect(() => () => { timeout = false; });
|
|
158
|
+
});
|
|
159
|
+
// Recent hosts retain a preset generation across Agents; plugin apply is not an Agent boundary.
|
|
160
|
+
ctx.on('agent/created', ({ agent }) => { source.forAgent(agent); });
|
|
161
|
+
ctx.inject(['settings'], owner => {
|
|
162
|
+
const settings = owner.settings;
|
|
163
|
+
let key = namespace;
|
|
164
|
+
if (typeof settings.register === 'function') {
|
|
165
|
+
const scope = settings.register(namespace, settingsConfigurationSchema, { base, validate: validateConfiguration });
|
|
166
|
+
read = () => structuredClone(scope.get());
|
|
167
|
+
owner.effect(() => () => { read = () => structuredClone(base); });
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
// SettingsForms edits this Loader entry's volatile values without remounting Agents.
|
|
171
|
+
const forms = settings;
|
|
172
|
+
const entryId = ctx.fiber.entry?.options.id;
|
|
173
|
+
if (!entryId)
|
|
174
|
+
throw new Error('Super Code budgets require a profile plugin entry');
|
|
175
|
+
key = entryId;
|
|
176
|
+
owner.effect(() => forms.configure({ auto: false }, ctx.fiber));
|
|
177
|
+
}
|
|
178
|
+
new SuperCodeBudgets(owner, new BudgetSettings(settings, source, () => timeout ? timeout.maxMs : false, key, () => ({
|
|
179
|
+
applyToOfficialPresets: false, maxTasks: 32, maxContextBytes: 32768,
|
|
180
|
+
budgets: { pressureBasis: 'host', thresholdRatio: hostDefaults.thresholdRatio, retainRatio: hostDefaults.retainRatio,
|
|
181
|
+
summaryMaxTokens: hostDefaults.maxTokens, compactionRetries: hostDefaults.compactionRetries,
|
|
182
|
+
maxOverflowRetries: hostDefaults.maxOverflowRetries,
|
|
183
|
+
...(timeout ? { ptcTimeoutMs: timeout.defaultMs, ptcMaxTimeoutMs: timeout.maxMs } : {}),
|
|
184
|
+
},
|
|
185
|
+
})));
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=budget-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget-settings.js","sourceRoot":"","sources":["../../src/dsh/budget-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Optional policy overrides. Missing values remain owned by the host. */
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
4
|
+
declare global {
|
|
5
|
+
namespace Schemastery {
|
|
6
|
+
interface Meta<T = any> {
|
|
7
|
+
volatile?: boolean;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export interface Budgets {
|
|
12
|
+
readonly pressureBasis?: 'host' | 'window';
|
|
13
|
+
readonly thresholdRatio?: number;
|
|
14
|
+
readonly retainRatio?: number;
|
|
15
|
+
readonly summaryMaxTokens?: number;
|
|
16
|
+
readonly compactionRetries?: number;
|
|
17
|
+
readonly maxOverflowRetries?: number;
|
|
18
|
+
readonly ptcTimeoutMs?: number;
|
|
19
|
+
readonly ptcMaxTimeoutMs?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface Configuration {
|
|
22
|
+
readonly applyToOfficialPresets?: boolean;
|
|
23
|
+
readonly budgets?: Budgets;
|
|
24
|
+
readonly maxTasks?: number;
|
|
25
|
+
readonly maxContextBytes?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare const budgetSchema: z<Budgets>;
|
|
28
|
+
export declare const settingsConfigurationSchema: z<Configuration>;
|
|
29
|
+
export declare const configurationSchema: z<Configuration>;
|
|
30
|
+
export declare function validateConfiguration(config: Configuration): Configuration;
|
|
31
|
+
/** Newer Loader schemas expose volatile fields as references; older hosts return plain values. */
|
|
32
|
+
export declare function configurationValues(config: Configuration): Configuration;
|
|
33
|
+
export declare function configurationOf(ctx: Context, agent?: object): Configuration;
|
|
34
|
+
//# sourceMappingURL=budgets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/dsh/budgets.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW,CAAC;QACpB,UAAU,IAAI,CAAC,CAAC,GAAG,GAAG;YAAI,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE;KAC/C;CACF;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,OAAO,CASlC,CAAA;AAGF,eAAO,MAAM,2BAA2B,EAAE,CAAC,CAAC,aAAa,CAKvD,CAAA;AAEF,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,aAAa,CAK/C,CAAA;AAuBF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAE1E;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAMxE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAG3E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Optional policy overrides. Missing values remain owned by the host. */
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
import { z as json } from 'zod';
|
|
4
|
+
export const budgetSchema = z.object({
|
|
5
|
+
pressureBasis: z.union(['host', 'window']).description('Compression budget basis: host policy or full context window.'),
|
|
6
|
+
thresholdRatio: z.number().min(0.01).max(1).description('Context fraction at which compression starts.'),
|
|
7
|
+
retainRatio: z.number().min(0).max(1).description('Recent context fraction retained verbatim.'),
|
|
8
|
+
summaryMaxTokens: z.number().step(1).min(1).description('Maximum summary output tokens.'),
|
|
9
|
+
compactionRetries: z.number().step(1).min(0).max(10),
|
|
10
|
+
maxOverflowRetries: z.number().step(1).min(0).max(10),
|
|
11
|
+
ptcTimeoutMs: z.number().step(1).min(1).description('Default PTC elapsed deadline, including tool waits, in milliseconds.'),
|
|
12
|
+
ptcMaxTimeoutMs: z.number().step(1).min(1).description('PTC elapsed ceiling; the host ceiling remains authoritative.'),
|
|
13
|
+
});
|
|
14
|
+
// SettingsProvider resolves plain data; volatile references belong only to Loader entries.
|
|
15
|
+
export const settingsConfigurationSchema = z.object({
|
|
16
|
+
applyToOfficialPresets: z.boolean().description('Apply common runtime budgets to Standard, PTC, Minimal and Create presets (default: off).'),
|
|
17
|
+
budgets: budgetSchema.description('Optional runtime budgets; leave blank to follow the host.'),
|
|
18
|
+
maxTasks: z.number().step(1).min(1).max(128),
|
|
19
|
+
maxContextBytes: z.number().step(1).min(1024).max(262144),
|
|
20
|
+
});
|
|
21
|
+
export const configurationSchema = z.object({
|
|
22
|
+
applyToOfficialPresets: settingsConfigurationSchema.dict.applyToOfficialPresets.extra('volatile', true),
|
|
23
|
+
budgets: settingsConfigurationSchema.dict.budgets.extra('volatile', true),
|
|
24
|
+
maxTasks: settingsConfigurationSchema.dict.maxTasks.extra('volatile', true),
|
|
25
|
+
maxContextBytes: settingsConfigurationSchema.dict.maxContextBytes.extra('volatile', true),
|
|
26
|
+
});
|
|
27
|
+
const validConfiguration = json.object({
|
|
28
|
+
applyToOfficialPresets: json.boolean().optional(),
|
|
29
|
+
budgets: json.object({
|
|
30
|
+
pressureBasis: json.enum(['host', 'window']).optional(),
|
|
31
|
+
thresholdRatio: json.number().min(0.01).max(1).optional(),
|
|
32
|
+
retainRatio: json.number().min(0).max(1).optional(),
|
|
33
|
+
summaryMaxTokens: json.number().int().positive().safe().optional(),
|
|
34
|
+
compactionRetries: json.number().int().min(0).max(10).optional(),
|
|
35
|
+
maxOverflowRetries: json.number().int().min(0).max(10).optional(),
|
|
36
|
+
ptcTimeoutMs: json.number().int().positive().safe().optional(),
|
|
37
|
+
ptcMaxTimeoutMs: json.number().int().positive().safe().optional(),
|
|
38
|
+
}).strict().optional(),
|
|
39
|
+
maxTasks: json.number().int().min(1).max(128).optional(),
|
|
40
|
+
maxContextBytes: json.number().int().min(1024).max(262144).optional(),
|
|
41
|
+
}).strict().superRefine((config, ctx) => {
|
|
42
|
+
const b = config.budgets;
|
|
43
|
+
if (!b)
|
|
44
|
+
return;
|
|
45
|
+
if ((b.retainRatio ?? 0.16) >= (b.thresholdRatio ?? 0.8))
|
|
46
|
+
ctx.addIssue({ code: 'custom', message: 'Retention must be below the compression threshold.' });
|
|
47
|
+
if (b.ptcTimeoutMs !== undefined && b.ptcMaxTimeoutMs !== undefined && b.ptcTimeoutMs > b.ptcMaxTimeoutMs)
|
|
48
|
+
ctx.addIssue({ code: 'custom', message: 'PTC default deadline exceeds its ceiling.' });
|
|
49
|
+
});
|
|
50
|
+
export function validateConfiguration(config) {
|
|
51
|
+
return validConfiguration.parse(config);
|
|
52
|
+
}
|
|
53
|
+
/** Newer Loader schemas expose volatile fields as references; older hosts return plain values. */
|
|
54
|
+
export function configurationValues(config) {
|
|
55
|
+
return validateConfiguration(Object.fromEntries(Object.entries(config).flatMap(([key, value]) => {
|
|
56
|
+
const reference = value;
|
|
57
|
+
const selected = typeof reference?.get === 'function' ? reference.get() : value;
|
|
58
|
+
return selected === undefined ? [] : [[key, selected]];
|
|
59
|
+
})));
|
|
60
|
+
}
|
|
61
|
+
export function configurationOf(ctx, agent) {
|
|
62
|
+
const source = ctx.get('superCodeConfiguration');
|
|
63
|
+
return source ? agent && source.forAgent ? source.forAgent(agent) : source.get() : {};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=budgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budgets.js","sourceRoot":"","sources":["../../src/dsh/budgets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Change pressure policy while retaining the host's compaction transaction. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import { BasicCompactionEngine } from '@deepseek-ai/dsh-compaction-basic';
|
|
4
|
+
import { CompactionEngine } from '@deepseek-ai/dsh-compaction';
|
|
5
|
+
import type { CompactionResult, CompactionTrigger } from '@deepseek-ai/dsh-compaction';
|
|
6
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
7
|
+
import type { Session, SessionSeq } from '@deepseek-ai/dsh-session';
|
|
8
|
+
import type { TokenMeasurement } from '@deepseek-ai/dsh-token-meter';
|
|
9
|
+
import type { CommandId } from '@deepseek-ai/dsh-commands/brand';
|
|
10
|
+
import { budgetSchema } from './budgets.js';
|
|
11
|
+
import type { Budgets } from './budgets.js';
|
|
12
|
+
export declare const name = "super-code-compaction";
|
|
13
|
+
export declare const inject: readonly string[];
|
|
14
|
+
export declare const Config: typeof budgetSchema;
|
|
15
|
+
/** Preserve the system head and extend the retained tail to a balanced tool boundary. */
|
|
16
|
+
export declare function compactableRange(session: Session, measurement: TokenMeasurement, retainTokens: number): {
|
|
17
|
+
start: SessionSeq;
|
|
18
|
+
end: SessionSeq;
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'none';
|
|
21
|
+
};
|
|
22
|
+
export declare class BudgetCompactionEngine extends BasicCompactionEngine {
|
|
23
|
+
private readonly budgets;
|
|
24
|
+
constructor(ctx: Context, budgets?: Budgets);
|
|
25
|
+
compactIfNeeded(agent: Agent, trigger: CompactionTrigger, signal: AbortSignal): Promise<CompactionResult | null>;
|
|
26
|
+
}
|
|
27
|
+
/** Share the window policy with an official engine without replacing its transaction or listeners. */
|
|
28
|
+
export declare function compactByWindow(engine: BasicCompactionEngine, budgets: Budgets, agent: Agent, signal: AbortSignal): Promise<CompactionResult | null>;
|
|
29
|
+
/** Retained preset generations share this router, while each Agent owns its host engine. */
|
|
30
|
+
export declare class AgentBudgetCompaction extends CompactionEngine {
|
|
31
|
+
private readonly overrides;
|
|
32
|
+
private readonly engines;
|
|
33
|
+
constructor(ctx: Context, overrides?: Budgets);
|
|
34
|
+
forAgent(agent: Agent): Promise<BudgetCompactionEngine>;
|
|
35
|
+
compactIfNeeded(agent: Agent, trigger: CompactionTrigger, signal: AbortSignal): Promise<CompactionResult | null>;
|
|
36
|
+
compactRegion(start: SessionSeq, end: SessionSeq, agent: Agent, signal?: AbortSignal): Promise<CompactionResult>;
|
|
37
|
+
compactNow(agent: Agent, signal: AbortSignal, sourceCommandId?: CommandId): Promise<CompactionResult | null>;
|
|
38
|
+
}
|
|
39
|
+
export declare function apply(ctx: Context, config?: Budgets): void;
|
|
40
|
+
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/dsh/compaction.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAA6B,MAAM,6BAA6B,CAAA;AAEzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,YAAY,EAA0C,MAAM,cAAc,CAAA;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,eAAO,MAAM,IAAI,0BAA0B,CAAA;AAC3C,eAAO,MAAM,MAAM,EAAE,SAAS,MAAM,EAAsC,CAAA;AAC1E,eAAO,MAAM,MAAM,EAAE,OAAO,YAA2B,CAAA;AAEvD,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAajK;AAED,qBAAa,sBAAuB,SAAQ,qBAAqB;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAtC,GAAG,EAAE,OAAO,EAAmB,OAAO,GAAE,OAAY;IAWjD,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAIhI;AAED,sGAAsG;AACtG,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAyB1J;AAED,4FAA4F;AAC5F,qBAAa,qBAAsB,SAAQ,gBAAgB;IAG/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8G;gBAE1H,GAAG,EAAE,OAAO,EAAmB,SAAS,GAAE,OAAY;IAwBlE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAqBxC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAIhH,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIhH,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAG5H;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,OAAY,GAAG,IAAI,CAE9D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { BasicCompactionEngine } from '@deepseek-ai/dsh-compaction-basic';
|
|
2
|
+
import { CompactionEngine, toolPairingBalancedBefore } from '@deepseek-ai/dsh-compaction';
|
|
3
|
+
import { createScope } from '@deepseek-ai/dsh-scope';
|
|
4
|
+
import { budgetSchema, configurationOf, validateConfiguration } from './budgets.js';
|
|
5
|
+
export const name = 'super-code-compaction';
|
|
6
|
+
export const inject = ['llm', 'tokenMeter', 'sessions'];
|
|
7
|
+
export const Config = budgetSchema;
|
|
8
|
+
/** Preserve the system head and extend the retained tail to a balanced tool boundary. */
|
|
9
|
+
export function compactableRange(session, measurement, retainTokens) {
|
|
10
|
+
const nodes = session.surface.nodes;
|
|
11
|
+
if (!nodes.length)
|
|
12
|
+
return { kind: 'none' };
|
|
13
|
+
if (nodes.length !== measurement.nodes.length || nodes.some((seq, index) => seq !== measurement.nodes[index]?.seq))
|
|
14
|
+
throw new Error('Compression measurement does not match the current surface');
|
|
15
|
+
const first = session.eventAt(nodes[0])?.type === 'system/message' ? 1 : 0;
|
|
16
|
+
let tokens = 0, keep = nodes.length;
|
|
17
|
+
for (let index = nodes.length - 1; index >= 0; index--) {
|
|
18
|
+
tokens += measurement.nodes[index].tokens;
|
|
19
|
+
keep = index;
|
|
20
|
+
if (tokens >= retainTokens)
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
while (keep > first && !toolPairingBalancedBefore(session, nodes[keep]))
|
|
24
|
+
keep--;
|
|
25
|
+
return keep <= first ? { kind: 'none' } : { start: nodes[first], end: nodes[keep - 1] };
|
|
26
|
+
}
|
|
27
|
+
export class BudgetCompactionEngine extends BasicCompactionEngine {
|
|
28
|
+
budgets;
|
|
29
|
+
constructor(ctx, budgets = {}) {
|
|
30
|
+
validateConfiguration({ budgets });
|
|
31
|
+
super(ctx, {
|
|
32
|
+
thresholdRatio: budgets.thresholdRatio,
|
|
33
|
+
retainRatio: budgets.retainRatio,
|
|
34
|
+
maxTokens: budgets.summaryMaxTokens,
|
|
35
|
+
compactionRetries: budgets.compactionRetries,
|
|
36
|
+
maxOverflowRetries: budgets.maxOverflowRetries,
|
|
37
|
+
});
|
|
38
|
+
this.budgets = budgets;
|
|
39
|
+
}
|
|
40
|
+
async compactIfNeeded(agent, trigger, signal) {
|
|
41
|
+
if (this.budgets.pressureBasis !== 'window' || trigger !== 'pressure')
|
|
42
|
+
return super.compactIfNeeded(agent, trigger, signal);
|
|
43
|
+
return compactByWindow(this, this.budgets, agent, signal);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Share the window policy with an official engine without replacing its transaction or listeners. */
|
|
47
|
+
export async function compactByWindow(engine, budgets, agent, signal) {
|
|
48
|
+
const ctx = engine['ctx'];
|
|
49
|
+
signal.throwIfAborted();
|
|
50
|
+
const config = agent.session.requestHeader()?.config;
|
|
51
|
+
if (!config?.provider || !config.model)
|
|
52
|
+
return null;
|
|
53
|
+
const info = await ctx.llm.resolveModelInfo(config.provider, config.model, signal);
|
|
54
|
+
const window = info.context?.contextWindow;
|
|
55
|
+
if (!Number.isSafeInteger(window) || !window || window < 1)
|
|
56
|
+
throw new Error('Compression requires the routed model context window');
|
|
57
|
+
const threshold = Math.floor(window * (budgets.thresholdRatio ?? engine.config.thresholdRatio));
|
|
58
|
+
const retain = Math.floor(window * (budgets.retainRatio ?? engine.config.retainRatio ?? 0.16));
|
|
59
|
+
let measurement = ctx.tokenMeter.measure(agent.session);
|
|
60
|
+
if (measurement.totalTokens < threshold)
|
|
61
|
+
return null;
|
|
62
|
+
const pruner = ctx.get('toolResultPruner');
|
|
63
|
+
if (pruner) {
|
|
64
|
+
pruner.pruneSession(agent.session);
|
|
65
|
+
measurement = ctx.tokenMeter.measure(agent.session);
|
|
66
|
+
}
|
|
67
|
+
if (measurement.totalTokens < threshold)
|
|
68
|
+
return null;
|
|
69
|
+
let result = null;
|
|
70
|
+
for (let attempt = 0; attempt <= (budgets.compactionRetries ?? engine.config.compactionRetries); attempt++) {
|
|
71
|
+
signal.throwIfAborted();
|
|
72
|
+
const range = compactableRange(agent.session, measurement, retain);
|
|
73
|
+
if ('kind' in range)
|
|
74
|
+
return result;
|
|
75
|
+
result = await engine.compactRegion(range.start, range.end, agent, signal);
|
|
76
|
+
measurement = ctx.tokenMeter.measure(agent.session);
|
|
77
|
+
if (measurement.totalTokens < threshold)
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
throw new Error('Compression remains above the configured window threshold after its retry budget');
|
|
81
|
+
}
|
|
82
|
+
/** Retained preset generations share this router, while each Agent owns its host engine. */
|
|
83
|
+
export class AgentBudgetCompaction extends CompactionEngine {
|
|
84
|
+
overrides;
|
|
85
|
+
engines = new WeakMap();
|
|
86
|
+
constructor(ctx, overrides = {}) {
|
|
87
|
+
super(ctx);
|
|
88
|
+
this.overrides = overrides;
|
|
89
|
+
validateConfiguration({ budgets: overrides });
|
|
90
|
+
ctx.on('agent/created', async ({ agent }) => { await this.forAgent(agent); });
|
|
91
|
+
ctx.on('agent/disposed', async ({ agent }) => {
|
|
92
|
+
const entry = this.engines.get(agent);
|
|
93
|
+
this.engines.delete(agent);
|
|
94
|
+
await entry?.dispose();
|
|
95
|
+
});
|
|
96
|
+
// Older creation events do not await listeners; finish setup before the first pressure check.
|
|
97
|
+
ctx.on('agent/pre-step', async ({ agent, signal }, next) => {
|
|
98
|
+
const ready = this.engines.get(agent)?.ready;
|
|
99
|
+
const engine = await this.forAgent(agent);
|
|
100
|
+
if (!ready && !signal.aborted) {
|
|
101
|
+
try {
|
|
102
|
+
await engine.compactIfNeeded(agent, 'pressure', signal);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
106
|
+
ctx.logger.warn(`step compaction failed: ${message}; continuing the turn`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return next();
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
forAgent(agent) {
|
|
113
|
+
let entry = this.engines.get(agent);
|
|
114
|
+
if (!entry) {
|
|
115
|
+
const scope = createScope(this.ctx, agent);
|
|
116
|
+
const budgets = { ...configurationOf(this.ctx, agent).budgets, ...this.overrides };
|
|
117
|
+
const fiber = scope.ctx.isolate('compaction').plugin({ inject, apply(owner) { new BudgetCompactionEngine(owner, budgets); } });
|
|
118
|
+
const created = {
|
|
119
|
+
ready: false, dispose: scope.dispose,
|
|
120
|
+
engine: fiber.await().then(() => {
|
|
121
|
+
const engine = fiber.ctx.get('compaction');
|
|
122
|
+
if (!engine)
|
|
123
|
+
throw new Error('Agent compression engine did not become available');
|
|
124
|
+
created.ready = true;
|
|
125
|
+
return engine;
|
|
126
|
+
}).catch(async (error) => { await scope.dispose(); throw error; }),
|
|
127
|
+
};
|
|
128
|
+
entry = created;
|
|
129
|
+
this.engines.set(agent, entry);
|
|
130
|
+
}
|
|
131
|
+
return entry.engine;
|
|
132
|
+
}
|
|
133
|
+
async compactIfNeeded(agent, trigger, signal) {
|
|
134
|
+
return (await this.forAgent(agent)).compactIfNeeded(agent, trigger, signal);
|
|
135
|
+
}
|
|
136
|
+
async compactRegion(start, end, agent, signal) {
|
|
137
|
+
return (await this.forAgent(agent)).compactRegion(start, end, agent, signal);
|
|
138
|
+
}
|
|
139
|
+
async compactNow(agent, signal, sourceCommandId) {
|
|
140
|
+
return (await this.forAgent(agent)).compactNow(agent, signal, sourceCommandId);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export function apply(ctx, config = {}) {
|
|
144
|
+
new AgentBudgetCompaction(ctx, config);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/dsh/compaction.ts"],"names":[],"mappings":"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"}
|
package/lib/dsh/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { configurationSchema } from './budgets.js';
|
|
3
|
+
import type { Configuration } from './budgets.js';
|
|
2
4
|
export declare const name = "super-code";
|
|
3
|
-
export declare
|
|
5
|
+
export declare const Config: typeof configurationSchema;
|
|
6
|
+
export declare function apply(ctx: Context, config?: Configuration): Promise<void>;
|
|
4
7
|
export default apply;
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/dsh/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsh/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsh/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAOlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAIjD,eAAO,MAAM,IAAI,eAAe,CAAA;AAChC,eAAO,MAAM,MAAM,EAAE,OAAO,mBAAyC,CAAA;AAgBrE,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAanF;AAED,eAAe,KAAK,CAAA"}
|
package/lib/dsh/index.js
CHANGED
|
@@ -5,7 +5,11 @@ import { taskMemoryProjection } from '../task-memory-projection.js';
|
|
|
5
5
|
import { LongMemoryStore, longMemoryDomainSpec } from '../long-memory.js';
|
|
6
6
|
import { memoryUsageProjection } from '../memory-usage-projection.js';
|
|
7
7
|
import { SuperCodeMemory } from './memory-library.js';
|
|
8
|
+
import { configurationSchema } from './budgets.js';
|
|
9
|
+
import { applyBudgetSettings } from './budget-settings.js';
|
|
10
|
+
import { applyOfficialBudgets } from './official-budgets.js';
|
|
8
11
|
export const name = 'super-code';
|
|
12
|
+
export const Config = configurationSchema;
|
|
9
13
|
async function installLongMemory(ctx) {
|
|
10
14
|
await ctx.inject(['storageDomain'], async (owner) => {
|
|
11
15
|
try {
|
|
@@ -20,7 +24,9 @@ async function installLongMemory(ctx) {
|
|
|
20
24
|
}
|
|
21
25
|
});
|
|
22
26
|
}
|
|
23
|
-
export async function apply(ctx) {
|
|
27
|
+
export async function apply(ctx, config = {}) {
|
|
28
|
+
applyBudgetSettings(ctx, config);
|
|
29
|
+
applyOfficialBudgets(ctx);
|
|
24
30
|
applyPresetInstallation(ctx);
|
|
25
31
|
ctx.inject(['superCodeLongMemory', 'sessions'], owner => {
|
|
26
32
|
new SuperCodeMemory(owner, owner.get('superCodeLongMemory'));
|