@renseiai/agentfactory 0.8.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/LICENSE +21 -0
- package/README.md +125 -0
- package/dist/src/config/index.d.ts +3 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +1 -0
- package/dist/src/config/repository-config.d.ts +44 -0
- package/dist/src/config/repository-config.d.ts.map +1 -0
- package/dist/src/config/repository-config.js +88 -0
- package/dist/src/config/repository-config.test.d.ts +2 -0
- package/dist/src/config/repository-config.test.d.ts.map +1 -0
- package/dist/src/config/repository-config.test.js +249 -0
- package/dist/src/deployment/deployment-checker.d.ts +110 -0
- package/dist/src/deployment/deployment-checker.d.ts.map +1 -0
- package/dist/src/deployment/deployment-checker.js +242 -0
- package/dist/src/deployment/index.d.ts +3 -0
- package/dist/src/deployment/index.d.ts.map +1 -0
- package/dist/src/deployment/index.js +2 -0
- package/dist/src/frontend/index.d.ts +2 -0
- package/dist/src/frontend/index.d.ts.map +1 -0
- package/dist/src/frontend/index.js +1 -0
- package/dist/src/frontend/types.d.ts +106 -0
- package/dist/src/frontend/types.d.ts.map +1 -0
- package/dist/src/frontend/types.js +11 -0
- package/dist/src/governor/decision-engine.d.ts +52 -0
- package/dist/src/governor/decision-engine.d.ts.map +1 -0
- package/dist/src/governor/decision-engine.js +220 -0
- package/dist/src/governor/decision-engine.test.d.ts +2 -0
- package/dist/src/governor/decision-engine.test.d.ts.map +1 -0
- package/dist/src/governor/decision-engine.test.js +629 -0
- package/dist/src/governor/event-bus.d.ts +43 -0
- package/dist/src/governor/event-bus.d.ts.map +1 -0
- package/dist/src/governor/event-bus.js +8 -0
- package/dist/src/governor/event-deduplicator.d.ts +43 -0
- package/dist/src/governor/event-deduplicator.d.ts.map +1 -0
- package/dist/src/governor/event-deduplicator.js +53 -0
- package/dist/src/governor/event-driven-governor.d.ts +131 -0
- package/dist/src/governor/event-driven-governor.d.ts.map +1 -0
- package/dist/src/governor/event-driven-governor.js +379 -0
- package/dist/src/governor/event-driven-governor.test.d.ts +2 -0
- package/dist/src/governor/event-driven-governor.test.d.ts.map +1 -0
- package/dist/src/governor/event-driven-governor.test.js +673 -0
- package/dist/src/governor/event-types.d.ts +78 -0
- package/dist/src/governor/event-types.d.ts.map +1 -0
- package/dist/src/governor/event-types.js +32 -0
- package/dist/src/governor/governor-types.d.ts +82 -0
- package/dist/src/governor/governor-types.d.ts.map +1 -0
- package/dist/src/governor/governor-types.js +21 -0
- package/dist/src/governor/governor.d.ts +100 -0
- package/dist/src/governor/governor.d.ts.map +1 -0
- package/dist/src/governor/governor.js +262 -0
- package/dist/src/governor/governor.test.d.ts +2 -0
- package/dist/src/governor/governor.test.d.ts.map +1 -0
- package/dist/src/governor/governor.test.js +514 -0
- package/dist/src/governor/human-touchpoints.d.ts +131 -0
- package/dist/src/governor/human-touchpoints.d.ts.map +1 -0
- package/dist/src/governor/human-touchpoints.js +251 -0
- package/dist/src/governor/human-touchpoints.test.d.ts +2 -0
- package/dist/src/governor/human-touchpoints.test.d.ts.map +1 -0
- package/dist/src/governor/human-touchpoints.test.js +366 -0
- package/dist/src/governor/in-memory-event-bus.d.ts +29 -0
- package/dist/src/governor/in-memory-event-bus.d.ts.map +1 -0
- package/dist/src/governor/in-memory-event-bus.js +79 -0
- package/dist/src/governor/index.d.ts +14 -0
- package/dist/src/governor/index.d.ts.map +1 -0
- package/dist/src/governor/index.js +13 -0
- package/dist/src/governor/override-parser.d.ts +60 -0
- package/dist/src/governor/override-parser.d.ts.map +1 -0
- package/dist/src/governor/override-parser.js +98 -0
- package/dist/src/governor/override-parser.test.d.ts +2 -0
- package/dist/src/governor/override-parser.test.d.ts.map +1 -0
- package/dist/src/governor/override-parser.test.js +312 -0
- package/dist/src/governor/platform-adapter.d.ts +69 -0
- package/dist/src/governor/platform-adapter.d.ts.map +1 -0
- package/dist/src/governor/platform-adapter.js +11 -0
- package/dist/src/governor/processing-state.d.ts +66 -0
- package/dist/src/governor/processing-state.d.ts.map +1 -0
- package/dist/src/governor/processing-state.js +43 -0
- package/dist/src/governor/processing-state.test.d.ts +2 -0
- package/dist/src/governor/processing-state.test.d.ts.map +1 -0
- package/dist/src/governor/processing-state.test.js +96 -0
- package/dist/src/governor/top-of-funnel.d.ts +118 -0
- package/dist/src/governor/top-of-funnel.d.ts.map +1 -0
- package/dist/src/governor/top-of-funnel.js +168 -0
- package/dist/src/governor/top-of-funnel.test.d.ts +2 -0
- package/dist/src/governor/top-of-funnel.test.d.ts.map +1 -0
- package/dist/src/governor/top-of-funnel.test.js +331 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +10 -0
- package/dist/src/linear-cli.d.ts +38 -0
- package/dist/src/linear-cli.d.ts.map +1 -0
- package/dist/src/linear-cli.js +674 -0
- package/dist/src/logger.d.ts +117 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +430 -0
- package/dist/src/manifest/generate.d.ts +20 -0
- package/dist/src/manifest/generate.d.ts.map +1 -0
- package/dist/src/manifest/generate.js +65 -0
- package/dist/src/manifest/index.d.ts +4 -0
- package/dist/src/manifest/index.d.ts.map +1 -0
- package/dist/src/manifest/index.js +2 -0
- package/dist/src/manifest/route-manifest.d.ts +34 -0
- package/dist/src/manifest/route-manifest.d.ts.map +1 -0
- package/dist/src/manifest/route-manifest.js +148 -0
- package/dist/src/orchestrator/activity-emitter.d.ts +119 -0
- package/dist/src/orchestrator/activity-emitter.d.ts.map +1 -0
- package/dist/src/orchestrator/activity-emitter.js +306 -0
- package/dist/src/orchestrator/api-activity-emitter.d.ts +167 -0
- package/dist/src/orchestrator/api-activity-emitter.d.ts.map +1 -0
- package/dist/src/orchestrator/api-activity-emitter.js +417 -0
- package/dist/src/orchestrator/heartbeat-writer.d.ts +57 -0
- package/dist/src/orchestrator/heartbeat-writer.d.ts.map +1 -0
- package/dist/src/orchestrator/heartbeat-writer.js +137 -0
- package/dist/src/orchestrator/index.d.ts +20 -0
- package/dist/src/orchestrator/index.d.ts.map +1 -0
- package/dist/src/orchestrator/index.js +22 -0
- package/dist/src/orchestrator/log-analyzer.d.ts +160 -0
- package/dist/src/orchestrator/log-analyzer.d.ts.map +1 -0
- package/dist/src/orchestrator/log-analyzer.js +572 -0
- package/dist/src/orchestrator/log-config.d.ts +39 -0
- package/dist/src/orchestrator/log-config.d.ts.map +1 -0
- package/dist/src/orchestrator/log-config.js +45 -0
- package/dist/src/orchestrator/orchestrator.d.ts +316 -0
- package/dist/src/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/src/orchestrator/orchestrator.js +3290 -0
- package/dist/src/orchestrator/parse-work-result.d.ts +16 -0
- package/dist/src/orchestrator/parse-work-result.d.ts.map +1 -0
- package/dist/src/orchestrator/parse-work-result.js +135 -0
- package/dist/src/orchestrator/parse-work-result.test.d.ts +2 -0
- package/dist/src/orchestrator/parse-work-result.test.d.ts.map +1 -0
- package/dist/src/orchestrator/parse-work-result.test.js +234 -0
- package/dist/src/orchestrator/progress-logger.d.ts +72 -0
- package/dist/src/orchestrator/progress-logger.d.ts.map +1 -0
- package/dist/src/orchestrator/progress-logger.js +135 -0
- package/dist/src/orchestrator/session-logger.d.ts +159 -0
- package/dist/src/orchestrator/session-logger.d.ts.map +1 -0
- package/dist/src/orchestrator/session-logger.js +275 -0
- package/dist/src/orchestrator/state-recovery.d.ts +96 -0
- package/dist/src/orchestrator/state-recovery.d.ts.map +1 -0
- package/dist/src/orchestrator/state-recovery.js +302 -0
- package/dist/src/orchestrator/state-types.d.ts +165 -0
- package/dist/src/orchestrator/state-types.d.ts.map +1 -0
- package/dist/src/orchestrator/state-types.js +7 -0
- package/dist/src/orchestrator/stream-parser.d.ts +151 -0
- package/dist/src/orchestrator/stream-parser.d.ts.map +1 -0
- package/dist/src/orchestrator/stream-parser.js +137 -0
- package/dist/src/orchestrator/types.d.ts +232 -0
- package/dist/src/orchestrator/types.d.ts.map +1 -0
- package/dist/src/orchestrator/types.js +4 -0
- package/dist/src/orchestrator/validate-git-remote.test.d.ts +2 -0
- package/dist/src/orchestrator/validate-git-remote.test.d.ts.map +1 -0
- package/dist/src/orchestrator/validate-git-remote.test.js +61 -0
- package/dist/src/providers/a2a-auth.d.ts +81 -0
- package/dist/src/providers/a2a-auth.d.ts.map +1 -0
- package/dist/src/providers/a2a-auth.js +188 -0
- package/dist/src/providers/a2a-auth.test.d.ts +2 -0
- package/dist/src/providers/a2a-auth.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-auth.test.js +232 -0
- package/dist/src/providers/a2a-provider.d.ts +254 -0
- package/dist/src/providers/a2a-provider.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.integration.test.d.ts +9 -0
- package/dist/src/providers/a2a-provider.integration.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.integration.test.js +665 -0
- package/dist/src/providers/a2a-provider.js +811 -0
- package/dist/src/providers/a2a-provider.test.d.ts +2 -0
- package/dist/src/providers/a2a-provider.test.d.ts.map +1 -0
- package/dist/src/providers/a2a-provider.test.js +681 -0
- package/dist/src/providers/amp-provider.d.ts +20 -0
- package/dist/src/providers/amp-provider.d.ts.map +1 -0
- package/dist/src/providers/amp-provider.js +24 -0
- package/dist/src/providers/claude-provider.d.ts +18 -0
- package/dist/src/providers/claude-provider.d.ts.map +1 -0
- package/dist/src/providers/claude-provider.js +437 -0
- package/dist/src/providers/codex-provider.d.ts +133 -0
- package/dist/src/providers/codex-provider.d.ts.map +1 -0
- package/dist/src/providers/codex-provider.js +381 -0
- package/dist/src/providers/codex-provider.test.d.ts +2 -0
- package/dist/src/providers/codex-provider.test.d.ts.map +1 -0
- package/dist/src/providers/codex-provider.test.js +387 -0
- package/dist/src/providers/index.d.ts +44 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +85 -0
- package/dist/src/providers/spring-ai-provider.d.ts +90 -0
- package/dist/src/providers/spring-ai-provider.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.integration.test.d.ts +13 -0
- package/dist/src/providers/spring-ai-provider.integration.test.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.integration.test.js +351 -0
- package/dist/src/providers/spring-ai-provider.js +317 -0
- package/dist/src/providers/spring-ai-provider.test.d.ts +2 -0
- package/dist/src/providers/spring-ai-provider.test.d.ts.map +1 -0
- package/dist/src/providers/spring-ai-provider.test.js +200 -0
- package/dist/src/providers/types.d.ts +165 -0
- package/dist/src/providers/types.d.ts.map +1 -0
- package/dist/src/providers/types.js +13 -0
- package/dist/src/templates/adapters.d.ts +51 -0
- package/dist/src/templates/adapters.d.ts.map +1 -0
- package/dist/src/templates/adapters.js +104 -0
- package/dist/src/templates/adapters.test.d.ts +2 -0
- package/dist/src/templates/adapters.test.d.ts.map +1 -0
- package/dist/src/templates/adapters.test.js +165 -0
- package/dist/src/templates/agent-definition.d.ts +85 -0
- package/dist/src/templates/agent-definition.d.ts.map +1 -0
- package/dist/src/templates/agent-definition.js +97 -0
- package/dist/src/templates/agent-definition.test.d.ts +2 -0
- package/dist/src/templates/agent-definition.test.d.ts.map +1 -0
- package/dist/src/templates/agent-definition.test.js +209 -0
- package/dist/src/templates/index.d.ts +14 -0
- package/dist/src/templates/index.d.ts.map +1 -0
- package/dist/src/templates/index.js +11 -0
- package/dist/src/templates/loader.d.ts +41 -0
- package/dist/src/templates/loader.d.ts.map +1 -0
- package/dist/src/templates/loader.js +114 -0
- package/dist/src/templates/registry.d.ts +80 -0
- package/dist/src/templates/registry.d.ts.map +1 -0
- package/dist/src/templates/registry.js +177 -0
- package/dist/src/templates/registry.test.d.ts +2 -0
- package/dist/src/templates/registry.test.d.ts.map +1 -0
- package/dist/src/templates/registry.test.js +198 -0
- package/dist/src/templates/renderer.d.ts +29 -0
- package/dist/src/templates/renderer.d.ts.map +1 -0
- package/dist/src/templates/renderer.js +35 -0
- package/dist/src/templates/strategy-templates.test.d.ts +2 -0
- package/dist/src/templates/strategy-templates.test.d.ts.map +1 -0
- package/dist/src/templates/strategy-templates.test.js +619 -0
- package/dist/src/templates/types.d.ts +233 -0
- package/dist/src/templates/types.d.ts.map +1 -0
- package/dist/src/templates/types.js +127 -0
- package/dist/src/templates/types.test.d.ts +2 -0
- package/dist/src/templates/types.test.d.ts.map +1 -0
- package/dist/src/templates/types.test.js +232 -0
- package/dist/src/tools/index.d.ts +6 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +3 -0
- package/dist/src/tools/linear-runner.d.ts +34 -0
- package/dist/src/tools/linear-runner.d.ts.map +1 -0
- package/dist/src/tools/linear-runner.js +700 -0
- package/dist/src/tools/plugins/linear.d.ts +9 -0
- package/dist/src/tools/plugins/linear.d.ts.map +1 -0
- package/dist/src/tools/plugins/linear.js +138 -0
- package/dist/src/tools/registry.d.ts +9 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +18 -0
- package/dist/src/tools/types.d.ts +18 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Logger
|
|
3
|
+
*
|
|
4
|
+
* Verbose logging of agent sessions for analysis and improvement.
|
|
5
|
+
* Uses JSON Lines format for append efficiency and easy parsing.
|
|
6
|
+
*
|
|
7
|
+
* Logs are stored at: .agent-logs/sessions/{session-id}/
|
|
8
|
+
* - metadata.json: Session metadata
|
|
9
|
+
* - events.jsonl: Event log (JSON Lines)
|
|
10
|
+
*/
|
|
11
|
+
import type { AgentWorkType } from '@renseiai/agentfactory-linear';
|
|
12
|
+
/**
|
|
13
|
+
* Session event types for categorization
|
|
14
|
+
*/
|
|
15
|
+
export type SessionEventType = 'init' | 'tool_use' | 'tool_result' | 'assistant' | 'user' | 'error' | 'warning' | 'status' | 'complete' | 'stop';
|
|
16
|
+
/**
|
|
17
|
+
* A single logged event
|
|
18
|
+
*/
|
|
19
|
+
export interface SessionEvent {
|
|
20
|
+
/** Unix timestamp (milliseconds) */
|
|
21
|
+
timestamp: number;
|
|
22
|
+
/** Event type for categorization */
|
|
23
|
+
type: SessionEventType;
|
|
24
|
+
/** Tool name (for tool_use/tool_result events) */
|
|
25
|
+
tool?: string;
|
|
26
|
+
/** Event content/details */
|
|
27
|
+
content: string | object;
|
|
28
|
+
/** Whether this was an error */
|
|
29
|
+
isError?: boolean;
|
|
30
|
+
/** Additional metadata */
|
|
31
|
+
metadata?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Session metadata stored in metadata.json
|
|
35
|
+
*/
|
|
36
|
+
export interface SessionMetadata {
|
|
37
|
+
/** Unique session ID */
|
|
38
|
+
sessionId: string;
|
|
39
|
+
/** Linear issue ID */
|
|
40
|
+
issueId: string;
|
|
41
|
+
/** Human-readable issue identifier */
|
|
42
|
+
issueIdentifier: string;
|
|
43
|
+
/** Type of work being performed */
|
|
44
|
+
workType: AgentWorkType;
|
|
45
|
+
/** Initial prompt */
|
|
46
|
+
prompt: string;
|
|
47
|
+
/** Unix timestamp when session started */
|
|
48
|
+
startedAt: number;
|
|
49
|
+
/** Unix timestamp when session ended */
|
|
50
|
+
endedAt?: number;
|
|
51
|
+
/** Final status */
|
|
52
|
+
status: 'running' | 'completed' | 'failed' | 'stopped';
|
|
53
|
+
/** Error message if failed */
|
|
54
|
+
errorMessage?: string;
|
|
55
|
+
/** PR URL if created */
|
|
56
|
+
pullRequestUrl?: string;
|
|
57
|
+
/** Total tool calls count */
|
|
58
|
+
toolCallsCount: number;
|
|
59
|
+
/** Total errors count */
|
|
60
|
+
errorsCount: number;
|
|
61
|
+
/** Worker ID if remote */
|
|
62
|
+
workerId?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Configuration for SessionLogger
|
|
66
|
+
*/
|
|
67
|
+
export interface SessionLoggerConfig {
|
|
68
|
+
/** Session ID (used for directory name) */
|
|
69
|
+
sessionId: string;
|
|
70
|
+
/** Linear issue ID */
|
|
71
|
+
issueId: string;
|
|
72
|
+
/** Human-readable issue identifier */
|
|
73
|
+
issueIdentifier: string;
|
|
74
|
+
/** Type of work being performed */
|
|
75
|
+
workType: AgentWorkType;
|
|
76
|
+
/** Initial prompt */
|
|
77
|
+
prompt: string;
|
|
78
|
+
/** Base directory for logs (default: .agent-logs) */
|
|
79
|
+
logsDir?: string;
|
|
80
|
+
/** Worker ID if remote */
|
|
81
|
+
workerId?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* SessionLogger handles verbose logging of agent sessions
|
|
85
|
+
*/
|
|
86
|
+
export declare class SessionLogger {
|
|
87
|
+
private readonly config;
|
|
88
|
+
private readonly sessionDir;
|
|
89
|
+
private readonly metadataPath;
|
|
90
|
+
private readonly eventsPath;
|
|
91
|
+
private metadata;
|
|
92
|
+
private stopped;
|
|
93
|
+
constructor(config: SessionLoggerConfig);
|
|
94
|
+
/**
|
|
95
|
+
* Initialize the logger - create directory and write initial metadata
|
|
96
|
+
*/
|
|
97
|
+
initialize(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Log a generic event
|
|
100
|
+
*/
|
|
101
|
+
logEvent(event: SessionEvent): void;
|
|
102
|
+
/**
|
|
103
|
+
* Log a tool use event
|
|
104
|
+
*/
|
|
105
|
+
logToolUse(toolName: string, input?: unknown): void;
|
|
106
|
+
/**
|
|
107
|
+
* Log a tool result event
|
|
108
|
+
*/
|
|
109
|
+
logToolResult(toolName: string, result: unknown, isError?: boolean): void;
|
|
110
|
+
/**
|
|
111
|
+
* Log an assistant message/thought
|
|
112
|
+
*/
|
|
113
|
+
logAssistant(content: string): void;
|
|
114
|
+
/**
|
|
115
|
+
* Log an error
|
|
116
|
+
*/
|
|
117
|
+
logError(message: string, error?: unknown, metadata?: Record<string, unknown>): void;
|
|
118
|
+
/**
|
|
119
|
+
* Log a warning (non-fatal issue)
|
|
120
|
+
*/
|
|
121
|
+
logWarning(message: string, details?: Record<string, unknown>): void;
|
|
122
|
+
/**
|
|
123
|
+
* Log a status change
|
|
124
|
+
*/
|
|
125
|
+
logStatus(status: string, details?: Record<string, unknown>): void;
|
|
126
|
+
/**
|
|
127
|
+
* Finalize the session with a final status
|
|
128
|
+
*/
|
|
129
|
+
finalize(status: 'completed' | 'failed' | 'stopped', options?: {
|
|
130
|
+
errorMessage?: string;
|
|
131
|
+
pullRequestUrl?: string;
|
|
132
|
+
}): void;
|
|
133
|
+
/**
|
|
134
|
+
* Get the session directory path
|
|
135
|
+
*/
|
|
136
|
+
getSessionDir(): string;
|
|
137
|
+
/**
|
|
138
|
+
* Get current metadata
|
|
139
|
+
*/
|
|
140
|
+
getMetadata(): SessionMetadata;
|
|
141
|
+
/**
|
|
142
|
+
* Write metadata to file
|
|
143
|
+
*/
|
|
144
|
+
private writeMetadata;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Create and initialize a session logger
|
|
148
|
+
*/
|
|
149
|
+
export declare function createSessionLogger(config: SessionLoggerConfig): SessionLogger;
|
|
150
|
+
/**
|
|
151
|
+
* Read session metadata from a session directory
|
|
152
|
+
*/
|
|
153
|
+
export declare function readSessionMetadata(sessionDir: string): SessionMetadata | null;
|
|
154
|
+
/**
|
|
155
|
+
* Read events from a session directory
|
|
156
|
+
* Returns an async generator for memory efficiency
|
|
157
|
+
*/
|
|
158
|
+
export declare function readSessionEvents(sessionDir: string): Generator<SessionEvent>;
|
|
159
|
+
//# sourceMappingURL=session-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-logger.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/session-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Logger
|
|
3
|
+
*
|
|
4
|
+
* Verbose logging of agent sessions for analysis and improvement.
|
|
5
|
+
* Uses JSON Lines format for append efficiency and easy parsing.
|
|
6
|
+
*
|
|
7
|
+
* Logs are stored at: .agent-logs/sessions/{session-id}/
|
|
8
|
+
* - metadata.json: Session metadata
|
|
9
|
+
* - events.jsonl: Event log (JSON Lines)
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, mkdirSync, writeFileSync, appendFileSync, readFileSync, } from 'fs';
|
|
12
|
+
import { resolve } from 'path';
|
|
13
|
+
/**
|
|
14
|
+
* SessionLogger handles verbose logging of agent sessions
|
|
15
|
+
*/
|
|
16
|
+
export class SessionLogger {
|
|
17
|
+
config;
|
|
18
|
+
sessionDir;
|
|
19
|
+
metadataPath;
|
|
20
|
+
eventsPath;
|
|
21
|
+
metadata;
|
|
22
|
+
stopped = false;
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.config = {
|
|
25
|
+
...config,
|
|
26
|
+
logsDir: config.logsDir ?? '.agent-logs',
|
|
27
|
+
};
|
|
28
|
+
// Create session directory path
|
|
29
|
+
this.sessionDir = resolve(this.config.logsDir, 'sessions', this.config.sessionId);
|
|
30
|
+
this.metadataPath = resolve(this.sessionDir, 'metadata.json');
|
|
31
|
+
this.eventsPath = resolve(this.sessionDir, 'events.jsonl');
|
|
32
|
+
// Initialize metadata
|
|
33
|
+
this.metadata = {
|
|
34
|
+
sessionId: this.config.sessionId,
|
|
35
|
+
issueId: this.config.issueId,
|
|
36
|
+
issueIdentifier: this.config.issueIdentifier,
|
|
37
|
+
workType: this.config.workType,
|
|
38
|
+
prompt: this.config.prompt,
|
|
39
|
+
startedAt: Date.now(),
|
|
40
|
+
status: 'running',
|
|
41
|
+
toolCallsCount: 0,
|
|
42
|
+
errorsCount: 0,
|
|
43
|
+
workerId: this.config.workerId,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Initialize the logger - create directory and write initial metadata
|
|
48
|
+
*/
|
|
49
|
+
initialize() {
|
|
50
|
+
try {
|
|
51
|
+
// Create directory
|
|
52
|
+
if (!existsSync(this.sessionDir)) {
|
|
53
|
+
mkdirSync(this.sessionDir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
// Write initial metadata
|
|
56
|
+
this.writeMetadata();
|
|
57
|
+
// Log init event
|
|
58
|
+
this.logEvent({
|
|
59
|
+
timestamp: Date.now(),
|
|
60
|
+
type: 'init',
|
|
61
|
+
content: {
|
|
62
|
+
issueIdentifier: this.config.issueIdentifier,
|
|
63
|
+
workType: this.config.workType,
|
|
64
|
+
promptPreview: this.config.prompt.substring(0, 200),
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
// Silently fail - logging is best-effort
|
|
70
|
+
console.warn('SessionLogger: Failed to initialize:', error);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Log a generic event
|
|
75
|
+
*/
|
|
76
|
+
logEvent(event) {
|
|
77
|
+
if (this.stopped)
|
|
78
|
+
return;
|
|
79
|
+
try {
|
|
80
|
+
const line = JSON.stringify(event) + '\n';
|
|
81
|
+
appendFileSync(this.eventsPath, line);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Silently fail
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Log a tool use event
|
|
89
|
+
*/
|
|
90
|
+
logToolUse(toolName, input) {
|
|
91
|
+
this.metadata.toolCallsCount++;
|
|
92
|
+
this.logEvent({
|
|
93
|
+
timestamp: Date.now(),
|
|
94
|
+
type: 'tool_use',
|
|
95
|
+
tool: toolName,
|
|
96
|
+
content: {
|
|
97
|
+
tool: toolName,
|
|
98
|
+
input: input ? JSON.stringify(input).substring(0, 2000) : undefined,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Log a tool result event
|
|
104
|
+
*/
|
|
105
|
+
logToolResult(toolName, result, isError = false) {
|
|
106
|
+
if (isError) {
|
|
107
|
+
this.metadata.errorsCount++;
|
|
108
|
+
}
|
|
109
|
+
this.logEvent({
|
|
110
|
+
timestamp: Date.now(),
|
|
111
|
+
type: 'tool_result',
|
|
112
|
+
tool: toolName,
|
|
113
|
+
content: {
|
|
114
|
+
tool: toolName,
|
|
115
|
+
result: typeof result === 'string' ? result.substring(0, 2000) : JSON.stringify(result).substring(0, 2000),
|
|
116
|
+
},
|
|
117
|
+
isError,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Log an assistant message/thought
|
|
122
|
+
*/
|
|
123
|
+
logAssistant(content) {
|
|
124
|
+
this.logEvent({
|
|
125
|
+
timestamp: Date.now(),
|
|
126
|
+
type: 'assistant',
|
|
127
|
+
content: content.substring(0, 2000),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Log an error
|
|
132
|
+
*/
|
|
133
|
+
logError(message, error, metadata) {
|
|
134
|
+
this.metadata.errorsCount++;
|
|
135
|
+
this.logEvent({
|
|
136
|
+
timestamp: Date.now(),
|
|
137
|
+
type: 'error',
|
|
138
|
+
content: {
|
|
139
|
+
message,
|
|
140
|
+
error: error instanceof Error ? error.message : String(error),
|
|
141
|
+
stack: error instanceof Error ? error.stack?.substring(0, 500) : undefined,
|
|
142
|
+
},
|
|
143
|
+
isError: true,
|
|
144
|
+
metadata,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Log a warning (non-fatal issue)
|
|
149
|
+
*/
|
|
150
|
+
logWarning(message, details) {
|
|
151
|
+
this.logEvent({
|
|
152
|
+
timestamp: Date.now(),
|
|
153
|
+
type: 'warning',
|
|
154
|
+
content: {
|
|
155
|
+
message,
|
|
156
|
+
...details,
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Log a status change
|
|
162
|
+
*/
|
|
163
|
+
logStatus(status, details) {
|
|
164
|
+
this.logEvent({
|
|
165
|
+
timestamp: Date.now(),
|
|
166
|
+
type: 'status',
|
|
167
|
+
content: {
|
|
168
|
+
status,
|
|
169
|
+
...details,
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Finalize the session with a final status
|
|
175
|
+
*/
|
|
176
|
+
finalize(status, options) {
|
|
177
|
+
if (this.stopped)
|
|
178
|
+
return;
|
|
179
|
+
this.stopped = true;
|
|
180
|
+
const now = Date.now();
|
|
181
|
+
// Update metadata
|
|
182
|
+
this.metadata.endedAt = now;
|
|
183
|
+
this.metadata.status = status;
|
|
184
|
+
if (options?.errorMessage) {
|
|
185
|
+
this.metadata.errorMessage = options.errorMessage;
|
|
186
|
+
}
|
|
187
|
+
if (options?.pullRequestUrl) {
|
|
188
|
+
this.metadata.pullRequestUrl = options.pullRequestUrl;
|
|
189
|
+
}
|
|
190
|
+
// Log completion event
|
|
191
|
+
this.logEvent({
|
|
192
|
+
timestamp: now,
|
|
193
|
+
type: status === 'completed' ? 'complete' : 'stop',
|
|
194
|
+
content: {
|
|
195
|
+
status,
|
|
196
|
+
duration: now - this.metadata.startedAt,
|
|
197
|
+
toolCallsCount: this.metadata.toolCallsCount,
|
|
198
|
+
errorsCount: this.metadata.errorsCount,
|
|
199
|
+
...options,
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
// Write final metadata
|
|
203
|
+
this.writeMetadata();
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get the session directory path
|
|
207
|
+
*/
|
|
208
|
+
getSessionDir() {
|
|
209
|
+
return this.sessionDir;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get current metadata
|
|
213
|
+
*/
|
|
214
|
+
getMetadata() {
|
|
215
|
+
return { ...this.metadata };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Write metadata to file
|
|
219
|
+
*/
|
|
220
|
+
writeMetadata() {
|
|
221
|
+
try {
|
|
222
|
+
writeFileSync(this.metadataPath, JSON.stringify(this.metadata, null, 2));
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// Silently fail
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Create and initialize a session logger
|
|
231
|
+
*/
|
|
232
|
+
export function createSessionLogger(config) {
|
|
233
|
+
const logger = new SessionLogger(config);
|
|
234
|
+
logger.initialize();
|
|
235
|
+
return logger;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Read session metadata from a session directory
|
|
239
|
+
*/
|
|
240
|
+
export function readSessionMetadata(sessionDir) {
|
|
241
|
+
const metadataPath = resolve(sessionDir, 'metadata.json');
|
|
242
|
+
try {
|
|
243
|
+
if (!existsSync(metadataPath))
|
|
244
|
+
return null;
|
|
245
|
+
const content = readFileSync(metadataPath, 'utf-8');
|
|
246
|
+
return JSON.parse(content);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Read events from a session directory
|
|
254
|
+
* Returns an async generator for memory efficiency
|
|
255
|
+
*/
|
|
256
|
+
export function* readSessionEvents(sessionDir) {
|
|
257
|
+
const eventsPath = resolve(sessionDir, 'events.jsonl');
|
|
258
|
+
try {
|
|
259
|
+
if (!existsSync(eventsPath))
|
|
260
|
+
return;
|
|
261
|
+
const content = readFileSync(eventsPath, 'utf-8');
|
|
262
|
+
const lines = content.split('\n').filter((line) => line.trim());
|
|
263
|
+
for (const line of lines) {
|
|
264
|
+
try {
|
|
265
|
+
yield JSON.parse(line);
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
// Skip invalid lines
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Return empty if file doesn't exist or can't be read
|
|
274
|
+
}
|
|
275
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Recovery
|
|
3
|
+
*
|
|
4
|
+
* Detects and recovers agent state from the .agent/ directory.
|
|
5
|
+
* Enables crash recovery and duplicate agent prevention.
|
|
6
|
+
*/
|
|
7
|
+
import type { WorktreeState, HeartbeatState, TodosState, RecoveryCheckResult } from './state-types.js';
|
|
8
|
+
import type { AgentWorkType } from '@renseiai/agentfactory-linear';
|
|
9
|
+
/**
|
|
10
|
+
* Get the .agent directory path for a worktree
|
|
11
|
+
*/
|
|
12
|
+
export declare function getAgentDir(worktreePath: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Get the path to the state.json file
|
|
15
|
+
*/
|
|
16
|
+
export declare function getStatePath(worktreePath: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get the path to the heartbeat.json file
|
|
19
|
+
*/
|
|
20
|
+
export declare function getHeartbeatPath(worktreePath: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Get the path to the todos.json file
|
|
23
|
+
*/
|
|
24
|
+
export declare function getTodosPath(worktreePath: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a heartbeat is fresh (agent is alive)
|
|
27
|
+
*/
|
|
28
|
+
export declare function isHeartbeatFresh(heartbeat: HeartbeatState | null, timeoutMs?: number): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Read the current state from a worktree
|
|
31
|
+
*/
|
|
32
|
+
export declare function readWorktreeState(worktreePath: string): WorktreeState | null;
|
|
33
|
+
/**
|
|
34
|
+
* Read the current heartbeat from a worktree
|
|
35
|
+
*/
|
|
36
|
+
export declare function readHeartbeat(worktreePath: string): HeartbeatState | null;
|
|
37
|
+
/**
|
|
38
|
+
* Read the current todos from a worktree
|
|
39
|
+
*/
|
|
40
|
+
export declare function readTodos(worktreePath: string): TodosState | null;
|
|
41
|
+
/**
|
|
42
|
+
* Check if recovery is possible for a worktree
|
|
43
|
+
*/
|
|
44
|
+
export declare function checkRecovery(worktreePath: string, options?: {
|
|
45
|
+
heartbeatTimeoutMs?: number;
|
|
46
|
+
maxRecoveryAttempts?: number;
|
|
47
|
+
}): RecoveryCheckResult;
|
|
48
|
+
/**
|
|
49
|
+
* Initialize the .agent directory for a worktree
|
|
50
|
+
*/
|
|
51
|
+
export declare function initializeAgentDir(worktreePath: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Write the state.json file
|
|
54
|
+
*/
|
|
55
|
+
export declare function writeState(worktreePath: string, state: WorktreeState): void;
|
|
56
|
+
/**
|
|
57
|
+
* Update specific fields in the state
|
|
58
|
+
*/
|
|
59
|
+
export declare function updateState(worktreePath: string, updates: Partial<WorktreeState>): WorktreeState | null;
|
|
60
|
+
/**
|
|
61
|
+
* Write the todos.json file
|
|
62
|
+
*/
|
|
63
|
+
export declare function writeTodos(worktreePath: string, todos: TodosState): void;
|
|
64
|
+
/**
|
|
65
|
+
* Create initial state for a new agent
|
|
66
|
+
*/
|
|
67
|
+
export declare function createInitialState(options: {
|
|
68
|
+
issueId: string;
|
|
69
|
+
issueIdentifier: string;
|
|
70
|
+
linearSessionId: string | null;
|
|
71
|
+
workType: AgentWorkType;
|
|
72
|
+
prompt: string;
|
|
73
|
+
workerId?: string | null;
|
|
74
|
+
pid?: number | null;
|
|
75
|
+
}): WorktreeState;
|
|
76
|
+
/**
|
|
77
|
+
* Generate the task list ID for a worktree (matches orchestrator format)
|
|
78
|
+
*
|
|
79
|
+
* @param issueIdentifier - Issue identifier (e.g., "SUP-123")
|
|
80
|
+
* @param workType - Work type suffix (e.g., "development" -> "DEV")
|
|
81
|
+
* @returns Task list ID (e.g., "SUP-123-DEV")
|
|
82
|
+
*/
|
|
83
|
+
export declare function getTaskListId(issueIdentifier: string, workType: AgentWorkType): string;
|
|
84
|
+
/**
|
|
85
|
+
* Build a recovery prompt for resuming crashed work
|
|
86
|
+
*/
|
|
87
|
+
export declare function buildRecoveryPrompt(state: WorktreeState, todos?: TodosState): string;
|
|
88
|
+
/**
|
|
89
|
+
* Parse environment variable for heartbeat timeout
|
|
90
|
+
*/
|
|
91
|
+
export declare function getHeartbeatTimeoutFromEnv(): number;
|
|
92
|
+
/**
|
|
93
|
+
* Parse environment variable for max recovery attempts
|
|
94
|
+
*/
|
|
95
|
+
export declare function getMaxRecoveryAttemptsFromEnv(): number;
|
|
96
|
+
//# sourceMappingURL=state-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-recovery.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/state-recovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,mBAAmB,EAEpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAQlE;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAeD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,cAAc,GAAG,IAAI,EAChC,SAAS,GAAE,MAAqC,GAC/C,OAAO,CAIT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAE5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IACP,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CACxB,GACL,mBAAmB,CA2ErB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAK7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAI3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,aAAa,GAAG,IAAI,CAWtB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAIxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,GAAG,aAAa,CAmBhB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,aAAa,GACtB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,EACpB,KAAK,CAAC,EAAE,UAAU,GACjB,MAAM,CA6CR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CASnD;AAED;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAStD"}
|