@duetso/agent 0.1.133 → 0.1.136

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.
Files changed (66) hide show
  1. package/README.md +2 -0
  2. package/dist/package.json +1 -1
  3. package/dist/src/cli/help.d.ts +1 -0
  4. package/dist/src/cli/help.d.ts.map +1 -1
  5. package/dist/src/cli/help.js +41 -6
  6. package/dist/src/cli/help.js.map +1 -1
  7. package/dist/src/cli/memory-reflect.d.ts +13 -0
  8. package/dist/src/cli/memory-reflect.d.ts.map +1 -0
  9. package/dist/src/cli/memory-reflect.js +165 -0
  10. package/dist/src/cli/memory-reflect.js.map +1 -0
  11. package/dist/src/cli/memory.d.ts.map +1 -1
  12. package/dist/src/cli/memory.js +8 -0
  13. package/dist/src/cli/memory.js.map +1 -1
  14. package/dist/src/cli/skills.d.ts +8 -4
  15. package/dist/src/cli/skills.d.ts.map +1 -1
  16. package/dist/src/cli/skills.js +21 -13
  17. package/dist/src/cli/skills.js.map +1 -1
  18. package/dist/src/cli.d.ts +1 -0
  19. package/dist/src/cli.d.ts.map +1 -1
  20. package/dist/src/cli.js +1 -0
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/index.d.ts +1 -0
  23. package/dist/src/index.d.ts.map +1 -1
  24. package/dist/src/index.js +1 -0
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/memory/observational.d.ts +187 -0
  27. package/dist/src/memory/observational.d.ts.map +1 -1
  28. package/dist/src/memory/observational.js +248 -5
  29. package/dist/src/memory/observational.js.map +1 -1
  30. package/dist/src/memory/storage.d.ts +16 -0
  31. package/dist/src/memory/storage.d.ts.map +1 -1
  32. package/dist/src/memory/storage.js +44 -0
  33. package/dist/src/memory/storage.js.map +1 -1
  34. package/dist/src/tui/app.d.ts.map +1 -1
  35. package/dist/src/tui/app.js +1 -14
  36. package/dist/src/tui/app.js.map +1 -1
  37. package/dist/src/tui/autocomplete.d.ts +0 -9
  38. package/dist/src/tui/autocomplete.d.ts.map +1 -1
  39. package/dist/src/tui/autocomplete.js +0 -13
  40. package/dist/src/tui/autocomplete.js.map +1 -1
  41. package/dist/src/tui/boot-screen.d.ts.map +1 -1
  42. package/dist/src/tui/boot-screen.js +0 -5
  43. package/dist/src/tui/boot-screen.js.map +1 -1
  44. package/dist/src/turn-runner/built-in-skills.d.ts +23 -0
  45. package/dist/src/turn-runner/built-in-skills.d.ts.map +1 -0
  46. package/dist/src/turn-runner/built-in-skills.js +75 -0
  47. package/dist/src/turn-runner/built-in-skills.js.map +1 -0
  48. package/dist/src/turn-runner/skills.d.ts +1 -1
  49. package/dist/src/turn-runner/skills.d.ts.map +1 -1
  50. package/dist/src/turn-runner/skills.js +16 -2
  51. package/dist/src/turn-runner/skills.js.map +1 -1
  52. package/dist/src/turn-runner/state-compaction.d.ts +49 -0
  53. package/dist/src/turn-runner/state-compaction.d.ts.map +1 -0
  54. package/dist/src/turn-runner/state-compaction.js +75 -0
  55. package/dist/src/turn-runner/state-compaction.js.map +1 -0
  56. package/dist/src/turn-runner/turn-runner.d.ts +8 -0
  57. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
  58. package/dist/src/turn-runner/turn-runner.js +30 -1
  59. package/dist/src/turn-runner/turn-runner.js.map +1 -1
  60. package/dist/src/types/config.d.ts +19 -0
  61. package/dist/src/types/config.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/src/tui/relay-command.d.ts +0 -14
  64. package/dist/src/tui/relay-command.d.ts.map +0 -1
  65. package/dist/src/tui/relay-command.js +0 -58
  66. package/dist/src/tui/relay-command.js.map +0 -1
