@herdctl/core 1.3.1 → 2.0.1

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 (187) hide show
  1. package/dist/config/__tests__/agent.test.js +12 -12
  2. package/dist/config/__tests__/agent.test.js.map +1 -1
  3. package/dist/config/__tests__/loader.test.js +201 -4
  4. package/dist/config/__tests__/loader.test.js.map +1 -1
  5. package/dist/config/__tests__/merge.test.js +29 -4
  6. package/dist/config/__tests__/merge.test.js.map +1 -1
  7. package/dist/config/__tests__/parser.test.js +13 -13
  8. package/dist/config/__tests__/parser.test.js.map +1 -1
  9. package/dist/config/__tests__/schema.test.js +10 -10
  10. package/dist/config/__tests__/schema.test.js.map +1 -1
  11. package/dist/config/index.d.ts +1 -1
  12. package/dist/config/index.d.ts.map +1 -1
  13. package/dist/config/index.js +2 -2
  14. package/dist/config/index.js.map +1 -1
  15. package/dist/config/loader.d.ts.map +1 -1
  16. package/dist/config/loader.js +71 -0
  17. package/dist/config/loader.js.map +1 -1
  18. package/dist/config/merge.d.ts +4 -1
  19. package/dist/config/merge.d.ts.map +1 -1
  20. package/dist/config/merge.js +16 -0
  21. package/dist/config/merge.js.map +1 -1
  22. package/dist/config/schema.d.ts +906 -89
  23. package/dist/config/schema.d.ts.map +1 -1
  24. package/dist/config/schema.js +109 -7
  25. package/dist/config/schema.js.map +1 -1
  26. package/dist/fleet-manager/__tests__/coverage.test.js +25 -24
  27. package/dist/fleet-manager/__tests__/coverage.test.js.map +1 -1
  28. package/dist/fleet-manager/__tests__/discord-manager.test.js +9 -2
  29. package/dist/fleet-manager/__tests__/discord-manager.test.js.map +1 -1
  30. package/dist/fleet-manager/__tests__/integration.test.js +27 -0
  31. package/dist/fleet-manager/__tests__/integration.test.js.map +1 -1
  32. package/dist/fleet-manager/__tests__/job-control.test.js +66 -0
  33. package/dist/fleet-manager/__tests__/job-control.test.js.map +1 -1
  34. package/dist/fleet-manager/__tests__/status-queries.test.js +12 -11
  35. package/dist/fleet-manager/__tests__/status-queries.test.js.map +1 -1
  36. package/dist/fleet-manager/config-reload.js +9 -9
  37. package/dist/fleet-manager/config-reload.js.map +1 -1
  38. package/dist/fleet-manager/discord-manager.d.ts.map +1 -1
  39. package/dist/fleet-manager/discord-manager.js +27 -4
  40. package/dist/fleet-manager/discord-manager.js.map +1 -1
  41. package/dist/fleet-manager/fleet-manager.d.ts +11 -0
  42. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  43. package/dist/fleet-manager/fleet-manager.js +27 -0
  44. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  45. package/dist/fleet-manager/job-control.d.ts +1 -1
  46. package/dist/fleet-manager/job-control.d.ts.map +1 -1
  47. package/dist/fleet-manager/job-control.js +36 -14
  48. package/dist/fleet-manager/job-control.js.map +1 -1
  49. package/dist/fleet-manager/schedule-executor.d.ts +1 -1
  50. package/dist/fleet-manager/schedule-executor.d.ts.map +1 -1
  51. package/dist/fleet-manager/schedule-executor.js +17 -17
  52. package/dist/fleet-manager/schedule-executor.js.map +1 -1
  53. package/dist/fleet-manager/status-queries.js +7 -7
  54. package/dist/fleet-manager/status-queries.js.map +1 -1
  55. package/dist/fleet-manager/types.d.ts +10 -2
  56. package/dist/fleet-manager/types.d.ts.map +1 -1
  57. package/dist/fleet-manager/working-directory-helper.d.ts +29 -0
  58. package/dist/fleet-manager/working-directory-helper.d.ts.map +1 -0
  59. package/dist/fleet-manager/working-directory-helper.js +36 -0
  60. package/dist/fleet-manager/working-directory-helper.js.map +1 -0
  61. package/dist/hooks/__tests__/discord-runner.test.js +16 -16
  62. package/dist/hooks/__tests__/discord-runner.test.js.map +1 -1
  63. package/dist/hooks/runners/discord.d.ts.map +1 -1
  64. package/dist/hooks/runners/discord.js +15 -12
  65. package/dist/hooks/runners/discord.js.map +1 -1
  66. package/dist/runner/__tests__/job-executor.test.js +461 -126
  67. package/dist/runner/__tests__/job-executor.test.js.map +1 -1
  68. package/dist/runner/__tests__/message-processor.test.js +12 -35
  69. package/dist/runner/__tests__/message-processor.test.js.map +1 -1
  70. package/dist/runner/__tests__/sdk-adapter.test.js +137 -2
  71. package/dist/runner/__tests__/sdk-adapter.test.js.map +1 -1
  72. package/dist/runner/index.d.ts +2 -0
  73. package/dist/runner/index.d.ts.map +1 -1
  74. package/dist/runner/index.js +1 -0
  75. package/dist/runner/index.js.map +1 -1
  76. package/dist/runner/job-executor.d.ts +12 -8
  77. package/dist/runner/job-executor.d.ts.map +1 -1
  78. package/dist/runner/job-executor.js +280 -133
  79. package/dist/runner/job-executor.js.map +1 -1
  80. package/dist/runner/message-processor.d.ts +5 -2
  81. package/dist/runner/message-processor.d.ts.map +1 -1
  82. package/dist/runner/message-processor.js +9 -18
  83. package/dist/runner/message-processor.js.map +1 -1
  84. package/dist/runner/runtime/__tests__/cli-session-path.test.d.ts +2 -0
  85. package/dist/runner/runtime/__tests__/cli-session-path.test.d.ts.map +1 -0
  86. package/dist/runner/runtime/__tests__/cli-session-path.test.js +150 -0
  87. package/dist/runner/runtime/__tests__/cli-session-path.test.js.map +1 -0
  88. package/dist/runner/runtime/__tests__/docker-config.test.d.ts +2 -0
  89. package/dist/runner/runtime/__tests__/docker-config.test.d.ts.map +1 -0
  90. package/dist/runner/runtime/__tests__/docker-config.test.js +352 -0
  91. package/dist/runner/runtime/__tests__/docker-config.test.js.map +1 -0
  92. package/dist/runner/runtime/__tests__/docker-security.test.d.ts +2 -0
  93. package/dist/runner/runtime/__tests__/docker-security.test.d.ts.map +1 -0
  94. package/dist/runner/runtime/__tests__/docker-security.test.js +384 -0
  95. package/dist/runner/runtime/__tests__/docker-security.test.js.map +1 -0
  96. package/dist/runner/runtime/__tests__/factory.test.d.ts +2 -0
  97. package/dist/runner/runtime/__tests__/factory.test.d.ts.map +1 -0
  98. package/dist/runner/runtime/__tests__/factory.test.js +149 -0
  99. package/dist/runner/runtime/__tests__/factory.test.js.map +1 -0
  100. package/dist/runner/runtime/__tests__/integration.test.d.ts +2 -0
  101. package/dist/runner/runtime/__tests__/integration.test.d.ts.map +1 -0
  102. package/dist/runner/runtime/__tests__/integration.test.js +274 -0
  103. package/dist/runner/runtime/__tests__/integration.test.js.map +1 -0
  104. package/dist/runner/runtime/cli-runtime.d.ts +107 -0
  105. package/dist/runner/runtime/cli-runtime.d.ts.map +1 -0
  106. package/dist/runner/runtime/cli-runtime.js +341 -0
  107. package/dist/runner/runtime/cli-runtime.js.map +1 -0
  108. package/dist/runner/runtime/cli-session-path.d.ts +108 -0
  109. package/dist/runner/runtime/cli-session-path.d.ts.map +1 -0
  110. package/dist/runner/runtime/cli-session-path.js +173 -0
  111. package/dist/runner/runtime/cli-session-path.js.map +1 -0
  112. package/dist/runner/runtime/cli-session-watcher.d.ts +55 -0
  113. package/dist/runner/runtime/cli-session-watcher.d.ts.map +1 -0
  114. package/dist/runner/runtime/cli-session-watcher.js +187 -0
  115. package/dist/runner/runtime/cli-session-watcher.js.map +1 -0
  116. package/dist/runner/runtime/container-manager.d.ts +76 -0
  117. package/dist/runner/runtime/container-manager.d.ts.map +1 -0
  118. package/dist/runner/runtime/container-manager.js +229 -0
  119. package/dist/runner/runtime/container-manager.js.map +1 -0
  120. package/dist/runner/runtime/container-runner.d.ts +62 -0
  121. package/dist/runner/runtime/container-runner.d.ts.map +1 -0
  122. package/dist/runner/runtime/container-runner.js +235 -0
  123. package/dist/runner/runtime/container-runner.js.map +1 -0
  124. package/dist/runner/runtime/docker-config.d.ts +100 -0
  125. package/dist/runner/runtime/docker-config.d.ts.map +1 -0
  126. package/dist/runner/runtime/docker-config.js +98 -0
  127. package/dist/runner/runtime/docker-config.js.map +1 -0
  128. package/dist/runner/runtime/factory.d.ts +63 -0
  129. package/dist/runner/runtime/factory.d.ts.map +1 -0
  130. package/dist/runner/runtime/factory.js +68 -0
  131. package/dist/runner/runtime/factory.js.map +1 -0
  132. package/dist/runner/runtime/index.d.ts +20 -0
  133. package/dist/runner/runtime/index.d.ts.map +1 -0
  134. package/dist/runner/runtime/index.js +21 -0
  135. package/dist/runner/runtime/index.js.map +1 -0
  136. package/dist/runner/runtime/interface.d.ts +59 -0
  137. package/dist/runner/runtime/interface.d.ts.map +1 -0
  138. package/dist/runner/runtime/interface.js +12 -0
  139. package/dist/runner/runtime/interface.js.map +1 -0
  140. package/dist/runner/runtime/sdk-runtime.d.ts +46 -0
  141. package/dist/runner/runtime/sdk-runtime.d.ts.map +1 -0
  142. package/dist/runner/runtime/sdk-runtime.js +63 -0
  143. package/dist/runner/runtime/sdk-runtime.js.map +1 -0
  144. package/dist/runner/sdk-adapter.d.ts.map +1 -1
  145. package/dist/runner/sdk-adapter.js +28 -10
  146. package/dist/runner/sdk-adapter.js.map +1 -1
  147. package/dist/runner/types.d.ts +11 -1
  148. package/dist/runner/types.d.ts.map +1 -1
  149. package/dist/scheduler/__tests__/schedule-runner.test.js +61 -50
  150. package/dist/scheduler/__tests__/schedule-runner.test.js.map +1 -1
  151. package/dist/scheduler/schedule-runner.d.ts +1 -4
  152. package/dist/scheduler/schedule-runner.d.ts.map +1 -1
  153. package/dist/scheduler/schedule-runner.js +40 -8
  154. package/dist/scheduler/schedule-runner.js.map +1 -1
  155. package/dist/state/__tests__/session-schema.test.js +4 -0
  156. package/dist/state/__tests__/session-schema.test.js.map +1 -1
  157. package/dist/state/__tests__/session-validation.test.d.ts +2 -0
  158. package/dist/state/__tests__/session-validation.test.d.ts.map +1 -0
  159. package/dist/state/__tests__/session-validation.test.js +446 -0
  160. package/dist/state/__tests__/session-validation.test.js.map +1 -0
  161. package/dist/state/__tests__/session.test.js +68 -0
  162. package/dist/state/__tests__/session.test.js.map +1 -1
  163. package/dist/state/__tests__/working-directory-validation.test.d.ts +5 -0
  164. package/dist/state/__tests__/working-directory-validation.test.d.ts.map +1 -0
  165. package/dist/state/__tests__/working-directory-validation.test.js +101 -0
  166. package/dist/state/__tests__/working-directory-validation.test.js.map +1 -0
  167. package/dist/state/index.d.ts +2 -0
  168. package/dist/state/index.d.ts.map +1 -1
  169. package/dist/state/index.js +4 -0
  170. package/dist/state/index.js.map +1 -1
  171. package/dist/state/schemas/session-info.d.ts +32 -0
  172. package/dist/state/schemas/session-info.d.ts.map +1 -1
  173. package/dist/state/schemas/session-info.js +22 -0
  174. package/dist/state/schemas/session-info.js.map +1 -1
  175. package/dist/state/session-validation.d.ts +227 -0
  176. package/dist/state/session-validation.d.ts.map +1 -0
  177. package/dist/state/session-validation.js +448 -0
  178. package/dist/state/session-validation.js.map +1 -0
  179. package/dist/state/session.d.ts +23 -3
  180. package/dist/state/session.d.ts.map +1 -1
  181. package/dist/state/session.js +41 -6
  182. package/dist/state/session.js.map +1 -1
  183. package/dist/state/working-directory-validation.d.ts +52 -0
  184. package/dist/state/working-directory-validation.d.ts.map +1 -0
  185. package/dist/state/working-directory-validation.js +81 -0
  186. package/dist/state/working-directory-validation.js.map +1 -0
  187. package/package.json +7 -2
