@rk0429/agentic-relay 19.4.4 → 19.5.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.
Files changed (63) hide show
  1. package/dist/application/event-log-sink.d.ts +22 -0
  2. package/dist/application/event-log-sink.js +101 -0
  3. package/dist/application/event-log-sink.js.map +1 -0
  4. package/dist/application/housekeeping.d.ts +2 -0
  5. package/dist/application/housekeeping.js +62 -6
  6. package/dist/application/housekeeping.js.map +1 -1
  7. package/dist/application/workflow-execution-service.d.ts +146 -0
  8. package/dist/application/workflow-execution-service.js +989 -0
  9. package/dist/application/workflow-execution-service.js.map +1 -0
  10. package/dist/bin/relay.js +203 -9
  11. package/dist/bin/relay.js.map +1 -1
  12. package/dist/core/types.d.ts +2 -1
  13. package/dist/domain/config.d.ts +1 -0
  14. package/dist/domain/config.js +8 -0
  15. package/dist/domain/config.js.map +1 -1
  16. package/dist/domain/exit-condition-evaluator.d.ts +13 -0
  17. package/dist/domain/exit-condition-evaluator.js +37 -0
  18. package/dist/domain/exit-condition-evaluator.js.map +1 -0
  19. package/dist/domain/loop-execution.d.ts +123 -0
  20. package/dist/domain/loop-execution.js +419 -0
  21. package/dist/domain/loop-execution.js.map +1 -0
  22. package/dist/domain/session-resolver.d.ts +6 -0
  23. package/dist/domain/session-resolver.js +49 -0
  24. package/dist/domain/session-resolver.js.map +1 -0
  25. package/dist/domain/workflow-loader.d.ts +16 -0
  26. package/dist/domain/workflow-loader.js +140 -0
  27. package/dist/domain/workflow-loader.js.map +1 -0
  28. package/dist/domain/workflow-schema.d.ts +144 -0
  29. package/dist/domain/workflow-schema.js +236 -0
  30. package/dist/domain/workflow-schema.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.js +3 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/infrastructure/store/loop-state-repository.d.ts +28 -0
  35. package/dist/infrastructure/store/loop-state-repository.js +250 -0
  36. package/dist/infrastructure/store/loop-state-repository.js.map +1 -0
  37. package/dist/infrastructure/store/relay-store.d.ts +5 -0
  38. package/dist/infrastructure/store/relay-store.js +41 -0
  39. package/dist/infrastructure/store/relay-store.js.map +1 -1
  40. package/dist/interfaces/cli/components/InputBar.js +14 -4
  41. package/dist/interfaces/cli/components/InputBar.js.map +1 -1
  42. package/dist/interfaces/cli/components/MessageList.d.ts +2 -1
  43. package/dist/interfaces/cli/components/MessageList.js +4 -3
  44. package/dist/interfaces/cli/components/MessageList.js.map +1 -1
  45. package/dist/interfaces/cli/components/StatusBar.js +1 -1
  46. package/dist/interfaces/cli/components/StatusBar.js.map +1 -1
  47. package/dist/interfaces/cli/loop-progress-renderer.d.ts +11 -0
  48. package/dist/interfaces/cli/loop-progress-renderer.js +136 -0
  49. package/dist/interfaces/cli/loop-progress-renderer.js.map +1 -0
  50. package/dist/interfaces/cli/loop-progress-shell.d.ts +5 -0
  51. package/dist/interfaces/cli/loop-progress-shell.js +37 -0
  52. package/dist/interfaces/cli/loop-progress-shell.js.map +1 -0
  53. package/dist/interfaces/cli/relay-cli-args.d.ts +6 -0
  54. package/dist/interfaces/cli/relay-cli-args.js +39 -0
  55. package/dist/interfaces/cli/relay-cli-args.js.map +1 -1
  56. package/dist/interfaces/cli/relay-shell.js +21 -4
  57. package/dist/interfaces/cli/relay-shell.js.map +1 -1
  58. package/dist/interfaces/cli/text-input-utils.d.ts +8 -0
  59. package/dist/interfaces/cli/text-input-utils.js +34 -0
  60. package/dist/interfaces/cli/text-input-utils.js.map +1 -1
  61. package/dist/interfaces/mcp/relay-mcp-server.js +4 -3
  62. package/dist/interfaces/mcp/relay-mcp-server.js.map +1 -1
  63. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ import { RelayStore } from "../infrastructure/store/relay-store.js";