@@ -0,0 +1,75 @@
1
+ import dedent from "dedent";
2
+ import { createSyntheticSourceInfo } from "@earendil-works/pi-coding-agent";
3
+ /**
4
+ * Synthetic marker prefix for built-in skill `filePath`/`baseDir`. Real
5
+ * skills live under a discoverable `baseDir` on disk; built-ins ship
6
+ * inside the package, so the prefix is a virtual sentinel that keeps
7
+ * their paths from colliding with anything on the filesystem and gives
8
+ * humans a clear hint when they appear in logs or `duet skills` output.
9
+ * Built-in detection itself goes through the `BUILT_IN_BY_PATH` map, not
10
+ * a prefix match.
11
+ */
12
+ const BUILTIN_PATH_PREFIX = "<duet-builtin>";
13
+ /**
14
+ * Body of the built-in `/relay` skill. Renders into the prompt verbatim
15
+ * inside the standard `<skill>` wrapper when the user types `/relay`
16
+ * anywhere in their message.
17
+ */
18
+ const RELAY_INSTRUCTIONS = dedent `
19
+ The user requested relay mode for this prompt. Strongly prefer the
20
+ state-machine tools (\`create_state_machine_definition\` or
21
+ \`select_state_machine_state\`) over handling the work inline.
22
+
23
+ - If no state machine is active, create one with agent/script/poll/timer/terminal
24
+ states sized to the request.
25
+ - If a state machine is already active, select the next state instead of
26
+ replying directly.
27
+ - Only fall back to a plain answer when the request is genuinely a
28
+ one-shot question that cannot be expressed as a state.
29
+ `;
30
+ const RELAY_DESCRIPTION = "Inline anywhere in a prompt to nudge the agent into state-machine (relay) mode.";
31
+ function buildBuiltIn(name, description, instructions) {
32
+ const baseDir = `${BUILTIN_PATH_PREFIX}/${name}`;
33
+ const filePath = `${baseDir}/SKILL.md`;
34
+ return {
35
+ skill: {
36
+ name,
37
+ description,
38
+ filePath,
39
+ baseDir,
40
+ sourceInfo: createSyntheticSourceInfo(filePath, {
41
+ source: "duet:builtin",
42
+ scope: "user",
43
+ origin: "top-level",
44
+ baseDir,
45
+ }),
46
+ disableModelInvocation: false,
47
+ },
48
+ instructions,
49
+ };
50
+ }
51
+ /**
52
+ * Registry of built-in skills shipped with the turn runner. They appear
53
+ * in skill discovery alongside user/project skills and can be shadowed
54
+ * by a same-named skill installed under any discovery root.
55
+ */
56
+ export const BUILT_IN_SKILLS = [
57
+ buildBuiltIn("relay", RELAY_DESCRIPTION, RELAY_INSTRUCTIONS),
58
+ ];
59
+ const BUILT_IN_BY_PATH = new Map(BUILT_IN_SKILLS.map(({ skill, instructions }) => [skill.filePath, instructions]));
60
+ /**
61
+ * Return the in-memory SKILL.md body for a built-in skill, or `undefined`
62
+ * when the skill is not a built-in (so the caller can fall back to
63
+ * reading from disk).
64
+ */
65
+ export function getBuiltInSkillInstructions(filePath) {
66
+ return BUILT_IN_BY_PATH.get(filePath);
67
+ }
68
+ export function isBuiltInSkill(skill) {
69
+ return BUILT_IN_BY_PATH.has(skill.filePath);
70
+ }
71
+ /** Snapshot of built-in skills as plain `Skill` records for merging into discovery results. */
72
+ export function listBuiltInSkills() {
73
+ return BUILT_IN_SKILLS.map(({ skill }) => skill);
74
+ }
75
+ //# sourceMappingURL=built-in-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-skills.js","sourceRoot":"","sources":["../../../src/turn-runner/built-in-skills.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAE5E;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAS7C;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAA;;;;;;;;;;;CAWhC,CAAC;AAEF,MAAM,iBAAiB,GACrB,iFAAiF,CAAC;AAEpF,SAAS,YAAY,CAAC,IAAY,EAAE,WAAmB,EAAE,YAAoB;IAC3E,MAAM,OAAO,GAAG,GAAG,mBAAmB,IAAI,IAAI,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,GAAG,OAAO,WAAW,CAAC;IACvC,OAAO;QACL,KAAK,EAAE;YACL,IAAI;YACJ,WAAW;YACX,QAAQ;YACR,OAAO;YACP,UAAU,EAAE,yBAAyB,CAAC,QAAQ,EAAE;gBAC9C,MAAM,EAAE,cAAc;gBACtB,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,WAAW;gBACnB,OAAO;aACR,CAAC;YACF,sBAAsB,EAAE,KAAK;SAC9B;QACD,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,YAAY,CAAC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;CAC7D,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CACjF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAgB;IAC1D,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,OAAO,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB;IAC/B,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC"}
@@ -31,5 +31,5 @@ export declare function readSkillInstructions(skill: Skill): string;
31
31
  * three roots (.duet, .agents, .claude) per scope, so we re-label here so
