@kenkaiiii/ggcoder 5.13.2 → 5.14.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.
Files changed (107) hide show
  1. package/dist/app-sidecar.js +112 -47
  2. package/dist/app-sidecar.js.map +1 -1
  3. package/dist/chat-agents/general.d.ts +7 -0
  4. package/dist/chat-agents/general.d.ts.map +1 -0
  5. package/dist/chat-agents/general.js +16 -0
  6. package/dist/chat-agents/general.js.map +1 -0
  7. package/dist/chat-agents/general.test.d.ts +2 -0
  8. package/dist/chat-agents/general.test.d.ts.map +1 -0
  9. package/dist/chat-agents/general.test.js +47 -0
  10. package/dist/chat-agents/general.test.js.map +1 -0
  11. package/dist/chat-agents/index.d.ts +9 -0
  12. package/dist/chat-agents/index.d.ts.map +1 -0
  13. package/dist/chat-agents/index.js +99 -0
  14. package/dist/chat-agents/index.js.map +1 -0
  15. package/dist/chat-agents/memory.d.ts +53 -0
  16. package/dist/chat-agents/memory.d.ts.map +1 -0
  17. package/dist/chat-agents/memory.js +362 -0
  18. package/dist/chat-agents/memory.js.map +1 -0
  19. package/dist/chat-agents/memory.test.d.ts +2 -0
  20. package/dist/chat-agents/memory.test.d.ts.map +1 -0
  21. package/dist/chat-agents/memory.test.js +155 -0
  22. package/dist/chat-agents/memory.test.js.map +1 -0
  23. package/dist/chat-agents/research.d.ts +7 -0
  24. package/dist/chat-agents/research.d.ts.map +1 -0
  25. package/dist/chat-agents/research.js +18 -0
  26. package/dist/chat-agents/research.js.map +1 -0
  27. package/dist/chat-agents/shared.d.ts +9 -0
  28. package/dist/chat-agents/shared.d.ts.map +1 -0
  29. package/dist/chat-agents/shared.js +44 -0
  30. package/dist/chat-agents/shared.js.map +1 -0
  31. package/dist/chat-agents/specialists.test.d.ts +2 -0
  32. package/dist/chat-agents/specialists.test.d.ts.map +1 -0
  33. package/dist/chat-agents/specialists.test.js +63 -0
  34. package/dist/chat-agents/specialists.test.js.map +1 -0
  35. package/dist/chat-agents/therapist.d.ts +7 -0
  36. package/dist/chat-agents/therapist.d.ts.map +1 -0
  37. package/dist/chat-agents/therapist.js +20 -0
  38. package/dist/chat-agents/therapist.js.map +1 -0
  39. package/dist/chat-agents/types.d.ts +4 -0
  40. package/dist/chat-agents/types.d.ts.map +1 -0
  41. package/dist/chat-agents/types.js +7 -0
  42. package/dist/chat-agents/types.js.map +1 -0
  43. package/dist/core/agent-session-memory-tail.test.d.ts +2 -0
  44. package/dist/core/agent-session-memory-tail.test.d.ts.map +1 -0
  45. package/dist/core/agent-session-memory-tail.test.js +122 -0
  46. package/dist/core/agent-session-memory-tail.test.js.map +1 -0
  47. package/dist/core/agent-session.d.ts +26 -0
  48. package/dist/core/agent-session.d.ts.map +1 -1
  49. package/dist/core/agent-session.js +116 -65
  50. package/dist/core/agent-session.js.map +1 -1
  51. package/dist/core/agents.d.ts +1 -1
  52. package/dist/core/agents.d.ts.map +1 -1
  53. package/dist/core/agents.js +4 -2
  54. package/dist/core/agents.js.map +1 -1
  55. package/dist/core/progress/rebuild.d.ts +3 -3
  56. package/dist/core/progress/rebuild.d.ts.map +1 -1
  57. package/dist/core/progress/rebuild.js +33 -27
  58. package/dist/core/progress/rebuild.js.map +1 -1
  59. package/dist/core/progress/rebuild.test.js +15 -0
  60. package/dist/core/progress/rebuild.test.js.map +1 -1
  61. package/dist/core/project-discovery.d.ts +1 -1
  62. package/dist/core/project-discovery.d.ts.map +1 -1
  63. package/dist/core/project-discovery.js +1 -2
  64. package/dist/core/project-discovery.js.map +1 -1
  65. package/dist/core/project-discovery.test.js +14 -1
  66. package/dist/core/project-discovery.test.js.map +1 -1
  67. package/dist/core/subagent-manager.d.ts.map +1 -1
  68. package/dist/core/subagent-manager.js +5 -1
  69. package/dist/core/subagent-manager.js.map +1 -1
  70. package/dist/core/subagent-manager.test.js +19 -2
  71. package/dist/core/subagent-manager.test.js.map +1 -1
  72. package/dist/modes/json-mode.d.ts.map +1 -1
  73. package/dist/modes/json-mode.js +3 -4
  74. package/dist/modes/json-mode.js.map +1 -1
  75. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  76. package/dist/modes/subagent-worker-mode.js +8 -2
  77. package/dist/modes/subagent-worker-mode.js.map +1 -1
  78. package/dist/tools/generate-image.d.ts.map +1 -1
  79. package/dist/tools/generate-image.js +10 -3
  80. package/dist/tools/generate-image.js.map +1 -1
  81. package/dist/tools/generate-image.test.js +17 -0
  82. package/dist/tools/generate-image.test.js.map +1 -1
  83. package/dist/tools/subagent-shared.d.ts +1 -1
  84. package/dist/tools/subagent-shared.d.ts.map +1 -1
  85. package/dist/tools/subagent-shared.js +3 -3
  86. package/dist/tools/subagent-shared.js.map +1 -1
  87. package/dist/tools/subagent-shared.test.d.ts +2 -0
  88. package/dist/tools/subagent-shared.test.d.ts.map +1 -0
  89. package/dist/tools/subagent-shared.test.js +29 -0
  90. package/dist/tools/subagent-shared.test.js.map +1 -0
  91. package/dist/tools/subagent.js +1 -1
  92. package/dist/tools/subagent.js.map +1 -1
  93. package/dist/tools/subagent.test.js +11 -1
  94. package/dist/tools/subagent.test.js.map +1 -1
  95. package/dist/tools/web-fetch.d.ts +1 -0
  96. package/dist/tools/web-fetch.d.ts.map +1 -1
  97. package/dist/tools/web-fetch.js +112 -35
  98. package/dist/tools/web-fetch.js.map +1 -1
  99. package/dist/tools/web-fetch.test.js +146 -1
  100. package/dist/tools/web-fetch.test.js.map +1 -1
  101. package/dist/tools/web-search.d.ts +10 -0
  102. package/dist/tools/web-search.d.ts.map +1 -1
  103. package/dist/tools/web-search.js +236 -28
  104. package/dist/tools/web-search.js.map +1 -1
  105. package/dist/tools/web-search.test.js +77 -6
  106. package/dist/tools/web-search.test.js.map +1 -1
  107. package/package.json +4 -4
