@kenkaiiii/ggcoder 5.14.0 → 5.15.0

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.
@@ -1,8 +1,8 @@
1
1
  import { z } from "zod";
2
- import { createGeneralChatAgent } from "./general.js";
3
- import { createResearchChatAgent } from "./research.js";
4
- import { createTherapistChatAgent } from "./therapist.js";
5
- import { chatAgentSessionsDir } from "./shared.js";
2
+ import { createGeneralChatAgent, GENERAL_CHAT_SYSTEM_PROMPT } from "./general.js";
3
+ import { createResearchChatAgent, RESEARCH_CHAT_SYSTEM_PROMPT } from "./research.js";
4
+ import { createTherapistChatAgent, THERAPIST_CHAT_SYSTEM_PROMPT } from "./therapist.js";
5
+ import { buildChatAgentSystemPrompt, chatAgentSessionsDir, } from "./shared.js";
6
6
  import { parseChatAgentId } from "./types.js";
7
7
  export { CHAT_AGENT_IDS, parseChatAgentId } from "./types.js";
8
8
  export { chatAgentSessionsDir } from "./shared.js";
@@ -11,61 +11,38 @@ export const CHAT_AGENT_LABELS = {
11
11
  therapist: "Therapist Agent",
12
12
  research: "Research Agent",
13
13
  };
14
- function finalAssistantText(session) {
15
- const message = [...session.getMessages()].reverse().find((item) => item.role === "assistant");
16
- if (!message)
17
- return "The delegated agent completed without a written result.";
18
- if (typeof message.content === "string")
19
- return message.content;
20
- if (!Array.isArray(message.content))
21
- return String(message.content);
22
- const text = message.content
23
- .filter((block) => typeof block === "object" &&
24
- block !== null &&
25
- "type" in block &&
26
- block.type === "text" &&
27
- "text" in block &&
28
- typeof block.text === "string")
29
- .map((block) => block.text)
30
- .join("\n");
31
- return text || "The delegated agent completed without a written result.";
32
- }
14
+ const CHAT_AGENT_PROMPTS = {
15
+ general: GENERAL_CHAT_SYSTEM_PROMPT,
16
+ therapist: THERAPIST_CHAT_SYSTEM_PROMPT,
17
+ research: RESEARCH_CHAT_SYSTEM_PROMPT,
18
+ };
33
19
  const delegationParameters = z.object({
34
- agent: z.enum(["general", "therapist", "research"]).describe("Specialist to delegate to"),
35
- task: z.string().min(1).describe("Self-contained task, context, constraints, and desired output"),
20
+ agent: z.enum(["general", "therapist", "research"]).describe("Agent to hand off to"),
36
21
  });
