@tarquinen/opencode-dcp 2.1.7 → 2.2.0-beta0
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 +30 -49
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -29
- package/dist/index.js.map +1 -1
- package/dist/lib/commands/context.d.ts.map +1 -1
- package/dist/lib/commands/context.js +36 -8
- package/dist/lib/commands/context.js.map +1 -1
- package/dist/lib/commands/help.d.ts.map +1 -1
- package/dist/lib/commands/help.js +2 -6
- package/dist/lib/commands/help.js.map +1 -1
- package/dist/lib/commands/manual.d.ts +1 -3
- package/dist/lib/commands/manual.d.ts.map +1 -1
- package/dist/lib/commands/manual.js +4 -43
- package/dist/lib/commands/manual.js.map +1 -1
- package/dist/lib/commands/sweep.d.ts.map +1 -1
- package/dist/lib/commands/sweep.js +2 -12
- package/dist/lib/commands/sweep.js.map +1 -1
- package/dist/lib/compress-logger.d.ts +15 -0
- package/dist/lib/compress-logger.d.ts.map +1 -0
- package/dist/lib/compress-logger.js +132 -0
- package/dist/lib/compress-logger.js.map +1 -0
- package/dist/lib/config.d.ts +5 -20
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +172 -348
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hooks.d.ts +7 -0
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +23 -17
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +6 -0
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/messages/index.d.ts +2 -3
- package/dist/lib/messages/index.d.ts.map +1 -1
- package/dist/lib/messages/index.js +2 -3
- package/dist/lib/messages/index.js.map +1 -1
- package/dist/lib/messages/inject/inject.d.ts +6 -0
- package/dist/lib/messages/inject/inject.d.ts.map +1 -0
- package/dist/lib/messages/inject/inject.js +99 -0
- package/dist/lib/messages/inject/inject.js.map +1 -0
- package/dist/lib/messages/inject/utils.d.ts +20 -0
- package/dist/lib/messages/inject/utils.d.ts.map +1 -0
- package/dist/lib/messages/inject/utils.js +137 -0
- package/dist/lib/messages/inject/utils.js.map +1 -0
- package/dist/lib/messages/utils.d.ts +7 -11
- package/dist/lib/messages/utils.d.ts.map +1 -1
- package/dist/lib/messages/utils.js +33 -132
- package/dist/lib/messages/utils.js.map +1 -1
- package/dist/lib/prompts/_codegen/system.generated.d.ts +1 -1
- package/dist/lib/prompts/_codegen/system.generated.d.ts.map +1 -1
- package/dist/lib/prompts/_codegen/system.generated.js +36 -32
- package/dist/lib/prompts/_codegen/system.generated.js.map +1 -1
- package/dist/lib/prompts/compress.d.ts +2 -0
- package/dist/lib/prompts/compress.d.ts.map +1 -0
- package/dist/lib/prompts/compress.js +122 -0
- package/dist/lib/prompts/compress.js.map +1 -0
- package/dist/lib/prompts/index.d.ts +6 -10
- package/dist/lib/prompts/index.d.ts.map +1 -1
- package/dist/lib/prompts/index.js +17 -40
- package/dist/lib/prompts/index.js.map +1 -1
- package/dist/lib/prompts/iteration-nudge.d.ts +2 -0
- package/dist/lib/prompts/iteration-nudge.d.ts.map +1 -0
- package/dist/lib/prompts/iteration-nudge.js +9 -0
- package/dist/lib/prompts/iteration-nudge.js.map +1 -0
- package/dist/lib/prompts/nudge.d.ts +2 -0
- package/dist/lib/prompts/nudge.d.ts.map +1 -0
- package/dist/lib/prompts/nudge.js +40 -0
- package/dist/lib/prompts/nudge.js.map +1 -0
- package/dist/lib/prompts/turn-nudge.d.ts +2 -0
- package/dist/lib/prompts/turn-nudge.d.ts.map +1 -0
- package/dist/lib/prompts/turn-nudge.js +12 -0
- package/dist/lib/prompts/turn-nudge.js.map +1 -0
- package/dist/lib/state/persistence.d.ts +7 -2
- package/dist/lib/state/persistence.d.ts.map +1 -1
- package/dist/lib/state/persistence.js +58 -39
- package/dist/lib/state/persistence.js.map +1 -1
- package/dist/lib/state/state.d.ts.map +1 -1
- package/dist/lib/state/state.js +20 -8
- package/dist/lib/state/state.js.map +1 -1
- package/dist/lib/state/tool-cache.d.ts.map +1 -1
- package/dist/lib/state/tool-cache.js +3 -17
- package/dist/lib/state/tool-cache.js.map +1 -1
- package/dist/lib/state/types.d.ts +7 -8
- package/dist/lib/state/types.d.ts.map +1 -1
- package/dist/lib/state/utils.d.ts +2 -2
- package/dist/lib/state/utils.d.ts.map +1 -1
- package/dist/lib/state/utils.js +29 -19
- package/dist/lib/state/utils.js.map +1 -1
- package/dist/lib/strategies/deduplication.d.ts.map +1 -1
- package/dist/lib/strategies/deduplication.js +0 -11
- package/dist/lib/strategies/deduplication.js.map +1 -1
- package/dist/lib/strategies/index.d.ts +0 -1
- package/dist/lib/strategies/index.d.ts.map +1 -1
- package/dist/lib/strategies/index.js +0 -1
- package/dist/lib/strategies/index.js.map +1 -1
- package/dist/lib/strategies/purge-errors.d.ts.map +1 -1
- package/dist/lib/strategies/purge-errors.js +0 -11
- package/dist/lib/strategies/purge-errors.js.map +1 -1
- package/dist/lib/strategies/supersede-writes.d.ts.map +1 -1
- package/dist/lib/strategies/supersede-writes.js +0 -11
- package/dist/lib/strategies/supersede-writes.js.map +1 -1
- package/dist/lib/strategies/utils.d.ts +1 -0
- package/dist/lib/strategies/utils.d.ts.map +1 -1
- package/dist/lib/strategies/utils.js +15 -0
- package/dist/lib/strategies/utils.js.map +1 -1
- package/dist/lib/tools/compress-utils.d.ts +7 -4
- package/dist/lib/tools/compress-utils.d.ts.map +1 -1
- package/dist/lib/tools/compress-utils.js +34 -25
- package/dist/lib/tools/compress-utils.js.map +1 -1
- package/dist/lib/tools/compress.d.ts +2 -2
- package/dist/lib/tools/compress.d.ts.map +1 -1
- package/dist/lib/tools/compress.js +21 -58
- package/dist/lib/tools/compress.js.map +1 -1
- package/dist/lib/tools/index.d.ts +1 -3
- package/dist/lib/tools/index.d.ts.map +1 -1
- package/dist/lib/tools/index.js +0 -2
- package/dist/lib/tools/index.js.map +1 -1
- package/dist/lib/tools/types.d.ts +1 -1
- package/dist/lib/tools/types.d.ts.map +1 -1
- package/dist/lib/ui/notification.d.ts +2 -2
- package/dist/lib/ui/notification.d.ts.map +1 -1
- package/dist/lib/ui/notification.js +31 -28
- package/dist/lib/ui/notification.js.map +1 -1
- package/dist/lib/ui/utils.d.ts +3 -4
- package/dist/lib/ui/utils.d.ts.map +1 -1
- package/dist/lib/ui/utils.js +165 -24
- package/dist/lib/ui/utils.js.map +1 -1
- package/package.json +2 -1
- package/dist/lib/messages/inject.d.ts +0 -14
- package/dist/lib/messages/inject.d.ts.map +0 -1
- package/dist/lib/messages/inject.js +0 -266
- package/dist/lib/messages/inject.js.map +0 -1
- package/dist/lib/messages/sync.d.ts +0 -4
- package/dist/lib/messages/sync.d.ts.map +0 -1
- package/dist/lib/messages/sync.js +0 -29
- package/dist/lib/messages/sync.js.map +0 -1
- package/dist/lib/prompts/_codegen/compress-nudge.generated.d.ts +0 -2
- package/dist/lib/prompts/_codegen/compress-nudge.generated.d.ts.map +0 -1
- package/dist/lib/prompts/_codegen/compress-nudge.generated.js +0 -15
- package/dist/lib/prompts/_codegen/compress-nudge.generated.js.map +0 -1
- package/dist/lib/prompts/_codegen/compress.generated.d.ts +0 -2
- package/dist/lib/prompts/_codegen/compress.generated.d.ts.map +0 -1
- package/dist/lib/prompts/_codegen/compress.generated.js +0 -66
- package/dist/lib/prompts/_codegen/compress.generated.js.map +0 -1
- package/dist/lib/prompts/_codegen/distill.generated.d.ts +0 -2
- package/dist/lib/prompts/_codegen/distill.generated.d.ts.map +0 -1
- package/dist/lib/prompts/_codegen/distill.generated.js +0 -33
- package/dist/lib/prompts/_codegen/distill.generated.js.map +0 -1
- package/dist/lib/prompts/_codegen/nudge.generated.d.ts +0 -2
- package/dist/lib/prompts/_codegen/nudge.generated.d.ts.map +0 -1
- package/dist/lib/prompts/_codegen/nudge.generated.js +0 -17
- package/dist/lib/prompts/_codegen/nudge.generated.js.map +0 -1
- package/dist/lib/prompts/_codegen/prune.generated.d.ts +0 -2
- package/dist/lib/prompts/_codegen/prune.generated.d.ts.map +0 -1
- package/dist/lib/prompts/_codegen/prune.generated.js +0 -23
- package/dist/lib/prompts/_codegen/prune.generated.js.map +0 -1
- package/dist/lib/tools/distill.d.ts +0 -4
- package/dist/lib/tools/distill.d.ts.map +0 -1
- package/dist/lib/tools/distill.js +0 -41
- package/dist/lib/tools/distill.js.map +0 -1
- package/dist/lib/tools/prune-shared.d.ts +0 -8
- package/dist/lib/tools/prune-shared.d.ts.map +0 -1
- package/dist/lib/tools/prune-shared.js +0 -127
- package/dist/lib/tools/prune-shared.js.map +0 -1
- package/dist/lib/tools/prune.d.ts +0 -4
- package/dist/lib/tools/prune.d.ts.map +0 -1
- package/dist/lib/tools/prune.js +0 -28
- package/dist/lib/tools/prune.js.map +0 -1
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export declare function renderSystemPrompt(flags: ToolFlags): string;
|
|
8
|
-
export declare function renderNudge(flags: ToolFlags): string;
|
|
9
|
-
export declare function renderCompressNudge(): string;
|
|
10
|
-
export declare function loadPrompt(name: string, vars?: Record<string, string>): string;
|
|
1
|
+
import { COMPRESS } from "./compress";
|
|
2
|
+
export { COMPRESS as COMPRESS_TOOL_SPEC };
|
|
3
|
+
export declare function renderSystemPrompt(manual?: boolean): string;
|
|
4
|
+
export declare const CONTEXT_LIMIT_NUDGE: string;
|
|
5
|
+
export declare const TURN_NUDGE_PROMPT: string;
|
|
6
|
+
export declare const ITERATION_NUDGE_PROMPT: string;
|
|
11
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/prompts/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/prompts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAA;AAEzC,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAU3D;AAWD,eAAO,MAAM,mBAAmB,QAAuD,CAAA;AACvF,eAAO,MAAM,iBAAiB,QAA+C,CAAA;AAC7E,eAAO,MAAM,sBAAsB,QAAyD,CAAA"}
|
|
@@ -1,47 +1,24 @@
|
|
|
1
|
-
// Generated prompts (from .md files via scripts/generate-prompts.ts)
|
|
2
1
|
import { SYSTEM as SYSTEM_PROMPT } from "./_codegen/system.generated";
|
|
3
|
-
import { NUDGE } from "./
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
function
|
|
9
|
-
|
|
10
|
-
let result = template;
|
|
11
|
-
// Strip comments: // ... //
|
|
2
|
+
import { NUDGE } from "./nudge";
|
|
3
|
+
import { COMPRESS } from "./compress";
|
|
4
|
+
import { TURN_NUDGE } from "./turn-nudge";
|
|
5
|
+
import { ITERATION_NUDGE } from "./iteration-nudge";
|
|
6
|
+
export { COMPRESS as COMPRESS_TOOL_SPEC };
|
|
7
|
+
export function renderSystemPrompt(manual) {
|
|
8
|
+
let result = SYSTEM_PROMPT;
|
|
12
9
|
result = result.replace(/\/\/.*?\/\//g, "");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
result = result.replace(regex, (_, content) => (flags[tool] ? content : ""));
|
|
10
|
+
if (!manual) {
|
|
11
|
+
const regex = new RegExp(`<manual>[\\s\\S]*?</manual>`, "g");
|
|
12
|
+
result = result.replace(regex, "");
|
|
17
13
|
}
|
|
18
|
-
// Collapse multiple blank/whitespace-only lines to single blank line
|
|
19
14
|
return result.replace(/\n([ \t]*\n)+/g, "\n\n").trim();
|
|
20
15
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return processConditionals(NUDGE, flags);
|
|
26
|
-
}
|
|
27
|
-
export function renderCompressNudge() {
|
|
28
|
-
return COMPRESS_NUDGE;
|
|
29
|
-
}
|
|
30
|
-
const PROMPTS = {
|
|
31
|
-
"prune-tool-spec": PRUNE_TOOL_SPEC,
|
|
32
|
-
"distill-tool-spec": DISTILL_TOOL_SPEC,
|
|
33
|
-
"compress-tool-spec": COMPRESS_TOOL_SPEC,
|
|
34
|
-
};
|
|
35
|
-
export function loadPrompt(name, vars) {
|
|
36
|
-
let content = PROMPTS[name];
|
|
37
|
-
if (!content) {
|
|
38
|
-
throw new Error(`Prompt not found: ${name}`);
|
|
39
|
-
}
|
|
40
|
-
if (vars) {
|
|
41
|
-
for (const [key, value] of Object.entries(vars)) {
|
|
42
|
-
content = content.replace(new RegExp(`\\{\\{${key}\\}\\}`, "g"), value);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return content;
|
|
16
|
+
function extractInstruction(content, name) {
|
|
17
|
+
const regex = new RegExp(`<instruction\\s+name=(?:"${name}"|${name})[^>]*>[\\s\\S]*?<\\/instruction>`, "i");
|
|
18
|
+
const match = content.match(regex);
|
|
19
|
+
return match ? match[0] : content;
|
|
46
20
|
}
|
|
21
|
+
export const CONTEXT_LIMIT_NUDGE = extractInstruction(NUDGE, "context_buildup_warning");
|
|
22
|
+
export const TURN_NUDGE_PROMPT = extractInstruction(TURN_NUDGE, "turn_nudge");
|
|
23
|
+
export const ITERATION_NUDGE_PROMPT = extractInstruction(ITERATION_NUDGE, "iteration_nudge");
|
|
47
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/prompts/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAA;AAEzC,MAAM,UAAU,kBAAkB,CAAC,MAAgB;IAC/C,IAAI,MAAM,GAAG,aAAa,CAAA;IAC1B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;QAC5D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1D,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,IAAY;IACrD,MAAM,KAAK,GAAG,IAAI,MAAM,CACpB,4BAA4B,IAAI,KAAK,IAAI,mCAAmC,EAC5E,GAAG,CACN,CAAA;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAA;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const ITERATION_NUDGE = "<instruction name=iteration_nudge>\nYou've been iterating for a while after the last user message.\n\nIf there is a closed portion that is unlikely to be referenced immediately (for example, finished research before implementation), use the compress tool on it now.\n\nPrefer multiple short, closed ranges over one large range when several independent slices are ready.\n</instruction>\n";
|
|
2
|
+
//# sourceMappingURL=iteration-nudge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iteration-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/iteration-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,wYAO3B,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const ITERATION_NUDGE = `<instruction name=iteration_nudge>
|
|
2
|
+
You've been iterating for a while after the last user message.
|
|
3
|
+
|
|
4
|
+
If there is a closed portion that is unlikely to be referenced immediately (for example, finished research before implementation), use the compress tool on it now.
|
|
5
|
+
|
|
6
|
+
Prefer multiple short, closed ranges over one large range when several independent slices are ready.
|
|
7
|
+
</instruction>
|
|
8
|
+
`;
|
|
9
|
+
//# sourceMappingURL=iteration-nudge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iteration-nudge.js","sourceRoot":"","sources":["../../../lib/prompts/iteration-nudge.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;CAO9B,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const NUDGE = "<instruction name=context_management_required>\nCRITICAL CONTEXT WARNING\nYour context window is filling with tool outputs. Strict adherence to context hygiene is required.\n\nPROTOCOL\nYou should prioritize context management, but do not interrupt a critical atomic operation if one is in progress. Once the immediate step is done, you must perform context management.\n\nIMMEDIATE ACTION REQUIRED\nKNOWLEDGE PRESERVATION: If holding valuable raw data you POTENTIALLY will need in your task, compress the smallest closed range that preserves those findings. Write a high-fidelity summary so no key technical insight is lost.\n\nNOISE REMOVAL: If you read files or ran commands that yielded no value, compress those dead-end ranges into explicit noise summaries and move on.\n\nPHASE COMPLETION: If a chapter is complete, compress the entire sequence into a detailed technical summary with unambiguous outcomes.\n</instruction>\n\n<instruction name=context_buildup_warning>\nCRITICAL WARNING: CONTEXT BUILD-UP\n\nThe context window is filling-up. You've reached a point where performance may increasingly degrade. Active context management is now strategically relevant. Mind your context footprint as the conversation grows\n\nYOU MUST COMPRESS NOW TO AVOID CONTEXT ROT. THIS IS CRITICAL. Do not delay context management any further.\n\nDOOOOO IT!!!\n\nAvoid unnecessary context build-up with targeted uses of the `compress` tool. Start with low hanging fruits and clearly identified ranges that can be compressed with minimal risk of losing critical information. Look BACK on the conversation history and avoid compressing the newest ranges until you have exhausted older ones\n\nRANGE STRATEGY (MANDATORY)\nPrefer multiple short, closed range compressions.\nWhen multiple independent stale ranges are ready, batch those short compressions in parallel.\nDo not jump to a single broad range when the same cleanup can be done safely with several bounded ranges.\n\nIf you are performing a critical atomic operation, do not interrupt it, but make sure to perform context management rapidly\n\nUse injected boundary IDs for compression (`mNNNN` for messages, `bN` for compressed blocks). Pick IDs that are visible in context and ensure `startId` appears before `endId`.\n\nEnsure your summaries are inclusive of all parts of the range.\nIf the compressed range includes user messages, preserve user intent exactly. Prefer direct quotes for short user messages to avoid semantic drift.\n</instruction>\n";
|
|
2
|
+
//# sourceMappingURL=nudge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,y8EAsCjB,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const NUDGE = `<instruction name=context_management_required>
|
|
2
|
+
CRITICAL CONTEXT WARNING
|
|
3
|
+
Your context window is filling with tool outputs. Strict adherence to context hygiene is required.
|
|
4
|
+
|
|
5
|
+
PROTOCOL
|
|
6
|
+
You should prioritize context management, but do not interrupt a critical atomic operation if one is in progress. Once the immediate step is done, you must perform context management.
|
|
7
|
+
|
|
8
|
+
IMMEDIATE ACTION REQUIRED
|
|
9
|
+
KNOWLEDGE PRESERVATION: If holding valuable raw data you POTENTIALLY will need in your task, compress the smallest closed range that preserves those findings. Write a high-fidelity summary so no key technical insight is lost.
|
|
10
|
+
|
|
11
|
+
NOISE REMOVAL: If you read files or ran commands that yielded no value, compress those dead-end ranges into explicit noise summaries and move on.
|
|
12
|
+
|
|
13
|
+
PHASE COMPLETION: If a chapter is complete, compress the entire sequence into a detailed technical summary with unambiguous outcomes.
|
|
14
|
+
</instruction>
|
|
15
|
+
|
|
16
|
+
<instruction name=context_buildup_warning>
|
|
17
|
+
CRITICAL WARNING: CONTEXT BUILD-UP
|
|
18
|
+
|
|
19
|
+
The context window is filling-up. You've reached a point where performance may increasingly degrade. Active context management is now strategically relevant. Mind your context footprint as the conversation grows
|
|
20
|
+
|
|
21
|
+
YOU MUST COMPRESS NOW TO AVOID CONTEXT ROT. THIS IS CRITICAL. Do not delay context management any further.
|
|
22
|
+
|
|
23
|
+
DOOOOO IT!!!
|
|
24
|
+
|
|
25
|
+
Avoid unnecessary context build-up with targeted uses of the \`compress\` tool. Start with low hanging fruits and clearly identified ranges that can be compressed with minimal risk of losing critical information. Look BACK on the conversation history and avoid compressing the newest ranges until you have exhausted older ones
|
|
26
|
+
|
|
27
|
+
RANGE STRATEGY (MANDATORY)
|
|
28
|
+
Prefer multiple short, closed range compressions.
|
|
29
|
+
When multiple independent stale ranges are ready, batch those short compressions in parallel.
|
|
30
|
+
Do not jump to a single broad range when the same cleanup can be done safely with several bounded ranges.
|
|
31
|
+
|
|
32
|
+
If you are performing a critical atomic operation, do not interrupt it, but make sure to perform context management rapidly
|
|
33
|
+
|
|
34
|
+
Use injected boundary IDs for compression (\`mNNNN\` for messages, \`bN\` for compressed blocks). Pick IDs that are visible in context and ensure \`startId\` appears before \`endId\`.
|
|
35
|
+
|
|
36
|
+
Ensure your summaries are inclusive of all parts of the range.
|
|
37
|
+
If the compressed range includes user messages, preserve user intent exactly. Prefer direct quotes for short user messages to avoid semantic drift.
|
|
38
|
+
</instruction>
|
|
39
|
+
`;
|
|
40
|
+
//# sourceMappingURL=nudge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nudge.js","sourceRoot":"","sources":["../../../lib/prompts/nudge.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCpB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const TURN_NUDGE = "<instruction name=turn_nudge>\nReview the user request above against the work that just finished.\n\nIf this request shifts direction, use the compress tool on earlier ranges that are now less relevant.\nIf any range is cleanly closed and not needed to answer this request, compress it.\nIf you determine a compression of previous content makes sense, do so first before completing the request above.\n\nPrefer small, closed-range compressions over one broad compression.\nKeep active context needed for this request uncompressed.\n</instruction>\n";
|
|
2
|
+
//# sourceMappingURL=turn-nudge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-nudge.d.ts","sourceRoot":"","sources":["../../../lib/prompts/turn-nudge.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,yiBAUtB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const TURN_NUDGE = `<instruction name=turn_nudge>
|
|
2
|
+
Review the user request above against the work that just finished.
|
|
3
|
+
|
|
4
|
+
If this request shifts direction, use the compress tool on earlier ranges that are now less relevant.
|
|
5
|
+
If any range is cleanly closed and not needed to answer this request, compress it.
|
|
6
|
+
If you determine a compression of previous content makes sense, do so first before completing the request above.
|
|
7
|
+
|
|
8
|
+
Prefer small, closed-range compressions over one broad compression.
|
|
9
|
+
Keep active context needed for this request uncompressed.
|
|
10
|
+
</instruction>
|
|
11
|
+
`;
|
|
12
|
+
//# sourceMappingURL=turn-nudge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-nudge.js","sourceRoot":"","sources":["../../../lib/prompts/turn-nudge.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;CAUzB,CAAA"}
|
|
@@ -3,20 +3,25 @@
|
|
|
3
3
|
* Persists pruned tool IDs across sessions so they survive OpenCode restarts.
|
|
4
4
|
* Storage location: ~/.local/share/opencode/storage/plugin/dcp/{sessionId}.json
|
|
5
5
|
*/
|
|
6
|
-
import type { SessionState, SessionStats, CompressSummary
|
|
6
|
+
import type { SessionState, SessionStats, CompressSummary } from "./types";
|
|
7
7
|
import type { Logger } from "../logger";
|
|
8
8
|
/** Prune state as stored on disk */
|
|
9
9
|
export interface PersistedPrune {
|
|
10
10
|
tools?: Record<string, number>;
|
|
11
11
|
messages?: Record<string, number>;
|
|
12
|
-
origins?: Record<string, PruneOrigin>;
|
|
13
12
|
toolIds?: string[];
|
|
14
13
|
messageIds?: string[];
|
|
15
14
|
}
|
|
15
|
+
export interface PersistedNudges {
|
|
16
|
+
contextLimitAnchors: string[];
|
|
17
|
+
turnNudgeAnchors?: string[];
|
|
18
|
+
iterationNudgeAnchors?: string[];
|
|
19
|
+
}
|
|
16
20
|
export interface PersistedSessionState {
|
|
17
21
|
sessionName?: string;
|
|
18
22
|
prune: PersistedPrune;
|
|
19
23
|
compressSummaries: CompressSummary[];
|
|
24
|
+
nudges: PersistedNudges;
|
|
20
25
|
stats: SessionStats;
|
|
21
26
|
lastUpdated: string;
|
|
22
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAE3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,cAAc,CAAA;IACrB,iBAAiB,EAAE,eAAe,EAAE,CAAA;IACpC,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACtB;AAoBD,wBAAsB,gBAAgB,CAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED,wBAAsB,gBAAgB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CA4GvC;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACvB;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA2ClF"}
|
|
@@ -27,9 +27,13 @@ export async function saveSessionState(sessionState, logger, sessionName) {
|
|
|
27
27
|
prune: {
|
|
28
28
|
tools: Object.fromEntries(sessionState.prune.tools),
|
|
29
29
|
messages: Object.fromEntries(sessionState.prune.messages),
|
|
30
|
-
origins: Object.fromEntries(sessionState.prune.origins),
|
|
31
30
|
},
|
|
32
31
|
compressSummaries: sessionState.compressSummaries,
|
|
32
|
+
nudges: {
|
|
33
|
+
contextLimitAnchors: Array.from(sessionState.nudges.contextLimitAnchors),
|
|
34
|
+
turnNudgeAnchors: Array.from(sessionState.nudges.turnNudgeAnchors),
|
|
35
|
+
iterationNudgeAnchors: Array.from(sessionState.nudges.iterationNudgeAnchors),
|
|
36
|
+
},
|
|
33
37
|
stats: sessionState.stats,
|
|
34
38
|
lastUpdated: new Date().toISOString(),
|
|
35
39
|
};
|
|
@@ -58,59 +62,74 @@ export async function loadSessionState(sessionId, logger) {
|
|
|
58
62
|
const state = JSON.parse(content);
|
|
59
63
|
const hasNewFormat = state?.prune?.tools && typeof state.prune.tools === "object";
|
|
60
64
|
const hasLegacyFormat = Array.isArray(state?.prune?.toolIds);
|
|
61
|
-
|
|
65
|
+
const hasNudgeFormat = state?.nudges && typeof state.nudges === "object";
|
|
66
|
+
if (!state ||
|
|
67
|
+
!state.prune ||
|
|
68
|
+
(!hasNewFormat && !hasLegacyFormat) ||
|
|
69
|
+
!state.stats ||
|
|
70
|
+
!hasNudgeFormat) {
|
|
62
71
|
logger.warn("Invalid session state file, ignoring", {
|
|
63
72
|
sessionId: sessionId,
|
|
64
73
|
});
|
|
65
74
|
return null;
|
|
66
75
|
}
|
|
67
76
|
if (Array.isArray(state.compressSummaries)) {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
typeof entry.summary !== "string") {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
const blockId = typeof entry.blockId === "number" && Number.isInteger(entry.blockId)
|
|
78
|
-
? entry.blockId
|
|
79
|
-
: nextBlockId;
|
|
80
|
-
migratedSummaries.push({
|
|
81
|
-
blockId,
|
|
82
|
-
anchorMessageId: entry.anchorMessageId,
|
|
83
|
-
summary: entry.summary,
|
|
84
|
-
});
|
|
85
|
-
nextBlockId = Math.max(nextBlockId, blockId + 1);
|
|
86
|
-
}
|
|
87
|
-
if (migratedSummaries.length !== state.compressSummaries.length) {
|
|
77
|
+
const validSummaries = state.compressSummaries.filter((s) => s !== null &&
|
|
78
|
+
typeof s === "object" &&
|
|
79
|
+
typeof s.blockId === "number" &&
|
|
80
|
+
typeof s.anchorMessageId === "string" &&
|
|
81
|
+
typeof s.summary === "string");
|
|
82
|
+
if (validSummaries.length !== state.compressSummaries.length) {
|
|
88
83
|
logger.warn("Filtered out malformed compressSummaries entries", {
|
|
89
84
|
sessionId: sessionId,
|
|
90
85
|
original: state.compressSummaries.length,
|
|
91
|
-
valid:
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
const seenBlockIds = new Set();
|
|
95
|
-
const dedupedSummaries = migratedSummaries.filter((summary) => {
|
|
96
|
-
if (seenBlockIds.has(summary.blockId)) {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
seenBlockIds.add(summary.blockId);
|
|
100
|
-
return true;
|
|
101
|
-
});
|
|
102
|
-
if (dedupedSummaries.length !== migratedSummaries.length) {
|
|
103
|
-
logger.warn("Removed duplicate compress block IDs", {
|
|
104
|
-
sessionId: sessionId,
|
|
105
|
-
original: migratedSummaries.length,
|
|
106
|
-
valid: dedupedSummaries.length,
|
|
86
|
+
valid: validSummaries.length,
|
|
107
87
|
});
|
|
108
88
|
}
|
|
109
|
-
state.compressSummaries =
|
|
89
|
+
state.compressSummaries = validSummaries;
|
|
110
90
|
}
|
|
111
91
|
else {
|
|
112
92
|
state.compressSummaries = [];
|
|
113
93
|
}
|
|
94
|
+
const rawContextLimitAnchors = Array.isArray(state.nudges.contextLimitAnchors)
|
|
95
|
+
? state.nudges.contextLimitAnchors
|
|
96
|
+
: [];
|
|
97
|
+
const validAnchors = rawContextLimitAnchors.filter((entry) => typeof entry === "string");
|
|
98
|
+
const dedupedAnchors = [...new Set(validAnchors)];
|
|
99
|
+
if (validAnchors.length !== rawContextLimitAnchors.length) {
|
|
100
|
+
logger.warn("Filtered out malformed contextLimitAnchors entries", {
|
|
101
|
+
sessionId: sessionId,
|
|
102
|
+
original: rawContextLimitAnchors.length,
|
|
103
|
+
valid: validAnchors.length,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
state.nudges.contextLimitAnchors = dedupedAnchors;
|
|
107
|
+
const rawTurnNudgeAnchors = Array.isArray(state.nudges.turnNudgeAnchors)
|
|
108
|
+
? state.nudges.turnNudgeAnchors
|
|
109
|
+
: [];
|
|
110
|
+
const validSoftAnchors = rawTurnNudgeAnchors.filter((entry) => typeof entry === "string");
|
|
111
|
+
const dedupedSoftAnchors = [...new Set(validSoftAnchors)];
|
|
112
|
+
if (validSoftAnchors.length !== rawTurnNudgeAnchors.length) {
|
|
113
|
+
logger.warn("Filtered out malformed turnNudgeAnchors entries", {
|
|
114
|
+
sessionId: sessionId,
|
|
115
|
+
original: rawTurnNudgeAnchors.length,
|
|
116
|
+
valid: validSoftAnchors.length,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
state.nudges.turnNudgeAnchors = dedupedSoftAnchors;
|
|
120
|
+
const rawIterationNudgeAnchors = Array.isArray(state.nudges.iterationNudgeAnchors)
|
|
121
|
+
? state.nudges.iterationNudgeAnchors
|
|
122
|
+
: [];
|
|
123
|
+
const validIterationAnchors = rawIterationNudgeAnchors.filter((entry) => typeof entry === "string");
|
|
124
|
+
const dedupedIterationAnchors = [...new Set(validIterationAnchors)];
|
|
125
|
+
if (validIterationAnchors.length !== rawIterationNudgeAnchors.length) {
|
|
126
|
+
logger.warn("Filtered out malformed iterationNudgeAnchors entries", {
|
|
127
|
+
sessionId: sessionId,
|
|
128
|
+
original: rawIterationNudgeAnchors.length,
|
|
129
|
+
valid: validIterationAnchors.length,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
state.nudges.iterationNudgeAnchors = dedupedIterationAnchors;
|
|
114
133
|
logger.info("Loaded session state from disk", {
|
|
115
134
|
sessionId: sessionId,
|
|
116
135
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../lib/state/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAYvC,eAAO,MAAM,YAAY,GACrB,QAAQ,GAAG,EACX,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,UAAU,SAAS,EAAE,EACrB,mBAAmB,OAAO,KAC3B,OAAO,CAAC,IAAI,CAwCd,CAAA;AAED,wBAAgB,kBAAkB,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAYvC,eAAO,MAAM,YAAY,GACrB,QAAQ,GAAG,EACX,OAAO,YAAY,EACnB,QAAQ,MAAM,EACd,UAAU,SAAS,EAAE,EACrB,mBAAmB,OAAO,KAC3B,OAAO,CAAC,IAAI,CAwCd,CAAA;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAiCjD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CA+B3D;AAED,wBAAsB,wBAAwB,CAC1C,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,EACrB,iBAAiB,EAAE,OAAO,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwCf"}
|
package/dist/lib/state/state.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadSessionState, saveSessionState } from "./persistence";
|
|
2
|
-
import { isSubAgentSession, findLastCompactionTimestamp, countTurns, resetOnCompaction, loadPruneMap,
|
|
2
|
+
import { isSubAgentSession, findLastCompactionTimestamp, countTurns, resetOnCompaction, loadPruneMap, collectTurnNudgeAnchors, } from "./utils";
|
|
3
3
|
import { getLastUserMessage } from "../shared-utils";
|
|
4
4
|
export const checkSession = async (client, state, logger, messages, manualModeDefault) => {
|
|
5
5
|
const lastUserMessage = getLastUserMessage(messages);
|
|
@@ -40,9 +40,13 @@ export function createSessionState() {
|
|
|
40
40
|
prune: {
|
|
41
41
|
tools: new Map(),
|
|
42
42
|
messages: new Map(),
|
|
43
|
-
origins: new Map(),
|
|
44
43
|
},
|
|
45
44
|
compressSummaries: [],
|
|
45
|
+
nudges: {
|
|
46
|
+
contextLimitAnchors: new Set(),
|
|
47
|
+
turnNudgeAnchors: new Set(),
|
|
48
|
+
iterationNudgeAnchors: new Set(),
|
|
49
|
+
},
|
|
46
50
|
stats: {
|
|
47
51
|
pruneTokenCounter: 0,
|
|
48
52
|
totalPruneTokens: 0,
|
|
@@ -54,12 +58,11 @@ export function createSessionState() {
|
|
|
54
58
|
byRef: new Map(),
|
|
55
59
|
nextRef: 0,
|
|
56
60
|
},
|
|
57
|
-
nudgeCounter: 0,
|
|
58
|
-
lastToolPrune: false,
|
|
59
61
|
lastCompaction: 0,
|
|
60
62
|
currentTurn: 0,
|
|
61
63
|
variant: undefined,
|
|
62
64
|
modelContextLimit: undefined,
|
|
65
|
+
systemPromptTokens: undefined,
|
|
63
66
|
};
|
|
64
67
|
}
|
|
65
68
|
export function resetSessionState(state) {
|
|
@@ -70,9 +73,13 @@ export function resetSessionState(state) {
|
|
|
70
73
|
state.prune = {
|
|
71
74
|
tools: new Map(),
|
|
72
75
|
messages: new Map(),
|
|
73
|
-
origins: new Map(),
|
|
74
76
|
};
|
|
75
77
|
state.compressSummaries = [];
|
|
78
|
+
state.nudges = {
|
|
79
|
+
contextLimitAnchors: new Set(),
|
|
80
|
+
turnNudgeAnchors: new Set(),
|
|
81
|
+
iterationNudgeAnchors: new Set(),
|
|
82
|
+
};
|
|
76
83
|
state.stats = {
|
|
77
84
|
pruneTokenCounter: 0,
|
|
78
85
|
totalPruneTokens: 0,
|
|
@@ -84,12 +91,11 @@ export function resetSessionState(state) {
|
|
|
84
91
|
byRef: new Map(),
|
|
85
92
|
nextRef: 0,
|
|
86
93
|
};
|
|
87
|
-
state.nudgeCounter = 0;
|
|
88
|
-
state.lastToolPrune = false;
|
|
89
94
|
state.lastCompaction = 0;
|
|
90
95
|
state.currentTurn = 0;
|
|
91
96
|
state.variant = undefined;
|
|
92
97
|
state.modelContextLimit = undefined;
|
|
98
|
+
state.systemPromptTokens = undefined;
|
|
93
99
|
}
|
|
94
100
|
export async function ensureSessionInitialized(client, state, sessionId, logger, messages, manualModeDefault) {
|
|
95
101
|
if (state.sessionId === sessionId) {
|
|
@@ -105,14 +111,20 @@ export async function ensureSessionInitialized(client, state, sessionId, logger,
|
|
|
105
111
|
// logger.info("isSubAgent = " + isSubAgent)
|
|
106
112
|
state.lastCompaction = findLastCompactionTimestamp(messages);
|
|
107
113
|
state.currentTurn = countTurns(state, messages);
|
|
114
|
+
state.nudges.turnNudgeAnchors = collectTurnNudgeAnchors(messages);
|
|
108
115
|
const persisted = await loadSessionState(sessionId, logger);
|
|
109
116
|
if (persisted === null) {
|
|
110
117
|
return;
|
|
111
118
|
}
|
|
112
119
|
state.prune.tools = loadPruneMap(persisted.prune.tools, persisted.prune.toolIds);
|
|
113
120
|
state.prune.messages = loadPruneMap(persisted.prune.messages, persisted.prune.messageIds);
|
|
114
|
-
state.prune.origins = loadPruneOriginMap(persisted.prune.origins);
|
|
115
121
|
state.compressSummaries = persisted.compressSummaries || [];
|
|
122
|
+
state.nudges.contextLimitAnchors = new Set(persisted.nudges.contextLimitAnchors || []);
|
|
123
|
+
state.nudges.turnNudgeAnchors = new Set([
|
|
124
|
+
...state.nudges.turnNudgeAnchors,
|
|
125
|
+
...(persisted.nudges.turnNudgeAnchors || []),
|
|
126
|
+
]);
|
|
127
|
+
state.nudges.iterationNudgeAnchors = new Set(persisted.nudges.iterationNudgeAnchors || []);
|
|
116
128
|
state.stats = {
|
|
117
129
|
pruneTokenCounter: persisted.stats?.pruneTokenCounter || 0,
|
|
118
130
|
totalPruneTokens: persisted.stats?.totalPruneTokens || 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EACH,iBAAiB,EACjB,2BAA2B,EAC3B,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../lib/state/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,SAAS,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAMxC;;GAEG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,GACtB,IAAI,
|
|
1
|
+
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAc,SAAS,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAMxC;;GAEG;AACH,wBAAgB,aAAa,CACzB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,EAAE,GACtB,IAAI,CA8DN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAajE"}
|
|
@@ -7,7 +7,6 @@ const MAX_TOOL_CACHE_SIZE = 1000;
|
|
|
7
7
|
export function syncToolCache(state, config, logger, messages) {
|
|
8
8
|
try {
|
|
9
9
|
logger.info("Syncing tool parameters from OpenCode messages");
|
|
10
|
-
state.nudgeCounter = 0;
|
|
11
10
|
let turnCounter = 0;
|
|
12
11
|
for (const msg of messages) {
|
|
13
12
|
if (isMessageCompacted(state, msg)) {
|
|
@@ -27,26 +26,13 @@ export function syncToolCache(state, config, logger, messages) {
|
|
|
27
26
|
const isProtectedByTurn = turnProtectionEnabled &&
|
|
28
27
|
turnProtectionTurns > 0 &&
|
|
29
28
|
state.currentTurn - turnCounter < turnProtectionTurns;
|
|
30
|
-
if (part.tool === "distill" || part.tool === "compress" || part.tool === "prune") {
|
|
31
|
-
state.nudgeCounter = 0;
|
|
32
|
-
state.lastToolPrune = true;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
state.lastToolPrune = false;
|
|
36
|
-
const allProtectedTools = config.tools.settings.protectedTools;
|
|
37
|
-
if (!allProtectedTools.includes(part.tool) && !isProtectedByTurn) {
|
|
38
|
-
state.nudgeCounter++;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
29
|
if (state.toolParameters.has(part.callID)) {
|
|
42
30
|
continue;
|
|
43
31
|
}
|
|
44
32
|
if (isProtectedByTurn) {
|
|
45
33
|
continue;
|
|
46
34
|
}
|
|
47
|
-
const
|
|
48
|
-
const isProtectedTool = allProtectedTools.includes(part.tool);
|
|
49
|
-
const tokenCount = isProtectedTool ? undefined : countToolTokens(part);
|
|
35
|
+
const tokenCount = countToolTokens(part);
|
|
50
36
|
state.toolParameters.set(part.callID, {
|
|
51
37
|
tool: part.tool,
|
|
52
38
|
parameters: part.state?.input ?? {},
|
|
@@ -55,10 +41,10 @@ export function syncToolCache(state, config, logger, messages) {
|
|
|
55
41
|
turn: turnCounter,
|
|
56
42
|
tokenCount,
|
|
57
43
|
});
|
|
58
|
-
logger.info(`Cached tool id: ${part.callID} (turn ${turnCounter}${tokenCount !== undefined ? `,
|
|
44
|
+
logger.info(`Cached tool id: ${part.callID} (turn ${turnCounter}${tokenCount !== undefined ? `, ${tokenCount} tokens` : ""})`);
|
|
59
45
|
}
|
|
60
46
|
}
|
|
61
|
-
logger.info(`Synced cache - size: ${state.toolParameters.size}, currentTurn: ${state.currentTurn}
|
|
47
|
+
logger.info(`Synced cache - size: ${state.toolParameters.size}, currentTurn: ${state.currentTurn}`);
|
|
62
48
|
trimToolParametersCache(state);
|
|
63
49
|
}
|
|
64
50
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,MAAM,mBAAmB,GAAG,IAAI,CAAA;AAEhC;;GAEG;AACH,MAAM,UAAU,aAAa,CACzB,KAAmB,EACnB,MAAoB,EACpB,MAAc,EACd,QAAqB;IAErB,IAAI,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;QAE7D,
|
|
1
|
+
{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../../lib/state/tool-cache.ts"],"names":[],"mappings":"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"}
|