@aexol/spectral 0.9.107 → 0.9.109
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/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +6 -1
- package/dist/memory/tools/compact-context.d.ts +10 -0
- package/dist/memory/tools/compact-context.d.ts.map +1 -1
- package/dist/memory/tools/compact-context.js +26 -0
- package/dist/sdk/ai/providers/faux.d.ts +1 -0
- package/dist/sdk/ai/providers/faux.d.ts.map +1 -1
- package/dist/sdk/ai/providers/faux.js +9 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAIX,SAAS,EAET,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAIX,SAAS,EAET,MAAM,4BAA4B,CAAC;AAUpC,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,KAAK,WAAW,EAAmC,MAAM,aAAa,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAmF7G,wBAAgB,+BAA+B,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CASpG;AAED,wBAAgB,yBAAyB,CACxC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,GAC/C,MAAM,CAKR;AAiHD;;;GAGG;AACH,wBAAgB,oCAAoC,CACnD,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAChD,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,CAK3D;AAED,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,EAC/B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,gBAAgB,GACnB,SAAS,EAAE,CAqCb;AA0VD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACxC,GAAG,EAAE,YAAY,EACjB,IAAI,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;CAAE,GACpF,IAAI,CAgZN"}
|
package/dist/agent/index.js
CHANGED
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
* - Access to observational memory via the recall tool
|
|
26
26
|
*/
|
|
27
27
|
import { agentLoop } from "../sdk/agent-core/index.js";
|
|
28
|
-
import { buildIsolatedRequestTimePrunedMessages } from "../memory/tools/compact-context.js";
|
|
28
|
+
import { buildIsolatedRequestTimePrunedMessages, createIsolatedDcpNudgePayloadHook, } from "../memory/tools/compact-context.js";
|
|
29
|
+
import { loadConfig } from "../memory/config.js";
|
|
29
30
|
import { StringEnum } from "../sdk/ai/index.js";
|
|
30
31
|
import { mutateSystemPrompt } from "../sdk/coding-agent/core/system-prompt-mutator.js";
|
|
31
32
|
import { Type } from "typebox";
|
|
@@ -352,6 +353,10 @@ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, si
|
|
|
352
353
|
const config = {
|
|
353
354
|
model,
|
|
354
355
|
apiKey: auth.apiKey,
|
|
356
|
+
onPayload: createIsolatedDcpNudgePayloadHook({
|
|
357
|
+
config: loadConfig(effectiveCwd),
|
|
358
|
+
policy: ctx.settingsManager?.getCompactionPolicy?.(),
|
|
359
|
+
}),
|
|
355
360
|
headers: auth.headers,
|
|
356
361
|
convertToLlm: (msgs) => msgs.filter((m) => m.role === "user" || m.role === "assistant" || m.role === "toolResult"),
|
|
357
362
|
toolExecution: "parallel",
|
|
@@ -2,7 +2,17 @@ import type { AgentMessage } from "../../sdk/agent-core/index.js";
|
|
|
2
2
|
import { type CompactionPolicy } from "../../sdk/coding-agent/core/compaction/index.js";
|
|
3
3
|
import { type ExtensionAPI } from "../../sdk/coding-agent/index.js";
|
|
4
4
|
import type { Runtime } from "../runtime.js";
|
|
5
|
+
import { type Config } from "../config.js";
|
|
5
6
|
export declare const COMPACT_CONTEXT_TOOL_NAME = "compact_context";
|
|
7
|
+
/**
|
|
8
|
+
* Creates an invocation-local provider payload hook for isolated agent loops.
|
|
9
|
+
* The values are snapshotted at invocation start; no Runtime, SessionManager, or
|
|
10
|
+
* extension state is retained by the returned hook.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createIsolatedDcpNudgePayloadHook(options?: {
|
|
13
|
+
config?: Pick<Config, "dcpInRunNudgeIterationThreshold" | "dcpInRunNudgeFrequency">;
|
|
14
|
+
policy?: CompactionPolicy;
|
|
15
|
+
}): NonNullable<import("../../sdk/ai/index.js").SimpleStreamOptions["onPayload"]>;
|
|
6
16
|
/** Request-time DCP adapter for isolated loops: it borrows only pure policy helpers. */
|
|
7
17
|
export declare function buildIsolatedRequestTimePrunedMessages(currentMessages: AgentMessage[], policy?: CompactionPolicy, keepRecentTokens?: number): AgentMessage[];
|
|
8
18
|
export declare function registerCompactContextTool(ext: ExtensionAPI, runtime: Runtime): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compact-context.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/compact-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EASN,KAAK,gBAAgB,EACrB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAc,KAAK,YAAY,EAAyB,MAAM,iCAAiC,CAAC;AAKvG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"compact-context.d.ts","sourceRoot":"","sources":["../../../src/memory/tools/compact-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EASN,KAAK,gBAAgB,EACrB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAc,KAAK,YAAY,EAAyB,MAAM,iCAAiC,CAAC;AAKvG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAErD,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAoO3D;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,GAAE;IAC1D,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,iCAAiC,GAAG,wBAAwB,CAAC,CAAC;IACpF,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACrB,GAAG,WAAW,CAAC,OAAO,uBAAuB,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAiBrF;AA+MD,wFAAwF;AACxF,wBAAgB,sCAAsC,CACrD,eAAe,EAAE,YAAY,EAAE,EAC/B,MAAM,GAAE,gBAA4C,EACpD,gBAAgB,CAAC,EAAE,MAAM,GACvB,YAAY,EAAE,CAchB;AAsQD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAkSpF"}
|
|
@@ -4,6 +4,7 @@ import { defineTool } from "../../sdk/coding-agent/index.js";
|
|
|
4
4
|
import { buildSessionContext } from "../../sdk/coding-agent/core/session-manager.js";
|
|
5
5
|
import { rawTokensSinceLastCompaction } from "../branch.js";
|
|
6
6
|
import { debugLog, withDebugLogContext } from "../debug-log.js";
|
|
7
|
+
import { DEFAULTS } from "../config.js";
|
|
7
8
|
export const COMPACT_CONTEXT_TOOL_NAME = "compact_context";
|
|
8
9
|
const DCP_NUDGE_HEADING = "## DCP-lite context hygiene";
|
|
9
10
|
const MAX_COMPACT_CONTEXT_TEXT_CHARS = 240;
|
|
@@ -194,6 +195,31 @@ function injectDcpNudgeIntoProviderPayload(payload, nudge) {
|
|
|
194
195
|
return undefined;
|
|
195
196
|
return injectDcpNudgeIntoAnthropicPayload(payload, nudge) ?? injectDcpNudgeIntoOpenAiPayload(payload, nudge);
|
|
196
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Creates an invocation-local provider payload hook for isolated agent loops.
|
|
200
|
+
* The values are snapshotted at invocation start; no Runtime, SessionManager, or
|
|
201
|
+
* extension state is retained by the returned hook.
|
|
202
|
+
*/
|
|
203
|
+
export function createIsolatedDcpNudgePayloadHook(options = {}) {
|
|
204
|
+
let providerRequestCount = 0;
|
|
205
|
+
let lastNudgeRequest = 0;
|
|
206
|
+
const config = options.config ?? DEFAULTS;
|
|
207
|
+
const policy = options.policy ?? DEFAULT_COMPACTION_POLICY;
|
|
208
|
+
return (payload) => {
|
|
209
|
+
providerRequestCount += 1;
|
|
210
|
+
const frequency = config.dcpInRunNudgeFrequency;
|
|
211
|
+
const hasSignal = providerRequestCount >= config.dcpInRunNudgeIterationThreshold;
|
|
212
|
+
const frequencyReady = lastNudgeRequest === 0 || providerRequestCount - lastNudgeRequest >= frequency;
|
|
213
|
+
if (!hasSignal || !frequencyReady || payloadContainsDcpNudge(payload))
|
|
214
|
+
return undefined;
|
|
215
|
+
const nudge = buildDcpNudge(0, undefined, undefined, policy, providerRequestCount);
|
|
216
|
+
const nextPayload = injectDcpNudgeIntoProviderPayload(payload, nudge);
|
|
217
|
+
if (nextPayload === undefined)
|
|
218
|
+
return undefined;
|
|
219
|
+
lastNudgeRequest = providerRequestCount;
|
|
220
|
+
return nextPayload;
|
|
221
|
+
};
|
|
222
|
+
}
|
|
197
223
|
function rawTokensForContext(ctx) {
|
|
198
224
|
const entries = ctx.sessionManager.getBranch();
|
|
199
225
|
return rawTokensSinceLastCompaction(entries);
|
|
@@ -27,6 +27,7 @@ export declare function fauxAssistantMessage(content: string | FauxContentBlock
|
|
|
27
27
|
}): AssistantMessage;
|
|
28
28
|
export type FauxResponseFactory = (context: Context, options: StreamOptions | undefined, state: {
|
|
29
29
|
callCount: number;
|
|
30
|
+
lastPayload?: unknown;
|
|
30
31
|
}, model: Model<string>) => AssistantMessage | Promise<AssistantMessage>;
|
|
31
32
|
export type FauxResponseStep = AssistantMessage | FauxResponseFactory;
|
|
32
33
|
export interface RegisterFauxProviderOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faux.d.ts","sourceRoot":"","sources":["../../../../src/sdk/ai/providers/faux.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,gBAAgB,EAEhB,OAAO,EAGP,KAAK,EAGL,aAAa,EACb,WAAW,EACX,eAAe,EACf,QAAQ,EAGR,MAAM,aAAa,CAAC;AAoBrB,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,CAAC;AAExE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAElD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAE9D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,QAAQ,CAOrH;AASD,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,EACvD,OAAO,GAAE;IACR,UAAU,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACd,GACJ,gBAAgB,CAalB;AAED,MAAM,MAAM,mBAAmB,GAAG,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"faux.d.ts","sourceRoot":"","sources":["../../../../src/sdk/ai/providers/faux.ts"],"names":[],"mappings":"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"}
|
|
@@ -317,6 +317,15 @@ export function registerFauxProvider(options = {}) {
|
|
|
317
317
|
state.callCount++;
|
|
318
318
|
queueMicrotask(async () => {
|
|
319
319
|
try {
|
|
320
|
+
const payload = {
|
|
321
|
+
system: context.systemPrompt,
|
|
322
|
+
messages: context.messages,
|
|
323
|
+
tools: context.tools,
|
|
324
|
+
};
|
|
325
|
+
// Faux is intentionally a low-level provider: exercise the same payload
|
|
326
|
+
// interception seam as HTTP providers so agent-loop continuations can be
|
|
327
|
+
// tested without network calls.
|
|
328
|
+
state.lastPayload = (await streamOptions?.onPayload?.(payload, requestModel)) ?? payload;
|
|
320
329
|
await streamOptions?.onResponse?.({ status: 200, headers: {} }, requestModel);
|
|
321
330
|
if (!step) {
|
|
322
331
|
let message = createErrorMessage(new Error("No more faux responses queued"), api, provider, requestModel.id);
|