@pentoshi/clai 5.1.4 → 5.1.5

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 (143) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +2 -0
  3. package/dist/agent/context/compaction-recent-history.js +1 -3
  4. package/dist/agent/context/compaction-recent-history.js.map +1 -1
  5. package/dist/agent/goal/goal-evaluator.d.ts +22 -0
  6. package/dist/agent/goal/goal-evaluator.js +146 -0
  7. package/dist/agent/goal/goal-evaluator.js.map +1 -0
  8. package/dist/agent/goal/goal-failure.d.ts +7 -0
  9. package/dist/agent/goal/goal-failure.js +41 -0
  10. package/dist/agent/goal/goal-failure.js.map +1 -0
  11. package/dist/agent/goal/goal-prompts.d.ts +14 -0
  12. package/dist/agent/goal/goal-prompts.js +107 -0
  13. package/dist/agent/goal/goal-prompts.js.map +1 -0
  14. package/dist/agent/goal/goal-verdict.d.ts +7 -0
  15. package/dist/agent/goal/goal-verdict.js +99 -0
  16. package/dist/agent/goal/goal-verdict.js.map +1 -0
  17. package/dist/agent/runner.js +6 -0
  18. package/dist/agent/runner.js.map +1 -1
  19. package/dist/agent/tool-output-formatting.d.ts +1 -1
  20. package/dist/agent/tool-output-formatting.js +8 -5
  21. package/dist/agent/tool-output-formatting.js.map +1 -1
  22. package/dist/agent/turn/compaction-coordinator.js +2 -3
  23. package/dist/agent/turn/compaction-coordinator.js.map +1 -1
  24. package/dist/agent/turn/finalizer.d.ts +1 -0
  25. package/dist/agent/turn/finalizer.js +2 -0
  26. package/dist/agent/turn/finalizer.js.map +1 -1
  27. package/dist/agent/turn/responder-claims.d.ts +3 -0
  28. package/dist/agent/turn/responder-claims.js +35 -0
  29. package/dist/agent/turn/responder-claims.js.map +1 -1
  30. package/dist/agent/turn/responder-read-tool.js +4 -10
  31. package/dist/agent/turn/responder-read-tool.js.map +1 -1
  32. package/dist/app/adapters/current-store-adapter.js +3 -0
  33. package/dist/app/adapters/current-store-adapter.js.map +1 -1
  34. package/dist/app/commands/catalog.js +5 -0
  35. package/dist/app/commands/catalog.js.map +1 -1
  36. package/dist/app/controllers/cancel-coordinator.d.ts +3 -0
  37. package/dist/app/controllers/cancel-coordinator.js +8 -3
  38. package/dist/app/controllers/cancel-coordinator.js.map +1 -1
  39. package/dist/app/controllers/goal-types.d.ts +47 -0
  40. package/dist/app/controllers/goal-types.js +2 -0
  41. package/dist/app/controllers/goal-types.js.map +1 -0
  42. package/dist/app/controllers/session-compact-helper.d.ts +1 -0
  43. package/dist/app/controllers/session-compact-helper.js +24 -1
  44. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  45. package/dist/app/controllers/session-controller.d.ts +16 -0
  46. package/dist/app/controllers/session-controller.js +157 -8
  47. package/dist/app/controllers/session-controller.js.map +1 -1
  48. package/dist/app/controllers/session-goal.d.ts +93 -0
  49. package/dist/app/controllers/session-goal.js +556 -0
  50. package/dist/app/controllers/session-goal.js.map +1 -0
  51. package/dist/app/controllers/session-responder.d.ts +1 -0
  52. package/dist/app/controllers/session-responder.js +7 -4
  53. package/dist/app/controllers/session-responder.js.map +1 -1
  54. package/dist/app/events/app-event.d.ts +2 -0
  55. package/dist/app/events/app-event.js.map +1 -1
  56. package/dist/app/ports/persistence-port.d.ts +13 -0
  57. package/dist/classic/app/ClassicApp.js +4 -0
  58. package/dist/classic/app/ClassicApp.js.map +1 -1
  59. package/dist/classic/app/paint-pacing.js +1 -5
  60. package/dist/classic/app/paint-pacing.js.map +1 -1
  61. package/dist/classic/app/wiring-feed-scroll.d.ts +1 -1
  62. package/dist/classic/app/wiring-feed-scroll.js +3 -6
  63. package/dist/classic/app/wiring-feed-scroll.js.map +1 -1
  64. package/dist/classic/app/wiring-interactions.js +1 -0
  65. package/dist/classic/app/wiring-interactions.js.map +1 -1
  66. package/dist/classic/app/wiring-lifecycle.js +2 -4
  67. package/dist/classic/app/wiring-lifecycle.js.map +1 -1
  68. package/dist/classic/app/wiring-selection.js +1 -1
  69. package/dist/classic/app/wiring-selection.js.map +1 -1
  70. package/dist/classic/blocks/notice-lines.js +17 -3
  71. package/dist/classic/blocks/notice-lines.js.map +1 -1
  72. package/dist/classic/chrome/Chrome.d.ts +1 -1
  73. package/dist/classic/chrome/Chrome.js +1 -0
  74. package/dist/classic/chrome/Chrome.js.map +1 -1
  75. package/dist/classic/chrome/GoalStrip.d.ts +3 -0
  76. package/dist/classic/chrome/GoalStrip.js +9 -0
  77. package/dist/classic/chrome/GoalStrip.js.map +1 -0
  78. package/dist/classic/chrome/goal-row.d.ts +11 -0
  79. package/dist/classic/chrome/goal-row.js +24 -0
  80. package/dist/classic/chrome/goal-row.js.map +1 -0
  81. package/dist/classic/chrome/row-budget.d.ts +2 -0
  82. package/dist/classic/chrome/row-budget.js +4 -1
  83. package/dist/classic/chrome/row-budget.js.map +1 -1
  84. package/dist/llm/capability/vision-patterns.js +7 -1
  85. package/dist/llm/capability/vision-patterns.js.map +1 -1
  86. package/dist/llm/provider-info-text.js +7 -2
  87. package/dist/llm/provider-info-text.js.map +1 -1
  88. package/dist/llm/river-docs.d.ts +18 -0
  89. package/dist/llm/river-docs.js +170 -0
  90. package/dist/llm/river-docs.js.map +1 -0
  91. package/dist/llm/river-models.d.ts +2 -1
  92. package/dist/llm/river-models.js +78 -13
  93. package/dist/llm/river-models.js.map +1 -1
  94. package/dist/llm/river.js +9 -5
  95. package/dist/llm/river.js.map +1 -1
  96. package/dist/llm/wire/effort-preflight.js +1 -1
  97. package/dist/llm/wire/effort-preflight.js.map +1 -1
  98. package/dist/os/sgr-state.d.ts +3 -0
  99. package/dist/os/sgr-state.js +80 -0
  100. package/dist/os/sgr-state.js.map +1 -0
  101. package/dist/os/terminal-sgr-compactor.d.ts +17 -0
  102. package/dist/os/terminal-sgr-compactor.js +164 -0
  103. package/dist/os/terminal-sgr-compactor.js.map +1 -0
  104. package/dist/session-runtime/client.js +7 -2
  105. package/dist/session-runtime/client.js.map +1 -1
  106. package/dist/store/session-goal.d.ts +4 -0
  107. package/dist/store/session-goal.js +75 -0
  108. package/dist/store/session-goal.js.map +1 -0
  109. package/dist/tui-v2/app/App.js +2 -1
  110. package/dist/tui-v2/app/App.js.map +1 -1
  111. package/dist/tui-v2/components/goal/goal-panel.d.ts +11 -0
  112. package/dist/tui-v2/components/goal/goal-panel.js +54 -0
  113. package/dist/tui-v2/components/goal/goal-panel.js.map +1 -0
  114. package/dist/tui-v2/components/transcript/notice-row.js +11 -9
  115. package/dist/tui-v2/components/transcript/notice-row.js.map +1 -1
  116. package/dist/tui-v2/components/transcript/transcript-scroll-port.d.ts +6 -1
  117. package/dist/tui-v2/components/transcript/transcript-scroll-port.js +40 -27
  118. package/dist/tui-v2/components/transcript/transcript-scroll-port.js.map +1 -1
  119. package/dist/tui-v2/components/transcript/transcript-view.js +2 -2
  120. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  121. package/dist/types.d.ts +1 -1
  122. package/dist/ui-core/commands/command-handlers.js +2 -0
  123. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  124. package/dist/ui-core/commands/goal-commands.d.ts +3 -0
  125. package/dist/ui-core/commands/goal-commands.js +48 -0
  126. package/dist/ui-core/commands/goal-commands.js.map +1 -0
  127. package/dist/ui-core/commands/pickers/search-reasoning.js +6 -2
  128. package/dist/ui-core/commands/pickers/search-reasoning.js.map +1 -1
  129. package/dist/ui-core/motion/wheel-scroll.d.ts +2 -4
  130. package/dist/ui-core/motion/wheel-scroll.js +4 -20
  131. package/dist/ui-core/motion/wheel-scroll.js.map +1 -1
  132. package/dist/ui-core/rendering/format-help.js +1 -1
  133. package/dist/ui-core/rendering/format-help.js.map +1 -1
  134. package/dist/ui-core/rendering/goal-format.d.ts +20 -0
  135. package/dist/ui-core/rendering/goal-format.js +136 -0
  136. package/dist/ui-core/rendering/goal-format.js.map +1 -0
  137. package/dist/ui-core/state/transcript/apply-app-event.js +8 -2
  138. package/dist/ui-core/state/transcript/apply-app-event.js.map +1 -1
  139. package/dist/ui-core/state/transcript-types.d.ts +1 -0
  140. package/dist/ui-core/state/transcript-types.js.map +1 -1
  141. package/dist/version.generated.d.ts +2 -2
  142. package/dist/version.generated.js +2 -2
  143. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ export type GoalStatus = "active" | "paused";