32
32
  * downstream consumers get the truth instead of mostly-"temporary".
33
33
  */
34
- export declare function resolveSkillScope(skill: Skill, cwd: string): "user" | "project" | "temporary";
34
+ export declare function resolveSkillScope(skill: Skill, cwd: string): "user" | "project" | "temporary" | "builtin";
35
35
  //# sourceMappingURL=skills.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/skills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAsB,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAsED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAEvE;AAED,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,qBAAqB,GAAG,SAAS,EACnD,GAAG,EAAE,MAAM,GACV,sBAAsB,CAMxB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAG3E;AAkBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CASjG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAG1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAU7F"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/skills.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAsB,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAOhE,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAsED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAEvE;AAED,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,qBAAqB,GAAG,SAAS,EACnD,GAAG,EAAE,MAAM,GACV,sBAAsB,CAQxB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAM3E;AAkBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CASjG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAQ1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAW9C"}
@@ -3,6 +3,7 @@ import { readFileSync } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { join, resolve, sep } from "node:path";
5
5
  import { loadSkills } from "@earendil-works/pi-coding-agent";
6
+ import { getBuiltInSkillInstructions, isBuiltInSkill, listBuiltInSkills, } from "./built-in-skills.js";
6
7
  const SKILL_SHELL_EXPANSION_PATTERN = /!`([\s\S]*?)`/g;
7
8
  const DEFAULT_SKILL_DIR_NAMES = [".duet", ".agents", ".claude"];
