@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.
Files changed (246) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -0
  3. package/dist/src/config/index.d.ts +3 -0
  4. package/dist/src/config/index.d.ts.map +1 -0
  5. package/dist/src/config/index.js +1 -0
  6. package/dist/src/config/repository-config.d.ts +44 -0
  7. package/dist/src/config/repository-config.d.ts.map +1 -0
  8. package/dist/src/config/repository-config.js +88 -0
  9. package/dist/src/config/repository-config.test.d.ts +2 -0
  10. package/dist/src/config/repository-config.test.d.ts.map +1 -0
  11. package/dist/src/config/repository-config.test.js +249 -0
  12. package/dist/src/deployment/deployment-checker.d.ts +110 -0
  13. package/dist/src/deployment/deployment-checker.d.ts.map +1 -0
  14. package/dist/src/deployment/deployment-checker.js +242 -0
  15. package/dist/src/deployment/index.d.ts +3 -0
  16. package/dist/src/deployment/index.d.ts.map +1 -0
  17. package/dist/src/deployment/index.js +2 -0
  18. package/dist/src/frontend/index.d.ts +2 -0
  19. package/dist/src/frontend/index.d.ts.map +1 -0
  20. package/dist/src/frontend/index.js +1 -0
  21. package/dist/src/frontend/types.d.ts +106 -0
  22. package/dist/src/frontend/types.d.ts.map +1 -0
  23. package/dist/src/frontend/types.js +11 -0
  24. package/dist/src/governor/decision-engine.d.ts +52 -0
  25. package/dist/src/governor/decision-engine.d.ts.map +1 -0
  26. package/dist/src/governor/decision-engine.js +220 -0
  27. package/dist/src/governor/decision-engine.test.d.ts +2 -0
  28. package/dist/src/governor/decision-engine.test.d.ts.map +1 -0
  29. package/dist/src/governor/decision-engine.test.js +629 -0
  30. package/dist/src/governor/event-bus.d.ts +43 -0
  31. package/dist/src/governor/event-bus.d.ts.map +1 -0
  32. package/dist/src/governor/event-bus.js +8 -0
  33. package/dist/src/governor/event-deduplicator.d.ts +43 -0
  34. package/dist/src/governor/event-deduplicator.d.ts.map +1 -0
  35. package/dist/src/governor/event-deduplicator.js +53 -0
  36. package/dist/src/governor/event-driven-governor.d.ts +131 -0
  37. package/dist/src/governor/event-driven-governor.d.ts.map +1 -0
  38. package/dist/src/governor/event-driven-governor.js +379 -0
  39. package/dist/src/governor/event-driven-governor.test.d.ts +2 -0
  40. package/dist/src/governor/event-driven-governor.test.d.ts.map +1 -0
  41. package/dist/src/governor/event-driven-governor.test.js +673 -0
  42. package/dist/src/governor/event-types.d.ts +78 -0
  43. package/dist/src/governor/event-types.d.ts.map +1 -0
  44. package/dist/src/governor/event-types.js +32 -0
  45. package/dist/src/governor/governor-types.d.ts +82 -0
  46. package/dist/src/governor/governor-types.d.ts.map +1 -0
  47. package/dist/src/governor/governor-types.js +21 -0
  48. package/dist/src/governor/governor.d.ts +100 -0
  49. package/dist/src/governor/governor.d.ts.map +1 -0
  50. package/dist/src/governor/governor.js +262 -0
  51. package/dist/src/governor/governor.test.d.ts +2 -0
  52. package/dist/src/governor/governor.test.d.ts.map +1 -0
  53. package/dist/src/governor/governor.test.js +514 -0
  54. package/dist/src/governor/human-touchpoints.d.ts +131 -0
  55. package/dist/src/governor/human-touchpoints.d.ts.map +1 -0
  56. package/dist/src/governor/human-touchpoints.js +251 -0
  57. package/dist/src/governor/human-touchpoints.test.d.ts +2 -0
  58. package/dist/src/governor/human-touchpoints.test.d.ts.map +1 -0
  59. package/dist/src/governor/human-touchpoints.test.js +366 -0
  60. package/dist/src/governor/in-memory-event-bus.d.ts +29 -0
  61. package/dist/src/governor/in-memory-event-bus.d.ts.map +1 -0
  62. package/dist/src/governor/in-memory-event-bus.js +79 -0
  63. package/dist/src/governor/index.d.ts +14 -0
  64. package/dist/src/governor/index.d.ts.map +1 -0
  65. package/dist/src/governor/index.js +13 -0
  66. package/dist/src/governor/override-parser.d.ts +60 -0
  67. package/dist/src/governor/override-parser.d.ts.map +1 -0
  68. package/dist/src/governor/override-parser.js +98 -0
  69. package/dist/src/governor/override-parser.test.d.ts +2 -0
  70. package/dist/src/governor/override-parser.test.d.ts.map +1 -0
  71. package/dist/src/governor/override-parser.test.js +312 -0
  72. package/dist/src/governor/platform-adapter.d.ts +69 -0
  73. package/dist/src/governor/platform-adapter.d.ts.map +1 -0
  74. package/dist/src/governor/platform-adapter.js +11 -0
  75. package/dist/src/governor/processing-state.d.ts +66 -0
  76. package/dist/src/governor/processing-state.d.ts.map +1 -0
  77. package/dist/src/governor/processing-state.js +43 -0
  78. package/dist/src/governor/processing-state.test.d.ts +2 -0
  79. package/dist/src/governor/processing-state.test.d.ts.map +1 -0
  80. package/dist/src/governor/processing-state.test.js +96 -0
  81. package/dist/src/governor/top-of-funnel.d.ts +118 -0
  82. package/dist/src/governor/top-of-funnel.d.ts.map +1 -0
  83. package/dist/src/governor/top-of-funnel.js +168 -0
  84. package/dist/src/governor/top-of-funnel.test.d.ts +2 -0
  85. package/dist/src/governor/top-of-funnel.test.d.ts.map +1 -0
  86. package/dist/src/governor/top-of-funnel.test.js +331 -0
  87. package/dist/src/index.d.ts +11 -0
  88. package/dist/src/index.d.ts.map +1 -0
  89. package/dist/src/index.js +10 -0
  90. package/dist/src/linear-cli.d.ts +38 -0
  91. package/dist/src/linear-cli.d.ts.map +1 -0
  92. package/dist/src/linear-cli.js +674 -0
  93. package/dist/src/logger.d.ts +117 -0
  94. package/dist/src/logger.d.ts.map +1 -0
  95. package/dist/src/logger.js +430 -0
  96. package/dist/src/manifest/generate.d.ts +20 -0
  97. package/dist/src/manifest/generate.d.ts.map +1 -0
  98. package/dist/src/manifest/generate.js +65 -0
  99. package/dist/src/manifest/index.d.ts +4 -0
  100. package/dist/src/manifest/index.d.ts.map +1 -0
  101. package/dist/src/manifest/index.js +2 -0
  102. package/dist/src/manifest/route-manifest.d.ts +34 -0
  103. package/dist/src/manifest/route-manifest.d.ts.map +1 -0
  104. package/dist/src/manifest/route-manifest.js +148 -0
  105. package/dist/src/orchestrator/activity-emitter.d.ts +119 -0
  106. package/dist/src/orchestrator/activity-emitter.d.ts.map +1 -0
  107. package/dist/src/orchestrator/activity-emitter.js +306 -0
  108. package/dist/src/orchestrator/api-activity-emitter.d.ts +167 -0
  109. package/dist/src/orchestrator/api-activity-emitter.d.ts.map +1 -0
  110. package/dist/src/orchestrator/api-activity-emitter.js +417 -0
  111. package/dist/src/orchestrator/heartbeat-writer.d.ts +57 -0
  112. package/dist/src/orchestrator/heartbeat-writer.d.ts.map +1 -0
  113. package/dist/src/orchestrator/heartbeat-writer.js +137 -0
  114. package/dist/src/orchestrator/index.d.ts +20 -0
  115. package/dist/src/orchestrator/index.d.ts.map +1 -0
  116. package/dist/src/orchestrator/index.js +22 -0
  117. package/dist/src/orchestrator/log-analyzer.d.ts +160 -0
  118. package/dist/src/orchestrator/log-analyzer.d.ts.map +1 -0
  119. package/dist/src/orchestrator/log-analyzer.js +572 -0
  120. package/dist/src/orchestrator/log-config.d.ts +39 -0
  121. package/dist/src/orchestrator/log-config.d.ts.map +1 -0
  122. package/dist/src/orchestrator/log-config.js +45 -0
  123. package/dist/src/orchestrator/orchestrator.d.ts +316 -0
  124. package/dist/src/orchestrator/orchestrator.d.ts.map +1 -0
  125. package/dist/src/orchestrator/orchestrator.js +3290 -0
  126. package/dist/src/orchestrator/parse-work-result.d.ts +16 -0
  127. package/dist/src/orchestrator/parse-work-result.d.ts.map +1 -0
  128. package/dist/src/orchestrator/parse-work-result.js +135 -0
  129. package/dist/src/orchestrator/parse-work-result.test.d.ts +2 -0
  130. package/dist/src/orchestrator/parse-work-result.test.d.ts.map +1 -0
  131. package/dist/src/orchestrator/parse-work-result.test.js +234 -0
  132. package/dist/src/orchestrator/progress-logger.d.ts +72 -0
  133. package/dist/src/orchestrator/progress-logger.d.ts.map +1 -0
  134. package/dist/src/orchestrator/progress-logger.js +135 -0
  135. package/dist/src/orchestrator/session-logger.d.ts +159 -0
  136. package/dist/src/orchestrator/session-logger.d.ts.map +1 -0
  137. package/dist/src/orchestrator/session-logger.js +275 -0
  138. package/dist/src/orchestrator/state-recovery.d.ts +96 -0
  139. package/dist/src/orchestrator/state-recovery.d.ts.map +1 -0
  140. package/dist/src/orchestrator/state-recovery.js +302 -0
  141. package/dist/src/orchestrator/state-types.d.ts +165 -0
  142. package/dist/src/orchestrator/state-types.d.ts.map +1 -0
  143. package/dist/src/orchestrator/state-types.js +7 -0
  144. package/dist/src/orchestrator/stream-parser.d.ts +151 -0
  145. package/dist/src/orchestrator/stream-parser.d.ts.map +1 -0
  146. package/dist/src/orchestrator/stream-parser.js +137 -0
  147. package/dist/src/orchestrator/types.d.ts +232 -0
  148. package/dist/src/orchestrator/types.d.ts.map +1 -0
  149. package/dist/src/orchestrator/types.js +4 -0
  150. package/dist/src/orchestrator/validate-git-remote.test.d.ts +2 -0
  151. package/dist/src/orchestrator/validate-git-remote.test.d.ts.map +1 -0
  152. package/dist/src/orchestrator/validate-git-remote.test.js +61 -0
  153. package/dist/src/providers/a2a-auth.d.ts +81 -0
  154. package/dist/src/providers/a2a-auth.d.ts.map +1 -0
  155. package/dist/src/providers/a2a-auth.js +188 -0
  156. package/dist/src/providers/a2a-auth.test.d.ts +2 -0
  157. package/dist/src/providers/a2a-auth.test.d.ts.map +1 -0
  158. package/dist/src/providers/a2a-auth.test.js +232 -0
  159. package/dist/src/providers/a2a-provider.d.ts +254 -0
  160. package/dist/src/providers/a2a-provider.d.ts.map +1 -0
  161. package/dist/src/providers/a2a-provider.integration.test.d.ts +9 -0
  162. package/dist/src/providers/a2a-provider.integration.test.d.ts.map +1 -0
  163. package/dist/src/providers/a2a-provider.integration.test.js +665 -0
  164. package/dist/src/providers/a2a-provider.js +811 -0
  165. package/dist/src/providers/a2a-provider.test.d.ts +2 -0
  166. package/dist/src/providers/a2a-provider.test.d.ts.map +1 -0
  167. package/dist/src/providers/a2a-provider.test.js +681 -0
  168. package/dist/src/providers/amp-provider.d.ts +20 -0
  169. package/dist/src/providers/amp-provider.d.ts.map +1 -0
  170. package/dist/src/providers/amp-provider.js +24 -0
  171. package/dist/src/providers/claude-provider.d.ts +18 -0
  172. package/dist/src/providers/claude-provider.d.ts.map +1 -0
  173. package/dist/src/providers/claude-provider.js +437 -0
  174. package/dist/src/providers/codex-provider.d.ts +133 -0
  175. package/dist/src/providers/codex-provider.d.ts.map +1 -0
  176. package/dist/src/providers/codex-provider.js +381 -0
  177. package/dist/src/providers/codex-provider.test.d.ts +2 -0
  178. package/dist/src/providers/codex-provider.test.d.ts.map +1 -0
  179. package/dist/src/providers/codex-provider.test.js +387 -0
  180. package/dist/src/providers/index.d.ts +44 -0
  181. package/dist/src/providers/index.d.ts.map +1 -0
  182. package/dist/src/providers/index.js +85 -0
  183. package/dist/src/providers/spring-ai-provider.d.ts +90 -0
  184. package/dist/src/providers/spring-ai-provider.d.ts.map +1 -0
  185. package/dist/src/providers/spring-ai-provider.integration.test.d.ts +13 -0
  186. package/dist/src/providers/spring-ai-provider.integration.test.d.ts.map +1 -0
  187. package/dist/src/providers/spring-ai-provider.integration.test.js +351 -0
  188. package/dist/src/providers/spring-ai-provider.js +317 -0
  189. package/dist/src/providers/spring-ai-provider.test.d.ts +2 -0
  190. package/dist/src/providers/spring-ai-provider.test.d.ts.map +1 -0
  191. package/dist/src/providers/spring-ai-provider.test.js +200 -0
  192. package/dist/src/providers/types.d.ts +165 -0
  193. package/dist/src/providers/types.d.ts.map +1 -0
  194. package/dist/src/providers/types.js +13 -0
  195. package/dist/src/templates/adapters.d.ts +51 -0
  196. package/dist/src/templates/adapters.d.ts.map +1 -0
  197. package/dist/src/templates/adapters.js +104 -0
  198. package/dist/src/templates/adapters.test.d.ts +2 -0
  199. package/dist/src/templates/adapters.test.d.ts.map +1 -0
  200. package/dist/src/templates/adapters.test.js +165 -0
  201. package/dist/src/templates/agent-definition.d.ts +85 -0
  202. package/dist/src/templates/agent-definition.d.ts.map +1 -0
  203. package/dist/src/templates/agent-definition.js +97 -0
  204. package/dist/src/templates/agent-definition.test.d.ts +2 -0
  205. package/dist/src/templates/agent-definition.test.d.ts.map +1 -0
  206. package/dist/src/templates/agent-definition.test.js +209 -0
  207. package/dist/src/templates/index.d.ts +14 -0
  208. package/dist/src/templates/index.d.ts.map +1 -0
  209. package/dist/src/templates/index.js +11 -0
  210. package/dist/src/templates/loader.d.ts +41 -0
  211. package/dist/src/templates/loader.d.ts.map +1 -0
  212. package/dist/src/templates/loader.js +114 -0
  213. package/dist/src/templates/registry.d.ts +80 -0
  214. package/dist/src/templates/registry.d.ts.map +1 -0
  215. package/dist/src/templates/registry.js +177 -0
  216. package/dist/src/templates/registry.test.d.ts +2 -0
  217. package/dist/src/templates/registry.test.d.ts.map +1 -0
  218. package/dist/src/templates/registry.test.js +198 -0
  219. package/dist/src/templates/renderer.d.ts +29 -0
  220. package/dist/src/templates/renderer.d.ts.map +1 -0
  221. package/dist/src/templates/renderer.js +35 -0
  222. package/dist/src/templates/strategy-templates.test.d.ts +2 -0
  223. package/dist/src/templates/strategy-templates.test.d.ts.map +1 -0
  224. package/dist/src/templates/strategy-templates.test.js +619 -0
  225. package/dist/src/templates/types.d.ts +233 -0
  226. package/dist/src/templates/types.d.ts.map +1 -0
  227. package/dist/src/templates/types.js +127 -0
  228. package/dist/src/templates/types.test.d.ts +2 -0
  229. package/dist/src/templates/types.test.d.ts.map +1 -0
  230. package/dist/src/templates/types.test.js +232 -0
  231. package/dist/src/tools/index.d.ts +6 -0
  232. package/dist/src/tools/index.d.ts.map +1 -0
  233. package/dist/src/tools/index.js +3 -0
  234. package/dist/src/tools/linear-runner.d.ts +34 -0
  235. package/dist/src/tools/linear-runner.d.ts.map +1 -0
  236. package/dist/src/tools/linear-runner.js +700 -0
  237. package/dist/src/tools/plugins/linear.d.ts +9 -0
  238. package/dist/src/tools/plugins/linear.d.ts.map +1 -0
  239. package/dist/src/tools/plugins/linear.js +138 -0
  240. package/dist/src/tools/registry.d.ts +9 -0
  241. package/dist/src/tools/registry.d.ts.map +1 -0
  242. package/dist/src/tools/registry.js +18 -0
  243. package/dist/src/tools/types.d.ts +18 -0
  244. package/dist/src/tools/types.d.ts.map +1 -0
  245. package/dist/src/tools/types.js +1 -0
  246. package/package.json +78 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Heartbeat Writer