2
+ export type GoalPhase = "evaluating" | "waiting" | "retrying";
3
+ export interface GoalView {
4
+ readonly id: string;
5
+ readonly objective: string;
6
+ readonly status: GoalStatus;
7
+ readonly phase?: GoalPhase | undefined;
8
+ readonly startedAt: number;
9
+ readonly turns: number;
10
+ readonly lastReason?: string | undefined;
11
+ readonly pauseReason?: string | undefined;
12
+ readonly resumeOnPrompt?: boolean | undefined;
13
+ readonly retryAt?: number | undefined;
14
+ readonly waitingFor?: readonly string[] | undefined;
15
+ }
16
+ export type GoalReportStatus = GoalStatus | "achieved";
17
+ export interface GoalReport {
18
+ readonly objective: string;
19
+ readonly status: GoalReportStatus;
20
+ readonly phase?: GoalPhase | undefined;
21
+ readonly durationMs: number;
22
+ readonly turns: number;
23
+ readonly tokens: number;
24
+ readonly lastReason?: string | undefined;
25
+ readonly pauseReason?: string | undefined;
26
+ readonly resumeOnPrompt?: boolean | undefined;
27
+ }
28
+ export type GoalUpdateKind = "continuing" | "achieved" | "failed" | "paused" | "resumed" | "cleared" | "replaced" | "unrecoverable" | "retrying" | "waiting";
29
+ export interface GoalUpdate {
30
+ readonly kind: GoalUpdateKind;
31
+ readonly objective: string;
32
+ readonly reason?: string | undefined;
33
+ readonly turns?: number | undefined;
34
+ readonly durationMs?: number | undefined;
35
+ readonly tokens?: number | undefined;
36
+ readonly delayMs?: number | undefined;
37
+ readonly resumeOnPrompt?: boolean | undefined;
38
+ }
39
+ export type GoalSetResult = {
40
+ readonly ok: true;
41
+ readonly objective: string;
42
+ readonly replaced?: string | undefined;
43
+ readonly deferred: boolean;
44
+ } | {
45
+ readonly ok: false;
46
+ readonly error: string;
47
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=goal-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-types.js","sourceRoot":"","sources":["../../../src/app/controllers/goal-types.ts"],"names":[],"mappings":""}
@@ -46,5 +46,6 @@ export interface ReportedCompaction {
46
46
  readonly measurement: "provider-reported" | "estimated";
47
47
  readonly scope: "message-history" | "assembled-request";
48
48
  }
49
+ export declare function retainedRequestOverheadTokens(request: SuccessfulRequestSnapshot | undefined, history: readonly ChatMessage[]): number | undefined;
49
50
  export declare function runSessionCompaction(options: RunSessionCompactionOptions): Promise<CompactResult>;
50
51
  export {};
@@ -3,6 +3,8 @@ import { executeCompactionSummary, isCompactionOverLimitError, planCompactionRep
3
3
  import { compactMessagesWithSummary, estimateMessagesTokens, isCompactionMemoryMessage, } from "../../agent/context-manager.js";
4
4
  import { projectToolHistory } from "../../agent/tool-history.js";
5
5
  import { buildContextBreakdown } from "../../agent/context-breakdown.js";
6
+ import { estimateToolSchemaTokens } from "../../agent/request-accounting.js";
7
+ import { isRequestContextSystemMessage } from "../../llm/system-messages.js";
6
8
  import { calibratedRequestTokens } from "../../llm/token-estimate-calibration.js";
7
9
  import { effectiveContextWindowTokens } from "../../llm/context-windows.js";
8
10
  import { contextAttemptFromOperationUsage } from "../../llm/context-snapshot.js";
@@ -36,6 +38,18 @@ export async function summarizeForSessionCompact(prompt, opts) {
36
38
  onUsage: opts.onUsage,
37
39
  });
38
40
  }
