@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.
- package/dist/app-sidecar.js +112 -47
- package/dist/app-sidecar.js.map +1 -1
- package/dist/chat-agents/general.d.ts +7 -0
- package/dist/chat-agents/general.d.ts.map +1 -0
- package/dist/chat-agents/general.js +16 -0
- package/dist/chat-agents/general.js.map +1 -0
- package/dist/chat-agents/general.test.d.ts +2 -0
- package/dist/chat-agents/general.test.d.ts.map +1 -0
- package/dist/chat-agents/general.test.js +47 -0
- package/dist/chat-agents/general.test.js.map +1 -0
- package/dist/chat-agents/index.d.ts +9 -0
- package/dist/chat-agents/index.d.ts.map +1 -0
- package/dist/chat-agents/index.js +99 -0
- package/dist/chat-agents/index.js.map +1 -0
- package/dist/chat-agents/memory.d.ts +53 -0
- package/dist/chat-agents/memory.d.ts.map +1 -0
- package/dist/chat-agents/memory.js +362 -0
- package/dist/chat-agents/memory.js.map +1 -0
- package/dist/chat-agents/memory.test.d.ts +2 -0
- package/dist/chat-agents/memory.test.d.ts.map +1 -0
- package/dist/chat-agents/memory.test.js +155 -0
- package/dist/chat-agents/memory.test.js.map +1 -0
- package/dist/chat-agents/research.d.ts +7 -0
- package/dist/chat-agents/research.d.ts.map +1 -0
- package/dist/chat-agents/research.js +18 -0
- package/dist/chat-agents/research.js.map +1 -0
- package/dist/chat-agents/shared.d.ts +9 -0
- package/dist/chat-agents/shared.d.ts.map +1 -0
- package/dist/chat-agents/shared.js +44 -0
- package/dist/chat-agents/shared.js.map +1 -0
- package/dist/chat-agents/specialists.test.d.ts +2 -0
- package/dist/chat-agents/specialists.test.d.ts.map +1 -0
- package/dist/chat-agents/specialists.test.js +63 -0
- package/dist/chat-agents/specialists.test.js.map +1 -0
- package/dist/chat-agents/therapist.d.ts +7 -0
- package/dist/chat-agents/therapist.d.ts.map +1 -0
- package/dist/chat-agents/therapist.js +20 -0
- package/dist/chat-agents/therapist.js.map +1 -0
- package/dist/chat-agents/types.d.ts +4 -0
- package/dist/chat-agents/types.d.ts.map +1 -0
- package/dist/chat-agents/types.js +7 -0
- package/dist/chat-agents/types.js.map +1 -0
- package/dist/core/agent-session-memory-tail.test.d.ts +2 -0
- package/dist/core/agent-session-memory-tail.test.d.ts.map +1 -0
- package/dist/core/agent-session-memory-tail.test.js +122 -0
- package/dist/core/agent-session-memory-tail.test.js.map +1 -0
- package/dist/core/agent-session.d.ts +26 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +116 -65
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +1 -1
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +4 -2
- package/dist/core/agents.js.map +1 -1
- package/dist/core/progress/rebuild.d.ts +3 -3
- package/dist/core/progress/rebuild.d.ts.map +1 -1
- package/dist/core/progress/rebuild.js +33 -27
- package/dist/core/progress/rebuild.js.map +1 -1
- package/dist/core/progress/rebuild.test.js +15 -0
- package/dist/core/progress/rebuild.test.js.map +1 -1
- package/dist/core/project-discovery.d.ts +1 -1
- package/dist/core/project-discovery.d.ts.map +1 -1
- package/dist/core/project-discovery.js +1 -2
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/project-discovery.test.js +14 -1
- package/dist/core/project-discovery.test.js.map +1 -1
- package/dist/core/subagent-manager.d.ts.map +1 -1
- package/dist/core/subagent-manager.js +5 -1
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-manager.test.js +19 -2
- package/dist/core/subagent-manager.test.js.map +1 -1
- package/dist/modes/json-mode.d.ts.map +1 -1
- package/dist/modes/json-mode.js +3 -4
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
- package/dist/modes/subagent-worker-mode.js +8 -2
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/tools/generate-image.d.ts.map +1 -1
- package/dist/tools/generate-image.js +10 -3
- package/dist/tools/generate-image.js.map +1 -1
- package/dist/tools/generate-image.test.js +17 -0
- package/dist/tools/generate-image.test.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +1 -1
- package/dist/tools/subagent-shared.d.ts.map +1 -1
- package/dist/tools/subagent-shared.js +3 -3
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent-shared.test.d.ts +2 -0
- package/dist/tools/subagent-shared.test.d.ts.map +1 -0
- package/dist/tools/subagent-shared.test.js +29 -0
- package/dist/tools/subagent-shared.test.js.map +1 -0
- package/dist/tools/subagent.js +1 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/subagent.test.js +11 -1
- package/dist/tools/subagent.test.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +1 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +112 -35
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +146 -1
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/tools/web-search.d.ts +10 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +236 -28
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.js +77 -6
- package/dist/tools/web-search.test.js.map +1 -1
- 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":"
|
|
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
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
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.
|
|
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
|
-
//
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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
|
-
|
|
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
|
-
|
|
418
|
-
const
|
|
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
|
-
//
|
|
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.
|
|
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
|
|
1164
|
+
this.messages[0] = { role: "system", content };
|
|
1132
1165
|
}
|
|
1133
1166
|
else {
|
|
1134
|
-
this.messages.unshift({ role: "system", content
|
|
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;
|