3
+ *
4
+ * Periodically writes heartbeat state to the .agent/ directory.
5
+ * Uses atomic writes (temp file + rename) to prevent corruption.
6
+ */
7
+ import { writeFileSync, renameSync, existsSync, mkdirSync } from 'fs';
8
+ import { resolve, dirname } from 'path';
9
+ // Default heartbeat interval: 10 seconds
10
+ const DEFAULT_HEARTBEAT_INTERVAL_MS = 10000;
11
+ /**
12
+ * HeartbeatWriter periodically writes heartbeat state to enable crash detection
13
+ */
14
+ export class HeartbeatWriter {
15
+ config;
16
+ heartbeatPath;
17
+ intervalHandle = null;
18
+ lastActivityType = 'idle';
19
+ lastActivityTimestamp;
20
+ toolCallsCount = 0;
21
+ currentOperation = null;
22
+ stopped = false;
23
+ constructor(config) {
24
+ this.config = {
25
+ ...config,
26
+ intervalMs: config.intervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS,
27
+ };
28
+ this.heartbeatPath = resolve(this.config.agentDir, 'heartbeat.json');
29
+ this.lastActivityTimestamp = Date.now();
30
+ }
31
+ /**
32
+ * Start the heartbeat writer
33
+ * Immediately writes the first heartbeat, then starts the interval
34
+ */
35
+ start() {
36
+ if (this.stopped) {
37
+ throw new Error('HeartbeatWriter has been stopped and cannot be restarted');
38
+ }
39
+ if (this.intervalHandle) {
40
+ return; // Already running
41
+ }
42
+ // Ensure the directory exists
43
+ const dir = dirname(this.heartbeatPath);
44
+ if (!existsSync(dir)) {
45
+ mkdirSync(dir, { recursive: true });
46
+ }
47
+ // Write initial heartbeat
48
+ this.writeHeartbeat();
49
+ // Start interval
50
+ this.intervalHandle = setInterval(() => {
51
+ this.writeHeartbeat();
52
+ }, this.config.intervalMs);
53
+ // Don't prevent the process from exiting
54
+ this.intervalHandle.unref();
55
+ }
56
+ /**
57
+ * Stop the heartbeat writer
58
+ * Should be called when the agent exits
59
+ */
60
+ stop() {
61
+ this.stopped = true;
62
+ if (this.intervalHandle) {
63
+ clearInterval(this.intervalHandle);
64
+ this.intervalHandle = null;
65
+ }
66
+ }
67
+ /**
68
+ * Update the last activity type
69
+ * Call this when the agent does something
70
+ */
71
+ updateActivity(type, operation) {
72
+ this.lastActivityType = type;
73
+ this.lastActivityTimestamp = Date.now();
74
+ this.currentOperation = operation ?? null;
75
+ if (type === 'tool_use') {
76
+ this.toolCallsCount++;
77
+ }
78
+ }
79
+ /**
80
+ * Record a tool call
81
+ */
82
+ recordToolCall(toolName) {
83
+ this.updateActivity('tool_use', toolName);
84
+ }
85
+ /**
86
+ * Record thinking activity
87
+ */
88
+ recordThinking() {
89
+ this.updateActivity('thinking');
90
+ }
91
+ /**
92
+ * Write the heartbeat file atomically
93
+ */
94
+ writeHeartbeat() {
95
+ const memoryUsage = process.memoryUsage();
96
+ const now = Date.now();
97
+ const state = {
98
+ timestamp: now,
99
+ pid: this.config.pid,
100
+ memoryUsageMB: Math.round(memoryUsage.heapUsed / 1024 / 1024),
101
+ uptime: Math.floor((now - this.config.startTime) / 1000),
102
+ lastActivityType: this.lastActivityType,
103
+ lastActivityTimestamp: this.lastActivityTimestamp,
104
+ toolCallsCount: this.toolCallsCount,
105
+ currentOperation: this.currentOperation,
106
+ };
107
+ // Write atomically: temp file then rename
108
+ const tempPath = `${this.heartbeatPath}.tmp`;
109
+ try {
110
+ writeFileSync(tempPath, JSON.stringify(state, null, 2));
111
+ renameSync(tempPath, this.heartbeatPath);
112
+ }
113
+ catch (error) {
114
+ // Silently ignore write errors - heartbeat is best-effort
115
+ // The file might be locked or the directory might have been removed
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * Create a heartbeat writer for an agent
121
+ */
122
+ export function createHeartbeatWriter(config) {
123
+ return new HeartbeatWriter(config);
124
+ }
125
+ /**
126
+ * Parse environment variable for heartbeat interval
127
+ */
128
+ export function getHeartbeatIntervalFromEnv() {
129
+ const envValue = process.env.AGENT_HEARTBEAT_INTERVAL_MS;
130
+ if (envValue) {
131
+ const parsed = parseInt(envValue, 10);
132
+ if (!isNaN(parsed) && parsed > 0) {
133
+ return parsed;
134
+ }
135
+ }
136
+ return DEFAULT_HEARTBEAT_INTERVAL_MS;
137
+ }
@@ -0,0 +1,20 @@
1
+ export type { OrchestratorConfig, OrchestratorIssue, AgentProcess, OrchestratorEvents, SpawnAgentOptions, OrchestratorResult, OrchestratorStreamConfig, StopAgentResult, ForwardPromptResult, InjectMessageResult, SpawnAgentWithResumeOptions, WorkTypeTimeoutConfig, AgentWorkResult, } from './types.js';
2
+ export type { ClaudeStreamEvent, ClaudeInitEvent, ClaudeSystemEvent, ClaudeAssistantEvent, ClaudeToolUseEvent, ClaudeToolResultEvent, ClaudeResultEvent, ClaudeErrorEvent, ClaudeTodoItem, ClaudeUserEvent, ClaudeEvent, ClaudeStreamHandlers, } from './stream-parser.js';
3
+ export type { ActivityEmitterConfig } from './activity-emitter.js';
4
+ export type { ApiActivityEmitterConfig, ProgressMilestone } from './api-activity-emitter.js';
5
+ export type { WorktreeState, WorktreeStatus, HeartbeatState, HeartbeatActivityType, TodosState, TodoItem, TodoStatus, ProgressLogEntry, ProgressEventType, RecoveryCheckResult, HeartbeatWriterConfig, ProgressLoggerConfig, } from './state-types.js';
6
+ export type { LogAnalysisConfig } from './log-config.js';
7
+ export type { SessionEventType, SessionEvent, SessionMetadata, SessionLoggerConfig, } from './session-logger.js';
8
+ export type { PatternType, PatternSeverity, AnalyzedPattern, AnalysisResult, SuggestedIssue, TrackedIssue, DeduplicationStore, } from './log-analyzer.js';
9
+ export { AgentOrchestrator, createOrchestrator, getWorktreeIdentifier, validateGitRemote } from './orchestrator.js';
10
+ export { ClaudeStreamParser, createStreamParser } from './stream-parser.js';
11
+ export { ActivityEmitter, createActivityEmitter } from './activity-emitter.js';
12
+ export { ApiActivityEmitter, createApiActivityEmitter } from './api-activity-emitter.js';
13
+ export { HeartbeatWriter, createHeartbeatWriter, getHeartbeatIntervalFromEnv, } from './heartbeat-writer.js';
14
+ export { ProgressLogger, createProgressLogger } from './progress-logger.js';
15
+ export { getAgentDir, getStatePath, getHeartbeatPath, getTodosPath, isHeartbeatFresh, readWorktreeState, readHeartbeat, readTodos, checkRecovery, initializeAgentDir, writeState, updateState, writeTodos, createInitialState, buildRecoveryPrompt, getHeartbeatTimeoutFromEnv, getMaxRecoveryAttemptsFromEnv, getTaskListId, } from './state-recovery.js';
16
+ export { getLogAnalysisConfig, isSessionLoggingEnabled, isAutoAnalyzeEnabled, } from './log-config.js';
17
+ export { SessionLogger, createSessionLogger, readSessionMetadata, readSessionEvents, } from './session-logger.js';
18
+ export { parseWorkResult } from './parse-work-result.js';
19
+ export { LogAnalyzer, createLogAnalyzer } from './log-analyzer.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,eAAe,GAChB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAG3B,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAGlE,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG5F,YAAY,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AAGzB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGxD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAG5B,YAAY,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGnH,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAG3E,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAG9E,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAGxF,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAG3E,OAAO,EACL,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,aAAa,GACd,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,22 @@
1
+ // Orchestrator
2
+ export { AgentOrchestrator, createOrchestrator, getWorktreeIdentifier, validateGitRemote } from './orchestrator.js';
3
+ // Stream Parser
4
+ export { ClaudeStreamParser, createStreamParser } from './stream-parser.js';
5
+ // Activity Emitter
6
+ export { ActivityEmitter, createActivityEmitter } from './activity-emitter.js';
7
+ // API Activity Emitter (for remote workers proxying through API)
8
+ export { ApiActivityEmitter, createApiActivityEmitter } from './api-activity-emitter.js';
9
+ // Heartbeat Writer (for crash detection)
10
+ export { HeartbeatWriter, createHeartbeatWriter, getHeartbeatIntervalFromEnv, } from './heartbeat-writer.js';
11
+ // Progress Logger (for debugging)
12
+ export { ProgressLogger, createProgressLogger } from './progress-logger.js';
13
+ // State Recovery (for crash recovery)
14
+ export { getAgentDir, getStatePath, getHeartbeatPath, getTodosPath, isHeartbeatFresh, readWorktreeState, readHeartbeat, readTodos, checkRecovery, initializeAgentDir, writeState, updateState, writeTodos, createInitialState, buildRecoveryPrompt, getHeartbeatTimeoutFromEnv, getMaxRecoveryAttemptsFromEnv, getTaskListId, } from './state-recovery.js';
15
+ // Log Config
16
+ export { getLogAnalysisConfig, isSessionLoggingEnabled, isAutoAnalyzeEnabled, } from './log-config.js';
17
+ // Session Logger
18
+ export { SessionLogger, createSessionLogger, readSessionMetadata, readSessionEvents, } from './session-logger.js';
19
+ // Work Result Parser (for QA/acceptance pass/fail detection)
20
+ export { parseWorkResult } from './parse-work-result.js';
21
+ // Log Analyzer
22
+ export { LogAnalyzer, createLogAnalyzer } from './log-analyzer.js';
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Log Analyzer
3
+ *
4
+ * Analyzes session logs for errors and improvement opportunities.
5
+ * Can automatically create deduplicated Linear issues.
6
+ */
7
+ import { type SessionMetadata } from './session-logger.js';
8
+ import { type LogAnalysisConfig } from './log-config.js';
9
+ /**
10
+ * Pattern types for categorization
11
+ */
12
+ export type PatternType = 'permission' | 'tool_issue' | 'tool_misuse' | 'performance' | 'repeated_failure' | 'approval_required';
13
+ /**
14
+ * Severity levels for patterns
15
+ */
16
+ export type PatternSeverity = 'low' | 'medium' | 'high' | 'critical';
17
+ /**
18
+ * An analyzed pattern/issue from session logs
19
+ */
20
+ export interface AnalyzedPattern {
21
+ /** Type of pattern */
22
+ type: PatternType;
23
+ /** Severity level */
24
+ severity: PatternSeverity;
25
+ /** Short title for the issue */
26
+ title: string;
27
+ /** Detailed description */
28
+ description: string;
29
+ /** Example error messages */
30
+ examples: string[];
31
+ /** How many times this occurred */
32
+ occurrences: number;
33
+ /** Related tool (if applicable) */
34
+ tool?: string;
35
+ }
36
+ /**
37
+ * Result of analyzing a session
38
+ */
39
+ export interface AnalysisResult {
40
+ /** Session ID that was analyzed */
41
+ sessionId: string;
42
+ /** Session metadata */
43
+ metadata: SessionMetadata;
44
+ /** Detected patterns */
45
+ patterns: AnalyzedPattern[];
46
+ /** Total events analyzed */
47
+ eventsAnalyzed: number;
48
+ /** Total errors found */
49
+ errorsFound: number;
50
+ /** Suggested issues to create */
51
+ suggestedIssues: SuggestedIssue[];
52
+ /** Unix timestamp of analysis */
53
+ analyzedAt: number;
54
+ }
55
+ /**
56
+ * A suggested issue to create in Linear
57
+ */
58
+ export interface SuggestedIssue {
59
+ /** Deterministic signature for deduplication */
60
+ signature: string;
61
+ /** Issue title */
62
+ title: string;
63
+ /** Issue description (markdown) */
64
+ description: string;
65
+ /** Work type (Bug, Feature, Chore) */
66
+ workType: 'Bug' | 'Feature' | 'Chore';
67
+ /** Labels to apply */
68
+ labels: string[];
69
+ /** Source patterns that led to this suggestion */
70
+ sourcePatterns: PatternType[];
71
+ }
72
+ /**
73
+ * Tracked issue in the deduplication store
74
+ */
75
+ export interface TrackedIssue {
76
+ /** Linear issue ID (UUID) */
77
+ linearIssueId: string;
78
+ /** Human-readable identifier (e.g., SUP-123) */
79
+ linearIdentifier: string;
80
+ /** Unix timestamp when first created */
81
+ createdAt: number;
82
+ /** Unix timestamp when last seen */
83
+ lastSeenAt: number;
84
+ /** How many sessions have had this issue */
85
+ sessionCount: number;
86
+ /** Session IDs that had this issue */
87
+ sessionIds: string[];
88
+ }
89
+ /**
90
+ * Deduplication store structure
91
+ */
92
+ export interface DeduplicationStore {
93
+ issues: Record<string, TrackedIssue>;
94
+ }
95
+ /**
96
+ * LogAnalyzer class for analyzing session logs
97
+ */
98
+ export declare class LogAnalyzer {
99
+ private readonly config;
100
+ private readonly sessionsDir;
101
+ private readonly processedDir;
102
+ private readonly analysisDir;
103
+ private readonly deduplicationPath;
104
+ private linearClient?;
105
+ constructor(config?: Partial<LogAnalysisConfig>);
106
+ /**
107
+ * Initialize directories and Linear client
108
+ */
109
+ initialize(linearApiKey?: string): void;
110
+ /**
111
+ * Get list of session IDs that haven't been analyzed yet
112
+ */
113
+ getUnprocessedSessions(): string[];
114
+ /**
115
+ * Analyze a single session
116
+ */
117
+ analyzeSession(sessionId: string): AnalysisResult | null;
118
+ /**
119
+ * Detect patterns in events
120
+ */
121
+ private detectPatterns;
122
+ /**
123
+ * Detect repeated failures (same error 3+ times)
124
+ */
125
+ private detectRepeatedFailures;
126
+ /**
127
+ * Generate suggested issues from patterns
128
+ */
129
+ private generateSuggestedIssues;
130
+ /**
131
+ * Mark a session as processed
132
+ */
133
+ markProcessed(sessionId: string, result: AnalysisResult): void;
134
+ /**
135
+ * Load the deduplication store
136
+ */
137
+ loadDeduplicationStore(): DeduplicationStore;
138
+ /**
139
+ * Save the deduplication store
140
+ */
141
+ saveDeduplicationStore(store: DeduplicationStore): void;
142
+ /**
143
+ * Create or update issues in Linear
144
+ * Returns created/updated issue identifiers
145
+ */
146
+ createIssues(suggestions: SuggestedIssue[], sessionId: string, dryRun?: boolean): Promise<Array<{
147
+ signature: string;
148
+ identifier: string;
149
+ created: boolean;
150
+ }>>;
151
+ /**
152
+ * Cleanup old logs based on retention policy
153
+ */
154
+ cleanupOldLogs(): number;
155
+ }
156
+ /**
157
+ * Create and initialize a log analyzer
158
+ */
159
+ export declare function createLogAnalyzer(config?: Partial<LogAnalysisConfig>, linearApiKey?: string): LogAnalyzer;
160
+ //# sourceMappingURL=log-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-analyzer.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/log-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE9E;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,mBAAmB,CAAA;AAEvB;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AAEpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,IAAI,EAAE,WAAW,CAAA;IACjB,qBAAqB;IACrB,QAAQ,EAAE,eAAe,CAAA;IACzB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,QAAQ,EAAE,eAAe,CAAA;IACzB,wBAAwB;IACxB,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,iCAAiC;IACjC,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;IACrC,sBAAsB;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,kDAAkD;IAClD,cAAc,EAAE,WAAW,EAAE,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CACrC;AA4JD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAmB;gBAE5B,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAQ/C;;OAEG;IACH,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAevC;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;IA2BlC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAqCxD;;OAEG;IACH,OAAO,CAAC,cAAc;IAsCtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6C9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwF/B;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAK9D;;OAEG;IACH,sBAAsB,IAAI,kBAAkB;IAY5C;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAIvD;;;OAGG;IACG,YAAY,CAChB,WAAW,EAAE,cAAc,EAAE,EAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,UAAQ,GACb,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IA2F9E;;OAEG;IACH,cAAc,IAAI,MAAM;CA8CzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,YAAY,CAAC,EAAE,MAAM,GACpB,WAAW,CAIb"}