8
9
  function buildSkillDiscoveryOptions(options, cwd) {
@@ -69,8 +70,10 @@ export function prepareExplicitSkills(skills) {
69
70
  }
70
71
  export function loadDiscoveredSkills(discoveryOptions, cwd) {
71
72
  const { skills, diagnostics } = loadSkills(buildSkillDiscoveryOptions(discoveryOptions, cwd));
73
+ // User/project skills win on name collisions, so built-ins are merged
74
+ // last and silently dropped when shadowed.
72
75
  return {
73
- skills: skills.map(expandSkillMetadata),
76
+ skills: mergeSkillsByName(skills.map(expandSkillMetadata), listBuiltInSkills()),
74
77
  collisions: extractSkillCollisions(diagnostics),
75
78
  };
76
79
  }
@@ -81,7 +84,10 @@ export function loadDiscoveredSkills(discoveryOptions, cwd) {
81
84
  */
82
85
  export function discoverInstalledSkills(cwd) {
83
86
  const { skills, diagnostics } = loadSkills(buildSkillDiscoveryOptions(undefined, cwd));
84
- return { skills, collisions: extractSkillCollisions(diagnostics) };
87
+ return {
88
+ skills: mergeSkillsByName(skills, listBuiltInSkills()),
89
+ collisions: extractSkillCollisions(diagnostics),
90
+ };
85
91
  }
86
92
  function extractSkillCollisions(diagnostics) {
87
93
  const collisions = [];
@@ -109,6 +115,12 @@ export function mergeSkillsByName(primary, secondary) {
109
115
  return merged;
110
116
  }
111
117
  export function readSkillInstructions(skill) {
118
+ // Built-in skills ship inline with the package, so they have no on-disk
119
+ // SKILL.md to read. Their bodies are static and never contain shell
120
+ // expansions, so we return them verbatim.
121
+ const builtIn = getBuiltInSkillInstructions(skill.filePath);
122
+ if (builtIn !== undefined)
123
+ return builtIn;
112
124
  const content = readFileSync(skill.filePath, "utf-8");
113
125
  return expandSkillShellCommands(content, skill.baseDir);
114
126
  }
@@ -122,6 +134,8 @@ export function readSkillInstructions(skill) {
122
134
  * downstream consumers get the truth instead of mostly-"temporary".
123
135
  */
124
136
  export function resolveSkillScope(skill, cwd) {
137
+ if (isBuiltInSkill(skill))
138
+ return "builtin";
125
139
  const baseDir = resolve(skill.baseDir);
126
140
  const home = homedir();
127
141
  for (const dirName of DEFAULT_SKILL_DIR_NAMES) {
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/turn-runner/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/turn-runner/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { TurnState } from "../types/protocol.js";
2
+ /**
3
+ * Default ceiling for auto state compaction, in bytes of serialized
4
+ * `TurnState`. Long-lived sessions accumulate tool calls and tool results
5
+ * forever; without a cap, every emit and every disk persist eventually drags
6
+ * on a multi-hundred-MB transcript.
7
+ *
8
+ * 100 MB is enough headroom for hours of dense tool-call work, small enough
9
+ * that emit/persist stay snappy on commodity hardware. Adjustable per-runner
10
+ * via `TurnRunnerConfig.autoStateCompaction.maxBytes`.
11
+ */
12
+ export declare const DEFAULT_STATE_MAX_BYTES: number;
13
+ /**
14
+ * Even when a single message exceeds the cap, keep at least this many
15
+ * messages so the next turn still has anchor context. The runner can recover
16
+ * from a truncated transcript, but not from an empty one.
17
+ */
18
+ export declare const MIN_RETAINED_MESSAGES = 1;
19
+ export interface AutoStateCompactionOptions {
20
+ /** Hard ceiling for `JSON.stringify(state).length`. Defaults to 100 MB. */
21
+ maxBytes?: number;
22
+ }
23
+ export interface CompactionResult {
24
+ state: TurnState;
25
+ evicted: number;
26
+ /** Serialized byte length after compaction, for caller logging/metrics. */
27
+ bytes: number;
28
+ }
29
+ /**
30
+ * Returns a new `TurnState` whose serialized size is at most `maxBytes`,
31
+ * evicting the oldest agent messages first. After each eviction, drops any
32
+ * leading `toolResult` or `assistant` message until the head is `user` — the
33
+ * only role every provider accepts at position 0.
34
+ *
35
+ * Front-eviction preserves tool-call / tool-result pairing by construction:
36
+ * tool results always follow their assistant call in source order, so
37
+ * dropping an assistant naturally drops its trailing results through the
38
+ * head-fix loop.
39
+ *
40
+ * Preserves the original state reference (no mutation) and every non-message
41
+ * field on `TurnState` and `state.agent` (`status`, `mode`, `options`,
42
+ * `stateMachine`, `todos`, `followUpQueue`, `queuedCommands`).
43
+ *
44
+ * Stops once `messages.length <= MIN_RETAINED_MESSAGES`. If the remainder
45
+ * still exceeds `maxBytes`, the caller persists/emits the oversize state: a
46
+ * truncated but recoverable transcript beats a wedged session.
47
+ */
48
+ export declare function compactTurnState(state: TurnState, options?: AutoStateCompactionOptions): CompactionResult;
49
+ //# sourceMappingURL=state-compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-compaction.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/state-compaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,QAAoB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,WAAW,0BAA0B;IACzC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAaD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,0BAA+B,GACvC,gBAAgB,CA8BlB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Default ceiling for auto state compaction, in bytes of serialized
3
+ * `TurnState`. Long-lived sessions accumulate tool calls and tool results
4
+ * forever; without a cap, every emit and every disk persist eventually drags
5
+ * on a multi-hundred-MB transcript.
6
+ *
7
+ * 100 MB is enough headroom for hours of dense tool-call work, small enough
8
+ * that emit/persist stay snappy on commodity hardware. Adjustable per-runner
9
+ * via `TurnRunnerConfig.autoStateCompaction.maxBytes`.
10
+ */
11
+ export const DEFAULT_STATE_MAX_BYTES = 100 * 1024 * 1024;
12
+ /**
13
+ * Even when a single message exceeds the cap, keep at least this many
14
+ * messages so the next turn still has anchor context. The runner can recover
15
+ * from a truncated transcript, but not from an empty one.
16
+ */
17
+ export const MIN_RETAINED_MESSAGES = 1;
18
+ /**
19
+ * Anthropic and OpenAI both reject conversations whose first message isn't
20
+ * `user`. Front-eviction can leave a `toolResult` (orphaned without its
21
+ * assistant call) or an `assistant` message at the head, both of which wedge
22
+ * the next turn on resume.
23
+ */
24
+ function isInvalidHead(message) {
25
+ if (!message || !("role" in message))
26
+ return false;
27
+ return message.role === "toolResult" || message.role === "assistant";
28
+ }
29
+ /**
30
+ * Returns a new `TurnState` whose serialized size is at most `maxBytes`,
31
+ * evicting the oldest agent messages first. After each eviction, drops any
32
+ * leading `toolResult` or `assistant` message until the head is `user` — the
33
+ * only role every provider accepts at position 0.
34
+ *
35
+ * Front-eviction preserves tool-call / tool-result pairing by construction:
36
+ * tool results always follow their assistant call in source order, so
37
+ * dropping an assistant naturally drops its trailing results through the
38
+ * head-fix loop.
39
+ *
40
+ * Preserves the original state reference (no mutation) and every non-message
41
+ * field on `TurnState` and `state.agent` (`status`, `mode`, `options`,
42
+ * `stateMachine`, `todos`, `followUpQueue`, `queuedCommands`).
43
+ *
44
+ * Stops once `messages.length <= MIN_RETAINED_MESSAGES`. If the remainder
45
+ * still exceeds `maxBytes`, the caller persists/emits the oversize state: a
46
+ * truncated but recoverable transcript beats a wedged session.
47
+ */
48
+ export function compactTurnState(state, options = {}) {
49
+ const maxBytes = options.maxBytes ?? DEFAULT_STATE_MAX_BYTES;
50
+ let serialized = JSON.stringify(state);
51
+ if (serialized.length <= maxBytes) {
52
+ return { state, evicted: 0, bytes: serialized.length };
53
+ }
54
+ const messages = state.agent?.messages;
55
+ if (!messages || messages.length === 0) {
56
+ // Non-message bloat (e.g. enormous queuedCommands). Nothing this layer
57
+ // can do.
58
+ return { state, evicted: 0, bytes: serialized.length };
59
+ }
60
+ const trimmed = [...messages];
61
+ let current = state;
62
+ let evicted = 0;
63
+ while (serialized.length > maxBytes && trimmed.length > MIN_RETAINED_MESSAGES) {
64
+ trimmed.shift();
65
+ evicted += 1;
66
+ while (trimmed.length > MIN_RETAINED_MESSAGES && isInvalidHead(trimmed[0])) {
67
+ trimmed.shift();
68
+ evicted += 1;
69
+ }
70
+ current = { ...current, agent: { ...current.agent, messages: trimmed } };
71
+ serialized = JSON.stringify(current);
72
+ }
73
+ return { state: current, evicted, bytes: serialized.length };
74
+ }
75
+ //# sourceMappingURL=state-compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-compaction.js","sourceRoot":"","sources":["../../../src/turn-runner/state-compaction.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAcvC;;;;;GAKG;AACH,SAAS,aAAa,CAAC,OAAiC;IACtD,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,UAAsC,EAAE;IAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,uBAAuB,CAAC;IAC7D,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IACvC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,uEAAuE;QACvE,UAAU;QACV,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAc,KAAK,CAAC;IAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,UAAU,CAAC,MAAM,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAC9E,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,GAAG,qBAAqB,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;QACD,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QACzE,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;AAC/D,CAAC"}
@@ -205,6 +205,14 @@ export declare class TurnRunner {
205
205
  private requireRunnerState;
206
206
  getState(): TurnState | undefined;
207
207
  private snapshotState;
208
+ /**
209
+ * Caps the size of every state that leaves the runner via emit/return/
210
+ * getState. Runs only when `TurnRunnerConfig.autoStateCompaction` is
211
+ * enabled — the single choke point ensures persistence layers, terminal
212
+ * payloads, and external observers all see the same trimmed state.
213
+ */
214
+ private applyAutoStateCompaction;
215
+ private resolveCompactionOptions;
208
216
  private setState;
209
217
  private snapshotActiveAgentState;
210
218
  private getFollowUpQueue;
@@ -1 +1 @@
1
- {"version":3,"file":"turn-runner.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/turn-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,KAAK,EACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgBlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,SAAS,EACT,eAAe,EAEf,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EAEjB,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,WAAW,EAEZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGxE,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAOL,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAEL,KAAK,gBAAgB,EAGtB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;CAClB,GACD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,uBAAuB,CAAC;IACjC,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAUD;;;;;;;;GAQG;AACH,wBAAgB,oCAAoC,CAClD,IAAI,EAAE,sBAAsB,EAC5B,WAAW,EAAE,MAAM,GAClB,sBAAsB,CAuDxB;AAED,qBAAa,UAAU;IAyDT,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IAxD7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAC7D,iFAAiF;IACjF,SAAS,CAAC,QAAQ,CAAC,MAAM,qBAA4B;IACrD,mEAAmE;IACnE,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IACpD;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,2FAA2F;IAC3F,OAAO,CAAC,kBAAkB,CAAS;IACnC,2EAA2E;IAC3E,OAAO,CAAC,mBAAmB,CAA6C;IACxE,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyB;IAChE,qFAAqF;IACrF,OAAO,CAAC,qBAAqB,CAAC,CAA6B;IAC3D,sFAAsF;IACtF,OAAO,CAAC,mBAAmB,CAAC,CAAoB;IAChD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAA6B;IACvD,sFAAsF;IACtF,OAAO,CAAC,KAAK,CAAC,CAAY;IAC1B,yEAAyE;IACzE,OAAO,CAAC,OAAO,CAAS;IACxB,qGAAqG;IACrG,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,uBAAuB,CAAC,EAAE;QAClC,sBAAsB,EAAE,MAAM,CAAC;QAC/B,kBAAkB,EAAE,sBAAsB,CAAC;QAC3C,gBAAgB,EAAE,cAAc,CAAC;KAClC,CAAC;IACF,kFAAkF;IAClF,OAAO,CAAC,YAAY,CAAS;IAC7B,0EAA0E;IAC1E,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;gBAEzB,MAAM,EAAE,gBAAgB;IASvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAOhD,iBAAiB,CAAC,OAAO,EAAE,4BAA4B,GAAG,IAAI;IAK9D;;;;;;;OAOG;IACG,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAqBpD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAsB9C,YAAY;YA4BZ,kBAAkB;IAWhC,OAAO,CAAC,6BAA6B;IAyBrC,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,sCAAsC;YAWhC,oCAAoC;YAyBpC,uBAAuB;IAwCrC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,4BAA4B;IAMpC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,0BAA0B;IAKlC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,iBAAiB;IAIzB,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IA4B/C,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMtC,OAAO,CAAC,0BAA0B;cAMlB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;cAsB9D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;cAU9D,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoBlD,OAAO,CAAC,+BAA+B;IAgCvC,OAAO,CAAC,0BAA0B;YAuBpB,uBAAuB;IAuCrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;YACW,qCAAqC;YA8BrC,8BAA8B;IA8C5C,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE;QACtC,KAAK,EAAE,sBAAsB,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,gBAAgB;IAkEpB,OAAO,CAAC,kBAAkB;IAO1B,QAAQ,IAAI,SAAS,GAAG,SAAS;IAKjC,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,6BAA6B;IAarC,OAAO,CAAC,cAAc;IAMtB,SAAS,CAAC,kBAAkB,IAAI,KAAK;IAOrC,OAAO,CAAC,qBAAqB;cAyBb,uCAAuC,CAAC,KAAK,EAAE;QAC7D,KAAK,EAAE,SAAS,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QACxB,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAYhB,gCAAgC;IAwD9C,SAAS,CAAC,WAAW,CACnB,IAAI,EAAE,QAAQ,EACd,WAAW,CAAC,EAAE,MAAM,GACnB;QACD,KAAK,EAAE,SAAS,EAAE,CAAC;KACpB;IA6CD,OAAO,CAAC,4BAA4B;cAMpB,YAAY,CAC1B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,YAAY,EAAE,GACtB,OAAO,CAAC,iBAAiB,CAAC;cAYb,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6EnF,OAAO,CAAC,qBAAqB;IAK7B;;;;;;;OAOG;YACW,uBAAuB;IAOrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;IACH,SAAS,CAAC,6BAA6B,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAiC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;cACa,0BAA0B,CACxC,KAAK,EAAE,KAAK,EACZ,MAAM,GAAE,oBAAqD,GAC5D,OAAO,CAAC,IAAI,CAAC;cAkCA,yBAAyB,CACvC,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,OAAO,CAAC,IAAI,CAAC;YA4BF,wBAAwB;IAmBtC;;;;OAIG;IACH,uBAAuB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM;IAIjE,SAAS,CAAC,WAAW,CACnB,KAAK,EAAE,gBAAgB,EACvB,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,GAC1D,KAAK;IA8BR,SAAS,CAAC,qBAAqB;IA0B/B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAA0B;IAEzE,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC;IAK5C,yFAAyF;IACnF,qBAAqB,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAKhE,oFAAoF;IAC9E,kBAAkB,IAAI,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAK9D,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;YAI/B,kBAAkB;IAIhC;;;;OAIG;YACW,yBAAyB;YAKzB,kBAAkB;IAmDhC,SAAS,CAAC,wCAAwC,CAAC,KAAK,CAAC,EAAE;QACzD,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;KAC3B,GAAG,MAAM;IAIV,OAAO,CAAC,eAAe;IAWvB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW;IAY1E,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,KAAK,GAAG,IAAI;IAI3D,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI;IAS3E,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoBvD;;;;;;;;;OASG;IACH,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI;IAYvD;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,0BAA0B;;;;;;IAgBpC;;;;;;;OAOG;IACH,SAAS,CAAC,sBAAsB,IAAI,MAAM;IAK1C;;;;;;OAMG;IACH,SAAS,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;CAIhE"}
1
+ {"version":3,"file":"turn-runner.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/turn-runner.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { createEmbeddingClient } from "../memory/embedding.js";
9
9
  import { loadStoredMemory } from "../memory/storage.js";
10
10
  import { MemoryContextCache } from "../memory/store.js";
11
11
  import { DEFAULT_CLI_MEMORY_MODEL, DEFAULT_CLI_MODEL, resolveModelName, } from "../model-resolution/resolver.js";
12
+ import { compactTurnState } from "./state-compaction.js";
12
13
  import { agentEventToTurnEvents, agentMessageText } from "./agent-events.js";
13
14
  import { createStateMachineSystemPromptLayer } from "./prompts.js";
14
15
  import { applyEvictionHorizon, calculateWireTokens, createInitialHorizon, findEvictionHorizon, } from "./wire-shaping.js";
@@ -788,7 +789,7 @@ export class TurnRunner {
788
789
  messages: this.parentAgent.state.messages,
789
790
  }
790
791
  : state.agent;
791
- return {
792
+ const snapshot = {
792
793
  ...state,
793
794
  agent: parentAgent,
794
795
  stateMachine: this.stateMachineController.getSession(),
@@ -796,6 +797,34 @@ export class TurnRunner {
796
797
  followUpQueue: copyOptionalArray(state.followUpQueue ?? this.state?.followUpQueue),
797
798
  queuedCommands: copyOptionalArray(state.queuedCommands ?? this.state?.queuedCommands),
798
799
  };
800
+ return this.applyAutoStateCompaction(snapshot);
801
+ }
802
+ /**
803
+ * Caps the size of every state that leaves the runner via emit/return/
804
+ * getState. Runs only when `TurnRunnerConfig.autoStateCompaction` is
805
+ * enabled — the single choke point ensures persistence layers, terminal
806
+ * payloads, and external observers all see the same trimmed state.
807
+ */
808
+ applyAutoStateCompaction(state) {
809
+ const options = this.resolveCompactionOptions();
810
+ if (!options)
811
+ return state;
812
+ const { state: capped, evicted, bytes } = compactTurnState(state, options);
813
+ if (evicted > 0) {
814
+ console.warn(`[duet-agent] turn state exceeded auto-compaction ceiling; evicted ${evicted} oldest message(s) (now ${bytes} bytes) for session ${this.config.sessionId ?? "<unknown>"}`);
815
+ }
816
+ return capped;
817
+ }
818
+ resolveCompactionOptions() {
819
+ // On by default: `undefined` and `true` both enable the 100 MB ceiling so
820
+ // unbounded `state.json` growth can't wedge persistence. Only an explicit
821
+ // `false` disables compaction.
822
+ const setting = this.config.autoStateCompaction;
823
+ if (setting === false)
824
+ return undefined;
825
+ if (setting === undefined || setting === true)
826
+ return {};
827
+ return setting;
799
828
  }
800
829
  setState(state) {
801
830
  this.state = this.snapshotState(state);