charness 3.4.0 → 3.6.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/CHANGELOG.md +58 -0
- package/DEVELOPMENT.md +12 -1
- package/README.md +89 -6
- package/SETUP.md +199 -1
- package/dist/adapters/adapterEventRouting.d.ts +2 -2
- package/dist/adapters/adapterEventRouting.d.ts.map +1 -1
- package/dist/adapters/adapterEventRouting.js +4 -3
- package/dist/adapters/adapterEventRouting.js.map +1 -1
- package/dist/adapters/claudeCliAdapter.js +2 -2
- package/dist/adapters/claudeCliAdapter.js.map +1 -1
- package/dist/adapters/claudeConfigDir.d.ts +18 -0
- package/dist/adapters/claudeConfigDir.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +82 -6
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.js +211 -14
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
- package/dist/adapters/createAdapter.d.ts +14 -1
- package/dist/adapters/createAdapter.d.ts.map +1 -1
- package/dist/adapters/createAdapter.js +54 -2
- package/dist/adapters/createAdapter.js.map +1 -1
- package/dist/adapters/openCodeAdapter.d.ts +5 -0
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +7 -0
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/agentLogin/agentLogin.d.ts +18 -1
- package/dist/agentLogin/agentLogin.d.ts.map +1 -1
- package/dist/agentLogin/agentLogin.js +59 -18
- package/dist/agentLogin/agentLogin.js.map +1 -1
- package/dist/apiErrorRetry.d.ts +3 -1
- package/dist/apiErrorRetry.d.ts.map +1 -1
- package/dist/apiErrorRetry.js +11 -1
- package/dist/apiErrorRetry.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +475 -105
- package/dist/bot.js.map +1 -1
- package/dist/cli/claudeProfiles.d.ts +1 -1
- package/dist/cli/claudeProfiles.d.ts.map +1 -1
- package/dist/cli/claudeProfiles.js +11 -6
- package/dist/cli/claudeProfiles.js.map +1 -1
- package/dist/connectors/jira/connector.d.ts +2 -0
- package/dist/connectors/jira/connector.d.ts.map +1 -1
- package/dist/connectors/jira/connector.js +5 -4
- package/dist/connectors/jira/connector.js.map +1 -1
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts +6 -2
- package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/claudeAccounts.js +127 -28
- package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -1
- package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/compaction.js +39 -8
- package/dist/connectors/telegram/commands/compaction.js.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.js +6 -2
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
- package/dist/connectors/telegram/forumTopicCreated.d.ts +20 -0
- package/dist/connectors/telegram/forumTopicCreated.d.ts.map +1 -0
- package/dist/connectors/telegram/forumTopicCreated.js +16 -0
- package/dist/connectors/telegram/forumTopicCreated.js.map +1 -0
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +42 -1
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +42 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +42 -1
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +42 -1
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +42 -1
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +42 -1
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +42 -1
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +42 -1
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +42 -1
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +42 -1
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +42 -1
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +42 -1
- package/dist/i18n/zh.js.map +1 -1
- package/dist/i18n.d.ts +2 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js.map +1 -1
- package/dist/rateLimiter.d.ts +6 -0
- package/dist/rateLimiter.d.ts.map +1 -1
- package/dist/rateLimiter.js +9 -0
- package/dist/rateLimiter.js.map +1 -1
- package/dist/requests/wakeUpEngine.d.ts +4 -0
- package/dist/requests/wakeUpEngine.d.ts.map +1 -1
- package/dist/requests/wakeUpEngine.js +3 -3
- package/dist/requests/wakeUpEngine.js.map +1 -1
- package/dist/requests/wakeUpRules.d.ts +2 -1
- package/dist/requests/wakeUpRules.d.ts.map +1 -1
- package/dist/requests/wakeUpRules.js +3 -2
- package/dist/requests/wakeUpRules.js.map +1 -1
- package/dist/scheduler/mcpSurface.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.js +5 -3
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/selfUpdate/updateMessages.d.ts +1 -1
- package/dist/selfUpdate/updateMessages.d.ts.map +1 -1
- package/dist/selfUpdate/updateMessages.js.map +1 -1
- package/dist/state.d.ts +67 -5
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +76 -7
- package/dist/state.js.map +1 -1
- package/dist/testTimings.d.ts +45 -0
- package/dist/testTimings.d.ts.map +1 -0
- package/dist/testTimings.js +89 -0
- package/dist/testTimings.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/adapterSwitchSessionIds.d.ts +5 -1
- package/dist/utils/adapterSwitchSessionIds.d.ts.map +1 -1
- package/dist/utils/adapterSwitchSessionIds.js +1 -1
- package/dist/utils/adapterSwitchSessionIds.js.map +1 -1
- package/dist/utils/adoptedToolList.d.ts +16 -21
- package/dist/utils/adoptedToolList.d.ts.map +1 -1
- package/dist/utils/adoptedToolList.js +18 -17
- package/dist/utils/adoptedToolList.js.map +1 -1
- package/dist/utils/anthropicApiKeyCheck.d.ts +19 -0
- package/dist/utils/anthropicApiKeyCheck.d.ts.map +1 -0
- package/dist/utils/anthropicApiKeyCheck.js +41 -0
- package/dist/utils/anthropicApiKeyCheck.js.map +1 -0
- package/dist/utils/claudeAccountPickerPlan.d.ts +6 -1
- package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -1
- package/dist/utils/claudeAccountPickerPlan.js +5 -1
- package/dist/utils/claudeAccountPickerPlan.js.map +1 -1
- package/dist/utils/claudeApiKeyHelper.d.ts +19 -0
- package/dist/utils/claudeApiKeyHelper.d.ts.map +1 -0
- package/dist/utils/claudeApiKeyHelper.js +32 -0
- package/dist/utils/claudeApiKeyHelper.js.map +1 -0
- package/dist/utils/claudeApiSpend.d.ts +73 -0
- package/dist/utils/claudeApiSpend.d.ts.map +1 -0
- package/dist/utils/claudeApiSpend.js +82 -0
- package/dist/utils/claudeApiSpend.js.map +1 -0
- package/dist/utils/claudeCompactHook.d.ts +11 -6
- package/dist/utils/claudeCompactHook.d.ts.map +1 -1
- package/dist/utils/claudeCompactHook.js +28 -11
- package/dist/utils/claudeCompactHook.js.map +1 -1
- package/dist/utils/claudeLimitSwitch.d.ts +2 -1
- package/dist/utils/claudeLimitSwitch.d.ts.map +1 -1
- package/dist/utils/claudeLimitSwitch.js +3 -2
- package/dist/utils/claudeLimitSwitch.js.map +1 -1
- package/dist/utils/claudeProfileUsageLines.d.ts +18 -3
- package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -1
- package/dist/utils/claudeProfileUsageLines.js +23 -2
- package/dist/utils/claudeProfileUsageLines.js.map +1 -1
- package/dist/utils/claudeProfiles.d.ts +57 -2
- package/dist/utils/claudeProfiles.d.ts.map +1 -1
- package/dist/utils/claudeProfiles.js +96 -3
- package/dist/utils/claudeProfiles.js.map +1 -1
- package/dist/utils/claudeScheduledJobs.d.ts +49 -0
- package/dist/utils/claudeScheduledJobs.d.ts.map +1 -0
- package/dist/utils/claudeScheduledJobs.js +62 -0
- package/dist/utils/claudeScheduledJobs.js.map +1 -0
- package/dist/utils/claudeStreamJson.d.ts +35 -2
- package/dist/utils/claudeStreamJson.d.ts.map +1 -1
- package/dist/utils/claudeStreamJson.js +31 -8
- package/dist/utils/claudeStreamJson.js.map +1 -1
- package/dist/utils/claudeTranscriptContent.d.ts +8 -0
- package/dist/utils/claudeTranscriptContent.d.ts.map +1 -1
- package/dist/utils/claudeTranscriptContent.js +44 -0
- package/dist/utils/claudeTranscriptContent.js.map +1 -1
- package/dist/utils/claudeUsage.d.ts +22 -6
- package/dist/utils/claudeUsage.d.ts.map +1 -1
- package/dist/utils/claudeUsage.js +12 -5
- package/dist/utils/claudeUsage.js.map +1 -1
- package/dist/utils/claudeUsageRefresher.d.ts +6 -0
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
- package/dist/utils/claudeUsageRefresher.js +2 -2
- package/dist/utils/claudeUsageRefresher.js.map +1 -1
- package/dist/utils/compactOnIdle.d.ts +12 -0
- package/dist/utils/compactOnIdle.d.ts.map +1 -1
- package/dist/utils/compactOnIdle.js +15 -1
- package/dist/utils/compactOnIdle.js.map +1 -1
- package/dist/utils/doctorLine.d.ts +13 -0
- package/dist/utils/doctorLine.d.ts.map +1 -0
- package/dist/utils/doctorLine.js +18 -0
- package/dist/utils/doctorLine.js.map +1 -0
- package/dist/utils/effortPickerPlan.d.ts +1 -2
- package/dist/utils/effortPickerPlan.d.ts.map +1 -1
- package/dist/utils/effortPickerPlan.js.map +1 -1
- package/dist/utils/fallbackChain.d.ts +15 -8
- package/dist/utils/fallbackChain.d.ts.map +1 -1
- package/dist/utils/fallbackChain.js +30 -13
- package/dist/utils/fallbackChain.js.map +1 -1
- package/dist/utils/jsonStreamHost.d.ts +19 -7
- package/dist/utils/jsonStreamHost.d.ts.map +1 -1
- package/dist/utils/jsonStreamHost.js +25 -11
- package/dist/utils/jsonStreamHost.js.map +1 -1
- package/dist/utils/jsonStreamPendingWork.d.ts +44 -0
- package/dist/utils/jsonStreamPendingWork.d.ts.map +1 -0
- package/dist/utils/jsonStreamPendingWork.js +48 -0
- package/dist/utils/jsonStreamPendingWork.js.map +1 -0
- package/dist/utils/limitsBoardPlan.d.ts +4 -2
- package/dist/utils/limitsBoardPlan.d.ts.map +1 -1
- package/dist/utils/limitsBoardPlan.js +12 -5
- package/dist/utils/limitsBoardPlan.js.map +1 -1
- package/dist/utils/lostWork.d.ts +117 -0
- package/dist/utils/lostWork.d.ts.map +1 -0
- package/dist/utils/lostWork.js +187 -0
- package/dist/utils/lostWork.js.map +1 -0
- package/dist/utils/nativeWindows.d.ts +29 -0
- package/dist/utils/nativeWindows.d.ts.map +1 -0
- package/dist/utils/nativeWindows.js +50 -0
- package/dist/utils/nativeWindows.js.map +1 -0
- package/dist/utils/recvPreviewRedaction.d.ts +7 -2
- package/dist/utils/recvPreviewRedaction.d.ts.map +1 -1
- package/dist/utils/recvPreviewRedaction.js +10 -4
- package/dist/utils/recvPreviewRedaction.js.map +1 -1
- package/dist/utils/threadStatusReport.d.ts +12 -1
- package/dist/utils/threadStatusReport.d.ts.map +1 -1
- package/dist/utils/threadStatusReport.js +13 -4
- package/dist/utils/threadStatusReport.js.map +1 -1
- package/dist/utils/updateScreenPlan.d.ts +1 -1
- package/dist/utils/updateScreenPlan.d.ts.map +1 -1
- package/dist/utils/updateScreenPlan.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
import type { AgentAdapter, AgentSession, AgentRuntimeInfo, CompactionResult, DisplayPrefsReader, EffortSetOutcome, EffortState, JsonStreamTailOffset, JsonStreamTailWriter, OpenCodeQuestion, RecentTurn, ReattachRecap, ResumeSessionOptions, SeenWatermark, SeenWatermarkWriter } from '../types';
|
|
3
3
|
import type { SessionKey } from '../sessionKey';
|
|
4
|
-
import type { ClaudeConfigDirApplyResult, ClaudeConfigDirReader, ClaudeRateLimitSink } from './claudeConfigDir';
|
|
4
|
+
import type { ClaudeConfigDirApplyResult, ClaudeConfigDirReader, ClaudeRateLimitSink, ClaudeTurnCostSink } from './claudeConfigDir';
|
|
5
5
|
import { ClaudeStreamLineReader } from '../utils/claudeStreamJson';
|
|
6
6
|
import { type McpHealOutcome } from '../utils/claudeMcpHeal';
|
|
7
7
|
import { type JsonStreamSessionPaths, type StdoutTailState } from '../utils/jsonStreamHost';
|
|
8
8
|
import { type SessionLaunchDefaultsReader } from './sessionLaunchDefaults';
|
|
9
|
+
import { type LostWork } from '../utils/lostWork';
|
|
10
|
+
import { type ScheduledJob } from '../utils/claudeScheduledJobs';
|
|
9
11
|
/** The two lifecycles of the json-stream host (see {@link ClaudeJsonStreamAdapter.lifecycle}). */
|
|
10
12
|
export type JsonStreamLifecycle = 'idle' | 'perTurn';
|
|
11
13
|
/** Prefix of the per-turn token accounting line (L-D11); the process-level e2e
|
|
@@ -101,6 +103,10 @@ export interface StreamSession {
|
|
|
101
103
|
/** The `CLAUDE_CONFIG_DIR` this process runs with (its account profile, `utils/claudeProfiles.ts`); `null` =
|
|
102
104
|
* the default profile. Set at spawn from the reader, recovered from the wrapper script at adopt. */
|
|
103
105
|
configDir: string | null;
|
|
106
|
+
/** The conversation's running cost this process started from, until its first turn reports one: `0` for a new
|
|
107
|
+
* conversation, the transcript's last saved total for a resume (what the CLI restores); `null` from then on, for an
|
|
108
|
+
* adopted process (whose start the bot did not see) and when the transcript could not be read. */
|
|
109
|
+
startCostUsd: number | null;
|
|
104
110
|
/** The topic's profile changed while the process worked: re-spawn under the reader's directory at turn end. */
|
|
105
111
|
isConfigDirSwitchPending: boolean;
|
|
106
112
|
currentResponseText: string;
|
|
@@ -163,11 +169,27 @@ export interface StreamSession {
|
|
|
163
169
|
unconsumedInputCount: number;
|
|
164
170
|
/**
|
|
165
171
|
* The CLI's live background-task list (`system/background_tasks_changed`,
|
|
166
|
-
* re-sent whole on every change)
|
|
167
|
-
*
|
|
168
|
-
*
|
|
172
|
+
* re-sent whole on every change), id → the description the agent gave it: a
|
|
173
|
+
* background Bash / Monitor / sub-agent the process is still running between
|
|
174
|
+
* turns. Non-empty = working within the hold (L-D2, `utils/jsonStreamPendingWork.ts`)
|
|
175
|
+
* — a stop would kill them. Persisted with the tail offset so an adopt restores it.
|
|
169
176
|
*/
|
|
170
|
-
|
|
177
|
+
backgroundTasks: Map<string, string>;
|
|
178
|
+
/**
|
|
179
|
+
* When a background task's `task_notification` announced the turn it starts and that
|
|
180
|
+
* turn has not shown yet; `null` otherwise. Counts as working for a short grace: the
|
|
181
|
+
* gap between the task's end and its turn's first output read as idle once.
|
|
182
|
+
*/
|
|
183
|
+
notificationTurnPendingSince: number | null;
|
|
184
|
+
/** When the agent's last turn ended (the process start before its first turn): the pending-work hold counts from it. */
|
|
185
|
+
lastTurnEndedAt: number;
|
|
186
|
+
/**
|
|
187
|
+
* The next `result` ends a bot-issued `/compact` turn, not one of the agent's: the compaction settles on its
|
|
188
|
+
* `compact_boundary`, so `compactionInProgress` is already off when that result arrives.
|
|
189
|
+
*/
|
|
190
|
+
isCompactionResultPending: boolean;
|
|
191
|
+
/** The session-only `CronCreate` jobs the process holds, oldest first (`utils/claudeScheduledJobs.ts`). */
|
|
192
|
+
scheduledJobs: Map<string, ScheduledJob>;
|
|
171
193
|
/** The CLI version reported on `system/init` (`claude_code_version`); the
|
|
172
194
|
* auto-stop gate (L-D10) reads it. `null` until the first init / on an adopt. */
|
|
173
195
|
claudeCodeVersion: string | null;
|
|
@@ -234,8 +256,11 @@ export declare class ClaudeJsonStreamAdapter extends EventEmitter implements Age
|
|
|
234
256
|
* conversation at a time whichever lifecycle runs it.
|
|
235
257
|
*/
|
|
236
258
|
readonly lifecycle: JsonStreamLifecycle;
|
|
259
|
+
/** How long the agent's own pending work holds the process after its last turn (`utils/jsonStreamPendingWork.ts`). */
|
|
260
|
+
private pendingWorkHoldMs;
|
|
237
261
|
constructor(options?: {
|
|
238
262
|
lifecycle: JsonStreamLifecycle;
|
|
263
|
+
backgroundHoldMs?: number;
|
|
239
264
|
});
|
|
240
265
|
/** Emits incremental text deltas (like the tmux scrape) → the transports
|
|
241
266
|
* synthesise continuation (`getDmDraftContinuation` / group delta path). */
|
|
@@ -251,14 +276,21 @@ export declare class ClaudeJsonStreamAdapter extends EventEmitter implements Age
|
|
|
251
276
|
private claudeConfigDirReader;
|
|
252
277
|
/** The stops in flight — the module-level map shared by both lifecycles' instances (see {@link stopsInFlightByKey}). */
|
|
253
278
|
private readonly stopsInFlight;
|
|
279
|
+
/** The agent's own pending work each ended process took with it, until the bot takes it ({@link takeLostWork}). */
|
|
280
|
+
private readonly lostWorkByKey;
|
|
281
|
+
/** A test instance's shorter pending-work hold (`createAdapter.registerPendingWorkHoldMs`). */
|
|
282
|
+
setPendingWorkHoldMs(holdMs: number): void;
|
|
254
283
|
setDisplayPrefsReader(reader: DisplayPrefsReader): void;
|
|
255
284
|
setSeenWatermarkWriter(writer: SeenWatermarkWriter): void;
|
|
256
285
|
setJsonStreamTailWriter(writer: JsonStreamTailWriter): void;
|
|
257
286
|
setSessionLaunchDefaultsReader(reader: SessionLaunchDefaultsReader): void;
|
|
258
287
|
setClaudeConfigDirReader(reader: ClaudeConfigDirReader): void;
|
|
259
288
|
private claudeRateLimitSink;
|
|
289
|
+
private claudeTurnCostSink;
|
|
260
290
|
/** Where a session's `rate_limit_event` frames go (the bot's per-profile usage cache). */
|
|
261
291
|
setClaudeRateLimitSink(sink: ClaudeRateLimitSink): void;
|
|
292
|
+
/** Where every turn's `total_cost_usd` goes (an API account's spend, `utils/claudeApiSpend.ts`). */
|
|
293
|
+
setClaudeTurnCostSink(sink: ClaudeTurnCostSink): void;
|
|
262
294
|
/** The config directory the conversation's next process must start with (its account profile). */
|
|
263
295
|
private resolveConfigDir;
|
|
264
296
|
private getLaunchOptions;
|
|
@@ -397,8 +429,46 @@ export declare class ClaudeJsonStreamAdapter extends EventEmitter implements Age
|
|
|
397
429
|
* flight. An unknown / inactive session is not working.
|
|
398
430
|
*/
|
|
399
431
|
checkIsWorking(key: SessionKey): boolean;
|
|
400
|
-
/**
|
|
432
|
+
/**
|
|
433
|
+
* The agent's own pending work (background tasks and scheduled jobs within the hold, a finished task's turn on its
|
|
434
|
+
* way), input not yet taken in, a compaction in flight — "working" minus the turn (L-D2).
|
|
435
|
+
*/
|
|
401
436
|
checkHasBackgroundWork(key: SessionKey): boolean;
|
|
437
|
+
/**
|
|
438
|
+
* @description The hold left for the session's background tasks / scheduled jobs (`utils/jsonStreamPendingWork.ts`):
|
|
439
|
+
* `null` without a live session or with nothing pending, `0` once spent. The idle fire re-checks no later than this.
|
|
440
|
+
*/
|
|
441
|
+
getPendingWorkHoldRemainingMs(key: SessionKey): number | null;
|
|
442
|
+
/**
|
|
443
|
+
* @description Read what the process wrote since the last tail poll, so the working judgement is current: a stop
|
|
444
|
+
* decides on it, and the poll may lag the process by its backoff.
|
|
445
|
+
*/
|
|
446
|
+
refreshWorkingState(key: SessionKey): void;
|
|
447
|
+
/**
|
|
448
|
+
* @description The agent's own pending work the conversation's LAST process took with it when it ended — a crash, a
|
|
449
|
+
* re-spawn, the idle stop after the pending-work hold, a process found gone at the adopt — handed over once (`null`
|
|
450
|
+
* when nothing was lost or it was already taken). The bot tells the agent (`utils/lostWork.ts`).
|
|
451
|
+
*/
|
|
452
|
+
takeLostWork(key: SessionKey): LostWork | null;
|
|
453
|
+
/**
|
|
454
|
+
* @description What the LIVE process holds now that would die with it — read by the bot before it stops the
|
|
455
|
+
* process itself for a backend switch (an explicit stop records nothing); `null` when nothing is pending.
|
|
456
|
+
*/
|
|
457
|
+
getPendingWork(key: SessionKey): LostWork | null;
|
|
458
|
+
/**
|
|
459
|
+
* Keep what a process that ended by itself (or at the idle stop) held. A turn a crash cut off is not counted: the
|
|
460
|
+
* request core re-posts and wakes an open request (R21); the idle stop never runs mid-turn.
|
|
461
|
+
*/
|
|
462
|
+
private recordLostWork;
|
|
463
|
+
/** The pending work of a process: its background tasks, its scheduled jobs, a finished task's turn not yet run, and — when the bot itself cuts it off — the turn under way. */
|
|
464
|
+
private describePendingWork;
|
|
465
|
+
/**
|
|
466
|
+
* The ended process's pending work is handled here (kept for the bot, or released): the record must not carry it,
|
|
467
|
+
* or the next boot would read the conversation's process as one that died with work pending.
|
|
468
|
+
*/
|
|
469
|
+
private clearPendingWorkOfEndedProcess;
|
|
470
|
+
private storeLostWork;
|
|
471
|
+
private getPendingWorkInput;
|
|
402
472
|
/** The CLI version the live process reported on `system/init`, `null` until then (L-D10 gate input). */
|
|
403
473
|
getClaudeCodeVersion(key: SessionKey): string | null;
|
|
404
474
|
/** L-D10: only a CLI that reports the background-task list may be stopped automatically. */
|
|
@@ -486,6 +556,10 @@ export declare class ClaudeJsonStreamAdapter extends EventEmitter implements Age
|
|
|
486
556
|
* WHOLE on every change, so no diffing). The tail-offset persist that follows
|
|
487
557
|
* this frame's drain carries the new list to `state.json`. */
|
|
488
558
|
private handleBackgroundTasks;
|
|
559
|
+
/** A background task ended: its own turn is coming — the list empties right after this frame, the turn shows later. */
|
|
560
|
+
private handleTaskNotification;
|
|
561
|
+
/** A turn began (its `init`, the CLI's running state, a scheduled job firing): busy from here; an announced turn has shown. */
|
|
562
|
+
private markTurnStarted;
|
|
489
563
|
private handleCompactStatus;
|
|
490
564
|
private handleCompactBoundary;
|
|
491
565
|
/**
|
|
@@ -500,6 +574,8 @@ export declare class ClaudeJsonStreamAdapter extends EventEmitter implements Age
|
|
|
500
574
|
private finishReasoning;
|
|
501
575
|
private handleToolUse;
|
|
502
576
|
private handleToolResult;
|
|
577
|
+
/** A `CronCreate` / `CronDelete` / `ScheduleWakeup` result changes the session-only jobs the process holds. */
|
|
578
|
+
private trackScheduledJob;
|
|
503
579
|
private markSubagentActive;
|
|
504
580
|
private handleSubagentText;
|
|
505
581
|
private clearSubagent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeJsonStreamAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claudeJsonStreamAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claudeJsonStreamAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claudeJsonStreamAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,9 @@ const claudeProfiles_1 = require("../utils/claudeProfiles");
|
|
|
63
63
|
const adapterNames_1 = require("./adapterNames");
|
|
64
64
|
const claudeCodeVersion_1 = require("../utils/claudeCodeVersion");
|
|
65
65
|
const sessionLaunchDefaults_1 = require("./sessionLaunchDefaults");
|
|
66
|
+
const jsonStreamPendingWork_1 = require("../utils/jsonStreamPendingWork");
|
|
67
|
+
const lostWork_1 = require("../utils/lostWork");
|
|
68
|
+
const claudeScheduledJobs_1 = require("../utils/claudeScheduledJobs");
|
|
66
69
|
/**
|
|
67
70
|
* In-flight explicit stops, per key — a second stop (or a start's implicit stop)
|
|
68
71
|
* AWAITS the first instead of racing it: the delayed first `tmux kill-session`
|
|
@@ -126,9 +129,12 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
126
129
|
* conversation at a time whichever lifecycle runs it.
|
|
127
130
|
*/
|
|
128
131
|
lifecycle;
|
|
132
|
+
/** How long the agent's own pending work holds the process after its last turn (`utils/jsonStreamPendingWork.ts`). */
|
|
133
|
+
pendingWorkHoldMs;
|
|
129
134
|
constructor(options = { lifecycle: 'idle' }) {
|
|
130
135
|
super();
|
|
131
136
|
this.lifecycle = options.lifecycle;
|
|
137
|
+
this.pendingWorkHoldMs = options.backgroundHoldMs ?? jsonStreamPendingWork_1.pendingWorkHoldDefaultMs;
|
|
132
138
|
this.name = options.lifecycle === 'perTurn' ? adapterNames_1.claudePerTurnAdapterName : adapterNames_1.claudeJsonStreamAdapterName;
|
|
133
139
|
this.label = options.lifecycle === 'perTurn' ? 'Claude Code (per-turn)' : 'Claude Code (stream)';
|
|
134
140
|
}
|
|
@@ -146,6 +152,12 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
146
152
|
claudeConfigDirReader = null;
|
|
147
153
|
/** The stops in flight — the module-level map shared by both lifecycles' instances (see {@link stopsInFlightByKey}). */
|
|
148
154
|
stopsInFlight = stopsInFlightByKey;
|
|
155
|
+
/** The agent's own pending work each ended process took with it, until the bot takes it ({@link takeLostWork}). */
|
|
156
|
+
lostWorkByKey = new Map();
|
|
157
|
+
/** A test instance's shorter pending-work hold (`createAdapter.registerPendingWorkHoldMs`). */
|
|
158
|
+
setPendingWorkHoldMs(holdMs) {
|
|
159
|
+
this.pendingWorkHoldMs = holdMs;
|
|
160
|
+
}
|
|
149
161
|
setDisplayPrefsReader(reader) {
|
|
150
162
|
this.displayPrefsReader = reader;
|
|
151
163
|
}
|
|
@@ -162,10 +174,15 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
162
174
|
this.claudeConfigDirReader = reader;
|
|
163
175
|
}
|
|
164
176
|
claudeRateLimitSink = null;
|
|
177
|
+
claudeTurnCostSink = null;
|
|
165
178
|
/** Where a session's `rate_limit_event` frames go (the bot's per-profile usage cache). */
|
|
166
179
|
setClaudeRateLimitSink(sink) {
|
|
167
180
|
this.claudeRateLimitSink = sink;
|
|
168
181
|
}
|
|
182
|
+
/** Where every turn's `total_cost_usd` goes (an API account's spend, `utils/claudeApiSpend.ts`). */
|
|
183
|
+
setClaudeTurnCostSink(sink) {
|
|
184
|
+
this.claudeTurnCostSink = sink;
|
|
185
|
+
}
|
|
169
186
|
/** The config directory the conversation's next process must start with (its account profile). */
|
|
170
187
|
resolveConfigDir(key) {
|
|
171
188
|
return this.claudeConfigDirReader?.(key) ?? null;
|
|
@@ -229,7 +246,10 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
229
246
|
// transcript the CLI's own cleanup removed leaves only a metadata stub when its process is stopped — proof it had
|
|
230
247
|
// turns: `--resume` answers "No conversation found" and `--session-id` "already in use" on it (the stub is removed
|
|
231
248
|
// first). Removed while it SLEPT, it leaves no file at all: only the caller knows it had turns (`isConversationRecorded`).
|
|
232
|
-
const
|
|
249
|
+
const transcriptPath = (0, claudeCliAdapter_1.getClaudeTranscriptPath)(workDir, sessionId);
|
|
250
|
+
const { isResumable, isConversationLost } = await (0, claudeTranscriptContent_1.prepareClaudeSessionLaunch)(transcriptPath, opts.conversation !== 'new', opts.isConversationRecorded === true);
|
|
251
|
+
// What the new process restores, read while none of the conversation runs (an API account's spend counts from it).
|
|
252
|
+
const startCostUsd = isResumable ? await (0, claudeTranscriptContent_1.readClaudeTranscriptRestoredCostUsd)(transcriptPath, sessionId) : 0;
|
|
233
253
|
if (opts.conversation === 'resume' && isConversationLost) {
|
|
234
254
|
throw new Error(`No conversation to resume for session ${sessionId}: its transcript holds none`);
|
|
235
255
|
}
|
|
@@ -265,13 +285,16 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
265
285
|
if (opts.effort)
|
|
266
286
|
args.push(jsonStreamHost_1.claudeEffortFlag, opts.effort);
|
|
267
287
|
args.push(...mcpFlags);
|
|
268
|
-
// Overflow-triggered compaction gets the bot's summary guidance (see the module)
|
|
269
|
-
|
|
288
|
+
// Overflow-triggered compaction gets the bot's summary guidance (see the module); a profile that holds a
|
|
289
|
+
// pasted API key gets it in its own settings file, beside the `apiKeyHelper` that reads the key.
|
|
290
|
+
args.push(...(0, claudeCompactHook_1.prepareClaudeCompactHookFlags)((0, state_1.resolveDataDir)(), opts.configDir));
|
|
270
291
|
// Subscription billing: the wrapper runs `env -u ANTHROPIC_API_KEY` (a set
|
|
271
292
|
// key would meter the API); a tracker conversation's wrapper starts claude
|
|
272
293
|
// with `env -i` and the agent allowlist instead (R32) — no key either. The CLI
|
|
273
294
|
// reads the OAuth login from ~/.claude — `apiKeySource:"none"` (probe-verified
|
|
274
|
-
// under the wrapper).
|
|
295
|
+
// under the wrapper). An API account (`utils/claudeProfiles.ts`) is metered on
|
|
296
|
+
// purpose, yet never through that variable: its key is the console login's in
|
|
297
|
+
// its own directory, or a pasted key the `apiKeyHelper` of its settings reads.
|
|
275
298
|
const sessionDir = (0, jsonStreamHost_1.resolveJsonStreamSessionDir)((0, state_1.resolveDataDir)(), key);
|
|
276
299
|
const paths = (0, jsonStreamHost_1.getJsonStreamSessionPaths)(sessionDir);
|
|
277
300
|
const tmuxName = (0, jsonStreamHost_1.buildJsonStreamTmuxSessionName)(key);
|
|
@@ -317,7 +340,7 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
317
340
|
isActive: true, isStopping: false, isSuspending: false, isRespawning: false, isBusy: false, unconsumedInputCount: 0,
|
|
318
341
|
lastStdoutActivityAt: Date.now(), outstandingToolUseIds: new Set(),
|
|
319
342
|
model: opts.model, reportedModel: null, effort: opts.effort,
|
|
320
|
-
configDir: opts.configDir, isConfigDirSwitchPending: false,
|
|
343
|
+
configDir: opts.configDir, isConfigDirSwitchPending: false, startCostUsd,
|
|
321
344
|
currentResponseText: '', emittedLength: 0, outputTimer: null,
|
|
322
345
|
reasoningText: '', reasoningStartedAt: null, reasoningTimer: null, reasoningActive: false,
|
|
323
346
|
toolNamesById: new Map(), questionToolUseIds: new Set(),
|
|
@@ -326,7 +349,8 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
326
349
|
compactionInProgress: false, pendingCompaction: null,
|
|
327
350
|
pendingQuestion: null, apiErrorFired: false, rejectedResetAtMs: null, swallowNextAbortError: false,
|
|
328
351
|
lastWatermarkOffset: -1,
|
|
329
|
-
|
|
352
|
+
backgroundTasks: new Map(), notificationTurnPendingSince: null, lastTurnEndedAt: Date.now(), isCompactionResultPending: false, scheduledJobs: new Map(),
|
|
353
|
+
claudeCodeVersion: null, applyingChunk: null,
|
|
330
354
|
adoptCatchUpOffset: null, adoptCatchUpResolvers: [],
|
|
331
355
|
};
|
|
332
356
|
this.sessions.set((0, sessionKey_1.keyToString)(key), session);
|
|
@@ -507,6 +531,12 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
507
531
|
// Only act if this session is still the current one for the key.
|
|
508
532
|
if (this.sessions.get((0, sessionKey_1.keyToString)(key)) !== session)
|
|
509
533
|
return;
|
|
534
|
+
// An explicit stop (`/quit`, `/new`, a backend switch) releases the conversation and its record: nothing to tell
|
|
535
|
+
// its agent, nothing to write back — a write after the release would bring back a record the bot dropped.
|
|
536
|
+
if (!session.isStopping || session.isSuspending) {
|
|
537
|
+
this.recordLostWork(session);
|
|
538
|
+
this.clearPendingWorkOfEndedProcess(session);
|
|
539
|
+
}
|
|
510
540
|
this.clearTimers(session);
|
|
511
541
|
session.isActive = false;
|
|
512
542
|
this.sessions.delete((0, sessionKey_1.keyToString)(key));
|
|
@@ -615,6 +645,7 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
615
645
|
const exitCode = (0, jsonStreamHost_1.readExitCodeFile)(paths.exitCodeFile);
|
|
616
646
|
if (pid === null || exitCode !== null || !(0, jsonStreamHost_1.checkIsPidAlive)(pid)) {
|
|
617
647
|
console.log(`[ClaudeJson] adopt: ${sessionName} process is dead (pid=${pid} exit=${exitCode}), cleaning up`);
|
|
648
|
+
this.storeLostWork(key, (0, lostWork_1.getLostWorkFromTailRecord)(persistedTail, claudeSessionId));
|
|
618
649
|
await this.killOrphanTmuxSession(sessionName);
|
|
619
650
|
return false;
|
|
620
651
|
}
|
|
@@ -625,7 +656,8 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
625
656
|
return false;
|
|
626
657
|
}
|
|
627
658
|
const size = (0, jsonStreamHost_1.getFileSize)(paths.stdoutFile) ?? 0;
|
|
628
|
-
const
|
|
659
|
+
const adoptedTail = (0, jsonStreamHost_1.resolveAdoptedTail)(persistedTail, claudeSessionId, size);
|
|
660
|
+
const { startOffset, isTurnInFlight, outstandingToolUseIds, claudeCodeVersion } = adoptedTail;
|
|
629
661
|
console.log(`[ClaudeJson] adopt: re-attaching to ${sessionName} in ${workDir} (pid=${pid}, tail=${startOffset}/${size})`);
|
|
630
662
|
const launchFlags = (0, jsonStreamHost_1.readWrapperScriptLaunchFlags)(paths.wrapperFile);
|
|
631
663
|
const session = {
|
|
@@ -648,7 +680,8 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
648
680
|
// the topic resolves to now, and a later re-spawn passes them on.
|
|
649
681
|
model: launchFlags.model, reportedModel: null, effort: launchFlags.effort,
|
|
650
682
|
// The account the surviving process runs on is in its own wrapper; the bot compares it with the topic's pick.
|
|
651
|
-
|
|
683
|
+
// A switch the user picked while the process worked survives the reload: it still applies at the turn's end.
|
|
684
|
+
configDir: (0, jsonStreamHost_1.readWrapperScriptConfigDir)(paths.wrapperFile), isConfigDirSwitchPending: adoptedTail.isConfigDirSwitchPending, startCostUsd: null,
|
|
652
685
|
currentResponseText: '', emittedLength: 0, outputTimer: null,
|
|
653
686
|
reasoningText: '', reasoningStartedAt: null, reasoningTimer: null, reasoningActive: false,
|
|
654
687
|
toolNamesById: new Map(), questionToolUseIds: new Set(),
|
|
@@ -659,8 +692,14 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
659
692
|
apiErrorFired: false, rejectedResetAtMs: null, swallowNextAbortError: false,
|
|
660
693
|
lastWatermarkOffset: -1,
|
|
661
694
|
// The frames that built the list and reported the version lie before the
|
|
662
|
-
// tail offset (not replayed): both come from the persisted record
|
|
663
|
-
|
|
695
|
+
// tail offset (not replayed): both come from the persisted record, with the
|
|
696
|
+
// rest of the pending work (a turn announced, the hold's start, scheduled jobs).
|
|
697
|
+
backgroundTasks: new Map(adoptedTail.backgroundTasks.map((task) => [task.taskId, task.description])),
|
|
698
|
+
notificationTurnPendingSince: adoptedTail.notificationTurnPendingSinceMs,
|
|
699
|
+
lastTurnEndedAt: adoptedTail.lastTurnEndedAtMs ?? Date.now(),
|
|
700
|
+
isCompactionResultPending: false,
|
|
701
|
+
scheduledJobs: new Map(adoptedTail.scheduledJobs.map((job) => [job.jobId, job])),
|
|
702
|
+
claudeCodeVersion, applyingChunk: null,
|
|
664
703
|
// Nothing to catch up on when the tail already sits at EOF.
|
|
665
704
|
adoptCatchUpOffset: startOffset < size ? size : null, adoptCatchUpResolvers: [],
|
|
666
705
|
};
|
|
@@ -699,6 +738,9 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
699
738
|
const resolvers = session.adoptCatchUpResolvers.splice(0);
|
|
700
739
|
for (const resolve of resolvers)
|
|
701
740
|
resolve();
|
|
741
|
+
// A switch the user picked before the reload, whose turn ended meanwhile, applies now that the state is current.
|
|
742
|
+
if (!isSessionGone)
|
|
743
|
+
this.applyPendingConfigDirSwitch(session);
|
|
702
744
|
}
|
|
703
745
|
/** Restore a pending question persisted by a previous bot life (see
|
|
704
746
|
* {@link writeQuestionSidecar}). Parse-boundary narrowing; the questions
|
|
@@ -830,15 +872,105 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
830
872
|
return false;
|
|
831
873
|
return session.isBusy || this.checkHasBackgroundWork(key);
|
|
832
874
|
}
|
|
833
|
-
/**
|
|
875
|
+
/**
|
|
876
|
+
* The agent's own pending work (background tasks and scheduled jobs within the hold, a finished task's turn on its
|
|
877
|
+
* way), input not yet taken in, a compaction in flight — "working" minus the turn (L-D2).
|
|
878
|
+
*/
|
|
834
879
|
checkHasBackgroundWork(key) {
|
|
835
880
|
const session = this.sessions.get((0, sessionKey_1.keyToString)(key));
|
|
836
881
|
if (!session?.isActive)
|
|
837
882
|
return false;
|
|
838
|
-
return
|
|
883
|
+
return (0, jsonStreamPendingWork_1.checkHasPendingWork)(this.getPendingWorkInput(session))
|
|
839
884
|
|| session.unconsumedInputCount > 0
|
|
840
885
|
|| session.compactionInProgress;
|
|
841
886
|
}
|
|
887
|
+
/**
|
|
888
|
+
* @description The hold left for the session's background tasks / scheduled jobs (`utils/jsonStreamPendingWork.ts`):
|
|
889
|
+
* `null` without a live session or with nothing pending, `0` once spent. The idle fire re-checks no later than this.
|
|
890
|
+
*/
|
|
891
|
+
getPendingWorkHoldRemainingMs(key) {
|
|
892
|
+
const session = this.sessions.get((0, sessionKey_1.keyToString)(key));
|
|
893
|
+
return session?.isActive ? (0, jsonStreamPendingWork_1.getPendingWorkHoldRemainingMs)(this.getPendingWorkInput(session)) : null;
|
|
894
|
+
}
|
|
895
|
+
/**
|
|
896
|
+
* @description Read what the process wrote since the last tail poll, so the working judgement is current: a stop
|
|
897
|
+
* decides on it, and the poll may lag the process by its backoff.
|
|
898
|
+
*/
|
|
899
|
+
refreshWorkingState(key) {
|
|
900
|
+
const session = this.sessions.get((0, sessionKey_1.keyToString)(key));
|
|
901
|
+
if (!session?.isActive)
|
|
902
|
+
return;
|
|
903
|
+
try {
|
|
904
|
+
this.drainStdoutTail(session);
|
|
905
|
+
}
|
|
906
|
+
catch (e) {
|
|
907
|
+
console.warn(`[ClaudeJson] stdout tail read failed for ${(0, sessionKey_1.keyToString)(key)}:`, e instanceof Error ? e.message : e);
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
/**
|
|
911
|
+
* @description The agent's own pending work the conversation's LAST process took with it when it ended — a crash, a
|
|
912
|
+
* re-spawn, the idle stop after the pending-work hold, a process found gone at the adopt — handed over once (`null`
|
|
913
|
+
* when nothing was lost or it was already taken). The bot tells the agent (`utils/lostWork.ts`).
|
|
914
|
+
*/
|
|
915
|
+
takeLostWork(key) {
|
|
916
|
+
const k = (0, sessionKey_1.keyToString)(key);
|
|
917
|
+
const lostWork = this.lostWorkByKey.get(k) ?? null;
|
|
918
|
+
this.lostWorkByKey.delete(k);
|
|
919
|
+
return lostWork;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* @description What the LIVE process holds now that would die with it — read by the bot before it stops the
|
|
923
|
+
* process itself for a backend switch (an explicit stop records nothing); `null` when nothing is pending.
|
|
924
|
+
*/
|
|
925
|
+
getPendingWork(key) {
|
|
926
|
+
const session = this.sessions.get((0, sessionKey_1.keyToString)(key));
|
|
927
|
+
if (!session?.isActive)
|
|
928
|
+
return null;
|
|
929
|
+
const pendingWork = this.describePendingWork(session, { isTurnCutOff: true });
|
|
930
|
+
return (0, lostWork_1.checkHasLostWork)(pendingWork) ? pendingWork : null;
|
|
931
|
+
}
|
|
932
|
+
/**
|
|
933
|
+
* Keep what a process that ended by itself (or at the idle stop) held. A turn a crash cut off is not counted: the
|
|
934
|
+
* request core re-posts and wakes an open request (R21); the idle stop never runs mid-turn.
|
|
935
|
+
*/
|
|
936
|
+
recordLostWork(session) {
|
|
937
|
+
this.storeLostWork(session.key, this.describePendingWork(session, { isTurnCutOff: false }));
|
|
938
|
+
}
|
|
939
|
+
/** The pending work of a process: its background tasks, its scheduled jobs, a finished task's turn not yet run, and — when the bot itself cuts it off — the turn under way. */
|
|
940
|
+
describePendingWork(session, options) {
|
|
941
|
+
return {
|
|
942
|
+
backgroundTasks: [...session.backgroundTasks].map(([taskId, description]) => ({ taskId, description })),
|
|
943
|
+
scheduledJobCount: session.scheduledJobs.size,
|
|
944
|
+
hasUnreadTaskResult: (0, jsonStreamPendingWork_1.checkIsNotificationTurnPending)({ now: Date.now(), notificationTurnPendingSince: session.notificationTurnPendingSince }),
|
|
945
|
+
wasTurnInFlight: options.isTurnCutOff && session.isBusy && !session.compactionInProgress,
|
|
946
|
+
};
|
|
947
|
+
}
|
|
948
|
+
/**
|
|
949
|
+
* The ended process's pending work is handled here (kept for the bot, or released): the record must not carry it,
|
|
950
|
+
* or the next boot would read the conversation's process as one that died with work pending.
|
|
951
|
+
*/
|
|
952
|
+
clearPendingWorkOfEndedProcess(session) {
|
|
953
|
+
session.backgroundTasks = new Map();
|
|
954
|
+
session.scheduledJobs = new Map();
|
|
955
|
+
session.notificationTurnPendingSince = null;
|
|
956
|
+
this.jsonStreamTailWriter?.(session.key, buildTailRecord(session, session.lastPersistedTailOffset));
|
|
957
|
+
}
|
|
958
|
+
storeLostWork(key, lostWork) {
|
|
959
|
+
if ((0, lostWork_1.checkHasLostWork)(lostWork))
|
|
960
|
+
this.lostWorkByKey.set((0, sessionKey_1.keyToString)(key), lostWork);
|
|
961
|
+
else
|
|
962
|
+
this.lostWorkByKey.delete((0, sessionKey_1.keyToString)(key));
|
|
963
|
+
}
|
|
964
|
+
getPendingWorkInput(session) {
|
|
965
|
+
return {
|
|
966
|
+
now: Date.now(),
|
|
967
|
+
backgroundTaskCount: session.backgroundTasks.size,
|
|
968
|
+
scheduledJobCount: session.scheduledJobs.size,
|
|
969
|
+
lastTurnEndedAt: session.lastTurnEndedAt,
|
|
970
|
+
holdMs: this.pendingWorkHoldMs,
|
|
971
|
+
notificationTurnPendingSince: session.notificationTurnPendingSince,
|
|
972
|
+
};
|
|
973
|
+
}
|
|
842
974
|
/** The CLI version the live process reported on `system/init`, `null` until then (L-D10 gate input). */
|
|
843
975
|
getClaudeCodeVersion(key) {
|
|
844
976
|
return this.sessions.get((0, sessionKey_1.keyToString)(key))?.claudeCodeVersion ?? null;
|
|
@@ -923,6 +1055,7 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
923
1055
|
timer.unref?.();
|
|
924
1056
|
session.pendingCompaction = { resolve, timer, sawSuccess: false };
|
|
925
1057
|
session.compactionInProgress = true;
|
|
1058
|
+
session.isCompactionResultPending = true;
|
|
926
1059
|
// Fresh turn: reset the answer cursor + idle-watchdog clock, mark busy.
|
|
927
1060
|
session.currentResponseText = '';
|
|
928
1061
|
session.emittedLength = 0;
|
|
@@ -1175,6 +1308,9 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1175
1308
|
case 'backgroundTasks':
|
|
1176
1309
|
this.handleBackgroundTasks(session, action);
|
|
1177
1310
|
return;
|
|
1311
|
+
case 'taskNotification':
|
|
1312
|
+
this.handleTaskNotification(session, action);
|
|
1313
|
+
return;
|
|
1178
1314
|
case 'apiRetry':
|
|
1179
1315
|
this.maybeEmitApiError(session, action.text);
|
|
1180
1316
|
return;
|
|
@@ -1194,10 +1330,20 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1194
1330
|
// it `/status` and the pinned banner showed no model at all on a default
|
|
1195
1331
|
// start / resume / adopt (nothing ever set the `--model` pick).
|
|
1196
1332
|
this.handleInit(session, action);
|
|
1333
|
+
// `init` opens every turn: the turn runs from here, not from its first output.
|
|
1334
|
+
this.markTurnStarted(session);
|
|
1335
|
+
return;
|
|
1336
|
+
case 'turnStarted':
|
|
1337
|
+
this.markTurnStarted(session);
|
|
1338
|
+
if (action.wakeupSource !== null)
|
|
1339
|
+
session.scheduledJobs = (0, claudeScheduledJobs_1.getScheduledJobsAfterFiring)(session.scheduledJobs, action.wakeupSource);
|
|
1197
1340
|
return;
|
|
1198
1341
|
case 'backgroundTasks':
|
|
1199
1342
|
this.handleBackgroundTasks(session, action);
|
|
1200
1343
|
return;
|
|
1344
|
+
case 'taskNotification':
|
|
1345
|
+
this.handleTaskNotification(session, action);
|
|
1346
|
+
return;
|
|
1201
1347
|
case 'textDelta':
|
|
1202
1348
|
// Mid-turn activity marks the session busy: `sendInput` normally set it,
|
|
1203
1349
|
// but an ADOPTED session (bot restart mid-turn) reconstructs the busy
|
|
@@ -1263,7 +1409,17 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1263
1409
|
* WHOLE on every change, so no diffing). The tail-offset persist that follows
|
|
1264
1410
|
* this frame's drain carries the new list to `state.json`. */
|
|
1265
1411
|
handleBackgroundTasks(session, action) {
|
|
1266
|
-
session.
|
|
1412
|
+
session.backgroundTasks = new Map(action.tasks.map((task) => [task.taskId, task.description]));
|
|
1413
|
+
}
|
|
1414
|
+
/** A background task ended: its own turn is coming — the list empties right after this frame, the turn shows later. */
|
|
1415
|
+
handleTaskNotification(session, action) {
|
|
1416
|
+
if (session.backgroundTasks.has(action.taskId))
|
|
1417
|
+
session.notificationTurnPendingSince = Date.now();
|
|
1418
|
+
}
|
|
1419
|
+
/** A turn began (its `init`, the CLI's running state, a scheduled job firing): busy from here; an announced turn has shown. */
|
|
1420
|
+
markTurnStarted(session) {
|
|
1421
|
+
session.isBusy = true;
|
|
1422
|
+
session.notificationTurnPendingSince = null;
|
|
1267
1423
|
}
|
|
1268
1424
|
// — compaction (F3) —
|
|
1269
1425
|
handleCompactStatus(session, action) {
|
|
@@ -1390,11 +1546,25 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1390
1546
|
if (session.questionToolUseIds.has(action.toolUseId))
|
|
1391
1547
|
return;
|
|
1392
1548
|
const tool = session.toolNamesById.get(action.toolUseId) ?? 'tool';
|
|
1549
|
+
this.trackScheduledJob(session, tool, action.output);
|
|
1393
1550
|
if (!action.output.trim())
|
|
1394
1551
|
return;
|
|
1395
1552
|
// Mode-agnostic emit — the bot applies the per-thread `/tool_results` pref.
|
|
1396
1553
|
this.emit('toolResult', session.key, { tool, output: action.output });
|
|
1397
1554
|
}
|
|
1555
|
+
/** A `CronCreate` / `CronDelete` / `ScheduleWakeup` result changes the session-only jobs the process holds. */
|
|
1556
|
+
trackScheduledJob(session, tool, output) {
|
|
1557
|
+
if (tool === claudeScheduledJobs_1.cronCreateToolName || tool === claudeScheduledJobs_1.loopWakeupToolName) {
|
|
1558
|
+
const job = tool === claudeScheduledJobs_1.cronCreateToolName ? (0, claudeScheduledJobs_1.getScheduledJobFromCronCreateResult)(output) : (0, claudeScheduledJobs_1.getScheduledJobFromLoopWakeupResult)(output);
|
|
1559
|
+
if (job)
|
|
1560
|
+
session.scheduledJobs.set(job.jobId, job);
|
|
1561
|
+
}
|
|
1562
|
+
else if (tool === claudeScheduledJobs_1.cronDeleteToolName) {
|
|
1563
|
+
const jobId = (0, claudeScheduledJobs_1.getCancelledJobIdFromCronDeleteResult)(output);
|
|
1564
|
+
if (jobId)
|
|
1565
|
+
session.scheduledJobs.delete(jobId);
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1398
1568
|
// — sub-agent (v1) —
|
|
1399
1569
|
markSubagentActive(session) {
|
|
1400
1570
|
session.subagentActive = true;
|
|
@@ -1437,6 +1607,13 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1437
1607
|
// — turn end —
|
|
1438
1608
|
/** Every terminal `result` — a normal turn, a compaction turn, an error — ends with the `turnEnded` event. */
|
|
1439
1609
|
handleTurnEnd(session, action) {
|
|
1610
|
+
// Every turn's cost, the compaction turn's too: what an account billed to API credits spends (the bot keeps the baseline).
|
|
1611
|
+
if (action.totalCostUsd !== null) {
|
|
1612
|
+
this.claudeTurnCostSink?.(session.key, session.configDir, {
|
|
1613
|
+
sessionId: session.sessionId, totalCostUsd: action.totalCostUsd, startCostUsd: session.startCostUsd, isError: action.isError,
|
|
1614
|
+
});
|
|
1615
|
+
session.startCostUsd = null;
|
|
1616
|
+
}
|
|
1440
1617
|
this.applyTurnEnd(session, action);
|
|
1441
1618
|
// After the handlers above: the bot's per-turn stop (L5) reads the session's state as settled here.
|
|
1442
1619
|
this.emit('turnEnded', session.key);
|
|
@@ -1451,6 +1628,13 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1451
1628
|
console.log(`${exports.claudeJsonStreamUsageLogPrefix}${(0, sessionKey_1.keyToString)(session.key)}: input=${inputTokens} cacheRead=${cacheReadTokens} cacheWrite=${cacheWriteTokens} output=${outputTokens}`);
|
|
1452
1629
|
}
|
|
1453
1630
|
session.isBusy = false;
|
|
1631
|
+
// The pending-work hold counts from the agent's own last turn: a bot-issued compaction is not one. A task that
|
|
1632
|
+
// finished during the turn is NOT folded into it: its own turn starts right after this `result` (`init` +45 ms,
|
|
1633
|
+
// measured on 2.1.310), so its announcement stays until that turn shows — clearing it here would let the per-turn
|
|
1634
|
+
// stop kill the process in that gap.
|
|
1635
|
+
if (!session.isCompactionResultPending)
|
|
1636
|
+
session.lastTurnEndedAt = Date.now();
|
|
1637
|
+
session.isCompactionResultPending = false;
|
|
1454
1638
|
// Self-healing accounting: a FAILED turn (usage limit, API error) may never echo the messages that were
|
|
1455
1639
|
// queued behind it, and a count left above zero would make the session look "working" forever — a pending
|
|
1456
1640
|
// account switch would never fire. A message still genuinely queued is echoed later (the decrement clamps
|
|
@@ -1785,6 +1969,9 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1785
1969
|
const { key, workDir, sessionId } = session;
|
|
1786
1970
|
const configDir = change.configDir === undefined ? session.configDir : change.configDir;
|
|
1787
1971
|
session.isRespawning = true;
|
|
1972
|
+
// The re-spawned process starts with none of the old one's background tasks or jobs, and the turn it cuts off is
|
|
1973
|
+
// re-prompted by nothing else.
|
|
1974
|
+
this.storeLostWork(key, this.describePendingWork(session, { isTurnCutOff: true }));
|
|
1788
1975
|
this.rejectQuestion(key);
|
|
1789
1976
|
await session.stdinWriteChain.catch(() => { });
|
|
1790
1977
|
this.clearTimers(session);
|
|
@@ -1825,6 +2012,8 @@ class ClaudeJsonStreamAdapter extends events_1.EventEmitter {
|
|
|
1825
2012
|
}
|
|
1826
2013
|
if (!options.isAfterLimit && this.checkIsWorking(key)) {
|
|
1827
2014
|
session.isConfigDirSwitchPending = true;
|
|
2015
|
+
// Recorded now: a reload before the turn ends must not drop the user's pick.
|
|
2016
|
+
this.jsonStreamTailWriter?.(key, buildTailRecord(session, session.lastPersistedTailOffset));
|
|
1828
2017
|
return 'deferred';
|
|
1829
2018
|
}
|
|
1830
2019
|
session.isConfigDirSwitchPending = false;
|
|
@@ -1882,14 +2071,22 @@ exports.ClaudeJsonStreamAdapter = ClaudeJsonStreamAdapter;
|
|
|
1882
2071
|
* state in force there (task list, turn in flight, outstanding tools) travel together
|
|
1883
2072
|
* (see `JsonStreamTailOffset`). */
|
|
1884
2073
|
function buildTailRecord(session, offsetBytes) {
|
|
2074
|
+
const backgroundTasks = [...session.backgroundTasks].map(([taskId, description]) => ({ taskId, description }));
|
|
2075
|
+
const isWorkPending = session.backgroundTasks.size > 0 || session.scheduledJobs.size > 0;
|
|
1885
2076
|
return {
|
|
1886
2077
|
sessionId: session.sessionId,
|
|
1887
2078
|
offsetBytes,
|
|
1888
|
-
backgroundTaskIds:
|
|
2079
|
+
backgroundTaskIds: backgroundTasks.map((task) => task.taskId),
|
|
1889
2080
|
isTurnInFlight: session.isBusy,
|
|
1890
2081
|
outstandingToolUseIds: [...session.outstandingToolUseIds],
|
|
1891
2082
|
// Only once known: the record never claims a version the process did not report.
|
|
1892
2083
|
...(session.claudeCodeVersion !== null ? { claudeCodeVersion: session.claudeCodeVersion } : {}),
|
|
2084
|
+
// The pending work only while there is some: an idle record stays as it was.
|
|
2085
|
+
...(backgroundTasks.length > 0 ? { backgroundTasks } : {}),
|
|
2086
|
+
...(isWorkPending ? { lastTurnEndedAtMs: session.lastTurnEndedAt } : {}),
|
|
2087
|
+
...(session.scheduledJobs.size > 0 ? { scheduledJobs: [...session.scheduledJobs.values()] } : {}),
|
|
2088
|
+
...(session.notificationTurnPendingSince !== null ? { notificationTurnPendingSinceMs: session.notificationTurnPendingSince } : {}),
|
|
2089
|
+
...(session.isConfigDirSwitchPending ? { isConfigDirSwitchPending: true } : {}),
|
|
1893
2090
|
};
|
|
1894
2091
|
}
|
|
1895
2092
|
/**
|