2
+ export declare class LoopEventLogSink {
3
+ private readonly store;
4
+ constructor(store: RelayStore);
5
+ logLoopStarted(executionId: string, workflowName: string, maxIterations: number): Promise<void>;
6
+ logIterationStarted(executionId: string, iteration: number): Promise<void>;
7
+ logStepStarted(executionId: string, stepId: string, iteration: number, opts?: {
8
+ backend?: string;
9
+ role?: string;
10
+ }): Promise<void>;
11
+ logStepCompleted(executionId: string, stepId: string, iteration: number, relaySessionId: string, fullResponsePath: string, duration: number): Promise<void>;
12
+ logStepFailed(executionId: string, stepId: string, iteration: number, error: string, duration: number): Promise<void>;
13
+ logStepSkipped(executionId: string, stepId: string, iteration: number, reason: string): Promise<void>;
14
+ logExitConditionEvaluated(executionId: string, verdict: string, iteration: number): Promise<void>;
15
+ logExitConditionFailed(executionId: string, iteration: number, checkpoint: unknown, error: string): Promise<void>;
16
+ logLoopInterrupted(executionId: string, iteration: number, stateFilePath: string, opts?: {
17
+ nextStepId?: string;
18
+ pendingExitCondition?: unknown;
19
+ }): Promise<void>;
20
+ logLoopCompleted(executionId: string, completionReason: string, totalIterations: number, totalDuration: number): Promise<void>;
21
+ private appendLoopLog;
22
+ }
@@ -0,0 +1,101 @@
1
+ import { BACKEND_TYPES } from "../core/types.js";
2
+ export class LoopEventLogSink {
3
+ store;
4
+ constructor(store) {
5
+ this.store = store;
6
+ }
7
+ async logLoopStarted(executionId, workflowName, maxIterations) {
8
+ await this.appendLoopLog(executionId, "loop_started", "running", {
9
+ workflow_name: workflowName,
10
+ max_iterations: maxIterations,
11
+ });
12
+ }
13
+ async logIterationStarted(executionId, iteration) {
14
+ await this.appendLoopLog(executionId, "iteration_started", "running", {
15
+ iteration,
16
+ });
17
+ }
18
+ async logStepStarted(executionId, stepId, iteration, opts) {
19
+ await this.appendLoopLog(executionId, "step_started", "running", {
20
+ step_id: stepId,
21
+ iteration,
22
+ ...(opts?.backend ? { backend: opts.backend } : {}),
23
+ ...(opts?.role ? { role: opts.role } : {}),
24
+ }, normalizeBackend(opts?.backend));
25
+ }
26
+ async logStepCompleted(executionId, stepId, iteration, relaySessionId, fullResponsePath, duration) {
27
+ await this.appendLoopLog(executionId, "step_completed", "success", {
28
+ step_id: stepId,
29
+ iteration,
30
+ relay_session_id: relaySessionId,
31
+ full_response_path: fullResponsePath,
32
+ duration,
33
+ });
34
+ }
35
+ async logStepFailed(executionId, stepId, iteration, error, duration) {
36
+ await this.appendLoopLog(executionId, "step_failed", "error", {
37
+ step_id: stepId,
38
+ iteration,
39
+ error,
40
+ duration,
41
+ });
42
+ }
43
+ async logStepSkipped(executionId, stepId, iteration, reason) {
44
+ await this.appendLoopLog(executionId, "step_skipped", "success", {
45
+ step_id: stepId,
46
+ iteration,
47
+ reason,
48
+ });
49
+ }
50
+ async logExitConditionEvaluated(executionId, verdict, iteration) {
51
+ await this.appendLoopLog(executionId, "exit_condition_evaluated", "success", {
52
+ verdict,
53
+ iteration,
54
+ });
55
+ }
56
+ async logExitConditionFailed(executionId, iteration, checkpoint, error) {
57
+ await this.appendLoopLog(executionId, "exit_condition_failed", "error", {
58
+ iteration,
59
+ checkpoint,
60
+ error,
61
+ });
62
+ }
63
+ async logLoopInterrupted(executionId, iteration, stateFilePath, opts) {
64
+ await this.appendLoopLog(executionId, "loop_interrupted", "error", {
65
+ iteration,
66
+ state_file_path: stateFilePath,
67
+ ...(opts?.nextStepId ? { next_step_id: opts.nextStepId } : {}),
68
+ ...(opts?.pendingExitCondition !== undefined
69
+ ? { pending_exit_condition: opts.pendingExitCondition }
70
+ : {}),
71
+ });
72
+ }
73
+ async logLoopCompleted(executionId, completionReason, totalIterations, totalDuration) {
74
+ await this.appendLoopLog(executionId, "loop_completed", "success", {
75
+ completion_reason: completionReason,
76
+ total_iterations: totalIterations,
77
+ total_duration: totalDuration,
78
+ });
79
+ }
80
+ async appendLoopLog(executionId, eventType, status, loopDetails, backend) {
81
+ await this.store.appendLog({
82
+ timestamp: new Date().toISOString(),
83
+ session_id: executionId,
84
+ backend,
85
+ event_type: eventType,
86
+ status,
87
+ details: {
88
+ loop: loopDetails,
89
+ },
90
+ });
91
+ }
92
+ }
93
+ function normalizeBackend(backend) {
94
+ if (!backend) {
95
+ return undefined;
96
+ }
97
+ return BACKEND_TYPES.includes(backend)
98
+ ? backend
99
+ : undefined;
100
+ }
101
+ //# sourceMappingURL=event-log-sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-log-sink.js","sourceRoot":"","sources":["../../src/application/event-log-sink.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export interface HousekeepingResult {
3
3
  pruned_tasks: number;