37
- function createDelegationTool(currentAgent, options, getParentSession) {
22
+ const chatAgentControllers = new WeakMap();
23
+ function createDelegationTool(getController) {
38
24
  return {
39
25
  name: "delegate_to_agent",
40
- description: "Delegate one focused task and return its result: Therapist for emotional support, relationships, coping, or wellbeing; Research for evidence, sources, current information, comparisons, or deep analysis; General for broad cross-domain work. Use only when specialization or an independent pass materially improves the outcome, and provide a self-contained task with context, constraints, and desired output.",
26
+ description: "Hand the entire ongoing conversation to a different active agent. Therapist handles emotional support, reflection, coping, relationships, and wellbeing. Research handles evidence, sources, current information, comparisons, and deep analysis. General handles broad conversation that no longer needs a specialist. This is a persistent handoff, not a one-off subtask.",
41
27
  parameters: delegationParameters,
42
28
  executionMode: "sequential",
43
- async execute({ agent, task }, context) {
44
- if (agent === currentAgent) {
45
- return `Already running as ${CHAT_AGENT_LABELS[currentAgent]}; handle this task directly.`;
46
- }
47
- const { sessionId: _sessionId, continueRecent: _continueRecent, ...delegatedOptions } = options;
48
- const parent = getParentSession();
49
- const parentState = parent.getState();
50
- const delegated = createChatAgent(agent, {
51
- ...delegatedOptions,
52
- provider: parentState.provider,
53
- model: parentState.model,
54
- thinkingLevel: parent.getThinkingLevel(),
55
- signal: context.signal,
56
- transient: true,
57
- }, false);
58
- try {
59
- await delegated.initialize();
60
- await delegated.prompt(task);
61
- return finalAssistantText(delegated);
62
- }
63
- finally {
64
- await delegated.dispose().catch(() => { });
29
+ async execute({ agent }) {
30
+ const controller = getController();
31
+ if (agent === controller.current) {
32
+ return `Already running as ${CHAT_AGENT_LABELS[controller.current]}; continue directly.`;
65
33
  }
34
+ await controller.switchTo(agent, true);
35
+ return `Handoff complete. ${CHAT_AGENT_LABELS[agent]} is now the active agent for this conversation. Continue from the full conversation history in that role.`;
66
36
  },
67
37
  };
68
38
  }
39
+ /** Switch an existing chat session without resetting its conversation history. */
40
+ export async function switchChatAgent(session, agentId, notify = true) {
41
+ const controller = chatAgentControllers.get(session);
42
+ if (!controller)
43
+ throw new Error("Session is not a chat agent");
44
+ return controller.switchTo(agentId, notify);
45
+ }
69
46
  export function createChatAgent(agentId, options, delegationEnabled = true) {
70
47
  let session;
71
48
  const sessionOptions = delegationEnabled
@@ -73,7 +50,7 @@ export function createChatAgent(agentId, options, delegationEnabled = true) {
73
50
  ...options,
74
51
  additionalTools: [
75
52
  ...(options.additionalTools ?? []),
76
- createDelegationTool(agentId, options, () => session),
53
+ createDelegationTool(() => controller),
77
54
  ],
78
55
  }
79
56
  : {
@@ -91,6 +68,19 @@ export function createChatAgent(agentId, options, delegationEnabled = true) {
91
68
  session = createGeneralChatAgent(sessionOptions);
92
69
  break;
93
70
  }
71
+ const controller = {
72
+ current: agentId,
73
+ async switchTo(nextAgent, notify) {
74
+ if (nextAgent === controller.current)
75
+ return false;
76
+ controller.current = nextAgent;
77
+ session.setCustomSystemPrompt(buildChatAgentSystemPrompt(nextAgent, CHAT_AGENT_PROMPTS[nextAgent], options.cwd, delegationEnabled), `ggchat:${nextAgent}`);
78
+ if (notify)
79
+ await options.onAgentChange?.(nextAgent);
80
+ return true;
81
+ },
82
+ };
83
+ chatAgentControllers.set(session, controller);
94
84
  return session;
95
85
  }
96
86
  export function sessionsDirForChatAgent(coderSessionsDir, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chat-agents/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chat-agents/index.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@ import { AgentSession, type AgentSessionOptions } from "../core/agent-session.js
2
2
  import type { ChatAgentId } from "./types.js";
3
3
  export type ChatAgentOptions = Omit<AgentSessionOptions, "systemPrompt" | "promptCacheKeyPrefix" | "sessionRootDir" | "coderSlashCommands" | "selfCorrectionHooks" | "projectCustomization" | "globalSubagents" | "loadExtensions" | "orchestrationPrompt" | "onEnterPlan" | "onExitPlan"> & {
4
4
  sessionsDir: string;
5
+ onAgentChange?: (agentId: ChatAgentId) => void | Promise<void>;
5
6
  };
6
7
  export declare function chatAgentSessionsDir(coderSessionsDir: string, agentId: ChatAgentId): string;
8
+ export declare function buildChatAgentSystemPrompt(agentId: ChatAgentId, rolePrompt: string, cwd: string, handoffEnabled: boolean): string;
7
9
  /** Create a chat agent on the shared caching/compaction spine without GG Coder behavior. */
8
10
  export declare function createChatAgentSession(agentId: ChatAgentId, systemPrompt: string, options: ChatAgentOptions): AgentSession;
9
11
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/chat-agents/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,mBAAmB,EACjB,cAAc,GACd,sBAAsB,GACtB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,sBAAsB,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,qBAAqB,GACrB,aAAa,GACb,YAAY,CACf,GAAG;IACF,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAE3F;AAOD,4FAA4F;AAC5F,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,gBAAgB,GACxB,YAAY,CAqCd"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/chat-agents/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,mBAAmB,EACjB,cAAc,GACd,sBAAsB,GACtB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,sBAAsB,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,qBAAqB,GACrB,aAAa,GACb,YAAY,CACf,GAAG;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAE3F;AAOD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,OAAO,GACtB,MAAM,CAaR;AAED,4FAA4F;AAC5F,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,gBAAgB,GACxB,YAAY,CAgCd"}
@@ -7,30 +7,34 @@ const MEMORY_CURATION_INSTRUCTIONS = `
7
7
 
8
8
  Durable memory curation:
9
9
  You can curate the shared durable memory available to General, Therapist, and Research with remember, update_memory, and forget. Save only facts that materially help future sessions: identity, stable preferences, ongoing projects or goals, important relationships or dates, recurring constraints, and significant health or work context. Never save one-off task details, full conversation summaries, readily recomputable facts, speculation, credentials, secrets, or transient emotion. Store one concise, self-contained fact per memory. Update or supersede changed facts instead of creating contradictions. Forget stale, wrong, or redundant facts, and honor explicit requests to forget. Curate silently and naturally; never claim to remember anything beyond the injected durable memory block. Memory IDs in the current injected block are authoritative and supersede IDs mentioned earlier in conversation history. When memory reaches its consolidation threshold, combine related facts with update_memory and remove stale or redundant entries. Prefer update_memory's forget_ids option to merge and delete each related group atomically; for large cleanups, work in small verifiable batches across turns instead of risking the wrong rows.`;
10
- /** Create a chat agent on the shared caching/compaction spine without GG Coder behavior. */
11
- export function createChatAgentSession(agentId, systemPrompt, options) {
12
- const { sessionsDir, ...sessionOptions } = options;
13
- const sessionRootDir = chatAgentSessionsDir(sessionsDir, agentId);
14
- const requestedSession = sessionOptions.sessionId ? path.resolve(sessionOptions.sessionId) : null;
15
- const resumableSession = requestedSession?.startsWith(`${sessionRootDir}${path.sep}`) === true
16
- ? requestedSession
17
- : undefined;
18
- const delegationInstructions = sessionOptions.additionalTools?.some((tool) => tool.name === "delegate_to_agent")
19
- ? `\n\nDelegation:\nYou can call delegate_to_agent to ask one specialist chat agent for a focused result. Route emotional support, reflection, coping, relationships, or wellbeing to Therapist. Route evidence gathering, source verification, comparisons, current information, or deep analysis to Research. Route broad cross-domain tasks that do not fit those specialties to General. Delegate when the user's request clearly benefits from that expertise or from an independent pass. Give the delegate a self-contained task with the relevant context, constraints, and desired output, then critically synthesize its result for the user rather than forwarding it blindly. Do not delegate trivial requests, do not delegate reflexively, and do not delegate work you can answer just as well yourself. For substantial tasks that benefit from independent parallel investigation or an isolated specialist pass, you may also use the subagent tools; use them selectively rather than proactively on routine requests.`
10
+ export function buildChatAgentSystemPrompt(agentId, rolePrompt, cwd, handoffEnabled) {
11
+ const handoffInstructions = handoffEnabled
12
+ ? `\n\nAgent handoff:\nYou can call delegate_to_agent to hand the entire conversation to a better-suited agent. Hand off to Therapist when the conversation primarily needs emotional support, reflection, coping, relationships, or wellbeing. Hand off to Research when it primarily needs evidence gathering, source verification, comparisons, current information, or deep analysis. Hand off to General when the conversation becomes broad or no longer needs a specialist. A handoff changes the active agent for this conversation; it is not a one-off subtask. Use it when the conversation's primary need clearly shifts, not for a brief side question or work you can handle naturally.`
20
13
  : "";
21
14
  const runtimeContext = [
22
15
  "Runtime context:",
23
16
  `- Active agent: ${agentId}`,
24
17
  `- Current date: ${new Date().toISOString().slice(0, 10)}`,
25
- `- Workspace root: ${sessionOptions.cwd}`,
18
+ `- Workspace root: ${cwd}`,
26
19
  "- Conversation history and tool results are the authoritative changing context for this session.",
27
20
  ].join("\n");
21
+ return `${rolePrompt}${MEMORY_CURATION_INSTRUCTIONS}${handoffInstructions}\n\n${runtimeContext}`;
22
+ }
23
+ /** Create a chat agent on the shared caching/compaction spine without GG Coder behavior. */
24
+ export function createChatAgentSession(agentId, systemPrompt, options) {
25
+ const { sessionsDir, onAgentChange: _onAgentChange, ...sessionOptions } = options;
26
+ const sessionRootDir = chatAgentSessionsDir(sessionsDir, agentId);
27
+ const requestedSession = sessionOptions.sessionId ? path.resolve(sessionOptions.sessionId) : null;
28
+ const resumableSession = requestedSession?.startsWith(`${sessionRootDir}${path.sep}`) === true
29
+ ? requestedSession
30
+ : undefined;
31
+ const handoffEnabled = sessionOptions.additionalTools?.some((tool) => tool.name === "delegate_to_agent");
28
32
  return new AgentSession({
29
33
  ...sessionOptions,
30
34
  sessionId: resumableSession,
31
35
  // Keep the stable role prompt first so provider prefix caching can reuse it;
32
36
  // append only the small per-session context that genuinely changes.
33
- systemPrompt: `${systemPrompt}${MEMORY_CURATION_INSTRUCTIONS}${delegationInstructions}\n\n${runtimeContext}`,
37
+ systemPrompt: buildChatAgentSystemPrompt(agentId, systemPrompt, sessionOptions.cwd, handoffEnabled === true),
34
38
  promptCacheKeyPrefix: `ggchat:${agentId}`,
35
39
  sessionRootDir,
36
40
  coderSlashCommands: false,
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/chat-agents/shared.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAA4B,MAAM,0BAA0B,CAAC;AAoBlF,MAAM,UAAU,oBAAoB,CAAC,gBAAwB,EAAE,OAAoB;IACjF,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,4BAA4B,GAAG;;;itCAG4qC,CAAC;AAEltC,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CACpC,OAAoB,EACpB,YAAoB,EACpB,OAAyB;IAEzB,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,MAAM,gBAAgB,GACpB,gBAAgB,EAAE,UAAU,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI;QACnE,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,sBAAsB,GAAG,cAAc,CAAC,eAAe,EAAE,IAAI,CACjE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAC5C;QACC,CAAC,CAAC,w+BAAw+B;QAC1+B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,cAAc,GAAG;QACrB,kBAAkB;QAClB,mBAAmB,OAAO,EAAE;QAC5B,mBAAmB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;QAC1D,qBAAqB,cAAc,CAAC,GAAG,EAAE;QACzC,kGAAkG;KACnG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,IAAI,YAAY,CAAC;QACtB,GAAG,cAAc;QACjB,SAAS,EAAE,gBAAgB;QAC3B,6EAA6E;QAC7E,oEAAoE;QACpE,YAAY,EAAE,GAAG,YAAY,GAAG,4BAA4B,GAAG,sBAAsB,OAAO,cAAc,EAAE;QAC5G,oBAAoB,EAAE,UAAU,OAAO,EAAE;QACzC,cAAc;QACd,kBAAkB,EAAE,KAAK;QACzB,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,KAAK;QACrB,mBAAmB,EAAE,KAAK;KAC3B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/chat-agents/shared.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAA4B,MAAM,0BAA0B,CAAC;AAqBlF,MAAM,UAAU,oBAAoB,CAAC,gBAAwB,EAAE,OAAoB;IACjF,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,4BAA4B,GAAG;;;itCAG4qC,CAAC;AAEltC,MAAM,UAAU,0BAA0B,CACxC,OAAoB,EACpB,UAAkB,EAClB,GAAW,EACX,cAAuB;IAEvB,MAAM,mBAAmB,GAAG,cAAc;QACxC,CAAC,CAAC,oqBAAoqB;QACtqB,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,cAAc,GAAG;QACrB,kBAAkB;QAClB,mBAAmB,OAAO,EAAE;QAC5B,mBAAmB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;QAC1D,qBAAqB,GAAG,EAAE;QAC1B,kGAAkG;KACnG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,GAAG,UAAU,GAAG,4BAA4B,GAAG,mBAAmB,OAAO,cAAc,EAAE,CAAC;AACnG,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,sBAAsB,CACpC,OAAoB,EACpB,YAAoB,EACpB,OAAyB;IAEzB,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC;IAClF,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,MAAM,gBAAgB,GACpB,gBAAgB,EAAE,UAAU,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI;QACnE,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,cAAc,GAAG,cAAc,CAAC,eAAe,EAAE,IAAI,CACzD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAC5C,CAAC;IAEF,OAAO,IAAI,YAAY,CAAC;QACtB,GAAG,cAAc;QACjB,SAAS,EAAE,gBAAgB;QAC3B,6EAA6E;QAC7E,oEAAoE;QACpE,YAAY,EAAE,0BAA0B,CACtC,OAAO,EACP,YAAY,EACZ,cAAc,CAAC,GAAG,EAClB,cAAc,KAAK,IAAI,CACxB;QACD,oBAAoB,EAAE,UAAU,OAAO,EAAE;QACzC,cAAc;QACd,kBAAkB,EAAE,KAAK;QACzB,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,KAAK;QACrB,mBAAmB,EAAE,KAAK;KAC3B,CAAC,CAAC;AACL,CAAC"}
@@ -21,6 +21,8 @@ describe("specialist chat agents", () => {
21
21
  expect(options.sessionRootDir).toBe("/tmp/gg/chat-sessions/therapist");
22
22
  expect(options.allowedTools).toBeUndefined();
23
23
  expect(options.additionalTools?.map((tool) => tool.name)).toContain("delegate_to_agent");
24
+ expect(options.systemPrompt).toContain("hand the entire conversation");
25
+ expect(options.systemPrompt).toContain("not a one-off subtask");
24
26
  expect(options.systemPrompt).toContain("Durable memory curation:");
25
27
  expect(options.selfCorrectionHooks).toBe(false);
26
28
  });
@@ -34,7 +36,7 @@ describe("specialist chat agents", () => {
34
36
  expect(options.allowedTools).toBeUndefined();
35
37
  expect(options.additionalTools?.map((tool) => tool.name)).toContain("delegate_to_agent");
36
38
  });
37
- it("retains memory tools and dynamic context for delegated specialists without recursive delegation", () => {
39
+ it("retains memory tools and dynamic context when handoff is disabled", () => {
38
40
  const memoryTool = {
39
41
  name: "remember",
40
42
  description: "test memory tool",
@@ -54,6 +56,38 @@ describe("specialist chat agents", () => {
54
56
  expect(options.additionalTools?.map((tool) => tool.name)).toEqual(["remember"]);
55
57
  expect(options.getSystemPromptTail).toBe(getSystemPromptTail);
56
58
  });
59
+ it("hands off the live session while preserving its conversation", async () => {
60
+ const changed = [];
61
+ const agent = createChatAgent("general", {
62
+ provider: "anthropic",
63
+ model: "claude-test",
64
+ cwd: "/tmp/workspace",
65
+ sessionsDir: "/tmp/gg/sessions",
66
+ onAgentChange: (agentId) => {
67
+ changed.push(agentId);
68
+ },
69
+ });
70
+ const internals = agent;
71
+ internals.messages = [
72
+ { role: "system", content: String(internals.opts.systemPrompt) },
73
+ { role: "user", content: "existing conversation sentinel" },
74
+ ];
75
+ const tool = internals.opts.additionalTools?.find((candidate) => candidate.name === "delegate_to_agent");
76
+ const result = await tool?.execute({ agent: "therapist" }, {
77
+ signal: new AbortController().signal,
78
+ });
79
+ expect(String(result)).toContain("Therapist Agent is now the active agent");
80
+ expect(changed).toEqual(["therapist"]);
81
+ expect(agent.getMessages()).toHaveLength(2);
82
+ expect(agent.getMessages()[1]?.content).toBe("existing conversation sentinel");
83
+ expect(agent.getMessages()[0]?.content).toContain(THERAPIST_CHAT_SYSTEM_PROMPT);
84
+ expect(agent.getMessages()[0]?.content).toContain("- Active agent: therapist");
85
+ await tool?.execute({ agent: "general" }, {
86
+ signal: new AbortController().signal,
87
+ });
88
+ expect(changed).toEqual(["therapist", "general"]);
89
+ expect(agent.getMessages()[0]?.content).toContain("- Active agent: general");
90
+ });
57
91
  it("defaults unknown persisted agent ids to General", () => {
58
92
  expect(parseChatAgentId("therapist")).toBe("therapist");
59
93
  expect(parseChatAgentId("research")).toBe("research");
@@ -1 +1 @@
1
- {"version":3,"file":"specialists.test.js","sourceRoot":"","sources":["../../src/chat-agents/specialists.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specialists.test.js","sourceRoot":"","sources":["../../src/chat-agents/specialists.test.ts"],"names":[],"mappings":"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"}
@@ -325,6 +325,8 @@ export declare class AgentSession {
325
325
  listBackgroundProcesses(): BackgroundProcess[];
326
326
  /** Stop a background process by id. Returns a human-readable status string. */
327
327
  killBackgroundProcess(id: string): Promise<string>;
328
+ /** Replace a host-owned system prompt in place without resetting conversation history. */
329
+ setCustomSystemPrompt(systemPrompt: string, promptCacheKeyPrefix?: string): void;
328
330
  /**
329
331
  * Toggle plan mode: flips the shared ref (so tools enforce read-only
330
332
  * restrictions) and rebuilds the system prompt in place so the model is told
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}
@@ -1129,6 +1129,22 @@ export class AgentSession {
1129
1129
  return `No background process with id "${id}"`;
1130
1130
  return this.processManager.stop(id);
1131
1131
  }
1132
+ /** Replace a host-owned system prompt in place without resetting conversation history. */
1133
+ setCustomSystemPrompt(systemPrompt, promptCacheKeyPrefix) {
1134
+ this.customSystemPrompt = systemPrompt;
1135
+ this.baseSystemPrompt = systemPrompt;
1136
+ this.opts.systemPrompt = systemPrompt;
1137
+ if (promptCacheKeyPrefix)
1138
+ this.opts.promptCacheKeyPrefix = promptCacheKeyPrefix;
1139
+ const content = this.withSystemPromptTail(systemPrompt);
1140
+ if (this.messages[0]?.role === "system") {
1141
+ this.messages[0] = { role: "system", content };
1142
+ }
1143
+ else {
1144
+ this.messages.unshift({ role: "system", content });
1145
+ }
1146
+ this.syncUltraOrchestrationPrompt();
1147
+ }
1132
1148
  /**
1133
1149
  * Toggle plan mode: flips the shared ref (so tools enforce read-only
1134
1150
  * restrictions) and rebuilds the system prompt in place so the model is told