@@ -9,9 +9,9 @@
9
9
  import { join } from "node:path";
10
10
  import { mkdir, appendFile } from "node:fs/promises";
11
11
  import { SDKInitializationError, SDKStreamingError, MalformedResponseError, wrapError, classifyError, buildErrorMessage, } from "./errors.js";
12
- import { toSDKOptions } from "./sdk-adapter.js";
13
12
  import { processSDKMessage, isTerminalMessage, extractSummary, } from "./message-processor.js";
14
- import { createJob, updateJob, appendJobOutput, getJobOutputPath, updateSessionInfo, getSessionInfo, } from "../state/index.js";
13
+ import { createJob, updateJob, appendJobOutput, getJobOutputPath, updateSessionInfo, getSessionInfo, clearSession, isSessionExpiredError, validateWorkingDirectory, validateRuntimeContext, } from "../state/index.js";
14
+ import { resolveWorkingDirectory } from "../fleet-manager/working-directory-helper.js";
15
15
  // =============================================================================
16
16
  // Default Logger
17
17
  // =============================================================================
@@ -34,7 +34,8 @@ const defaultLogger = {
34
34
  *
35
35
  * @example
36
36
  * ```typescript
37
- * const executor = new JobExecutor(sdkQuery);
37
+ * const runtime = RuntimeFactory.create(agent);
38
+ * const executor = new JobExecutor(runtime);
38
39
  *
39
40
  * const result = await executor.execute({
40
41
  * agent: resolvedAgent,
@@ -47,16 +48,16 @@ const defaultLogger = {
47
48
  * ```
48
49
  */
49
50
  export class JobExecutor {
50
- sdkQuery;
51
+ runtime;
51
52
  logger;
52
53
  /**
53
54
  * Create a new job executor
54
55
  *
55
- * @param sdkQuery - The SDK query function to use for agent execution
56
+ * @param runtime - The runtime interface to use for agent execution
56
57
  * @param options - Optional configuration
57
58
  */
58
- constructor(sdkQuery, options = {}) {
59
- this.sdkQuery = sdkQuery;
59
+ constructor(runtime, options = {}) {
60
+ this.runtime = runtime;
60
61
  this.logger = options.logger ?? defaultLogger;
61
62
  }
62
63
  /**
@@ -66,11 +67,12 @@ export class JobExecutor {
66
67
  * @returns Result of the execution including job ID and status
67
68
  */
68
69
  async execute(options) {
69
- const { agent, prompt, stateDir, triggerType, schedule, onMessage, outputToFile } = options;
70
+ const { agent, prompt, stateDir, triggerType, schedule, onMessage, onJobCreated, outputToFile } = options;
70
71
  const jobsDir = join(stateDir, "jobs");
71
72
  let job;
72
73
  let sessionId;
73
74
  let summary;
75
+ let lastAssistantContent; // Track last assistant message for fallback summary
74
76
  let lastError;
75
77
  let errorDetails;
76
78
  let messagesReceived = 0;
@@ -89,6 +91,10 @@ export class JobExecutor {
89
91
  forked_from: options.fork ? options.forkedFrom : undefined,
90
92
  });
91
93
  this.logger.info?.(`Created job ${job.id} for agent ${agent.name}`);
94
+ // Notify caller of job ID immediately (before execution starts)
95
+ if (onJobCreated) {
96
+ onJobCreated(job.id);
97
+ }
92
98
  }
93
99
  catch (error) {
94
100
  this.logger.error(`Failed to create job: ${error.message}`);
@@ -117,145 +123,270 @@ export class JobExecutor {
117
123
  this.logger.warn(`Failed to update job status to running: ${error.message}`);
118
124
  // Continue execution - job was created
119
125
  }
120
- // Step 4: Build SDK options
121
- const sdkOptions = toSDKOptions(agent, {
122
- resume: options.resume,
123
- fork: options.fork ? true : undefined,
124
- });
125
- // DEBUG: Log SDK options to help diagnose system prompt issues
126
- const promptType = typeof sdkOptions.systemPrompt === "string" ? "custom" : "preset";
127
- this.logger.info?.(`SDK options for job ${job.id}: settingSources=${JSON.stringify(sdkOptions.settingSources)}, systemPrompt.type=${promptType}, cwd=${sdkOptions.cwd ?? "(not set)"}`);
128
- if (typeof sdkOptions.systemPrompt === "string") {
129
- this.logger.info?.(`SDK systemPrompt content (first 100 chars): ${sdkOptions.systemPrompt.substring(0, 100)}`);
130
- }
131
- // Step 5: Execute agent and stream output
132
- try {
133
- let messages;
134
- // Catch SDK initialization errors (e.g., missing API key)
135
- try {
136
- messages = this.sdkQuery({
137
- prompt,
138
- options: sdkOptions,
139
- });
140
- }
141
- catch (initError) {
142
- // Wrap initialization errors with context
143
- throw new SDKInitializationError(buildErrorMessage(initError.message, {
144
- jobId: job.id,
145
- agentName: agent.name,
146
- }), {
147
- jobId: job.id,
148
- agentName: agent.name,
149
- cause: initError,
150
- });
151
- }
152
- for await (const sdkMessage of messages) {
153
- messagesReceived++;
154
- // Process the message safely (handles malformed responses)
155
- let processed;
156
- try {
157
- processed = processSDKMessage(sdkMessage);
158
- }
159
- catch (processError) {
160
- // Log but don't crash on malformed messages
161
- this.logger.warn(`Malformed SDK message received: ${processError.message}`);
162
- // Write a warning to job output
126
+ // Step 3.5: Validate session if resuming
127
+ // This prevents unexpected logouts by checking session expiration before attempting resume
128
+ // Pass timeout to getSessionInfo so expired sessions are automatically cleared (consistent with schedule-runner.ts)
129
+ let effectiveResume;
130
+ if (options.resume) {
131
+ const sessionsDir = join(stateDir, "sessions");
132
+ // Default to 24h if not configured - prevents unexpected logouts from expired server-side sessions
133
+ const sessionTimeout = agent.session?.timeout ?? "24h";
134
+ const existingSession = await getSessionInfo(sessionsDir, agent.name, {
135
+ timeout: sessionTimeout,
136
+ logger: this.logger,
137
+ runtime: agent.runtime ?? "sdk", // Pass runtime for correct validation
138
+ });
139
+ if (existingSession?.session_id) {
140
+ // Validate that the working directory hasn't changed since the session was created
141
+ // If it changed, Claude Code will look for the session file in the wrong directory
142
+ const currentWorkingDirectory = resolveWorkingDirectory(agent);
143
+ const wdValidation = validateWorkingDirectory(existingSession, currentWorkingDirectory);
144
+ if (!wdValidation.valid) {
145
+ this.logger.warn(`${wdValidation.message} - clearing stale session ${existingSession.session_id}`);
163
146
  try {
164
- await appendJobOutput(jobsDir, job.id, {
165
- type: "error",
166
- message: `Malformed SDK message: ${processError.message}`,
167
- code: "MALFORMED_MESSAGE",
168
- });
147
+ await clearSession(sessionsDir, agent.name);
169
148
  }
170
- catch {
171
- // Ignore output write failures for malformed message warnings
149
+ catch (clearError) {
150
+ this.logger.warn(`Failed to clear stale session: ${clearError.message}`);
172
151
  }
173
- // Continue processing other messages
174
- continue;
152
+ // Continue without resume - working directory changed
153
+ effectiveResume = undefined;
175
154
  }
176
- // Write to job output immediately (no buffering)
155
+ else {
156
+ // Validate that the runtime context hasn't changed since the session was created
157
+ // Sessions are tied to specific runtime configurations (SDK vs CLI, Docker vs native)
158
+ const currentRuntimeType = agent.runtime ?? "sdk";
159
+ const currentDockerEnabled = agent.docker?.enabled ?? false;
160
+ const runtimeValidation = validateRuntimeContext(existingSession, currentRuntimeType, currentDockerEnabled);
161
+ if (!runtimeValidation.valid) {
162
+ this.logger.warn(`${runtimeValidation.message} - clearing stale session ${existingSession.session_id}`);
163
+ try {
164
+ await clearSession(sessionsDir, agent.name);
165
+ }
166
+ catch (clearError) {
167
+ this.logger.warn(`Failed to clear stale session: ${clearError.message}`);
168
+ }
169
+ // Continue without resume - runtime context changed
170
+ effectiveResume = undefined;
171
+ }
172
+ else {
173
+ // Use the actual session ID from the stored session, not the original options.resume value
174
+ // This ensures we always use the correct session ID stored on disk
175
+ effectiveResume = existingSession.session_id;
176
+ this.logger.info?.(`Found valid session for ${agent.name}: ${effectiveResume}, will attempt to resume`);
177
+ // Update last_used_at NOW to prevent session from expiring during long-running jobs
178
+ // This fixes the authentication bug where sessions could expire mid-execution
179
+ try {
180
+ await updateSessionInfo(sessionsDir, agent.name, {
181
+ session_id: existingSession.session_id,
182
+ job_count: existingSession.job_count,
183
+ mode: existingSession.mode,
184
+ working_directory: currentWorkingDirectory,
185
+ runtime_type: agent.runtime ?? "sdk",
186
+ docker_enabled: agent.docker?.enabled ?? false,
187
+ });
188
+ this.logger.info?.(`Refreshed session timestamp for ${agent.name} before execution`);
189
+ }
190
+ catch (updateError) {
191
+ this.logger.warn(`Failed to refresh session timestamp: ${updateError.message}`);
192
+ // Continue anyway - the session is still valid for now
193
+ }
194
+ }
195
+ }
196
+ }
197
+ else {
198
+ this.logger.info?.(`No valid session for ${agent.name} (expired or not found), starting fresh`);
199
+ // Write info to job output
177
200
  try {
178
- await appendJobOutput(jobsDir, job.id, processed.output);
201
+ await appendJobOutput(jobsDir, job.id, {
202
+ type: "system",
203
+ content: `No valid session found (expired or missing). Starting fresh session.`,
204
+ });
179
205
  }
180
- catch (outputError) {
181
- this.logger.warn(`Failed to write job output: ${outputError.message}`);
182
- // Continue processing - don't fail execution due to logging issues
206
+ catch {
207
+ // Ignore output write failures
183
208
  }
184
- // Also write to output.log file if outputToFile is enabled
185
- if (outputLogPath) {
209
+ // Don't resume - start fresh (effectiveResume stays undefined)
210
+ }
211
+ }
212
+ // Step 4: Execute agent and stream output
213
+ // Track whether we've already retried after a session expiration
214
+ let retriedAfterSessionExpiry = false;
215
+ const executeWithRetry = async (resumeSessionId) => {
216
+ try {
217
+ let messages;
218
+ // Catch runtime initialization errors
219
+ try {
220
+ messages = this.runtime.execute({
221
+ prompt,
222
+ agent: options.agent,
223
+ resume: resumeSessionId,
224
+ fork: options.fork ? true : undefined,
225
+ abortController: options.abortController,
226
+ });
227
+ }
228
+ catch (initError) {
229
+ // Wrap initialization errors with context
230
+ throw new SDKInitializationError(buildErrorMessage(initError.message, {
231
+ jobId: job.id,
232
+ agentName: agent.name,
233
+ }), {
234
+ jobId: job.id,
235
+ agentName: agent.name,
236
+ cause: initError,
237
+ });
238
+ }
239
+ for await (const sdkMessage of messages) {
240
+ messagesReceived++;
241
+ // Process the message safely (handles malformed responses)
242
+ let processed;
186
243
  try {
187
- const logLine = this.formatOutputLogLine(processed.output);
188
- if (logLine) {
189
- await appendFile(outputLogPath, logLine + "\n", "utf-8");
244
+ processed = processSDKMessage(sdkMessage);
245
+ }
246
+ catch (processError) {
247
+ // Log but don't crash on malformed messages
248
+ this.logger.warn(`Malformed SDK message received: ${processError.message}`);
249
+ // Write a warning to job output
250
+ try {
251
+ await appendJobOutput(jobsDir, job.id, {
252
+ type: "error",
253
+ message: `Malformed SDK message: ${processError.message}`,
254
+ code: "MALFORMED_MESSAGE",
255
+ });
190
256
  }
257
+ catch {
258
+ // Ignore output write failures for malformed message warnings
259
+ }
260
+ // Continue processing other messages
261
+ continue;
191
262
  }
192
- catch (fileError) {
193
- this.logger.warn(`Failed to write to output log file: ${fileError.message}`);
194
- // Continue processing - file logging is optional
263
+ // Write to job output immediately (no buffering)
264
+ try {
265
+ await appendJobOutput(jobsDir, job.id, processed.output);
266
+ }
267
+ catch (outputError) {
268
+ this.logger.warn(`Failed to write job output: ${outputError.message}`);
269
+ // Continue processing - don't fail execution due to logging issues
270
+ }
271
+ // Also write to output.log file if outputToFile is enabled
272
+ if (outputLogPath) {
273
+ try {
274
+ const logLine = this.formatOutputLogLine(processed.output);
275
+ if (logLine) {
276
+ await appendFile(outputLogPath, logLine + "\n", "utf-8");
277
+ }
278
+ }
279
+ catch (fileError) {
280
+ this.logger.warn(`Failed to write to output log file: ${fileError.message}`);
281
+ // Continue processing - file logging is optional
282
+ }
283
+ }
284
+ // Log error messages to console immediately
285
+ if (processed.output.type === "error") {
286
+ this.logger.error(`Job ${job.id} error: ${processed.output.message}`);
287
+ }
288
+ // Extract session ID if present
289
+ if (processed.sessionId) {
290
+ sessionId = processed.sessionId;
291
+ }
292
+ // Track last non-partial assistant message content for fallback summary
293
+ // This ensures we capture the final response even if it's long
294
+ if (processed.output.type === "assistant" && !processed.output.partial && processed.output.content) {
295
+ lastAssistantContent = processed.output.content;
296
+ }
297
+ // Extract explicit summary if present (summary field or result message)
298
+ // Only track explicit summaries here - assistant content is tracked above
299
+ // Guard against null/undefined messages from malformed SDK responses
300
+ if (sdkMessage && (sdkMessage.summary || sdkMessage.type === "result")) {
301
+ const messageSummary = extractSummary(sdkMessage);
302
+ if (messageSummary) {
303
+ summary = messageSummary;
304
+ }
305
+ }
306
+ // Call user's onMessage callback if provided
307
+ if (onMessage) {
308
+ try {
309
+ await onMessage(sdkMessage);
310
+ }
311
+ catch (callbackError) {
312
+ this.logger.warn(`onMessage callback error: ${callbackError.message}`);
313
+ }
314
+ }
315
+ // Check for terminal messages
316
+ if (isTerminalMessage(sdkMessage)) {
317
+ if (sdkMessage.type === "error") {
318
+ const errorMessage = sdkMessage.message ?? "Agent execution failed";
319
+ lastError = new SDKStreamingError(buildErrorMessage(errorMessage, {
320
+ jobId: job.id,
321
+ agentName: agent.name,
322
+ }), {
323
+ jobId: job.id,
324
+ agentName: agent.name,
325
+ code: sdkMessage.code,
326
+ messagesReceived,
327
+ });
328
+ }
329
+ break;
195
330
  }
196
331
  }
197
- // Extract session ID if present
198
- if (processed.sessionId) {
199
- sessionId = processed.sessionId;
200
- }
201
- // Extract summary if present
202
- const messageSummary = extractSummary(sdkMessage);
203
- if (messageSummary) {
204
- summary = messageSummary;
205
- }
206
- // Call user's onMessage callback if provided
207
- if (onMessage) {
332
+ }
333
+ catch (error) {
334
+ // Check if this is a session expiration error from the SDK
335
+ // This can happen if the server-side session expired even though local validation passed
336
+ if (isSessionExpiredError(error) && resumeSessionId && !retriedAfterSessionExpiry) {
337
+ this.logger.warn(`Session expired on server for ${agent.name}. Clearing session and retrying with fresh session.`);
338
+ // Clear the expired session
208
339
  try {
209
- await onMessage(sdkMessage);
340
+ const sessionsDir = join(stateDir, "sessions");
341
+ await clearSession(sessionsDir, agent.name);
342
+ this.logger.info?.(`Cleared expired session for ${agent.name}`);
210
343
  }
211
- catch (callbackError) {
212
- this.logger.warn(`onMessage callback error: ${callbackError.message}`);
344
+ catch (clearError) {
345
+ this.logger.warn(`Failed to clear expired session: ${clearError.message}`);
213
346
  }
214
- }
215
- // Check for terminal messages
216
- if (isTerminalMessage(sdkMessage)) {
217
- if (sdkMessage.type === "error") {
218
- const errorMessage = sdkMessage.message ?? "Agent execution failed";
219
- lastError = new SDKStreamingError(buildErrorMessage(errorMessage, {
220
- jobId: job.id,
221
- agentName: agent.name,
222
- }), {
223
- jobId: job.id,
224
- agentName: agent.name,
225
- code: sdkMessage.code,
226
- messagesReceived,
347
+ // Write info to job output about the retry
348
+ try {
349
+ await appendJobOutput(jobsDir, job.id, {
350
+ type: "system",
351
+ content: `Session expired on server. Retrying with fresh session.`,
227
352
  });
228
353
  }
229
- break;
354
+ catch {
355
+ // Ignore output write failures
356
+ }
357
+ // Retry with a fresh session (no resume)
358
+ retriedAfterSessionExpiry = true;
359
+ messagesReceived = 0; // Reset for fresh session
360
+ await executeWithRetry(undefined);
361
+ return;
230
362
  }
231
- }
232
- }
233
- catch (error) {
234
- // Wrap the error with context if not already a RunnerError
235
- lastError = wrapError(error, {
236
- jobId: job.id,
237
- agentName: agent.name,
238
- phase: messagesReceived === 0 ? "init" : "streaming",
239
- });
240
- // Add messages received count for streaming errors
241
- if (lastError instanceof SDKStreamingError && messagesReceived > 0) {
242
- lastError.messagesReceived = messagesReceived;
243
- }
244
- // Log the error with context
245
- this.logger.error(`${lastError.name}: ${lastError.message}`);
246
- // Write error to job output with full context
247
- try {
248
- await appendJobOutput(jobsDir, job.id, {
249
- type: "error",
250
- message: lastError.message,
251
- code: lastError.code ?? lastError.cause?.code,
252
- stack: lastError.stack,
363
+ // Wrap the error with context if not already a RunnerError
364
+ lastError = wrapError(error, {
365
+ jobId: job.id,
366
+ agentName: agent.name,
367
+ phase: messagesReceived === 0 ? "init" : "streaming",
253
368
  });
369
+ // Add messages received count for streaming errors
370
+ if (lastError instanceof SDKStreamingError && messagesReceived > 0) {
371
+ lastError.messagesReceived = messagesReceived;
372
+ }
373
+ // Log the error with context
374
+ this.logger.error(`${lastError.name}: ${lastError.message}`);
375
+ // Write error to job output with full context
376
+ try {
377
+ await appendJobOutput(jobsDir, job.id, {
378
+ type: "error",
379
+ message: lastError.message,
380
+ code: lastError.code ?? lastError.cause?.code,
381
+ stack: lastError.stack,
382
+ });
383
+ }
384
+ catch (outputError) {
385
+ this.logger.warn(`Failed to write error to job output: ${outputError.message}`);
386
+ }
254
387
  }
255
- catch (outputError) {
256
- this.logger.warn(`Failed to write error to job output: ${outputError.message}`);
257
- }
258
- }
388
+ };
389
+ await executeWithRetry(effectiveResume);
259
390
  // Build error details for programmatic access
260
391
  if (lastError) {
261
392
  errorDetails = {
@@ -283,6 +414,14 @@ export class JobExecutor {
283
414
  errorDetails.recoverable = false;
284
415
  }
285
416
  }
417
+ // Final summary logic:
418
+ // 1. If an explicit summary was found (from summary field or result message), use it
419
+ // 2. Otherwise, use the last assistant content
420
+ // This ensures we capture the final response, not an early short message
421
+ // Note: Truncation is handled by downstream consumers (e.g., Discord hook truncates to 4096)
422
+ if (!summary && lastAssistantContent) {
423
+ summary = lastAssistantContent;
424
+ }
286
425
  // Step 5: Update job with final status
287
426
  const success = !lastError;
288
427
  const finishedAt = new Date().toISOString();
@@ -306,11 +445,18 @@ export class JobExecutor {
306
445
  try {
307
446
  const sessionsDir = join(stateDir, "sessions");
308
447
  // Get existing session to determine if updating or creating
309
- const existingSession = await getSessionInfo(sessionsDir, agent.name);
448
+ const existingSession = await getSessionInfo(sessionsDir, agent.name, {
449
+ runtime: agent.runtime ?? "sdk",
450
+ });
451
+ // Store the current working directory with the session
452
+ const currentWorkingDirectory = resolveWorkingDirectory(agent);
310
453
  await updateSessionInfo(sessionsDir, agent.name, {
311
454
  session_id: sessionId,
312
455
  job_count: (existingSession?.job_count ?? 0) + 1,
313
456
  mode: existingSession?.mode ?? "autonomous",
457
+ working_directory: currentWorkingDirectory,
458
+ runtime_type: agent.runtime ?? "sdk",
459
+ docker_enabled: agent.docker?.enabled ?? false,
314
460
  });
315
461
  this.logger.info?.(`Persisted session ${sessionId} for agent ${agent.name}`);
316
462
  }
@@ -390,24 +536,25 @@ export class JobExecutor {
390
536
  * a single execution. For multiple executions, prefer creating a
391
537
  * JobExecutor instance directly.
392
538
  *
393
- * @param sdkQuery - The SDK query function
539
+ * @param runtime - The runtime interface
394
540
  * @param options - Runner options including agent config and prompt
395
541
  * @param executorOptions - Optional executor configuration
396
542
  * @returns Result of the execution
397
543
  *
398
544
  * @example
399
545
  * ```typescript
400
- * import { query } from "@anthropic-ai/claude-agent-sdk";
546
+ * import { RuntimeFactory } from "@herdctl/core";
401
547
  *
402
- * const result = await executeJob(query, {
548
+ * const runtime = RuntimeFactory.create(agent);
549
+ * const result = await executeJob(runtime, {
403
550
  * agent: resolvedAgent,
404
551
  * prompt: "Fix the bug",
405
552
  * stateDir: "/path/to/.herdctl",
406
553
  * });
407
554
  * ```
408
555
  */
409
- export async function executeJob(sdkQuery, options, executorOptions = {}) {
410
- const executor = new JobExecutor(sdkQuery, executorOptions);
556
+ export async function executeJob(runtime, options, executorOptions = {}) {
557
+ const executor = new JobExecutor(runtime, executorOptions);
411
558
  return executor.execute(options);
412
559
  }
413
560
  //# sourceMappingURL=job-executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"job-executor.js","sourceRoot":"","sources":["../../src/runner/job-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-executor.js","sourceRoot":"","sources":["../../src/runner/job-executor.ts"],"names":[],"mappings":"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"}
@@ -38,9 +38,12 @@ export declare function isTerminalMessage(message: SDKMessage): boolean;
38
38
  * Extract the final summary from a message if present
39
39
  *
40
40
  * Looks for summaries in the following order:
41
- * 1. Explicit `summary` field on the message (truncated to 500 chars)
41
+ * 1. Explicit `summary` field on the message
42
42
  * 2. Result message with `result` field (SDK final result)
43
- * 3. Short assistant message content (≤500 chars, non-partial)
43
+ * 3. Non-partial assistant message content
44
+ *
45
+ * Note: No truncation is applied here. Downstream consumers (e.g., Discord hook)
46
+ * are responsible for truncating to their specific limits (e.g., 4096 for Discord).
44
47
  *
45
48
  * @param message - The SDK message to extract summary from
46
49
  * @returns Summary string if present, undefined otherwise
@@ -1 +1 @@
1
- {"version":3,"file":"message-processor.d.ts","sourceRoot":"","sources":["../../src/runner/message-processor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAsb/D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,CAwEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CA6B9D;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAgCtE"}
1
+ {"version":3,"file":"message-processor.d.ts","sourceRoot":"","sources":["../../src/runner/message-processor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAsb/D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,CAwEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CA6B9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CA+BtE"}