4
4
  deleted_log_files: number;
5
5
  deleted_sessions: number;
6
+ deleted_loop_states: number;
6
7
  }
7
8
  export interface ResourceStats {
8
9
  file_count: number;
@@ -18,5 +19,6 @@ export interface StorageStats {
18
19
  export declare function runStartupHousekeeping(store: RelayStore, options?: {
19
20
  now?: Date;
20
21
  dry_run?: boolean;
22
+ protectedLoopStateFile?: string;
21
23
  }): Promise<HousekeepingResult>;
22
24
  export declare function getStorageStats(store: RelayStore): Promise<StorageStats>;
@@ -1,17 +1,23 @@
1
1
  import { readdir, stat } from "node:fs/promises";
2
2
  import path from "node:path";
3
- import { DEFAULT_LOGS_RETENTION_DAYS, DEFAULT_SESSIONS_RETENTION_DAYS, resolveConfiguredTaskRetentionDays, validateRetentionConfig, } from "../domain/config.js";
3
+ import { DEFAULT_LOGS_RETENTION_DAYS, DEFAULT_LOOPS_RETENTION_DAYS, DEFAULT_SESSIONS_RETENTION_DAYS, resolveConfiguredTaskRetentionDays, validateRetentionConfig, } from "../domain/config.js";
4
4
  import { collectPrunableTaskIds } from "../domain/task-retention.js";
5
+ import { LoopStateRepository } from "../infrastructure/store/loop-state-repository.js";
5
6
  const MS_PER_DAY = 24 * 60 * 60 * 1000;
6
7
  export async function runStartupHousekeeping(store, options = {}) {
7
8
  const now = options.now ?? new Date();
8
9
  const dryRun = options.dry_run ?? false;
10
+ const protectedLoopStateFile = options.protectedLoopStateFile
11
+ ? path.basename(options.protectedLoopStateFile)
12
+ : undefined;
9
13
  const config = await store.readConfig();
14
+ const loopStateRepo = new LoopStateRepository(store);
10
15
  validateRetentionConfig(config);
11
16
  const result = {
12
17
  pruned_tasks: 0,
13
18
  deleted_log_files: 0,
14
19
  deleted_sessions: 0,
20
+ deleted_loop_states: 0,
15
21
  };
16
22
  const [tasks, retention] = await Promise.all([
17
23
  store.listTasks(),
@@ -25,18 +31,41 @@ export async function runStartupHousekeeping(store, options = {}) {
25
31
  prunedAgentIds.add(task.agentId);
26
32
  }
27
33
  }
28
- const prunedSessionIds = await collectSessionIdsForAgents(store, prunedAgentIds);
34
+ const taskLinkedSessionIds = await collectSessionIdsForAgents(store, prunedAgentIds);
29
35
  if (!dryRun) {
30
36
  await Promise.all(prunableTaskIds.map((taskId) => store.deleteTask(taskId)));
31
- await Promise.all([...prunedSessionIds].map((sessionId) => Promise.all([store.deleteSession(sessionId), store.deleteResponse(sessionId)])));
32
37
  }
33
38
  result.pruned_tasks = prunableTaskIds.length;
34
- result.deleted_sessions += prunedSessionIds.size;
35
39
  const logsDays = config?.retention?.logs_days ?? DEFAULT_LOGS_RETENTION_DAYS;
36
40
  result.deleted_log_files = await pruneLogFiles(store, logsDays, now, dryRun);
41
+ const loopsDays = config?.retention?.loops_days ?? DEFAULT_LOOPS_RETENTION_DAYS;
42
+ const loopStatePrune = await pruneLoopStates(loopStateRepo, loopsDays, now, dryRun, protectedLoopStateFile);
43
+ result.deleted_loop_states = loopStatePrune.deletedLoopStates.length;
44
+ for (const warning of loopStatePrune.warnings) {
45
+ console.warn(warning);
46
+ }
47
+ if (loopStatePrune.warnings.length > 0) {
48
+ return result;
49
+ }
50
+ const activeLoopPins = await loopStateRepo.collectActiveLoopPins({
51
+ excludeFilenames: new Set(loopStatePrune.deletedLoopStates),
52
+ });
53
+ const deletableTaskLinkedSessionIds = new Set([...taskLinkedSessionIds].filter((sessionId) => !activeLoopPins.sessionIds.has(sessionId) &&
54
+ !activeLoopPins.responseIds.has(sessionId)));
55
+ if (!dryRun) {
56
+ await Promise.all([...deletableTaskLinkedSessionIds].map((sessionId) => Promise.all([store.deleteSession(sessionId), store.deleteResponse(sessionId)])));
57
+ }
58
+ result.deleted_sessions += deletableTaskLinkedSessionIds.size;
37
59
  const sessionsDays = config?.retention?.sessions_days ?? DEFAULT_SESSIONS_RETENTION_DAYS;
38
- result.deleted_sessions += await pruneSessionsAndResponses(store, sessionsDays, now, dryRun, prunedSessionIds);
39
- result.deleted_sessions += await deleteOrphanedResponses(store, dryRun, prunedSessionIds);
60
+ const excludedSessionIds = new Set([
61
+ ...deletableTaskLinkedSessionIds,
62
+ ...activeLoopPins.sessionIds,
63
+ ]);
64
+ result.deleted_sessions += await pruneSessionsAndResponses(store, sessionsDays, now, dryRun, excludedSessionIds);
65
+ result.deleted_sessions += await deleteOrphanedResponses(store, dryRun, new Set([
66
+ ...deletableTaskLinkedSessionIds,
67
+ ...activeLoopPins.responseIds,
68
+ ]));
40
69
  return result;
41
70
  }
42
71
  export async function getStorageStats(store) {
@@ -96,6 +125,33 @@ async function pruneSessionsAndResponses(store, retentionDays, now, dryRun, excl
96
125
  }
97
126
  return deleted;
98
127
  }
128
+ async function pruneLoopStates(loopStateRepo, retentionDays, now, dryRun, protectedLoopStateFile) {
129
+ const cutoffMs = now.getTime() - retentionDays * MS_PER_DAY;
130
+ const stateFiles = await loopStateRepo.listStateFiles();
131
+ const deletedLoopStates = [];
132
+ const warnings = [];
133
+ for (const filename of stateFiles) {
134
+ const { state, warning } = await loopStateRepo.tryParseState(filename);
135
+ if (warning) {
136
+ warnings.push(warning);
137
+ continue;
138
+ }
139
+ if (filename === protectedLoopStateFile) {
140
+ continue;
141
+ }
142
+ const interruptedAtMs = Date.parse(state.interruptedAt);
143
+ if (!Number.isNaN(interruptedAtMs) && interruptedAtMs <= cutoffMs) {
144
+ deletedLoopStates.push(filename);
145
+ }
146
+ }
147
+ if (!dryRun) {
148
+ await Promise.all(deletedLoopStates.map((filename) => loopStateRepo.deleteState(filename)));
149
+ }
150
+ return {
151
+ deletedLoopStates,
152
+ warnings,
153
+ };
154
+ }
99
155
  async function deleteOrphanedResponses(store, dryRun, excludedResponseIds) {
100
156
  const [sessionIds, responseIds] = await Promise.all([
101
157
  store.listSessionIds(),
@@ -1 +1 @@
1
- {"version":3,"file":"housekeeping.js","sourceRoot":"","sources":["../../src/application/housekeeping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"housekeeping.js","sourceRoot":"","sources":["../../src/application/housekeeping.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import type { BackendType } from "../core/types.js";
2
+ import { NestDepth, type CompletionReason, type LoopProgressSnapshot } from "../domain/loop-execution.js";
3
+ import type { StepId } from "../domain/workflow-schema.js";
4
+ import { type WorkflowFileRepository } from "../domain/workflow-loader.js";
5
+ import { LoopStateRepository } from "../infrastructure/store/loop-state-repository.js";
6
+ import { RelayStore } from "../infrastructure/store/relay-store.js";
7
+ import { LoopEventLogSink } from "./event-log-sink.js";
8
+ export interface WorkflowExecutionDeps {
9
+ store: RelayStore;
10
+ loopStateRepo: LoopStateRepository;
11
+ eventLog: LoopEventLogSink;
12
+ executeAgentStep: AgentStepExecutor;
13
+ executeCommand: CommandExecutor;
14
+ workflowRepo: WorkflowFileRepository;
15
+ }
16
+ export interface AgentStepExecutor {
17
+ execute(opts: {
18
+ prompt: string;
19
+ backend?: BackendType;
20
+ role?: string;
21
+ resumeFromSessionId?: string;
22
+ cwd: string;
23
+ signal?: AbortSignal;
24
+ }): Promise<{
25
+ relaySessionId: string;
26
+ fullResponsePath: string;
27
+ summary: string;
28
+ status: "success" | "error";
29
+ }>;
30
+ }
31
+ export interface CommandExecutor {
32
+ execute(command: string, opts: {
33
+ cwd: string;
34
+ signal?: AbortSignal;
35
+ }): Promise<{
36
+ exitCode: number;
37
+ }>;
38
+ }
39
+ export interface StartLoopOptions {
40
+ workflowPath: string;
41
+ cwd: string;
42
+ initialSessionId?: string;
43
+ signal?: AbortSignal;
44
+ nestDepth?: NestDepth;
45
+ }
46
+ export interface ResumeLoopOptions {
47
+ workflowPath: string;
48
+ stateFile: string;
49
+ cwd: string;
50
+ forceResume?: boolean;
51
+ signal?: AbortSignal;
52
+ nestDepth?: NestDepth;
53
+ }
54
+ export interface LoopExecutionResult {
55
+ status: "completed" | "interrupted";
56
+ completionReason?: CompletionReason;
57
+ totalIterations: number;
58
+ totalDuration: number;
59
+ stateFilePath?: string;
60
+ executionId: string;
61
+ snapshot: LoopProgressSnapshot;
62
+ }
63
+ export type LoopProgressEvent = {
64
+ type: "resume";
65
+ } | {
66
+ type: "iteration_started";
67
+ } | {
68
+ type: "step_started";
69
+ stepId: StepId;
70
+ startedAt: string;
71
+ } | {
72
+ type: "step_completed";
73
+ stepId: StepId;
74
+ } | {
75
+ type: "step_failed";
76
+ stepId: StepId;
77
+ transient: boolean;
78
+ } | {
79
+ type: "step_skipped";
80
+ stepId: StepId;
81
+ } | {
82
+ type: "loop_completed";
83
+ completionReason?: CompletionReason;
84
+ } | {
85
+ type: "loop_interrupted";
86
+ stateFilePath: string;
87
+ };
88
+ export interface LoopProgressUpdate {
89
+ snapshot: LoopProgressSnapshot;
90
+ event: LoopProgressEvent;
91
+ }
92
+ export interface LoopProgressReporter {
93
+ report(update: LoopProgressUpdate): Promise<void> | void;
94
+ }
95
+ export interface SignalTarget {
96
+ on(event: "SIGINT", listener: () => void): void;
97
+ off(event: "SIGINT", listener: () => void): void;
98
+ }
99
+ export interface WorkflowExecutionServiceOptions {
100
+ now?: () => Date;
101
+ interruptGraceMs?: number;
102
+ signalTarget?: SignalTarget;
103
+ progressReporter?: LoopProgressReporter;
104
+ }
105
+ export declare class WorkflowExecutionService {
106
+ private readonly deps;
107
+ private readonly now;
108
+ private readonly interruptGraceMs;
109
+ private readonly signalTarget;
110
+ private readonly progressReporter?;
111
+ constructor(deps: WorkflowExecutionDeps, options?: WorkflowExecutionServiceOptions);
112
+ startLoop(opts: StartLoopOptions): Promise<LoopExecutionResult>;
113
+ resumeLoop(opts: ResumeLoopOptions): Promise<LoopExecutionResult>;
114
+ private finalizeRootResult;
115
+ private persistInterruptState;
116
+ private runWorkflowFrame;
117
+ private resumeFrames;
118
+ private resumeParentFrames;
119
+ private executeStep;
120
+ private runSubWorkflow;
121
+ private evaluateExitCondition;
122
+ private handleStepFailure;
123
+ private logNewlySkippedSteps;
124
+ private reportProgress;
125
+ private loadWorkflowDefinition;
126
+ private verifyWorkflowDigests;
127
+ private validateResumeArtifacts;
128
+ private assertSessionExists;
129
+ private assertResponseExists;
130
+ private buildExitConditionPrompt;
131
+ private readVerdictOutput;
132
+ private buildExitConditionCheckpoint;
133
+ private rebaseInterruptState;
134
+ private getNextStepIdAfter;
135
+ private getStepIndex;
136
+ private getStepDefinition;
137
+ private requireCompletedStepResult;
138
+ private findTerminalCompletedResult;
139
+ private toPublicResult;
140
+ private assertFrameMatchesWorkflow;
141
+ private assertChildFrameLink;
142
+ private computeDuration;
143
+ private formatError;
144
+ }
145
+ export declare function startLoop(deps: WorkflowExecutionDeps, opts: StartLoopOptions, serviceOptions?: WorkflowExecutionServiceOptions): Promise<LoopExecutionResult>;
146
+ export declare function resumeLoop(deps: WorkflowExecutionDeps, opts: ResumeLoopOptions, serviceOptions?: WorkflowExecutionServiceOptions): Promise<LoopExecutionResult>;