41
+ export function retainedRequestOverheadTokens(request, history) {
42
+ if (!request)
43
+ return undefined;
44
+ const historyHead = history[0];
45
+ const fixed = request.messages.filter((message, index) => index === 0
46
+ ? message.role === "system" &&
47
+ !(historyHead?.role === "system" && historyHead.content === message.content)
48
+ : isRequestContextSystemMessage(message));
49
+ if (fixed.length === 0 && !request.tools?.length)
50
+ return undefined;
51
+ return estimateMessagesTokens(fixed) + estimateToolSchemaTokens(request.tools);
52
+ }
39
53
  export async function runSessionCompaction(options) {
40
54
  const emit = (type, payload) => {
41
55
  options.emit(options.sequencer.build(type, payload, undefined));
@@ -80,10 +94,19 @@ export async function runSessionCompaction(options) {
80
94
  const calibrationModel = successfulRequest?.model ?? options.model;
81
95
  const calibrated = (tokens) => calibratedRequestTokens(calibrationProvider, calibrationModel, Math.max(0, tokens));
82
96
  const beforeTokens = requestTokensBefore ?? calibrated(historyTokensBefore);
97
+ const retainedOverheadTokens = retainedRequestOverheadTokens(successfulRequest, history);
83
98
  const reportedFor = (result) => {
99
+ const measurement = options.requestTokensBeforeMeasurement ?? "estimated";
100
+ if (retainedOverheadTokens !== undefined) {
101
+ return {
102
+ beforeTokens,
103
+ afterTokens: calibrated(result.afterTokens + retainedOverheadTokens),
104
+ measurement,
105
+ scope: "assembled-request",
106
+ };
107
+ }
84
108
  const retainedHistoryTokens = calibrated(result.afterTokens);
85
109
  const overheadTokens = (assembledTokens) => Math.max(0, assembledTokens - calibrated(result.beforeTokens));
86
- const measurement = options.requestTokensBeforeMeasurement ?? "estimated";
87
110
  const afterTokens = useContinuationAccounting && continuationAccounting
88
111
  ? retainedHistoryTokens +
89
112
  overheadTokens(calibrated(continuationAccounting.rawRequestTokens))
@@ -1 +1 @@
1
- {"version":3,"file":"session-compact-helper.js","sourceRoot":"","sources":["../../../src/app/controllers/session-compact-helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-compact-helper.js","sourceRoot":"","sources":["../../../src/app/controllers/session-compact-helper.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,8 @@ import { type SessionUsageReport } from "./session-usage-ledger.js";
24
24
  import { SessionPromptStore } from "../../store/session-prompts.js";
25
25
  import { type FileLineChanges, type SessionChangesReport } from "./session-changes.js";
26
26
  import { type GenerationProgress } from "../../llm/generation-metrics.js";
27
+ import { type GoalTimers } from "./session-goal.js";
28
+ import type { GoalReport, GoalSetResult, GoalView } from "./goal-types.js";
27
29
  export interface SubagentsRuntimeState {
28
30
  readonly enabled: boolean;
29
31
  readonly running: number;
@@ -48,6 +50,7 @@ export interface SessionState {
48
50
  readonly contextChip: string | undefined;
49
51
  readonly contextLimit?: ContextSnapshotLimit | undefined;
50
52
  readonly generation?: GenerationProgress | undefined;
53
+ readonly goal?: GoalView | undefined;
51
54
  }
52
55
  export type NoticeLevel = "info" | "warn";
53
56
  export interface SessionControllerDeps {
@@ -71,6 +74,7 @@ export interface SessionControllerDeps {
71
74
  readonly noHistory?: boolean | undefined;
72
75
  readonly notifyResponderDelivery?: ((summary: string) => void) | undefined;
73
76
  readonly titleCompleter?: ((messages: ChatMessage[]) => Promise<string>) | undefined;
77
+ readonly goalTimers?: GoalTimers | undefined;
74
78
  }
75
79
  export type TurnEndListener = (result: TurnResult) => void;
76
80
  export type SessionStateListener = () => void;
@@ -90,6 +94,7 @@ export declare class SessionController implements Disposable {
90
94
  private history;
91
95
  private readonly prompts;
92
96
  private readonly loopRecovery;
97
+ private readonly goal;
93
98
  private readonly responder;
94
99
  private provider;
95
100
  private model;
@@ -166,6 +171,17 @@ export declare class SessionController implements Disposable {
166
171
  }): void;
167
172
  private applyRestoredModel;
168
173
  notice(level: NoticeLevel, text: string): void;
174
+ setGoal(objective: string): GoalSetResult;
175
+ pauseGoal(): GoalView | undefined;
176
+ resumeGoal(): GoalView | undefined;
177
+ clearGoal(): string | undefined;
178
+ goalReport(): GoalReport | undefined;
179
+ private activateUserWork;
180
+ private goalBackgroundWork;
181
+ private evaluateGoal;
182
+ private emitAuxiliaryUsage;
183
+ private loadGoal;
184
+ private saveGoal;
169
185
  allowTool(name: string): void;
170
186
  disallowTool(name: string): void;
171
187
  allowedTools(): readonly string[];
@@ -4,7 +4,7 @@ import { isProviderMeasuredPrecision, } from "../../llm/context-snapshot.js";
4
4
  import { compactedContextSnapshot, recordAuxiliaryUsageSnapshot, recordContextUsageSnapshot, resolveContextSnapshot as resolveSnapshot, contextSnapshotForRoute, restoredContextSnapshot, createContextProjector, } from "./session-context-usage.js";
5
5
  import { createSessionPolicy } from "../../agent/session-policy.js";
6
6
  import { SubagentManager } from "../../agent/subagents/manager.js";
7
- import { knownAttemptUsage } from "../../llm/operation-usage.js";
7
+ import { claimDiscardedAttemptUsage, knownAttemptUsage } from "../../llm/operation-usage.js";
8
8
  import { getActiveProjectRoot } from "../../agent/project-root.js";
9
9
  import { collectCompactionEnvelopeInput, createCompactionDurableEnvelopeBuilder, } from "../../agent/turn/compaction-durable-envelope.js";
10
10
  import { summarizeCarriedWork } from "../../agent/durable-envelope.js";
@@ -42,6 +42,10 @@ import { SessionChanges } from "./session-changes.js";
42
42
  import { SessionLateWork } from "./session-late-work.js";
43
43
  import { isInternalChatMessage } from "../../types.js";
44
44
  import { generationTokensPerSecond } from "../../llm/generation-metrics.js";
45
+ import { randomUUID } from "node:crypto";
46
+ import { evaluateGoal } from "../../agent/goal/goal-evaluator.js";
47
+ import { effectiveContextWindowTokens } from "../../llm/context-windows.js";
48
+ import { SessionGoal } from "./session-goal.js";
45
49
  export class SessionController {
46
50
  deps;
47
51
  spool = new OutputSpool();
@@ -58,6 +62,7 @@ export class SessionController {
58
62
  history = [];
59
63
  prompts;
60
64
  loopRecovery;
65
+ goal;
61
66
  responder;
62
67
  provider;
63
68
  model;
@@ -156,16 +161,43 @@ export class SessionController {
156
161
  notice: (text) => this.notice("warn", text),
157
162
  enqueue: (prompt, label) => this.prompts.enqueuePriority(prompt, label),
158
163
  });
164
+ this.goal = new SessionGoal({
165
+ now: () => this.contextTimestamp(),
166
+ mintId: () => randomUUID(),
167
+ isBusy: () => this.closing || this.turn.running || this.compactingFlag || this.unsettledTurns > 0,
168
+ hasQueuedWork: () => this.prompts.hasPending(),
169
+ mode: () => this.mode,
170
+ background: () => this.goalBackgroundWork(),
171
+ tokens: () => this.usageLedger.report().totals.totalTokens,
172
+ evaluate: (objective, signal) => this.evaluateGoal(objective, signal),
173
+ runTurn: (prompt, options) => {
174
+ if (options.kickoff)
175
+ this.activateUserWork();
176
+ return this.runTurn(prompt, { displayPrompt: options.displayPrompt });
177
+ },
178
+ load: () => this.loadGoal(),
179
+ save: (goal) => this.saveGoal(goal),
180
+ emit: (update) => this.deps.emit(this.sequencer.build("goal-updated", update, undefined)),
181
+ notifyState: () => this.notifyState(),
182
+ idle: () => {
183
+ this.responder?.scheduleWake();
184
+ this.subagentDelivery.scheduleWake();
185
+ },
186
+ timers: deps.goalTimers,
187
+ });
159
188
  this.subagentDelivery = new SessionSubagents({
160
189
  sessionId: () => this.sessionIdValue,
161
- isBusy: () => this.turn.running || this.compactingFlag || this.unsettledTurns > 0,
190
+ isBusy: () => this.turn.running || this.compactingFlag || this.unsettledTurns > 0 || this.goal.evaluating,
162
191
  hasQueuedWork: () => this.prompts.hasPending(),
163
192
  continueQueue: () => this.prompts.continue(),
164
193
  runTurn: (prompt) => this.runTurn(prompt, {
165
194
  displayPrompt: null,
166
195
  materializeHistoryImages: false,
167
196
  }),
168
- notifyState: () => this.notifyState(),
197
+ notifyState: () => {
198
+ this.notifyState();
199
+ this.goal.scheduleWake();
200
+ },
169
201
  });
170
202
  this.subagentDelivery.bind(this.subagentsValue);
171
203
  this.namer = new SessionNamer({
@@ -184,7 +216,7 @@ export class SessionController {
184
216
  jobs: deps.jobs,
185
217
  persistence: deps.persistence,
186
218
  sessionId: () => this.sessionIdValue,
187
- isBusy: () => this.turn.running || this.compactingFlag || this.unsettledTurns > 0,
219
+ isBusy: () => this.turn.running || this.compactingFlag || this.unsettledTurns > 0 || this.goal.evaluating,
188
220
  hasQueuedWork: () => this.prompts.hasPending(),
189
221
  continueQueue: () => this.prompts.continue(),
190
222
  runTurn: (prompt, onStarted) => this.runTurn(prompt, {
@@ -199,6 +231,7 @@ export class SessionController {
199
231
  });
200
232
  const unsubscribe = deps.jobs.subscribe((change) => {
201
233
  this.responder?.handleChange(change);
234
+ this.goal.scheduleWake();
202
235
  });
203
236
  this.disposables.add({ dispose: unsubscribe });
204
237
  }
@@ -273,6 +306,7 @@ export class SessionController {
273
306
  contextChip,
274
307
  contextLimit,
275
308
  generation: this.generation,
309
+ goal: this.goal.view(),
276
310
  };
277
311
  }
278
312
  contextUsageProjection() {
@@ -408,6 +442,7 @@ export class SessionController {
408
442
  setMode(mode) {
409
443
  this.mode = mode;
410
444
  this.notifyState();
445
+ this.goal.scheduleWake();
411
446
  }
412
447
  loadHistory(messages, options = {}) {
413
448
  this.beginLifecycleGeneration();
@@ -454,6 +489,7 @@ export class SessionController {
454
489
  code: options.workspaceCode,
455
490
  });
456
491
  this.settlePersistedResponderResults();
492
+ this.goal.restore();
457
493
  this.notifyState();
458
494
  }
459
495
  applyRestoredModel(provider, model) {
@@ -468,6 +504,104 @@ export class SessionController {
468
504
  notice(level, text) {
469
505
  this.deps.emit(this.sequencer.build("notice", { level, text }, undefined));
470
506
  }
507
+ setGoal(objective) {
508
+ return this.goal.set(objective);
509
+ }
510
+ pauseGoal() {
511
+ return this.goal.pause();
512
+ }
513
+ resumeGoal() {
514
+ if (this.goal.view()?.status === "paused")
515
+ this.activateUserWork();
516
+ return this.goal.resume();
517
+ }
518
+ clearGoal() {
519
+ return this.goal.clear();
520
+ }
521
+ goalReport() {
522
+ return this.goal.report();
523
+ }
524
+ activateUserWork() {
525
+ this.responder?.activate();
526
+ this.subagentDelivery.activate();
527
+ this.loopRecovery.clear();
528
+ }
529
+ goalBackgroundWork() {
530
+ const sessionId = this.sessionIdValue;
531
+ const jobs = this.deps.jobs;
532
+ const live = this.subagentsValue.list().filter((run) => run.status === "running" || run.status === "stopping");
533
+ const undeliveredRuns = this.subagentsValue.enabled ? this.subagentsValue.pendingResults().length : 0;
534
+ const undeliveredJobs = this.responder?.getState().ready ?? 0;
535
+ return {
536
+ running: [
537
+ ...(jobs?.running(sessionId) ?? []).map((job) => `background job ${job.name ?? job.commandDisplay}`),
538
+ ...live.map((run) => `subagent ${run.title}`),
539
+ ],
540
+ pendingDeliveries: undeliveredRuns + undeliveredJobs,
541
+ };
542
+ }
543
+ async evaluateGoal(objective, signal) {
544
+ const config = getConfig();
545
+ const base = this.lastMainRequestSnapshot;
546
+ const provider = base?.provider ?? this.provider ?? config.defaultProvider;
547
+ const model = base?.model ?? this.model ?? getProviderModel(provider);
548
+ const generation = this.lifecycleGeneration;
549
+ const evaluation = await withSessionAffinity(this.sessionIdValue, () => evaluateGoal({
550
+ objective,
551
+ history: this.history,
552
+ baseRequest: base,
553
+ provider,
554
+ model,
555
+ ...(provider === "codex" ? { thinking: { ...config.thinking } } : {}),
556
+ contextLimitTokens: effectiveContextWindowTokens(provider, model, customContextLimit(provider, model)),
557
+ signal,
558
+ onUsage: (result) => {
559
+ if (generation === this.lifecycleGeneration)
560
+ this.emitAuxiliaryUsage(result);
561
+ },
562
+ }));
563
+ return evaluation.verdict;
564
+ }
565
+ emitAuxiliaryUsage(result) {
566
+ for (const discarded of claimDiscardedAttemptUsage(result.operationUsage)) {
567
+ this.deps.emit(this.sequencer.build("token-usage", {
568
+ ...discarded.usage,
569
+ provider: discarded.provider,
570
+ model: discarded.model,
571
+ auxiliary: true,
572
+ }, undefined));
573
+ }
574
+ if (!result.usage)
575
+ return;
576
+ this.deps.emit(this.sequencer.build("token-usage", {
577
+ ...result.usage,
578
+ provider: result.provider,
579
+ model: result.model,
580
+ ...(result.api ? { api: result.api } : {}),
581
+ auxiliary: true,
582
+ }, undefined));
583
+ }
584
+ loadGoal() {
585
+ if (!this.isPromptHistoryEnabled())
586
+ return undefined;
587
+ try {
588
+ return this.deps.persistence.loadGoal?.(this.sessionIdValue);
589
+ }
590
+ catch (error) {
591
+ this.notice("warn", `could not restore the session goal: ${error instanceof Error ? error.message : String(error)}`);
592
+ return undefined;
593
+ }
594
+ }
595
+ saveGoal(goal) {
596
+ if (!this.isPromptHistoryEnabled())
597
+ return;
598
+ try {
599
+ this.deps.persistence.saveGoal?.(this.sessionIdValue, goal);
600
+ }
601
+ catch (error) {
602
+ this.notice("warn", `could not save the session goal: ${error instanceof Error ? error.message : String(error)}`);
603
+ }
604
+ }
471
605
  allowTool(name) {
472
606
  this.policy.allow.add(name);
473
607
  }
@@ -627,6 +761,7 @@ export class SessionController {
627
761
  this.notifyState();
628
762
  this.responder?.scheduleWake();
629
763
  this.subagentDelivery.scheduleWake();
764
+ this.goal.scheduleWake();
630
765
  }
631
766
  }
632
767
  compactionEnvelopePorts(history) {
@@ -671,6 +806,7 @@ export class SessionController {
671
806
  this.closing = true;
672
807
  this.responder?.deactivate();
673
808
  this.subagentDelivery.deactivate();
809
+ this.goal.halt();
674
810
  this.abort("session is closing");
675
811
  this.prompts.detach();
676
812
  if (this.unsettledTurns > 0) {
@@ -744,6 +880,7 @@ export class SessionController {
744
880
  async cancelAll() {
745
881
  this.responder?.invalidateWake();
746
882
  this.subagentDelivery.deactivate();
883
+ this.goal.interrupt(this.turn.running);
747
884
  this.prompts.preservePendingPriority();
748
885
  this.turn.abort();
749
886
  this.compactAbort?.abort();
@@ -766,6 +903,7 @@ export class SessionController {
766
903
  .catch(() => undefined);
767
904
  }
768
905
  enqueue(prompt, opts) {
906
+ this.goal.noteUserPrompt();
769
907
  this.prompts.enqueue(prompt, opts);
770
908
  }
771
909
  queued() {
@@ -787,8 +925,11 @@ export class SessionController {
787
925
  this.prompts.sendNow(index);
788
926
  }
789
927
  abort(reason) {
928
+ const turnRunning = this.turn.running;
790
929
  this.turn.abort(reason);
791
930
  this.compactAbort?.abort();
931
+ if (reason !== "steer" && !this.closing)
932
+ this.goal.interrupt(turnRunning);
792
933
  }
793
934
  async continueQueue() {
794
935
  await this.prompts.continue();
@@ -804,9 +945,8 @@ export class SessionController {
804
945
  return () => this.turnEndListeners.delete(listener);
805
946
  }
806
947
  async submit(prompt, opts) {
807
- this.responder?.activate();
808
- this.subagentDelivery.activate();
809
- this.loopRecovery.clear();
948
+ this.activateUserWork();
949
+ this.goal.noteUserPrompt();
810
950
  return this.prompts.submit(prompt, opts);
811
951
  }
812
952
  async drain() {
@@ -911,8 +1051,10 @@ export class SessionController {
911
1051
  if (sameGeneration) {
912
1052
  this.lastTurnResult = result;
913
1053
  this.restoredPreviousTurn = undefined;
914
- if (!this.closing)
1054
+ if (!this.closing) {
915
1055
  this.loopRecovery.handle(result);
1056
+ this.goal.handleTurnEnd(result);
1057
+ }
916
1058
  }
917
1059
  if (sameGeneration &&
918
1060
  (result.status === "completed" ||
@@ -935,6 +1077,7 @@ export class SessionController {
935
1077
  }
936
1078
  this.responder?.scheduleWake();
937
1079
  this.subagentDelivery.scheduleWake();
1080
+ this.goal.scheduleWake();
938
1081
  }
939
1082
  }
940
1083
  scheduleAutosave() {
@@ -1006,9 +1149,11 @@ export class SessionController {
1006
1149
  this.activeCompactions.clear();
1007
1150
  this.responder?.invalidateWake();
1008
1151
  this.subagentDelivery.deactivate();
1152
+ this.goal.reset();
1009
1153
  }
1010
1154
  dispose() {
1011
1155
  this.beginLifecycleGeneration();
1156
+ this.goal.dispose();
1012
1157
  this.prompts.detach();
1013
1158
  this.namer.reset();
1014
1159
  this.subagentDelivery.dispose();
@@ -1028,6 +1173,10 @@ export class SessionController {
1028
1173
  this.activeTurnGeneration === this.lifecycleGeneration) {
1029
1174
  this.changeLedger.record(`${event.turnId}:${event.payload.toolCallId}`, event.payload.fileChanges);
1030
1175
  }
1176
+ if (event.type === "turn-started")
1177
+ this.goal.noteTurnStarted();
1178
+ else if (event.type === "tool-call")
1179
+ this.goal.noteToolCall();
1031
1180
  if (event.type === "compaction-started") {
1032
1181
  this.activeCompactions.add(event.payload.compactionId);
1033
1182
  this.notifyState();