@kenkaiiii/ggcoder 5.77.0 → 5.79.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/autopilot-runner.js +2 -5
- package/dist/app-sidecar/autopilot-runner.js.map +1 -1
- package/dist/app-sidecar/goal-routes.d.ts +26 -0
- package/dist/app-sidecar/goal-routes.js +444 -0
- package/dist/app-sidecar/goal-routes.js.map +1 -0
- package/dist/app-sidecar/history-routes.d.ts +13 -0
- package/dist/app-sidecar/history-routes.js +36 -25
- package/dist/app-sidecar/history-routes.js.map +1 -1
- package/dist/app-sidecar/route-context.d.ts +12 -0
- package/dist/app-sidecar/run-control-routes.js +2 -1
- package/dist/app-sidecar/run-control-routes.js.map +1 -1
- package/dist/app-sidecar/session-routes.js +41 -0
- package/dist/app-sidecar/session-routes.js.map +1 -1
- package/dist/app-sidecar/session-types.d.ts +2 -0
- package/dist/app-sidecar/workspace-routes.js +3 -0
- package/dist/app-sidecar/workspace-routes.js.map +1 -1
- package/dist/app-sidecar.js +113 -9
- package/dist/app-sidecar.js.map +1 -1
- package/dist/core/acceptance-checks.js +17 -4
- package/dist/core/acceptance-checks.js.map +1 -1
- package/dist/core/agent-notifications.d.ts +1 -1
- package/dist/core/agent-session/verification-tracker.d.ts +5 -1
- package/dist/core/agent-session/verification-tracker.js +25 -6
- package/dist/core/agent-session/verification-tracker.js.map +1 -1
- package/dist/core/agent-session.d.ts +50 -0
- package/dist/core/agent-session.js +49 -11
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/ask-user.d.ts +11 -0
- package/dist/core/ask-user.js +6 -1
- package/dist/core/ask-user.js.map +1 -1
- package/dist/core/autopilot-cycle.d.ts +2 -0
- package/dist/core/autopilot-cycle.js +21 -2
- package/dist/core/autopilot-cycle.js.map +1 -1
- package/dist/core/context-files.d.ts +8 -0
- package/dist/core/context-files.js +46 -0
- package/dist/core/context-files.js.map +1 -0
- package/dist/core/goals-store.d.ts +208 -0
- package/dist/core/goals-store.js +520 -0
- package/dist/core/goals-store.js.map +1 -0
- package/dist/core/project-discovery.d.ts +7 -0
- package/dist/core/project-discovery.js +8 -2
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/prompt-commands.js +29 -4
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/session-manager.d.ts +7 -1
- package/dist/core/session-manager.js +17 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-storage.js +5 -1
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +51 -0
- package/dist/core/subagent-manager.js +95 -15
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-store.js +2 -1
- package/dist/core/subagent-store.js.map +1 -1
- package/dist/core/verification-evidence.d.ts +13 -2
- package/dist/core/verification-evidence.js +256 -3
- package/dist/core/verification-evidence.js.map +1 -1
- package/dist/goals-agent/goal-team.d.ts +2 -0
- package/dist/goals-agent/goal-team.js +82 -0
- package/dist/goals-agent/goal-team.js.map +1 -0
- package/dist/goals-agent/goals-agent.d.ts +90 -0
- package/dist/goals-agent/goals-agent.js +246 -0
- package/dist/goals-agent/goals-agent.js.map +1 -0
- package/dist/modes/subagent-worker-mode.d.ts +12 -0
- package/dist/modes/subagent-worker-mode.js +22 -1
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/system-prompt.js +20 -11
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash-read-evidence.d.ts +13 -0
- package/dist/tools/bash-read-evidence.js +48 -1
- package/dist/tools/bash-read-evidence.js.map +1 -1
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.js +8 -4
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts +1 -0
- package/dist/tools/edit.js +84 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/index.d.ts +7 -1
- package/dist/tools/index.js +13 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-only-bash.js +3 -0
- package/dist/tools/read-only-bash.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +6 -12
- package/dist/tools/read-tracker.js +21 -36
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/read.js +2 -2
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/subagent-control.js +22 -3
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/write.js +110 -8
- package/dist/tools/write.js.map +1 -1
- package/package.json +4 -4
|
@@ -21,7 +21,11 @@ export declare class VerificationTracker {
|
|
|
21
21
|
private readonly fileEditCounts;
|
|
22
22
|
private readonly toolCalls;
|
|
23
23
|
private readonly backgroundVerification;
|
|
24
|
-
|
|
24
|
+
/** The bash tool runs under bash with pipefail (not the Windows cmd.exe
|
|
25
|
+
* fallback), so checks with read-only commands around them may count. */
|
|
26
|
+
private readonly posixShell;
|
|
27
|
+
constructor(gate: VerificationGate, cwd: string, listProcesses: () => BackgroundProcess[], posixShell?: boolean);
|
|
28
|
+
private classify;
|
|
25
29
|
recordFileMutated(relative: string): void;
|
|
26
30
|
/** Per-run reset of mutated files and in-flight calls. */
|
|
27
31
|
resetRun(): void;
|
|
@@ -3,6 +3,7 @@ import { editTargetPaths } from "../../tools/edit-targets.js";
|
|
|
3
3
|
import { isCheckOwnFile, isCodeFilePath, isVerificationCommand, } from "../verification-gate.js";
|
|
4
4
|
import { classifyVerificationCommand } from "../verification-evidence.js";
|
|
5
5
|
import { captureVerificationSnapshot } from "../verification-snapshot.js";
|
|
6
|
+
import { resolveShell } from "../shell.js";
|
|
6
7
|
/**
|
|
7
8
|
* Host-observed verification evidence: which files this run mutated, which
|
|
8
9
|
* tool calls are in flight (with their pre-run workspace snapshot), and which
|
|
@@ -16,10 +17,17 @@ export class VerificationTracker {
|
|
|
16
17
|
fileEditCounts = new Map();
|
|
17
18
|
toolCalls = new Map();
|
|
18
19
|
backgroundVerification = new Map();
|
|
19
|
-
|
|
20
|
+
/** The bash tool runs under bash with pipefail (not the Windows cmd.exe
|
|
21
|
+
* fallback), so checks with read-only commands around them may count. */
|
|
22
|
+
posixShell;
|
|
23
|
+
constructor(gate, cwd, listProcesses, posixShell = !resolveShell("").isCmdFallback) {
|
|
20
24
|
this.gate = gate;
|
|
21
25
|
this.cwd = cwd;
|
|
22
26
|
this.listProcesses = listProcesses;
|
|
27
|
+
this.posixShell = posixShell;
|
|
28
|
+
}
|
|
29
|
+
classify(command) {
|
|
30
|
+
return classifyVerificationCommand(command, { posixShell: this.posixShell });
|
|
23
31
|
}
|
|
24
32
|
recordFileMutated(relative) {
|
|
25
33
|
this.fileEditCounts.set(relative, (this.fileEditCounts.get(relative) ?? 0) + 1);
|
|
@@ -51,7 +59,7 @@ export class VerificationTracker {
|
|
|
51
59
|
};
|
|
52
60
|
this.toolCalls.set(event.toolCallId, tracked);
|
|
53
61
|
const startClassification = event.name === "bash" && typeof event.args?.command === "string"
|
|
54
|
-
?
|
|
62
|
+
? this.classify(event.args.command)
|
|
55
63
|
: null;
|
|
56
64
|
if (startClassification &&
|
|
57
65
|
typeof event.args?.command === "string" &&
|
|
@@ -118,7 +126,7 @@ export class VerificationTracker {
|
|
|
118
126
|
}
|
|
119
127
|
if (args && call && name === "bash") {
|
|
120
128
|
const command = typeof args.command === "string" ? args.command : "";
|
|
121
|
-
const classification =
|
|
129
|
+
const classification = this.classify(command);
|
|
122
130
|
if (args.review === true && event.result === REVIEW_REJECTED_BEFORE_START) {
|
|
123
131
|
// The core tool rejected its arguments BEFORE spawning. Never mint
|
|
124
132
|
// a pass, or poison the failed-check ledger with an unexecuted check.
|
|
@@ -221,16 +229,27 @@ export class VerificationTracker {
|
|
|
221
229
|
const after = check.sourceSnapshot
|
|
222
230
|
? await captureVerificationSnapshot(this.cwd, [...this.fileEditCounts.keys()])
|
|
223
231
|
: null;
|
|
232
|
+
const classification = this.classify(check.command);
|
|
233
|
+
const recordFailure = (revision) => {
|
|
234
|
+
if (classification.ambiguousFailure) {
|
|
235
|
+
this.gate.recordRejectedCheck(check.command, "exit status cannot tell a failed check from a failed read-only command");
|
|
236
|
+
}
|
|
237
|
+
else if (revision === undefined) {
|
|
238
|
+
this.gate.recordFailedVerification(check.command);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.gate.recordFailedVerification(check.command, revision);
|
|
242
|
+
}
|
|
243
|
+
};
|
|
224
244
|
if (after === null || after !== check.sourceSnapshot) {
|
|
225
245
|
this.gate.requireFreshVerification(true);
|
|
226
246
|
this.gate.recordRejectedCheck(check.command, after === null
|
|
227
247
|
? "Workspace inputs could not be compared; run a read-only check after the command"
|
|
228
248
|
: "Command changed workspace inputs; run checks against the changed source");
|
|
229
249
|
if (!passed)
|
|
230
|
-
|
|
250
|
+
recordFailure();
|
|
231
251
|
}
|
|
232
252
|
else if (passed) {
|
|
233
|
-
const classification = classifyVerificationCommand(check.command);
|
|
234
253
|
if (classification.snapshotPreserveOnly) {
|
|
235
254
|
this.gate.recordRejectedCheck(check.command, classification.reason);
|
|
236
255
|
}
|
|
@@ -239,7 +258,7 @@ export class VerificationTracker {
|
|
|
239
258
|
}
|
|
240
259
|
}
|
|
241
260
|
else {
|
|
242
|
-
|
|
261
|
+
recordFailure(check.revision);
|
|
243
262
|
}
|
|
244
263
|
}
|
|
245
264
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-tracker.js","sourceRoot":"","sources":["../../../src/core/agent-session/verification-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,GAEtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"verification-tracker.js","sourceRoot":"","sources":["../../../src/core/agent-session/verification-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,12 @@ import { SlashCommandRegistry } from "./slash-commands.js";
|
|
|
6
6
|
import { type BranchInfo, type KenTurnPayload, type AutopilotMarkerPayload, type AppMarkerPayload, type RunOutcome, type TurnMetricPayload } from "./session-manager.js";
|
|
7
7
|
import { type Skill } from "./skills.js";
|
|
8
8
|
import type { BackgroundProcess } from "./process-manager.js";
|
|
9
|
+
import { type ChildModelPick, type SubAgentSnapshot } from "./subagent-manager.js";
|
|
9
10
|
import type { MCPElicitHandler } from "./mcp/index.js";
|
|
10
11
|
import { type ContextLimits } from "./context-limits.js";
|
|
11
12
|
import { type ImportForeignTranscriptResult } from "./foreign-session-import.js";
|
|
12
13
|
import { type CacheExpiryStatus } from "./cache-expiry.js";
|
|
14
|
+
import { type AgentDefinition } from "./agents.js";
|
|
13
15
|
import { type EnhanceResult } from "../utils/prompt-enhancer.js";
|
|
14
16
|
import type { VerificationEvidence } from "./verification-evidence.js";
|
|
15
17
|
/** A chat attachment (image / video / other file) prepared for the model. The
|
|
@@ -122,6 +124,45 @@ export interface AgentSessionOptions {
|
|
|
122
124
|
* UI. Omitted by callers that don't want plan mode (CLI wires its own).
|
|
123
125
|
*/
|
|
124
126
|
onEnterPlan?: (reason?: string) => void | Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Built-in tools to keep in the core set instead of the deferred
|
|
129
|
+
* tool_search catalog: for a specialist whose job is a deferred tool (GG
|
|
130
|
+
* Goals orchestrates with spawn_agent and friends). Fixed for the session.
|
|
131
|
+
*/
|
|
132
|
+
coreTools?: readonly string[];
|
|
133
|
+
/**
|
|
134
|
+
* Default provider/model for the workers this session spawns, when their
|
|
135
|
+
* agent names no model of its own. Read at spawn time.
|
|
136
|
+
*/
|
|
137
|
+
getChildModel?: () => ChildModelPick | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Wrap each built-in tool once, at registration. Must keep the tool's name,
|
|
140
|
+
* description and parameters (only `execute` may change), so the tool block
|
|
141
|
+
* stays prompt-cache stable. Used by GG Goals to gate its own editing.
|
|
142
|
+
*/
|
|
143
|
+
wrapTool?: (tool: AgentTool) => AgentTool;
|
|
144
|
+
/**
|
|
145
|
+
* Built-in tools this session never has, removed at registration (before
|
|
146
|
+
* tiering) and left out of the system prompt's Tools section. Unlike
|
|
147
|
+
* `allowedTools`, the rest of the tool set and its tiering are untouched.
|
|
148
|
+
* Fixed for the session, so the cached tool block never changes. Used by
|
|
149
|
+
* GG Goals, which never edits or runs anything itself.
|
|
150
|
+
*/
|
|
151
|
+
withoutTools?: readonly string[];
|
|
152
|
+
/**
|
|
153
|
+
* A fixed team of sub-agents, replacing agent discovery (project, global
|
|
154
|
+
* and bundled): the only agents spawn_agent and subagent can start. Used by
|
|
155
|
+
* GG Goals, whose workers follow their own rules (goals-agent/goal-team.ts).
|
|
156
|
+
*/
|
|
157
|
+
subAgents?: readonly AgentDefinition[];
|
|
158
|
+
/**
|
|
159
|
+
* Start every spawned child with this session's extra workspace roots too
|
|
160
|
+
* (less the folder it works in), so it can read and change all of them.
|
|
161
|
+
* GG Goals' workers work across all of a goal's attached folders.
|
|
162
|
+
*/
|
|
163
|
+
shareRootsWithSubAgents?: boolean;
|
|
164
|
+
/** The sub-agent a spawned child is when the spawn names none (one of `subAgents`). */
|
|
165
|
+
defaultSubAgent?: string;
|
|
125
166
|
onExitPlan?: (planPath: string) => Promise<ToolExecuteResult>;
|
|
126
167
|
/**
|
|
127
168
|
* If provided, the session's tool set is filtered to ONLY these tool names
|
|
@@ -671,6 +712,15 @@ export declare class AgentSession {
|
|
|
671
712
|
/** Clear the queue, returning the combined text (to restore to the composer).
|
|
672
713
|
* Queued attachments are dropped on cancel — the composer only restores text. */
|
|
673
714
|
drainQueue(): string;
|
|
715
|
+
/**
|
|
716
|
+
* Tell the agent a new fact at its next turn, as a short hidden message
|
|
717
|
+
* appended after the cached prompt (the same channel as a finished worker),
|
|
718
|
+
* so a mid-session change reaches it without re-rendering the prompt. A
|
|
719
|
+
* later note with the same id replaces one not yet delivered.
|
|
720
|
+
*/
|
|
721
|
+
notify(id: string, text: string): void;
|
|
722
|
+
/** This session's sub-agents (workers), newest-state, including ones restored after a restart. */
|
|
723
|
+
listSubAgents(): SubAgentSnapshot[];
|
|
674
724
|
/** Snapshot of background processes (bash run_in_background), newest-state. */
|
|
675
725
|
listBackgroundProcesses(): BackgroundProcess[];
|
|
676
726
|
/** Stop a background process by id. Returns a human-readable status string. */
|
|
@@ -26,7 +26,7 @@ import { createTools, createWebSearchTool, } from "../tools/index.js";
|
|
|
26
26
|
import { partitionToolsByTier } from "../tools/tool-tiers.js";
|
|
27
27
|
import { buildProcessCompletionFollowUp } from "./process-gate.js";
|
|
28
28
|
import { PLAN_SUBMISSION_NUDGE, shouldNudgePlanSubmission } from "./plan-submission-gate.js";
|
|
29
|
-
import { buildSubAgentCompletionFollowUp } from "./subagent-manager.js";
|
|
29
|
+
import { buildSubAgentCompletionFollowUp, } from "./subagent-manager.js";
|
|
30
30
|
import { applyAsyncSubagentPolicy } from "./subagent-policy.js";
|
|
31
31
|
import { resolveResponsesLite, resolveStrictTools, } from "./codex-request-shape.js";
|
|
32
32
|
import { subAgentDescription } from "../tools/subagent.js";
|
|
@@ -306,7 +306,10 @@ export class AgentSession {
|
|
|
306
306
|
// Session manager. Agent-specific roots keep chat and coder histories isolated.
|
|
307
307
|
this.sessionManager = new SessionManager(this.opts.sessionRootDir ?? paths.sessionsDir);
|
|
308
308
|
const projectCustomization = this.opts.projectCustomization !== false;
|
|
309
|
-
|
|
309
|
+
// A sub-agent worker never creates them: the session that owns the
|
|
310
|
+
// project does. GG Goals' workers work in the user's attached folders,
|
|
311
|
+
// which mustn't gain empty .gg folders as a side effect.
|
|
312
|
+
if (projectCustomization && !this.opts.subagentWorker) {
|
|
310
313
|
// Ensure project-local .gg directories exist.
|
|
311
314
|
const localGGDir = path.join(this.cwd, ".gg");
|
|
312
315
|
await fs.mkdir(path.join(localGGDir, "skills"), { recursive: true });
|
|
@@ -327,16 +330,20 @@ export class AgentSession {
|
|
|
327
330
|
}
|
|
328
331
|
// Discover agents and create tools (with sub-agent support). Chat sessions
|
|
329
332
|
// can retain bundled workers without loading project/global customization.
|
|
330
|
-
const agents =
|
|
331
|
-
?
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
:
|
|
333
|
+
const agents = this.opts.subAgents
|
|
334
|
+
? [...this.opts.subAgents]
|
|
335
|
+
: projectCustomization
|
|
336
|
+
? await discoverAgents({
|
|
337
|
+
globalAgentsDir: paths.agentsDir,
|
|
338
|
+
projectDir: this.cwd,
|
|
339
|
+
})
|
|
340
|
+
: this.opts.globalSubagents
|
|
341
|
+
? await discoverAgents({ globalAgentsDir: paths.agentsDir })
|
|
342
|
+
: [];
|
|
338
343
|
const { tools: builtInTools, processManager, rebuildReadTool, clearReadTracker, recordBashReads, lspManager, debugManager, subAgentManager, } = await createTools(this.cwd, {
|
|
339
344
|
agents,
|
|
345
|
+
shareWorkspaceRoots: this.opts.shareRootsWithSubAgents,
|
|
346
|
+
defaultSubAgent: this.opts.defaultSubAgent,
|
|
340
347
|
skills: this.skills,
|
|
341
348
|
contextLimits: this.contextLimits,
|
|
342
349
|
provider: this.provider,
|
|
@@ -378,6 +385,7 @@ export class AgentSession {
|
|
|
378
385
|
getBaseUrl: () => this.baseUrl,
|
|
379
386
|
getCacheKey: () => this.getPromptCacheKey(),
|
|
380
387
|
getMaxPerModel: () => this.settingsManager.get("subagentMaxPerModel"),
|
|
388
|
+
getChildModel: this.opts.getChildModel,
|
|
381
389
|
// A persistent child is already the single allowed fan-out level. Blocking
|
|
382
390
|
// `subagent` here created a timeout sandwich: the nested call could consume
|
|
383
391
|
// the child's entire 10-minute turn budget, discarding all nested results.
|
|
@@ -405,6 +413,16 @@ export class AgentSession {
|
|
|
405
413
|
// a hallucinated call can't mutate the repo — and buildSystemPrompt below is
|
|
406
414
|
// fed the same filtered names so the Tools section matches exactly.
|
|
407
415
|
this.tools = this.opts.allowedTools ? tools.filter((t) => this.isToolAllowed(t.name)) : tools;
|
|
416
|
+
const without = new Set(this.opts.withoutTools ?? []);
|
|
417
|
+
if (without.size > 0)
|
|
418
|
+
this.tools = this.tools.filter((t) => !without.has(t.name));
|
|
419
|
+
// A host may wrap built-ins (GG Goals holds back its own editing once a
|
|
420
|
+
// goal is underway). Same names and schemas, so the cached tool block and
|
|
421
|
+
// the system prompt's Tools section are unchanged.
|
|
422
|
+
if (this.opts.wrapTool) {
|
|
423
|
+
const wrap = this.opts.wrapTool;
|
|
424
|
+
this.tools = this.tools.map((t) => wrap(t));
|
|
425
|
+
}
|
|
408
426
|
// Both delegation tools carry the agent roster; when both survive the
|
|
409
427
|
// allow-list, `subagent` points at `spawn_agent`'s copy instead.
|
|
410
428
|
if (this.tools.some((t) => t.name === "spawn_agent")) {
|
|
@@ -419,7 +437,14 @@ export class AgentSession {
|
|
|
419
437
|
// catalog must hold the wrapped tool so a promoted spawn still loads
|
|
420
438
|
// wait_agent.
|
|
421
439
|
this.promoteFollowUpTools();
|
|
422
|
-
const
|
|
440
|
+
const partition = partitionToolsByTier(this.tools);
|
|
441
|
+
// A session can keep chosen built-ins in its core set (GG Goals
|
|
442
|
+
// orchestrates, so its agent tools are always at hand). Fixed for the
|
|
443
|
+
// session, so the cached tool block stays byte-stable.
|
|
444
|
+
const keep = new Set(this.opts.coreTools ?? []);
|
|
445
|
+
const deferred = partition.deferred.filter((t) => !keep.has(t.name));
|
|
446
|
+
// Everything not deferred, in the original relative order.
|
|
447
|
+
const core = keep.size > 0 ? this.tools.filter((t) => !deferred.includes(t)) : partition.core;
|
|
423
448
|
if (deferred.length > 0) {
|
|
424
449
|
// Append-only: `core` preserves the original relative order and
|
|
425
450
|
// tool_search is pushed after it, so the serialized tool block that
|
|
@@ -2645,6 +2670,19 @@ export class AgentSession {
|
|
|
2645
2670
|
.map((m) => m.text)
|
|
2646
2671
|
.join("\n\n");
|
|
2647
2672
|
}
|
|
2673
|
+
/**
|
|
2674
|
+
* Tell the agent a new fact at its next turn, as a short hidden message
|
|
2675
|
+
* appended after the cached prompt (the same channel as a finished worker),
|
|
2676
|
+
* so a mid-session change reaches it without re-rendering the prompt. A
|
|
2677
|
+
* later note with the same id replaces one not yet delivered.
|
|
2678
|
+
*/
|
|
2679
|
+
notify(id, text) {
|
|
2680
|
+
this.notifications.enqueue("goal", id, text, { terminal: true });
|
|
2681
|
+
}
|
|
2682
|
+
/** This session's sub-agents (workers), newest-state, including ones restored after a restart. */
|
|
2683
|
+
listSubAgents() {
|
|
2684
|
+
return this.subAgentManager?.list() ?? [];
|
|
2685
|
+
}
|
|
2648
2686
|
/** Snapshot of background processes (bash run_in_background), newest-state. */
|
|
2649
2687
|
listBackgroundProcesses() {
|
|
2650
2688
|
return this.processManager?.list() ?? [];
|