@clinebot/core 0.0.30 → 0.0.33
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/extensions/context/agentic-compaction.d.ts.map +1 -1
- package/dist/extensions/context/basic-compaction.d.ts.map +1 -1
- package/dist/extensions/context/compaction-shared.d.ts +1 -1
- package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
- package/dist/extensions/context/compaction.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +213 -215
- package/dist/runtime/checkpoint-hooks.d.ts +10 -0
- package/dist/runtime/checkpoint-hooks.d.ts.map +1 -1
- package/dist/session/default-session-manager.d.ts.map +1 -1
- package/dist/session/session-agent-events.d.ts.map +1 -1
- package/dist/types/config.d.ts +61 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/events.d.ts +4 -0
- package/dist/types/events.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/extensions/context/agentic-compaction.ts +22 -10
- package/src/extensions/context/basic-compaction.ts +43 -18
- package/src/extensions/context/compaction-shared.ts +1 -1
- package/src/extensions/context/compaction.test.ts +16 -10
- package/src/extensions/context/compaction.ts +35 -12
- package/src/index.ts +2 -0
- package/src/providers/local-provider-service.test.ts +4 -4
- package/src/runtime/checkpoint-hooks.ts +26 -1
- package/src/session/default-session-manager.test.ts +7 -9
- package/src/session/default-session-manager.ts +2 -6
- package/src/session/persistence-service.test.ts +8 -17
- package/src/session/session-agent-events.ts +9 -1
- package/src/types/config.ts +69 -0
- package/src/types/events.ts +4 -0
|
@@ -15,6 +15,16 @@ type CreateCheckpointHooksOptions = {
|
|
|
15
15
|
logger?: BasicLogger;
|
|
16
16
|
readSessionMetadata: () => Promise<Record<string, unknown> | undefined>;
|
|
17
17
|
writeSessionMetadata: (metadata: Record<string, unknown>) => Promise<void> | void;
|
|
18
|
+
/**
|
|
19
|
+
* Optional custom checkpoint implementation. When provided, the built-in
|
|
20
|
+
* git stash/ref logic is skipped entirely and this function is called
|
|
21
|
+
* instead. Return `undefined` to skip writing a checkpoint for that run.
|
|
22
|
+
*/
|
|
23
|
+
createCheckpoint?: (context: {
|
|
24
|
+
cwd: string;
|
|
25
|
+
sessionId: string;
|
|
26
|
+
runCount: number;
|
|
27
|
+
}) => Promise<CheckpointEntry | undefined> | CheckpointEntry | undefined;
|
|
18
28
|
};
|
|
19
29
|
export declare function createCheckpointHooks(options: CreateCheckpointHooksOptions): AgentHooks;
|
|
20
30
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint-hooks.d.ts","sourceRoot":"","sources":["../../src/runtime/checkpoint-hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIhE,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,KAAK,4BAA4B,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mBAAmB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IACxE,oBAAoB,EAAE,CACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint-hooks.d.ts","sourceRoot":"","sources":["../../src/runtime/checkpoint-hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIhE,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,KAAK,4BAA4B,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mBAAmB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IACxE,oBAAoB,EAAE,CACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE;QAC5B,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KACjB,KAAK,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,GAAG,eAAe,GAAG,SAAS,CAAC;CACzE,CAAC;AAoDF,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,4BAA4B,GACnC,UAAU,CAwHZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-session-manager.d.ts","sourceRoot":"","sources":["../../src/session/default-session-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,KAAK,aAAa,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACN,KAAK,WAAW,EAEhB,KAAK,WAAW,EAEhB,KAAK,iBAAiB,EAItB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAW/E,OAAO,EAGN,KAAK,aAAa,EAElB,MAAM,UAAU,CAAC;AAGlB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAGN,wBAAwB,EACxB,MAAM,+BAA+B,CAAC;AAcvC,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EACX,kBAAkB,EAGlB,MAAM,mBAAmB,CAAC;AA2B3B,KAAK,cAAc,GAChB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"default-session-manager.d.ts","sourceRoot":"","sources":["../../src/session/default-session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-agent-events.d.ts","sourceRoot":"","sources":["../../src/session/session-agent-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAON,KAAK,gCAAgC,EACrC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,GACZ,MAAM,GAAG,SAAS,CAOpB;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,aAAa,GAAG,SAAS,CAAC;IACvC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACrD,eAAe,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,CAAC,EAAE,MAAM,KACjB,IAAI,CAAC;IACV,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,8BAA8B;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,UAAU,GAAG;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAgBA;AAED,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,8BAA8B,GACrC,gCAAgC,GAAG,SAAS,CA4B9C;AAED,wBAAgB,gBAAgB,CAC/B,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,UAAU,EACjB,SAAS,CAAC,EAAE,8BAA8B,GACxC,IAAI,
|
|
1
|
+
{"version":3,"file":"session-agent-events.d.ts","sourceRoot":"","sources":["../../src/session/session-agent-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAON,KAAK,gCAAgC,EACrC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,OAAO,GACZ,MAAM,GAAG,SAAS,CAOpB;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,aAAa,GAAG,SAAS,CAAC;IACvC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACrD,eAAe,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,CAAC,EAAE,MAAM,KACjB,IAAI,CAAC;IACV,IAAI,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,8BAA8B;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,UAAU,GAAG;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAgBA;AAED,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,8BAA8B,GACrC,gCAAgC,GAAG,SAAS,CA4B9C;AAED,wBAAgB,gBAAgB,CAC/B,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,UAAU,EACjB,SAAS,CAAC,EAAE,8BAA8B,GACxC,IAAI,CAgJN"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -66,6 +66,66 @@ export interface CoreCompactionConfig {
|
|
|
66
66
|
summarizer?: CoreCompactionSummarizerConfig;
|
|
67
67
|
compact?: (context: CoreCompactionContext) => Promise<CoreCompactionResult | undefined> | CoreCompactionResult | undefined;
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Context passed to a custom `createCheckpoint` implementation.
|
|
71
|
+
*/
|
|
72
|
+
export interface CoreCheckpointContext {
|
|
73
|
+
/** Absolute path to the working directory of the session. */
|
|
74
|
+
cwd: string;
|
|
75
|
+
/** The session identifier. */
|
|
76
|
+
sessionId: string;
|
|
77
|
+
/** Monotonically increasing run counter for this session (starts at 1). */
|
|
78
|
+
runCount: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Configuration for the built-in git-based checkpoint feature.
|
|
82
|
+
*
|
|
83
|
+
* Checkpoints capture a restorable snapshot of the workspace at the start of
|
|
84
|
+
* each root-agent run so that changes made during a session can be rolled back.
|
|
85
|
+
*
|
|
86
|
+
* @example Disable checkpoints entirely:
|
|
87
|
+
* ```ts
|
|
88
|
+
* checkpoint: { enabled: false }
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* @example Bring your own checkpoint implementation:
|
|
92
|
+
* ```ts
|
|
93
|
+
* checkpoint: {
|
|
94
|
+
* createCheckpoint: async ({ cwd, sessionId, runCount }) => {
|
|
95
|
+
* const ref = await mySnapshotFn(cwd);
|
|
96
|
+
* return { ref, createdAt: Date.now(), runCount };
|
|
97
|
+
* },
|
|
98
|
+
* }
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export interface CoreCheckpointConfig {
|
|
102
|
+
/**
|
|
103
|
+
* Whether to create checkpoints on each root-agent run start.
|
|
104
|
+
* Defaults to `false` — checkpoints are **opt-in**. Set to `true` to
|
|
105
|
+
* enable the built-in git stash/ref checkpoint behaviour for this session.
|
|
106
|
+
*/
|
|
107
|
+
enabled?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Replace the built-in git stash/ref checkpoint logic with a custom
|
|
110
|
+
* implementation. Called once at the start of each root-agent run (before
|
|
111
|
+
* the first agent iteration).
|
|
112
|
+
*
|
|
113
|
+
* Return an object with at least `ref`, `createdAt`, and `runCount` to have
|
|
114
|
+
* the entry recorded in session metadata, or return `undefined` to skip
|
|
115
|
+
* writing a checkpoint for that run.
|
|
116
|
+
*/
|
|
117
|
+
createCheckpoint?: (context: CoreCheckpointContext) => Promise<{
|
|
118
|
+
ref: string;
|
|
119
|
+
createdAt: number;
|
|
120
|
+
runCount: number;
|
|
121
|
+
kind?: "stash" | "commit";
|
|
122
|
+
} | undefined> | {
|
|
123
|
+
ref: string;
|
|
124
|
+
createdAt: number;
|
|
125
|
+
runCount: number;
|
|
126
|
+
kind?: "stash" | "commit";
|
|
127
|
+
} | undefined;
|
|
128
|
+
}
|
|
69
129
|
export interface CoreSessionConfig extends CoreModelConfig, CoreRuntimeFeatures, Omit<SessionWorkspaceConfig, "workspaceRoot">, Omit<SessionPromptConfig, "systemPrompt">, Omit<SessionExecutionConfig, "enableTools" | "teamName" | "missionLogIntervalSteps" | "missionLogIntervalMs" | "maxConsecutiveMistakes"> {
|
|
70
130
|
sessionId?: string;
|
|
71
131
|
workspaceRoot?: string;
|
|
@@ -83,6 +143,7 @@ export interface CoreSessionConfig extends CoreModelConfig, CoreRuntimeFeatures,
|
|
|
83
143
|
extensions?: AgentConfig["extensions"];
|
|
84
144
|
execution?: AgentConfig["execution"];
|
|
85
145
|
compaction?: CoreCompactionConfig;
|
|
146
|
+
checkpoint?: CoreCheckpointConfig;
|
|
86
147
|
onTeamEvent?: (event: TeamEvent) => void;
|
|
87
148
|
onConsecutiveMistakeLimitReached?: (context: ConsecutiveMistakeLimitContext) => Promise<ConsecutiveMistakeLimitDecision> | ConsecutiveMistakeLimitDecision;
|
|
88
149
|
toolRoutingRules?: ToolRoutingRule[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|
package/dist/types/events.d.ts
CHANGED
|
@@ -51,6 +51,10 @@ export type CoreSessionEvent = {
|
|
|
51
51
|
payload: {
|
|
52
52
|
sessionId: string;
|
|
53
53
|
event: import("@clinebot/shared").AgentEvent;
|
|
54
|
+
/** Identifies the named agent within the team (e.g. "educator", "assessor", "coordinator") for both lead and teammate agents */
|
|
55
|
+
teamAgentId?: string;
|
|
56
|
+
/** Whether this is the lead agent or a teammate */
|
|
57
|
+
teamRole?: "lead" | "teammate";
|
|
54
58
|
};
|
|
55
59
|
} | {
|
|
56
60
|
type: "team_progress";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,aAAa,GACb,kBAAkB,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,kBAAkB,EAAE,0BAA0B,CAAC;IACjE,OAAO,EAAE,OAAO,kBAAkB,EAAE,mBAAmB,CAAC;CACxD;AAED,MAAM,WAAW,0BAA0B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACH;AAED,MAAM,WAAW,kCAAkC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC7C;IACA,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,OAAO,kBAAkB,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EACV,WAAW,GACX,aAAa,GACb,WAAW,GACX,aAAa,GACb,kBAAkB,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,kBAAkB,EAAE,0BAA0B,CAAC;IACjE,OAAO,EAAE,OAAO,kBAAkB,EAAE,mBAAmB,CAAC;CACxD;AAED,MAAM,WAAW,0BAA0B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;QAC5B,eAAe,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACH;AAED,MAAM,WAAW,kCAAkC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GACzB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC7C;IACA,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,OAAO,kBAAkB,EAAE,UAAU,CAAC;QAC7C,gIAAgI;QAChI,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mDAAmD;QACnD,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;KAC/B,CAAC;CACD,GACD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,wBAAwB,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,0BAA0B,CAAA;CAAE,GAChE;IACA,IAAI,EAAE,0BAA0B,CAAC;IACjC,OAAO,EAAE,kCAAkC,CAAC;CAC3C,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clinebot/core",
|
|
3
3
|
"description": "Cline Core SDK for Node Runtime",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.33",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"test:watch": "vitest --config vitest.config.ts"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@clinebot/agents": "0.0.
|
|
40
|
-
"@clinebot/llms": "0.0.
|
|
39
|
+
"@clinebot/agents": "0.0.33",
|
|
40
|
+
"@clinebot/llms": "0.0.33",
|
|
41
41
|
"@opentelemetry/api": "^1.9.0",
|
|
42
42
|
"@opentelemetry/api-logs": "^0.214.0",
|
|
43
43
|
"@opentelemetry/exporter-logs-otlp-http": "^0.214.0",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@clinebot/rpc": "0.0.28",
|
|
61
|
-
"@clinebot/shared": "0.0.
|
|
61
|
+
"@clinebot/shared": "0.0.33"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=22"
|
|
@@ -106,14 +106,26 @@ export async function runAgenticCompaction(options: {
|
|
|
106
106
|
(total, message) => total + options.estimateMessageTokens(message),
|
|
107
107
|
0,
|
|
108
108
|
);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
109
|
+
const resultMessages = [
|
|
110
|
+
buildSummaryMessage({
|
|
111
|
+
summary,
|
|
112
|
+
fileOps,
|
|
113
|
+
tokensBefore,
|
|
114
|
+
}),
|
|
115
|
+
...messages.slice(cutIndex),
|
|
116
|
+
];
|
|
117
|
+
const tokensAfter = resultMessages.reduce(
|
|
118
|
+
(total, message) => total + options.estimateMessageTokens(message),
|
|
119
|
+
0,
|
|
120
|
+
);
|
|
121
|
+
options.logger?.debug("Performed agentic compaction", {
|
|
122
|
+
messagesBefore: messages.length,
|
|
123
|
+
messagesAfter: resultMessages.length,
|
|
124
|
+
messagesSummarized: cutIndex,
|
|
125
|
+
messagesPreserved: messages.length - cutIndex,
|
|
126
|
+
tokensBefore,
|
|
127
|
+
tokensAfter,
|
|
128
|
+
contextWindowTokens: options.context.contextWindowTokens,
|
|
129
|
+
});
|
|
130
|
+
return { messages: resultMessages };
|
|
119
131
|
}
|
|
@@ -33,17 +33,19 @@ function sanitizeMessageForBasic(
|
|
|
33
33
|
return text ? { ...message, content: text } : undefined;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
}
|
|
36
|
+
// Preserve array structure: keep only text blocks with non-empty content.
|
|
37
|
+
const kept = message.content.filter(
|
|
38
|
+
(block) => block.type === "text" && block.text.trim(),
|
|
39
|
+
);
|
|
40
|
+
if (kept.length === 0) {
|
|
41
|
+
return undefined;
|
|
44
42
|
}
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
return {
|
|
44
|
+
...message,
|
|
45
|
+
content: kept.map((block) =>
|
|
46
|
+
block.type === "text" ? { ...block, text: block.text.trim() } : block,
|
|
47
|
+
),
|
|
48
|
+
};
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
function getTotalTokens(
|
|
@@ -60,14 +62,25 @@ function truncateMessageToTokens(
|
|
|
60
62
|
message: MessageWithMetadata,
|
|
61
63
|
maxTokens: number,
|
|
62
64
|
): MessageWithMetadata {
|
|
63
|
-
const content = typeof message.content === "string" ? message.content : "";
|
|
64
65
|
const safeMaxTokens = Math.max(1, maxTokens);
|
|
65
66
|
const targetChars = Math.max(16, safeMaxTokens * 4);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
content: truncated || "..."
|
|
70
|
-
}
|
|
67
|
+
|
|
68
|
+
if (typeof message.content === "string") {
|
|
69
|
+
const truncated = truncateText(message.content, targetChars).trim();
|
|
70
|
+
return { ...message, content: truncated || "..." };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Preserve content block array structure while truncating text blocks.
|
|
74
|
+
let remaining = targetChars;
|
|
75
|
+
const truncatedBlocks = message.content.map((block) => {
|
|
76
|
+
if (block.type !== "text" || remaining <= 0) {
|
|
77
|
+
return block;
|
|
78
|
+
}
|
|
79
|
+
const truncated = truncateText(block.text, remaining).trim();
|
|
80
|
+
remaining -= truncated.length;
|
|
81
|
+
return { ...block, text: truncated || "..." };
|
|
82
|
+
});
|
|
83
|
+
return { ...message, content: truncatedBlocks };
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
function buildBasicCandidates(
|
|
@@ -265,10 +278,22 @@ export function runBasicCompaction(options: {
|
|
|
265
278
|
return undefined;
|
|
266
279
|
}
|
|
267
280
|
|
|
281
|
+
const beforeTokens = getTotalTokens(
|
|
282
|
+
options.context.messages.map((m) => sanitizeMessageForBasic(m) ?? m),
|
|
283
|
+
options.estimateMessageTokens,
|
|
284
|
+
);
|
|
285
|
+
const afterTokens = getTotalTokens(
|
|
286
|
+
nextMessages,
|
|
287
|
+
options.estimateMessageTokens,
|
|
288
|
+
);
|
|
268
289
|
options.logger?.debug("Performed basic compaction", {
|
|
269
|
-
|
|
270
|
-
|
|
290
|
+
messagesBefore: options.context.messages.length,
|
|
291
|
+
messagesAfter: nextMessages.length,
|
|
292
|
+
messagesRemoved: options.context.messages.length - nextMessages.length,
|
|
293
|
+
tokensBefore: beforeTokens,
|
|
294
|
+
tokensAfter: afterTokens,
|
|
271
295
|
targetTokens,
|
|
296
|
+
contextWindowTokens: options.context.contextWindowTokens,
|
|
272
297
|
});
|
|
273
298
|
|
|
274
299
|
return { messages: nextMessages };
|
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
} from "../../types/config";
|
|
7
7
|
|
|
8
8
|
export const DEFAULT_CONTEXT_WINDOW_TOKENS = 200_000;
|
|
9
|
-
export const DEFAULT_THRESHOLD_RATIO = 0.
|
|
9
|
+
export const DEFAULT_THRESHOLD_RATIO = 0.95;
|
|
10
10
|
export const DEFAULT_RESERVE_TOKENS = 16_384;
|
|
11
11
|
export const DEFAULT_PRESERVE_RECENT_TOKENS = 20_000;
|
|
12
12
|
export const DEFAULT_SUMMARY_MAX_OUTPUT_TOKENS = 1_024;
|
|
@@ -363,16 +363,22 @@ describe("createContextCompactionPrepareTurn", () => {
|
|
|
363
363
|
);
|
|
364
364
|
expect(result?.messages).toBeDefined();
|
|
365
365
|
expect(result?.messages.length).toBeGreaterThan(0);
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
366
|
+
// Compacted messages should not contain tool_result content that was pruned.
|
|
367
|
+
for (const message of result?.messages ?? []) {
|
|
368
|
+
if (typeof message.content === "string") {
|
|
369
|
+
expect(message.content).not.toContain(
|
|
370
|
+
"tool output that should be removed",
|
|
371
|
+
);
|
|
372
|
+
} else {
|
|
373
|
+
for (const block of message.content) {
|
|
374
|
+
if (block.type === "text") {
|
|
375
|
+
expect(block.text).not.toContain(
|
|
376
|
+
"tool output that should be removed",
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
376
382
|
});
|
|
377
383
|
|
|
378
384
|
it("defaults to threshold ratio when reserveTokens is not configured", async () => {
|
|
@@ -185,19 +185,42 @@ export function createContextCompactionPrepareTurn(
|
|
|
185
185
|
contextWindowTokens,
|
|
186
186
|
});
|
|
187
187
|
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
const beforeMessageCount = context.messages.length;
|
|
189
|
+
|
|
190
|
+
const result = userCompaction?.compact
|
|
191
|
+
? await userCompaction.compact(compactionContext)
|
|
192
|
+
: await runBuiltinStrategy({
|
|
193
|
+
context: compactionContext,
|
|
194
|
+
providerConfig: {
|
|
195
|
+
...providerConfig,
|
|
196
|
+
abortSignal: context.abortSignal,
|
|
197
|
+
},
|
|
198
|
+
compaction: userCompaction,
|
|
199
|
+
estimateMessageTokens,
|
|
200
|
+
logger: config.logger,
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
if (result?.messages) {
|
|
204
|
+
const afterTokens = result.messages.reduce(
|
|
205
|
+
(total: number, message) => total + estimateMessageTokens(message),
|
|
206
|
+
0,
|
|
207
|
+
);
|
|
208
|
+
config.logger?.log("Context compaction completed", {
|
|
209
|
+
severity: "info",
|
|
210
|
+
strategy: strategy,
|
|
211
|
+
contextWindowTokens,
|
|
212
|
+
inputTokens,
|
|
213
|
+
afterTokens,
|
|
214
|
+
tokensSaved: inputTokens - afterTokens,
|
|
215
|
+
utilizationBefore: `${((inputTokens / contextWindowTokens) * 100).toFixed(1)}%`,
|
|
216
|
+
utilizationAfter: `${((afterTokens / contextWindowTokens) * 100).toFixed(1)}%`,
|
|
217
|
+
thresholdTrigger: `${(triggerState.thresholdRatio * 100).toFixed(1)}%`,
|
|
218
|
+
messagesBefore: beforeMessageCount,
|
|
219
|
+
messagesAfter: result.messages.length,
|
|
220
|
+
messagesRemoved: beforeMessageCount - result.messages.length,
|
|
221
|
+
} as Record<string, unknown>);
|
|
190
222
|
}
|
|
191
223
|
|
|
192
|
-
return
|
|
193
|
-
context: compactionContext,
|
|
194
|
-
providerConfig: {
|
|
195
|
-
...providerConfig,
|
|
196
|
-
abortSignal: context.abortSignal,
|
|
197
|
-
},
|
|
198
|
-
compaction: userCompaction,
|
|
199
|
-
estimateMessageTokens,
|
|
200
|
-
logger: config.logger,
|
|
201
|
-
});
|
|
224
|
+
return result;
|
|
202
225
|
};
|
|
203
226
|
}
|
package/src/index.ts
CHANGED
|
@@ -535,6 +535,8 @@ export type { SessionStatus } from "./types/common";
|
|
|
535
535
|
export { SESSION_STATUSES, SessionSource } from "./types/common";
|
|
536
536
|
export type {
|
|
537
537
|
CoreAgentMode,
|
|
538
|
+
CoreCheckpointConfig,
|
|
539
|
+
CoreCheckpointContext,
|
|
538
540
|
CoreCompactionConfig,
|
|
539
541
|
CoreCompactionContext,
|
|
540
542
|
CoreCompactionResult,
|
|
@@ -922,7 +922,7 @@ describe("listLocalProviders", () => {
|
|
|
922
922
|
).toBe(true);
|
|
923
923
|
});
|
|
924
924
|
|
|
925
|
-
it("uses the same built-in model list for cline as
|
|
925
|
+
it("uses the same built-in model list for cline as openrouter", async () => {
|
|
926
926
|
manager.saveProviderSettings(
|
|
927
927
|
{
|
|
928
928
|
provider: "cline",
|
|
@@ -935,12 +935,12 @@ describe("listLocalProviders", () => {
|
|
|
935
935
|
|
|
936
936
|
const { providers } = await listLocalProviders(manager);
|
|
937
937
|
const cline = providers.find((provider) => provider.id === "cline");
|
|
938
|
-
const
|
|
939
|
-
(provider) => provider.id === "
|
|
938
|
+
const openrouter = providers.find(
|
|
939
|
+
(provider) => provider.id === "openrouter",
|
|
940
940
|
);
|
|
941
941
|
|
|
942
942
|
expect(cline?.modelList?.length).toBeGreaterThan(0);
|
|
943
|
-
expect(cline?.modelList).toEqual(
|
|
943
|
+
expect(cline?.modelList).toEqual(openrouter?.modelList);
|
|
944
944
|
});
|
|
945
945
|
|
|
946
946
|
it("does not eagerly fetch LiteLLM private models while listing providers", async () => {
|
|
@@ -24,6 +24,16 @@ type CreateCheckpointHooksOptions = {
|
|
|
24
24
|
writeSessionMetadata: (
|
|
25
25
|
metadata: Record<string, unknown>,
|
|
26
26
|
) => Promise<void> | void;
|
|
27
|
+
/**
|
|
28
|
+
* Optional custom checkpoint implementation. When provided, the built-in
|
|
29
|
+
* git stash/ref logic is skipped entirely and this function is called
|
|
30
|
+
* instead. Return `undefined` to skip writing a checkpoint for that run.
|
|
31
|
+
*/
|
|
32
|
+
createCheckpoint?: (context: {
|
|
33
|
+
cwd: string;
|
|
34
|
+
sessionId: string;
|
|
35
|
+
runCount: number;
|
|
36
|
+
}) => Promise<CheckpointEntry | undefined> | CheckpointEntry | undefined;
|
|
27
37
|
};
|
|
28
38
|
|
|
29
39
|
function warn(logger: BasicLogger | undefined, message: string): void {
|
|
@@ -99,6 +109,14 @@ export function createCheckpointHooks(
|
|
|
99
109
|
};
|
|
100
110
|
|
|
101
111
|
const createCheckpoint = async (): Promise<CheckpointEntry | undefined> => {
|
|
112
|
+
if (options.createCheckpoint) {
|
|
113
|
+
return await options.createCheckpoint({
|
|
114
|
+
cwd: options.cwd,
|
|
115
|
+
sessionId: options.sessionId,
|
|
116
|
+
runCount,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
102
120
|
if (!(await ensureGitRepository())) {
|
|
103
121
|
return undefined;
|
|
104
122
|
}
|
|
@@ -137,8 +155,15 @@ export function createCheckpointHooks(
|
|
|
137
155
|
};
|
|
138
156
|
}
|
|
139
157
|
|
|
158
|
+
// Store the stash commit under a private ref namespace so it is
|
|
159
|
+
// invisible to the user's normal `git stash list` workflow.
|
|
160
|
+
// `refs/stash` is what populates that list; writing to any other
|
|
161
|
+
// ref path keeps the object reachable (GC-safe) without surfacing
|
|
162
|
+
// it to the user. The raw SHA already works with `git stash apply`
|
|
163
|
+
// on the restore path, so no restore-side changes are needed.
|
|
164
|
+
const privateRef = `refs/cline/checkpoints/${options.sessionId}/${runCount}`;
|
|
140
165
|
try {
|
|
141
|
-
await runGit(options.cwd, ["
|
|
166
|
+
await runGit(options.cwd, ["update-ref", privateRef, ref]);
|
|
142
167
|
} catch (error) {
|
|
143
168
|
warn(
|
|
144
169
|
options.logger,
|
|
@@ -150,7 +150,6 @@ describe("DefaultSessionManager", () => {
|
|
|
150
150
|
const envSnapshot = {
|
|
151
151
|
HOME: process.env.HOME,
|
|
152
152
|
CLINE_DIR: process.env.CLINE_DIR,
|
|
153
|
-
CLINE_CHECKPOINT: process.env.CLINE_CHECKPOINT,
|
|
154
153
|
};
|
|
155
154
|
let isolatedHomeDir = "";
|
|
156
155
|
|
|
@@ -158,7 +157,6 @@ describe("DefaultSessionManager", () => {
|
|
|
158
157
|
isolatedHomeDir = mkdtempSync(join(tmpdir(), "core-session-home-"));
|
|
159
158
|
process.env.HOME = isolatedHomeDir;
|
|
160
159
|
process.env.CLINE_DIR = join(isolatedHomeDir, ".cline");
|
|
161
|
-
delete process.env.CLINE_CHECKPOINT;
|
|
162
160
|
setHomeDir(isolatedHomeDir);
|
|
163
161
|
setClineDir(process.env.CLINE_DIR);
|
|
164
162
|
});
|
|
@@ -166,7 +164,6 @@ describe("DefaultSessionManager", () => {
|
|
|
166
164
|
afterEach(() => {
|
|
167
165
|
process.env.HOME = envSnapshot.HOME;
|
|
168
166
|
process.env.CLINE_DIR = envSnapshot.CLINE_DIR;
|
|
169
|
-
process.env.CLINE_CHECKPOINT = envSnapshot.CLINE_CHECKPOINT;
|
|
170
167
|
setHomeDir(envSnapshot.HOME ?? "~");
|
|
171
168
|
setClineDir(envSnapshot.CLINE_DIR ?? join("~", ".cline"));
|
|
172
169
|
rmSync(isolatedHomeDir, { recursive: true, force: true });
|
|
@@ -652,7 +649,7 @@ describe("DefaultSessionManager", () => {
|
|
|
652
649
|
);
|
|
653
650
|
});
|
|
654
651
|
|
|
655
|
-
it("does not install checkpoint hooks
|
|
652
|
+
it("does not install checkpoint hooks when checkpoint.enabled is not set in config", async () => {
|
|
656
653
|
const sessionId = "sess-checkpoint-default-off";
|
|
657
654
|
const manifest = createManifest(sessionId);
|
|
658
655
|
const updateSession = vi.fn().mockResolvedValue({ updated: true });
|
|
@@ -737,10 +734,8 @@ describe("DefaultSessionManager", () => {
|
|
|
737
734
|
});
|
|
738
735
|
});
|
|
739
736
|
|
|
740
|
-
it("installs checkpoint hooks when
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
const sessionId = "sess-checkpoint-env-on";
|
|
737
|
+
it("installs checkpoint hooks when checkpoint.enabled=true in config", async () => {
|
|
738
|
+
const sessionId = "sess-checkpoint-config-on";
|
|
744
739
|
const repoCwd = mkdtempSync(join(isolatedHomeDir, "checkpoint-repo-"));
|
|
745
740
|
createGitRepo(repoCwd);
|
|
746
741
|
const manifest = createManifest(sessionId);
|
|
@@ -813,7 +808,10 @@ describe("DefaultSessionManager", () => {
|
|
|
813
808
|
});
|
|
814
809
|
|
|
815
810
|
await manager.start({
|
|
816
|
-
config:
|
|
811
|
+
config: {
|
|
812
|
+
...createConfig({ sessionId, cwd: repoCwd }),
|
|
813
|
+
checkpoint: { enabled: true },
|
|
814
|
+
},
|
|
817
815
|
prompt: "hello",
|
|
818
816
|
interactive: false,
|
|
819
817
|
});
|
|
@@ -115,11 +115,6 @@ type SessionBackend =
|
|
|
115
115
|
const MAX_SCAN_LIMIT = 5000;
|
|
116
116
|
const MAX_USER_FILE_BYTES = 20 * 1_000 * 1_024;
|
|
117
117
|
|
|
118
|
-
// NOTE: Temporarily disabled until checkpoint is ready for production.
|
|
119
|
-
function isCheckpointFeatureEnabled(): boolean {
|
|
120
|
-
return process?.env?.CLINE_CHECKPOINT === "true";
|
|
121
|
-
}
|
|
122
|
-
|
|
123
118
|
async function loadUserFileContent(path: string): Promise<string> {
|
|
124
119
|
const fileStat = await stat(path);
|
|
125
120
|
if (!fileStat.isFile()) {
|
|
@@ -277,11 +272,12 @@ export class DefaultSessionManager implements SessionManager {
|
|
|
277
272
|
};
|
|
278
273
|
configWithProvider.hooks = mergeAgentHooks([
|
|
279
274
|
effectiveConfig.hooks,
|
|
280
|
-
|
|
275
|
+
effectiveConfig.checkpoint?.enabled === true
|
|
281
276
|
? createCheckpointHooks({
|
|
282
277
|
cwd: configWithProvider.cwd,
|
|
283
278
|
sessionId,
|
|
284
279
|
logger: configWithProvider.logger,
|
|
280
|
+
createCheckpoint: effectiveConfig.checkpoint?.createCheckpoint,
|
|
285
281
|
readSessionMetadata: async () =>
|
|
286
282
|
(await this.get(sessionId))?.metadata as
|
|
287
283
|
| Record<string, unknown>
|
|
@@ -160,13 +160,11 @@ describe("UnifiedSessionPersistenceService", () => {
|
|
|
160
160
|
row.sessionId.includes("__teamtask__java-haiku-agent__"),
|
|
161
161
|
)?.sessionId;
|
|
162
162
|
expect(teammateSessionId).toBeTruthy();
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
rootSessionId,
|
|
166
|
-
"java-haiku-agent__" +
|
|
167
|
-
teammateSessionId?.slice(teammateSessionId?.lastIndexOf("__") + 2) +
|
|
168
|
-
".messages.json",
|
|
163
|
+
const row = childSessions.find(
|
|
164
|
+
(item) => item.sessionId === teammateSessionId,
|
|
169
165
|
);
|
|
166
|
+
expect(row?.messagesPath).toBeTruthy();
|
|
167
|
+
const path = row?.messagesPath as string;
|
|
170
168
|
const payload = JSON.parse(readFileSync(path, "utf8")) as {
|
|
171
169
|
agent?: string;
|
|
172
170
|
sessionId?: string;
|
|
@@ -195,18 +193,11 @@ describe("UnifiedSessionPersistenceService", () => {
|
|
|
195
193
|
cacheWriteTokens: 0,
|
|
196
194
|
cost: 0.123,
|
|
197
195
|
});
|
|
198
|
-
const row = childSessions.find(
|
|
199
|
-
(item) => item.sessionId === teammateSessionId,
|
|
200
|
-
);
|
|
201
196
|
expect(row?.messagesPath).toBe(path);
|
|
202
|
-
expect(row?.transcriptPath).
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
rootSessionId,
|
|
206
|
-
"java-haiku-agent__" +
|
|
207
|
-
teammateSessionId?.slice(teammateSessionId?.lastIndexOf("__") + 2) +
|
|
208
|
-
".log",
|
|
209
|
-
),
|
|
197
|
+
expect(row?.transcriptPath).toBeTruthy();
|
|
198
|
+
expect(row?.transcriptPath).toContain(
|
|
199
|
+
join(sessionsDir, rootSessionId, "java-haiku-agent__"),
|
|
210
200
|
);
|
|
201
|
+
expect(row?.transcriptPath).toMatch(/\.log$/);
|
|
211
202
|
});
|
|
212
203
|
});
|
|
@@ -234,7 +234,15 @@ export function handleAgentEvent(
|
|
|
234
234
|
|
|
235
235
|
emit({
|
|
236
236
|
type: "agent_event",
|
|
237
|
-
payload: {
|
|
237
|
+
payload: {
|
|
238
|
+
sessionId,
|
|
239
|
+
event,
|
|
240
|
+
teamAgentId: overrides?.teamAgentId,
|
|
241
|
+
teamRole:
|
|
242
|
+
overrides !== undefined
|
|
243
|
+
? (overrides.teamRole ?? (isPrimaryAgentEvent ? "lead" : undefined))
|
|
244
|
+
: undefined,
|
|
245
|
+
},
|
|
238
246
|
});
|
|
239
247
|
emit({
|
|
240
248
|
type: "chunk",
|