@@ -1,3 +1,4 @@
1
+ import { type AgentTool } from "@kenkaiiii/gg-agent";
1
2
  import { type Message, type Provider, type ThinkingLevel } from "@kenkaiiii/gg-ai";
2
3
  import { EventBus } from "./event-bus.js";
3
4
  import { SlashCommandRegistry } from "./slash-commands.js";
@@ -20,6 +21,8 @@ export interface AgentSessionOptions {
20
21
  cwd: string;
21
22
  baseUrl?: string;
22
23
  systemPrompt?: string;
24
+ /** Synchronous volatile prompt suffix, refreshed immediately before every run. */
25
+ getSystemPromptTail?: () => string;
23
26
  sessionId?: string;
24
27
  continueRecent?: boolean;
25
28
  maxTokens?: number;
@@ -92,6 +95,22 @@ export interface AgentSessionOptions {
92
95
  forceLongCacheRetention?: boolean;
93
96
  /** Hidden persistent subagent workers omit the async orchestration tool suite. */
94
97
  subagentWorker?: boolean;
98
+ /** Session storage root override. Chat agents use a dedicated namespace. */
99
+ sessionRootDir?: string;
100
+ /** Register GG Coder built-in/prompt/custom slash commands. Defaults to true. */
101
+ coderSlashCommands?: boolean;
102
+ /** Enable loop-break, re-grounding, and Ideal review hooks. Defaults to true. */
103
+ selfCorrectionHooks?: boolean;
104
+ /** Load project skills/agents and create local .gg directories. Defaults to true. */
105
+ projectCustomization?: boolean;
106
+ /** Register global + bundled subagents without loading project customization. */
107
+ globalSubagents?: boolean;
108
+ /** Load GG Coder extensions. Defaults to true. */
109
+ loadExtensions?: boolean;
110
+ /** Inject GG Coder's model-specific subagent orchestration prompt. Defaults to true. */
111
+ orchestrationPrompt?: boolean;
112
+ /** Host-provided tools appended to this session only (for example, chat delegation). */
113
+ additionalTools?: AgentTool[];
95
114
  }
96
115
  export interface AgentSessionState {
97
116
  provider: Provider;
@@ -158,6 +177,8 @@ export declare class AgentSession {
158
177
  private maxTokens;
159
178
  private thinkingLevel?;
160
179
  private customSystemPrompt?;
180
+ /** Stable prompt prefix retained separately from the volatile uncached tail. */
181
+ private baseSystemPrompt;
161
182
  /** Shared with the tool layer so plan-mode restrictions read live state. */
162
183
  private planModeRef;
163
184
  /** Path of the approved plan currently being implemented, or undefined. When
@@ -165,6 +186,9 @@ export declare class AgentSession {
165
186
  * model emits step-completion markers the UI's plan-progress widget reads. */
166
187
  private approvedPlanPath?;
167
188
  private sessionId;
189
+ /** Runtime conversation identity for provider transport headers. Transient
190
+ * children need one even though they intentionally have no persisted session. */
191
+ private readonly transportSessionId;
168
192
  private sessionPath;
169
193
  private lastPersistedIndex;
170
194
  /** Current leaf entry ID in the session DAG — used to chain parentIds for branching. */
@@ -317,6 +341,8 @@ export declare class AgentSession {
317
341
  setApprovedPlan(approvedPlanPath: string | undefined): Promise<void>;
318
342
  /** Rebuild messages[0] from current plan-mode + approved-plan state. */
319
343
  private rebuildSystemPromptInPlace;
344
+ private withSystemPromptTail;
345
+ private refreshSystemPromptTail;
320
346
  getMessages(): Message[];
321
347
  /** Ken Kai (mentor) turns recorded against this session, in record order. Used
322
348
  * by the host to interleave Ken's advisory exchanges back into the transcript
@@ -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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"}
@@ -117,6 +117,8 @@ export class AgentSession {
117
117
  maxTokens;
118
118
  thinkingLevel;
119
119
  customSystemPrompt;
120
+ /** Stable prompt prefix retained separately from the volatile uncached tail. */
121
+ baseSystemPrompt = "";
120
122
  /** Shared with the tool layer so plan-mode restrictions read live state. */
121
123
  planModeRef = { current: false };
122
124
  /** Path of the approved plan currently being implemented, or undefined. When
@@ -124,6 +126,9 @@ export class AgentSession {
124
126
  * model emits step-completion markers the UI's plan-progress widget reads. */
125
127
  approvedPlanPath;
126
128
  sessionId = "";
129
+ /** Runtime conversation identity for provider transport headers. Transient
130
+ * children need one even though they intentionally have no persisted session. */
131
+ transportSessionId = crypto.randomUUID();
127
132
  sessionPath = "";
128
133
  lastPersistedIndex = 0;
129
134
  /** Current leaf entry ID in the session DAG — used to chain parentIds for branching. */
@@ -165,24 +170,34 @@ export class AgentSession {
165
170
  await this.settingsManager.load();
166
171
  this.authStorage = new AuthStorage(paths.authFile);
167
172
  await this.authStorage.load();
168
- // Session manager
169
- this.sessionManager = new SessionManager(paths.sessionsDir);
170
- // Ensure project-local .gg directories exist
171
- const localGGDir = path.join(this.cwd, ".gg");
172
- await fs.mkdir(path.join(localGGDir, "skills"), { recursive: true });
173
- await fs.mkdir(path.join(localGGDir, "commands"), { recursive: true });
174
- await fs.mkdir(path.join(localGGDir, "agents"), { recursive: true });
175
- // Discover skills
176
- this.skills = await discoverSkills({
177
- globalSkillsDir: paths.skillsDir,
178
- projectDir: this.cwd,
179
- });
180
- // Discover agents and create tools (with sub-agent support)
181
- const agents = await discoverAgents({
182
- globalAgentsDir: paths.agentsDir,
183
- projectDir: this.cwd,
184
- });
185
- const { tools, processManager, rebuildReadTool, lspManager, subAgentManager } = await createTools(this.cwd, {
173
+ // Session manager. Agent-specific roots keep chat and coder histories isolated.
174
+ this.sessionManager = new SessionManager(this.opts.sessionRootDir ?? paths.sessionsDir);
175
+ const projectCustomization = this.opts.projectCustomization !== false;
176
+ if (projectCustomization) {
177
+ // Ensure project-local .gg directories exist.
178
+ const localGGDir = path.join(this.cwd, ".gg");
179
+ await fs.mkdir(path.join(localGGDir, "skills"), { recursive: true });
180
+ await fs.mkdir(path.join(localGGDir, "commands"), { recursive: true });
181
+ await fs.mkdir(path.join(localGGDir, "agents"), { recursive: true });
182
+ this.skills = await discoverSkills({
183
+ globalSkillsDir: paths.skillsDir,
184
+ projectDir: this.cwd,
185
+ });
186
+ }
187
+ else {
188
+ this.skills = [];
189
+ }
190
+ // Discover agents and create tools (with sub-agent support). Chat sessions
191
+ // can retain bundled workers without loading project/global customization.
192
+ const agents = projectCustomization
193
+ ? await discoverAgents({
194
+ globalAgentsDir: paths.agentsDir,
195
+ projectDir: this.cwd,
196
+ })
197
+ : this.opts.globalSubagents
198
+ ? await discoverAgents({ globalAgentsDir: paths.agentsDir })
199
+ : [];
200
+ const { tools: builtInTools, processManager, rebuildReadTool, lspManager, subAgentManager, } = await createTools(this.cwd, {
186
201
  agents,
187
202
  skills: this.skills,
188
203
  provider: this.provider,
@@ -208,6 +223,7 @@ export class AgentSession {
208
223
  }
209
224
  : {}),
210
225
  });
226
+ const tools = [...builtInTools, ...(this.opts.additionalTools ?? [])];
211
227
  // Apply the optional tool allow-list (read-only advisory sessions). Filtering
212
228
  // here means the excluded tools are never registered with the agent loop, so
213
229
  // a hallucinated call can't mutate the repo — and buildSystemPrompt below is
@@ -234,7 +250,8 @@ export class AgentSession {
234
250
  }
235
251
  const basePrompt = this.customSystemPrompt ??
236
252
  (await buildSystemPrompt(this.cwd, this.skills, false, undefined, this.tools.map((tool) => tool.name), undefined, this.provider));
237
- this.messages = [{ role: "system", content: basePrompt }];
253
+ this.baseSystemPrompt = basePrompt;
254
+ this.messages = [{ role: "system", content: this.withSystemPromptTail(basePrompt) }];
238
255
  this.syncUltraOrchestrationPrompt();
239
256
  // Load or create session. Transient sessions (subagent spawns) never
240
257
  // touch the session store — sessionPath stays empty and persistMessage
@@ -257,48 +274,46 @@ export class AgentSession {
257
274
  else {
258
275
  await this.createNewSession();
259
276
  }
260
- // Register slash commands
261
- const builtins = createBuiltinCommands();
262
- for (const cmd of builtins) {
263
- this.slashCommands.register(cmd);
264
- }
265
- // Wire up /help to show all registered + prompt + custom commands
266
- const helpCmd = this.slashCommands.get("help");
267
- if (helpCmd) {
268
- const registry = this.slashCommands;
269
- const cwd = this.cwd;
270
- helpCmd.execute = async () => {
271
- const all = registry.getAll();
272
- const lines = all.map((c) => ` /${c.name}${c.aliases.length ? ` (${c.aliases.map((a) => "/" + a).join(", ")})` : ""} — ${c.description}`);
273
- // Add prompt-template commands
274
- if (PROMPT_COMMANDS.length > 0) {
275
- lines.push("");
276
- lines.push("Prompt commands:");
277
- for (const cmd of PROMPT_COMMANDS) {
278
- lines.push(` /${cmd.name}${cmd.aliases.length ? ` (${cmd.aliases.map((a) => "/" + a).join(", ")})` : ""} — ${cmd.description}`);
277
+ // GG Coder owns its command registry. Other agents start with an isolated
278
+ // empty registry and can register their own commands in their own file.
279
+ if (this.opts.coderSlashCommands !== false) {
280
+ const builtins = createBuiltinCommands();
281
+ for (const cmd of builtins)
282
+ this.slashCommands.register(cmd);
283
+ // Wire up /help to show all registered + prompt + custom commands.
284
+ const helpCmd = this.slashCommands.get("help");
285
+ if (helpCmd) {
286
+ const registry = this.slashCommands;
287
+ const cwd = this.cwd;
288
+ helpCmd.execute = async () => {
289
+ const all = registry.getAll();
290
+ const lines = all.map((c) => ` /${c.name}${c.aliases.length ? ` (${c.aliases.map((a) => "/" + a).join(", ")})` : ""} — ${c.description}`);
291
+ if (PROMPT_COMMANDS.length > 0) {
292
+ lines.push("", "Prompt commands:");
293
+ for (const cmd of PROMPT_COMMANDS) {
294
+ lines.push(` /${cmd.name}${cmd.aliases.length ? ` (${cmd.aliases.map((a) => "/" + a).join(", ")})` : ""} — ${cmd.description}`);
295
+ }
279
296
  }
280
- }
281
- // Add custom commands from .gg/commands/
282
- const customCmds = await loadCustomCommands(cwd);
283
- if (customCmds.length > 0) {
284
- lines.push("");
285
- lines.push("Custom commands:");
286
- for (const cmd of customCmds) {
287
- lines.push(` /${cmd.name} — ${cmd.description}`);
297
+ const customCmds = await loadCustomCommands(cwd);
298
+ if (customCmds.length > 0) {
299
+ lines.push("", "Custom commands:");
300
+ for (const cmd of customCmds)
301
+ lines.push(` /${cmd.name} — ${cmd.description}`);
288
302
  }
289
- }
290
- return "Available commands:\n" + lines.join("\n");
303
+ return "Available commands:\n" + lines.join("\n");
304
+ };
305
+ }
306
+ }
307
+ if (this.opts.loadExtensions !== false) {
308
+ const extContext = {
309
+ eventBus: this.eventBus,
310
+ registerTool: (tool) => this.tools.push(tool),
311
+ registerSlashCommand: (cmd) => this.slashCommands.register(cmd),
312
+ cwd: this.cwd,
313
+ settingsManager: this.settingsManager,
291
314
  };
315
+ await this.extensionLoader.loadAll(paths.extensionsDir, extContext);
292
316
  }
293
- // Load extensions
294
- const extContext = {
295
- eventBus: this.eventBus,
296
- registerTool: (tool) => this.tools.push(tool),
297
- registerSlashCommand: (cmd) => this.slashCommands.register(cmd),
298
- cwd: this.cwd,
299
- settingsManager: this.settingsManager,
300
- };
301
- await this.extensionLoader.loadAll(paths.extensionsDir, extContext);
302
317
  this.eventBus.emit("session_start", { sessionId: this.sessionId });
303
318
  }
304
319
  /**
@@ -414,12 +429,17 @@ export class AgentSession {
414
429
  * Process user input. Handles slash commands or runs agent loop.
415
430
  */
416
431
  async prompt(content) {
417
- // Check for slash commands
418
- const parsed = this.slashCommands.parse(content);
432
+ const parsedInput = this.slashCommands.parse(content);
433
+ const coderCommands = this.opts.coderSlashCommands !== false;
434
+ // Non-coder agents only intercept commands registered in their own registry.
435
+ // Unknown `/text` stays a normal conversational prompt.
436
+ const parsed = parsedInput && (coderCommands || this.slashCommands.get(parsedInput.name))
437
+ ? parsedInput
438
+ : null;
419
439
  if (parsed) {
420
- // Check prompt-template commands first (built-in + custom)
421
- const builtinPromptCmd = getPromptCommand(parsed.name);
422
- const customCmds = await loadCustomCommands(this.cwd);
440
+ // GG Coder alone can resolve its prompt-template and project commands.
441
+ const builtinPromptCmd = coderCommands ? getPromptCommand(parsed.name) : undefined;
442
+ const customCmds = coderCommands ? await loadCustomCommands(this.cwd) : [];
423
443
  const customPromptCmd = !builtinPromptCmd
424
444
  ? customCmds.find((c) => c.name === parsed.name)
425
445
  : undefined;
@@ -638,6 +658,8 @@ export class AgentSession {
638
658
  return { role: "user", content: parts };
639
659
  });
640
660
  }
661
+ if (this.opts.selfCorrectionHooks === false)
662
+ return null;
641
663
  if (!this.settingsManager.get("idealReviewEnabled"))
642
664
  return null;
643
665
  if (!this.loopBreakInjected) {
@@ -665,6 +687,8 @@ export class AgentSession {
665
687
  * otherwise finish and the change set is substantial enough to warrant it.
666
688
  */
667
689
  getHookFollowUpMessages() {
690
+ if (this.opts.selfCorrectionHooks === false)
691
+ return null;
668
692
  if (!this.settingsManager.get("idealReviewEnabled"))
669
693
  return null;
670
694
  if (this.idealReviewInjected)
@@ -681,6 +705,7 @@ export class AgentSession {
681
705
  }
682
706
  /** Auto-compact if needed, run agent loop with auth retry, and persist messages. */
683
707
  async runLoop() {
708
+ this.refreshSystemPromptTail();
684
709
  // One-shot cache-key marker per session so turn_end cacheRead numbers
685
710
  // in the log can be traced back to a specific routing namespace —
686
711
  // particularly useful when sub-agents inherit `parentKey:subagent`.
@@ -746,6 +771,7 @@ export class AgentSession {
746
771
  baseUrl: effectiveBaseUrl,
747
772
  signal: this.opts.signal,
748
773
  accountId,
774
+ transportSessionId: this.sessionId || this.transportSessionId,
749
775
  projectId,
750
776
  // Kimi For Coding gates the managed endpoint on coding-agent identity
751
777
  // headers; attach them only when the Kimi OAuth token is in use.
@@ -838,6 +864,10 @@ export class AgentSession {
838
864
  if (provider)
839
865
  this.provider = provider;
840
866
  this.model = model;
867
+ // Keep host-provided option closures (notably chat delegation) aligned with
868
+ // the live selection after an in-session model switch.
869
+ this.opts.provider = this.provider;
870
+ this.opts.model = this.model;
841
871
  this.syncUltraOrchestrationPrompt();
842
872
  setEstimatorModel(model);
843
873
  // maxTokens must follow the active model — it was frozen at the boot
@@ -982,7 +1012,8 @@ export class AgentSession {
982
1012
  this.appMarkers = [];
983
1013
  const basePrompt = this.customSystemPrompt ??
984
1014
  (await buildSystemPrompt(this.cwd, this.skills, false, undefined, this.tools.map((tool) => tool.name), undefined, this.provider));
985
- this.messages = [{ role: "system", content: basePrompt }];
1015
+ this.baseSystemPrompt = basePrompt;
1016
+ this.messages = [{ role: "system", content: this.withSystemPromptTail(basePrompt) }];
986
1017
  this.syncUltraOrchestrationPrompt();
987
1018
  // Fresh conversation — new entries must not chain onto the old DAG's leaf.
988
1019
  this.currentLeafId = null;
@@ -1127,14 +1158,32 @@ export class AgentSession {
1127
1158
  if (this.customSystemPrompt)
1128
1159
  return;
1129
1160
  const rebuilt = await buildSystemPrompt(this.cwd, this.skills, this.planModeRef.current, this.approvedPlanPath, this.tools.map((tool) => tool.name), undefined, this.provider);
1161
+ this.baseSystemPrompt = rebuilt;
1162
+ const content = this.withSystemPromptTail(rebuilt);
1130
1163
  if (this.messages[0]?.role === "system") {
1131
- this.messages[0] = { role: "system", content: rebuilt };
1164
+ this.messages[0] = { role: "system", content };
1132
1165
  }
1133
1166
  else {
1134
- this.messages.unshift({ role: "system", content: rebuilt });
1167
+ this.messages.unshift({ role: "system", content });
1135
1168
  }
1136
1169
  this.syncUltraOrchestrationPrompt();
1137
1170
  }
1171
+ withSystemPromptTail(basePrompt) {
1172
+ if (!this.opts.getSystemPromptTail)
1173
+ return basePrompt;
1174
+ return `${basePrompt}\n\n<!-- uncached -->\n${this.opts.getSystemPromptTail()}`;
1175
+ }
1176
+ refreshSystemPromptTail() {
1177
+ if (!this.opts.getSystemPromptTail)
1178
+ return;
1179
+ const content = this.withSystemPromptTail(this.baseSystemPrompt);
1180
+ if (this.messages[0]?.role === "system") {
1181
+ this.messages[0] = { role: "system", content };
1182
+ }
1183
+ else {
1184
+ this.messages.unshift({ role: "system", content });
1185
+ }
1186
+ }
1138
1187
  getMessages() {
1139
1188
  return this.messages;
1140
1189
  }
@@ -1371,6 +1420,8 @@ export class AgentSession {
1371
1420
  }
1372
1421
  /** Sol/Terra Ultra delegates proactively; lower levels require an explicit request. */
1373
1422
  syncUltraOrchestrationPrompt() {
1423
+ if (this.opts.orchestrationPrompt === false)
1424
+ return;
1374
1425
  const systemMessage = this.messages[0];
1375
1426
  if (systemMessage?.role !== "system" || typeof systemMessage.content !== "string")
1376
1427
  return;