@action-llama/action-llama 0.13.7 → 0.15.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 (249) hide show
  1. package/agent-docs/AGENTS.md +123 -207
  2. package/dist/agents/container-entry.d.ts +1 -3
  3. package/dist/agents/container-entry.d.ts.map +1 -1
  4. package/dist/agents/container-entry.js +208 -154
  5. package/dist/agents/container-entry.js.map +1 -1
  6. package/dist/agents/container-runner.d.ts.map +1 -1
  7. package/dist/agents/container-runner.js +19 -8
  8. package/dist/agents/container-runner.js.map +1 -1
  9. package/dist/agents/context-injection.d.ts +7 -0
  10. package/dist/agents/context-injection.d.ts.map +1 -0
  11. package/dist/agents/context-injection.js +27 -0
  12. package/dist/agents/context-injection.js.map +1 -0
  13. package/dist/agents/execution-engine.d.ts.map +1 -1
  14. package/dist/agents/execution-engine.js +99 -109
  15. package/dist/agents/execution-engine.js.map +1 -1
  16. package/dist/agents/feedback-monitor.d.ts +56 -0
  17. package/dist/agents/feedback-monitor.d.ts.map +1 -0
  18. package/dist/agents/feedback-monitor.js +176 -0
  19. package/dist/agents/feedback-monitor.js.map +1 -0
  20. package/dist/agents/feedback-runner.d.ts +28 -0
  21. package/dist/agents/feedback-runner.d.ts.map +1 -0
  22. package/dist/agents/feedback-runner.js +138 -0
  23. package/dist/agents/feedback-runner.js.map +1 -0
  24. package/dist/agents/model-fallback.d.ts +18 -0
  25. package/dist/agents/model-fallback.d.ts.map +1 -0
  26. package/dist/agents/model-fallback.js +40 -0
  27. package/dist/agents/model-fallback.js.map +1 -0
  28. package/dist/agents/prompt.d.ts +9 -2
  29. package/dist/agents/prompt.d.ts.map +1 -1
  30. package/dist/agents/prompt.js +21 -49
  31. package/dist/agents/prompt.js.map +1 -1
  32. package/dist/agents/runner.d.ts +6 -0
  33. package/dist/agents/runner.d.ts.map +1 -1
  34. package/dist/agents/runner.js +153 -124
  35. package/dist/agents/runner.js.map +1 -1
  36. package/dist/agents/session-factory.d.ts +13 -0
  37. package/dist/agents/session-factory.d.ts.map +1 -0
  38. package/dist/agents/session-factory.js +27 -0
  39. package/dist/agents/session-factory.js.map +1 -0
  40. package/dist/build-info.json +1 -1
  41. package/dist/cli/commands/agent.d.ts.map +1 -1
  42. package/dist/cli/commands/agent.js +89 -23
  43. package/dist/cli/commands/agent.js.map +1 -1
  44. package/dist/cli/commands/chat.d.ts.map +1 -1
  45. package/dist/cli/commands/chat.js +26 -43
  46. package/dist/cli/commands/chat.js.map +1 -1
  47. package/dist/cli/commands/claude.d.ts +4 -0
  48. package/dist/cli/commands/claude.d.ts.map +1 -0
  49. package/dist/cli/commands/claude.js +8 -0
  50. package/dist/cli/commands/claude.js.map +1 -0
  51. package/dist/cli/commands/doctor.d.ts.map +1 -1
  52. package/dist/cli/commands/doctor.js +24 -6
  53. package/dist/cli/commands/doctor.js.map +1 -1
  54. package/dist/cli/commands/mcp.d.ts +8 -0
  55. package/dist/cli/commands/mcp.d.ts.map +1 -0
  56. package/dist/cli/commands/mcp.js +31 -0
  57. package/dist/cli/commands/mcp.js.map +1 -0
  58. package/dist/cli/commands/new.d.ts.map +1 -1
  59. package/dist/cli/commands/new.js +15 -6
  60. package/dist/cli/commands/new.js.map +1 -1
  61. package/dist/cli/commands/run.js +1 -1
  62. package/dist/cli/commands/run.js.map +1 -1
  63. package/dist/cli/commands/start.js +3 -3
  64. package/dist/cli/commands/start.js.map +1 -1
  65. package/dist/cli/commands/stats.d.ts +9 -0
  66. package/dist/cli/commands/stats.d.ts.map +1 -0
  67. package/dist/cli/commands/stats.js +149 -0
  68. package/dist/cli/commands/stats.js.map +1 -0
  69. package/dist/cli/commands/status.d.ts.map +1 -1
  70. package/dist/cli/commands/status.js +3 -0
  71. package/dist/cli/commands/status.js.map +1 -1
  72. package/dist/cli/main.js +50 -3
  73. package/dist/cli/main.js.map +1 -1
  74. package/dist/gateway/index.d.ts +3 -0
  75. package/dist/gateway/index.d.ts.map +1 -1
  76. package/dist/gateway/index.js +7 -1
  77. package/dist/gateway/index.js.map +1 -1
  78. package/dist/gateway/lock-store.d.ts +10 -0
  79. package/dist/gateway/lock-store.d.ts.map +1 -1
  80. package/dist/gateway/lock-store.js +38 -0
  81. package/dist/gateway/lock-store.js.map +1 -1
  82. package/dist/gateway/routes/control.d.ts +2 -0
  83. package/dist/gateway/routes/control.d.ts.map +1 -1
  84. package/dist/gateway/routes/control.js +56 -0
  85. package/dist/gateway/routes/control.js.map +1 -1
  86. package/dist/gateway/routes/dashboard.d.ts +2 -1
  87. package/dist/gateway/routes/dashboard.d.ts.map +1 -1
  88. package/dist/gateway/routes/dashboard.js +112 -6
  89. package/dist/gateway/routes/dashboard.js.map +1 -1
  90. package/dist/gateway/routes/locks.d.ts.map +1 -1
  91. package/dist/gateway/routes/locks.js +39 -0
  92. package/dist/gateway/routes/locks.js.map +1 -1
  93. package/dist/gateway/routes/logs.d.ts.map +1 -1
  94. package/dist/gateway/routes/logs.js +4 -5
  95. package/dist/gateway/routes/logs.js.map +1 -1
  96. package/dist/gateway/routes/stats.d.ts +4 -0
  97. package/dist/gateway/routes/stats.d.ts.map +1 -0
  98. package/dist/gateway/routes/stats.js +25 -0
  99. package/dist/gateway/routes/stats.js.map +1 -0
  100. package/dist/gateway/views/agent-detail-page.d.ts +14 -0
  101. package/dist/gateway/views/agent-detail-page.d.ts.map +1 -0
  102. package/dist/gateway/views/agent-detail-page.js +416 -0
  103. package/dist/gateway/views/agent-detail-page.js.map +1 -0
  104. package/dist/gateway/views/dashboard-page.d.ts.map +1 -1
  105. package/dist/gateway/views/dashboard-page.js +213 -245
  106. package/dist/gateway/views/dashboard-page.js.map +1 -1
  107. package/dist/gateway/views/instance-detail-page.d.ts +30 -0
  108. package/dist/gateway/views/instance-detail-page.d.ts.map +1 -0
  109. package/dist/gateway/views/instance-detail-page.js +360 -0
  110. package/dist/gateway/views/instance-detail-page.js.map +1 -0
  111. package/dist/gateway/views/layout.d.ts +17 -0
  112. package/dist/gateway/views/layout.d.ts.map +1 -0
  113. package/dist/gateway/views/layout.js +153 -0
  114. package/dist/gateway/views/layout.js.map +1 -0
  115. package/dist/gateway/views/login-page.d.ts.map +1 -1
  116. package/dist/gateway/views/login-page.js +24 -37
  117. package/dist/gateway/views/login-page.js.map +1 -1
  118. package/dist/gateway/views/project-config-page.d.ts +12 -0
  119. package/dist/gateway/views/project-config-page.d.ts.map +1 -0
  120. package/dist/gateway/views/project-config-page.js +199 -0
  121. package/dist/gateway/views/project-config-page.js.map +1 -0
  122. package/dist/hooks/runner.d.ts +12 -0
  123. package/dist/hooks/runner.d.ts.map +1 -0
  124. package/dist/hooks/runner.js +32 -0
  125. package/dist/hooks/runner.js.map +1 -0
  126. package/dist/mcp/server.d.ts +5 -0
  127. package/dist/mcp/server.d.ts.map +1 -0
  128. package/dist/mcp/server.js +336 -0
  129. package/dist/mcp/server.js.map +1 -0
  130. package/dist/scheduler/call-dispatcher.d.ts +2 -2
  131. package/dist/scheduler/call-dispatcher.js +3 -3
  132. package/dist/scheduler/call-dispatcher.js.map +1 -1
  133. package/dist/scheduler/execution.d.ts +5 -2
  134. package/dist/scheduler/execution.d.ts.map +1 -1
  135. package/dist/scheduler/execution.js +75 -4
  136. package/dist/scheduler/execution.js.map +1 -1
  137. package/dist/scheduler/gateway-setup.d.ts +2 -0
  138. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  139. package/dist/scheduler/gateway-setup.js +21 -2
  140. package/dist/scheduler/gateway-setup.js.map +1 -1
  141. package/dist/scheduler/image-builder.js +3 -3
  142. package/dist/scheduler/image-builder.js.map +1 -1
  143. package/dist/scheduler/index.d.ts.map +1 -1
  144. package/dist/scheduler/index.js +90 -3
  145. package/dist/scheduler/index.js.map +1 -1
  146. package/dist/scheduler/shutdown.d.ts +2 -0
  147. package/dist/scheduler/shutdown.d.ts.map +1 -1
  148. package/dist/scheduler/shutdown.js +4 -1
  149. package/dist/scheduler/shutdown.js.map +1 -1
  150. package/dist/scheduler/validation.d.ts.map +1 -1
  151. package/dist/scheduler/validation.js +5 -3
  152. package/dist/scheduler/validation.js.map +1 -1
  153. package/dist/scheduler/watcher.d.ts +1 -1
  154. package/dist/scheduler/watcher.js +1 -1
  155. package/dist/scheduler/webhook-setup.d.ts +2 -0
  156. package/dist/scheduler/webhook-setup.d.ts.map +1 -1
  157. package/dist/scheduler/webhook-setup.js +2 -0
  158. package/dist/scheduler/webhook-setup.js.map +1 -1
  159. package/dist/setup/prompts.d.ts.map +1 -1
  160. package/dist/setup/prompts.js +35 -6
  161. package/dist/setup/prompts.js.map +1 -1
  162. package/dist/setup/scaffold.d.ts +6 -0
  163. package/dist/setup/scaffold.d.ts.map +1 -1
  164. package/dist/setup/scaffold.js +185 -7
  165. package/dist/setup/scaffold.js.map +1 -1
  166. package/dist/shared/config.d.ts +42 -5
  167. package/dist/shared/config.d.ts.map +1 -1
  168. package/dist/shared/config.js +126 -20
  169. package/dist/shared/config.js.map +1 -1
  170. package/dist/shared/credential-refs.d.ts.map +1 -1
  171. package/dist/shared/credential-refs.js +8 -0
  172. package/dist/shared/credential-refs.js.map +1 -1
  173. package/dist/shared/default-feedback-agent.d.ts +10 -0
  174. package/dist/shared/default-feedback-agent.d.ts.map +1 -0
  175. package/dist/shared/default-feedback-agent.js +114 -0
  176. package/dist/shared/default-feedback-agent.js.map +1 -0
  177. package/dist/shared/environment.d.ts +0 -1
  178. package/dist/shared/environment.d.ts.map +1 -1
  179. package/dist/shared/environment.js +19 -3
  180. package/dist/shared/environment.js.map +1 -1
  181. package/dist/shared/frontmatter.d.ts +11 -0
  182. package/dist/shared/frontmatter.d.ts.map +1 -0
  183. package/dist/shared/frontmatter.js +30 -0
  184. package/dist/shared/frontmatter.js.map +1 -0
  185. package/dist/shared/paths.d.ts +1 -0
  186. package/dist/shared/paths.d.ts.map +1 -1
  187. package/dist/shared/paths.js +3 -0
  188. package/dist/shared/paths.js.map +1 -1
  189. package/dist/shared/usage.d.ts.map +1 -1
  190. package/dist/shared/usage.js +52 -7
  191. package/dist/shared/usage.js.map +1 -1
  192. package/dist/stats/index.d.ts +3 -0
  193. package/dist/stats/index.d.ts.map +1 -0
  194. package/dist/stats/index.js +2 -0
  195. package/dist/stats/index.js.map +1 -0
  196. package/dist/stats/store.d.ts +89 -0
  197. package/dist/stats/store.d.ts.map +1 -0
  198. package/dist/stats/store.js +242 -0
  199. package/dist/stats/store.js.map +1 -0
  200. package/dist/tui/App.d.ts +2 -1
  201. package/dist/tui/App.d.ts.map +1 -1
  202. package/dist/tui/App.js +132 -5
  203. package/dist/tui/App.js.map +1 -1
  204. package/dist/tui/render.d.ts +1 -1
  205. package/dist/tui/render.d.ts.map +1 -1
  206. package/dist/tui/render.js +2 -2
  207. package/dist/tui/render.js.map +1 -1
  208. package/dist/tui/status-tracker.d.ts +18 -1
  209. package/dist/tui/status-tracker.d.ts.map +1 -1
  210. package/dist/tui/status-tracker.js +32 -1
  211. package/dist/tui/status-tracker.js.map +1 -1
  212. package/docker/bin/{al-call → al-subagent} +2 -2
  213. package/docker/bin/{al-check → al-subagent-check} +2 -2
  214. package/docker/bin/{al-wait → al-subagent-wait} +2 -2
  215. package/package.json +8 -21
  216. package/LICENSE +0 -21
  217. package/README.md +0 -192
  218. package/dist/gateway/views/logs-page.d.ts +0 -2
  219. package/dist/gateway/views/logs-page.d.ts.map +0 -1
  220. package/dist/gateway/views/logs-page.js +0 -280
  221. package/dist/gateway/views/logs-page.js.map +0 -1
  222. package/dist/preflight/interpolate.d.ts +0 -10
  223. package/dist/preflight/interpolate.d.ts.map +0 -1
  224. package/dist/preflight/interpolate.js +0 -33
  225. package/dist/preflight/interpolate.js.map +0 -1
  226. package/dist/preflight/providers/git-clone.d.ts +0 -3
  227. package/dist/preflight/providers/git-clone.d.ts.map +0 -1
  228. package/dist/preflight/providers/git-clone.js +0 -36
  229. package/dist/preflight/providers/git-clone.js.map +0 -1
  230. package/dist/preflight/providers/http.d.ts +0 -3
  231. package/dist/preflight/providers/http.d.ts.map +0 -1
  232. package/dist/preflight/providers/http.js +0 -36
  233. package/dist/preflight/providers/http.js.map +0 -1
  234. package/dist/preflight/providers/shell.d.ts +0 -3
  235. package/dist/preflight/providers/shell.d.ts.map +0 -1
  236. package/dist/preflight/providers/shell.js +0 -28
  237. package/dist/preflight/providers/shell.js.map +0 -1
  238. package/dist/preflight/registry.d.ts +0 -4
  239. package/dist/preflight/registry.d.ts.map +0 -1
  240. package/dist/preflight/registry.js +0 -20
  241. package/dist/preflight/registry.js.map +0 -1
  242. package/dist/preflight/runner.d.ts +0 -7
  243. package/dist/preflight/runner.d.ts.map +0 -1
  244. package/dist/preflight/runner.js +0 -28
  245. package/dist/preflight/runner.js.map +0 -1
  246. package/dist/preflight/schema.d.ts +0 -21
  247. package/dist/preflight/schema.d.ts.map +0 -1
  248. package/dist/preflight/schema.js +0 -9
  249. package/dist/preflight/schema.js.map +0 -1
@@ -0,0 +1,176 @@
1
+ import { existsSync, readFileSync, statSync } from "fs";
2
+ import { resolve } from "path";
3
+ import { EventEmitter } from "events";
4
+ import { logsDir } from "../shared/paths.js";
5
+ export class FeedbackMonitor extends EventEmitter {
6
+ globalConfig;
7
+ logger;
8
+ statusTracker;
9
+ watchedAgents = new Map();
10
+ intervalId;
11
+ pollInterval = 5000; // 5 seconds
12
+ constructor(globalConfig, logger, statusTracker) {
13
+ super();
14
+ this.globalConfig = globalConfig;
15
+ this.logger = logger;
16
+ this.statusTracker = statusTracker;
17
+ }
18
+ /**
19
+ * Start monitoring all agents' log files for errors
20
+ */
21
+ start(projectPath) {
22
+ if (this.intervalId) {
23
+ this.logger.warn("FeedbackMonitor is already running");
24
+ return;
25
+ }
26
+ this.logger.info("Starting feedback monitor");
27
+ this.intervalId = setInterval(() => {
28
+ this.pollLogFiles(projectPath);
29
+ }, this.pollInterval);
30
+ }
31
+ /**
32
+ * Stop monitoring
33
+ */
34
+ stop() {
35
+ if (this.intervalId) {
36
+ clearInterval(this.intervalId);
37
+ this.intervalId = undefined;
38
+ this.logger.info("Stopped feedback monitor");
39
+ }
40
+ }
41
+ /**
42
+ * Watch a specific agent's logs for errors
43
+ */
44
+ watchAgent(agentName) {
45
+ if (!this.watchedAgents.has(agentName)) {
46
+ this.watchedAgents.set(agentName, { lastPosition: 0, lastSize: 0 });
47
+ this.logger.debug(`Now watching agent: ${agentName}`);
48
+ }
49
+ }
50
+ /**
51
+ * Stop watching a specific agent
52
+ */
53
+ unwatchAgent(agentName) {
54
+ if (this.watchedAgents.delete(agentName)) {
55
+ this.logger.debug(`Stopped watching agent: ${agentName}`);
56
+ }
57
+ }
58
+ /**
59
+ * Check if feedback is enabled for the given agent
60
+ */
61
+ isFeedbackEnabled(agentConfig) {
62
+ // Check global feedback setting
63
+ if (!this.globalConfig.feedback?.enabled) {
64
+ return false;
65
+ }
66
+ // Check per-agent override
67
+ if (agentConfig.feedback?.enabled !== undefined) {
68
+ return agentConfig.feedback.enabled;
69
+ }
70
+ // Default to enabled if global feedback is enabled and no agent override
71
+ return true;
72
+ }
73
+ /**
74
+ * Get the error patterns to search for
75
+ */
76
+ getErrorPatterns() {
77
+ return this.globalConfig.feedback?.errorPatterns || ["error", "fail"];
78
+ }
79
+ /**
80
+ * Get the number of context lines to include
81
+ */
82
+ getContextLines() {
83
+ return this.globalConfig.feedback?.contextLines || 2;
84
+ }
85
+ /**
86
+ * Poll log files for new content and check for errors
87
+ */
88
+ pollLogFiles(projectPath) {
89
+ const today = new Date().toISOString().slice(0, 10);
90
+ const logsDirPath = logsDir(projectPath);
91
+ for (const [agentName, watchState] of this.watchedAgents) {
92
+ const logFile = resolve(logsDirPath, `${agentName}-${today}.log`);
93
+ if (!existsSync(logFile)) {
94
+ continue;
95
+ }
96
+ try {
97
+ const stats = statSync(logFile);
98
+ const currentSize = stats.size;
99
+ // Only process if file has grown
100
+ if (currentSize <= watchState.lastSize) {
101
+ continue;
102
+ }
103
+ // Read new content
104
+ const content = readFileSync(logFile, "utf-8");
105
+ const lines = content.split("\n");
106
+ // Find starting line based on last position
107
+ let startLine = 0;
108
+ if (watchState.lastPosition > 0) {
109
+ // Find the line that contains data after our last position
110
+ let bytesRead = 0;
111
+ for (let i = 0; i < lines.length; i++) {
112
+ bytesRead += Buffer.byteLength(lines[i] + "\n", "utf-8");
113
+ if (bytesRead > watchState.lastPosition) {
114
+ startLine = i;
115
+ break;
116
+ }
117
+ }
118
+ }
119
+ // Process new lines for errors
120
+ this.processLogLines(agentName, lines, startLine, projectPath);
121
+ // Update tracking state
122
+ watchState.lastPosition = currentSize;
123
+ watchState.lastSize = currentSize;
124
+ }
125
+ catch (err) {
126
+ this.logger.error({ err, agentName, logFile }, "Error reading log file for feedback monitoring");
127
+ }
128
+ }
129
+ }
130
+ /**
131
+ * Process log lines looking for error patterns
132
+ */
133
+ processLogLines(agentName, lines, startLine, projectPath) {
134
+ const errorPatterns = this.getErrorPatterns();
135
+ const contextLines = this.getContextLines();
136
+ for (let i = startLine; i < lines.length; i++) {
137
+ const line = lines[i];
138
+ if (!line.trim())
139
+ continue;
140
+ // Check if line matches any error pattern
141
+ const matchesError = errorPatterns.some(pattern => {
142
+ try {
143
+ const regex = new RegExp(pattern, "i");
144
+ return regex.test(line);
145
+ }
146
+ catch (err) {
147
+ this.logger.warn({ pattern, err }, "Invalid error pattern regex");
148
+ return line.toLowerCase().includes(pattern.toLowerCase());
149
+ }
150
+ });
151
+ if (matchesError) {
152
+ // Extract context lines around the error
153
+ const startContext = Math.max(0, i - contextLines);
154
+ const endContext = Math.min(lines.length - 1, i + contextLines);
155
+ const context = lines.slice(startContext, endContext + 1);
156
+ // Check if feedback is enabled for this agent
157
+ try {
158
+ // This is a simplified check - in a real implementation we'd need
159
+ // to load the agent config to check per-agent settings
160
+ this.logger.info({ agentName, error: line.substring(0, 200) }, "Error detected, triggering feedback");
161
+ const event = {
162
+ agentName,
163
+ error: line,
164
+ context,
165
+ timestamp: new Date(),
166
+ };
167
+ this.emit("feedback-trigger", event);
168
+ }
169
+ catch (err) {
170
+ this.logger.error({ err, agentName }, "Error checking feedback configuration");
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ //# sourceMappingURL=feedback-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-monitor.js","sourceRoot":"","sources":["../../src/agents/feedback-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AgentConfig } from "../shared/config.js";
2
+ import type { Logger } from "../shared/logger.js";
3
+ import type { StatusTracker } from "../tui/status-tracker.js";
4
+ import type { FeedbackTriggerEvent } from "./feedback-monitor.js";
5
+ import { AgentRunner, type RunOutcome } from "./runner.js";
6
+ export interface FeedbackContext {
7
+ originalAgentName: string;
8
+ error: string;
9
+ logContext: string[];
10
+ originalSkillPath: string;
11
+ }
12
+ export declare class FeedbackRunner extends AgentRunner {
13
+ private feedbackLogger;
14
+ constructor(agentConfig: AgentConfig, logger: Logger, projectPath: string, statusTracker?: StatusTracker);
15
+ /**
16
+ * Run the feedback agent with error context
17
+ */
18
+ runWithFeedback(feedbackEvent: FeedbackTriggerEvent, projectPath: string): Promise<RunOutcome>;
19
+ /**
20
+ * Build the prompt for the feedback agent
21
+ */
22
+ private buildFeedbackPrompt;
23
+ /**
24
+ * Copy the updated SKILL.md back to the original agent directory
25
+ */
26
+ private copyBackUpdatedSkill;
27
+ }
28
+ //# sourceMappingURL=feedback-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-runner.d.ts","sourceRoot":"","sources":["../../src/agents/feedback-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAK3D,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,cAAc,CAAS;gBAEnB,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;IAKxG;;OAEG;IACG,eAAe,CAAC,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAqCpG;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;OAEG;YACW,oBAAoB;CAiDnC"}
@@ -0,0 +1,138 @@
1
+ import { readFileSync, writeFileSync, existsSync } from "fs";
2
+ import { resolve } from "path";
3
+ import { AgentRunner } from "./runner.js";
4
+ import { agentDir } from "../shared/paths.js";
5
+ import { parseFrontmatter } from "../shared/frontmatter.js";
6
+ export class FeedbackRunner extends AgentRunner {
7
+ feedbackLogger;
8
+ constructor(agentConfig, logger, projectPath, statusTracker) {
9
+ super(agentConfig, logger, projectPath, statusTracker);
10
+ this.feedbackLogger = logger;
11
+ }
12
+ /**
13
+ * Run the feedback agent with error context
14
+ */
15
+ async runWithFeedback(feedbackEvent, projectPath) {
16
+ const originalAgentDir = agentDir(projectPath, feedbackEvent.agentName);
17
+ const originalSkillPath = resolve(originalAgentDir, "SKILL.md");
18
+ if (!existsSync(originalSkillPath)) {
19
+ this.feedbackLogger.error({ agentName: feedbackEvent.agentName }, "Original agent SKILL.md not found");
20
+ return { result: "error", triggers: [] };
21
+ }
22
+ // Read the original SKILL.md content
23
+ const originalSkillContent = readFileSync(originalSkillPath, "utf-8");
24
+ // Create feedback context
25
+ const feedbackContext = {
26
+ originalAgentName: feedbackEvent.agentName,
27
+ error: feedbackEvent.error,
28
+ logContext: feedbackEvent.context,
29
+ originalSkillPath,
30
+ };
31
+ // Build the feedback prompt
32
+ const feedbackPrompt = this.buildFeedbackPrompt(feedbackContext, originalSkillContent);
33
+ // Run the feedback agent
34
+ const outcome = await this.run(feedbackPrompt, {
35
+ type: 'agent',
36
+ source: `feedback:${feedbackEvent.agentName}`,
37
+ });
38
+ // If the run was successful, check for updated SKILL.md and copy it back
39
+ if (outcome.result === "completed") {
40
+ await this.copyBackUpdatedSkill(feedbackContext, projectPath);
41
+ }
42
+ return outcome;
43
+ }
44
+ /**
45
+ * Build the prompt for the feedback agent
46
+ */
47
+ buildFeedbackPrompt(context, originalSkillContent) {
48
+ return `# Agent Error Feedback Task
49
+
50
+ You are a feedback agent designed to fix SKILL.md files for other agents that encountered errors.
51
+
52
+ ## Your Mission
53
+
54
+ **CRITICAL CONSTRAINTS:**
55
+ - DO NOT change the original intent or purpose of the agent
56
+ - ONLY fix syntax errors, YAML formatting issues, and obvious typos
57
+ - PRESERVE all existing functionality and behavior
58
+ - Focus on making the SKILL.md valid and properly formatted
59
+
60
+ ## Error Context
61
+
62
+ **Agent:** ${context.originalAgentName}
63
+ **Error:** ${context.error}
64
+
65
+ **Log Context:**
66
+ \`\`\`
67
+ ${context.logContext.join("\n")}
68
+ \`\`\`
69
+
70
+ ## Original SKILL.md
71
+
72
+ \`\`\`markdown
73
+ ${originalSkillContent}
74
+ \`\`\`
75
+
76
+ ## Your Task
77
+
78
+ 1. Analyze the error context to understand what went wrong
79
+ 2. Examine the original SKILL.md for syntax/formatting issues that might have caused the error
80
+ 3. Create a corrected version that:
81
+ - Maintains identical functionality and behavior
82
+ - Fixes any syntax errors, YAML formatting issues, or typos
83
+ - Preserves all existing agent logic and purpose
84
+
85
+ ## Output
86
+
87
+ If you need to make changes, write the corrected SKILL.md to \`/tmp/fixed-skill.md\`.
88
+
89
+ If no changes are needed, create an empty file at \`/tmp/no-changes\`.
90
+
91
+ **Remember:** Be extremely conservative. When in doubt, make no changes. Only fix clear technical issues, never alter the agent's intended behavior or functionality.`;
92
+ }
93
+ /**
94
+ * Copy the updated SKILL.md back to the original agent directory
95
+ */
96
+ async copyBackUpdatedSkill(context, projectPath) {
97
+ const fixedSkillPath = "/tmp/fixed-skill.md";
98
+ const noChangesPath = "/tmp/no-changes";
99
+ if (existsSync(noChangesPath)) {
100
+ this.feedbackLogger.info({ agentName: context.originalAgentName }, "Feedback agent determined no changes needed");
101
+ return;
102
+ }
103
+ if (!existsSync(fixedSkillPath)) {
104
+ this.feedbackLogger.warn({ agentName: context.originalAgentName }, "Feedback agent did not produce fixed SKILL.md");
105
+ return;
106
+ }
107
+ try {
108
+ // Read and validate the new SKILL.md
109
+ const newSkillContent = readFileSync(fixedSkillPath, "utf-8");
110
+ // Basic validation - ensure it has valid frontmatter
111
+ const { data } = parseFrontmatter(newSkillContent);
112
+ // Additional validation could go here
113
+ if (!data || typeof data !== 'object') {
114
+ throw new Error("Invalid YAML frontmatter in corrected SKILL.md");
115
+ }
116
+ // Create backup of original
117
+ const originalSkillPath = context.originalSkillPath;
118
+ const backupPath = `${originalSkillPath}.backup-${Date.now()}`;
119
+ const originalContent = readFileSync(originalSkillPath, "utf-8");
120
+ writeFileSync(backupPath, originalContent);
121
+ // Write the corrected SKILL.md
122
+ writeFileSync(originalSkillPath, newSkillContent);
123
+ this.feedbackLogger.info({
124
+ agentName: context.originalAgentName,
125
+ backupPath,
126
+ originalPath: originalSkillPath,
127
+ }, "Updated agent SKILL.md with feedback corrections");
128
+ }
129
+ catch (err) {
130
+ this.feedbackLogger.error({
131
+ err,
132
+ agentName: context.originalAgentName,
133
+ fixedSkillPath,
134
+ }, "Error validating or copying corrected SKILL.md");
135
+ }
136
+ }
137
+ }
138
+ //# sourceMappingURL=feedback-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-runner.js","sourceRoot":"","sources":["../../src/agents/feedback-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAK/B,OAAO,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAU5D,MAAM,OAAO,cAAe,SAAQ,WAAW;IACrC,cAAc,CAAS;IAE/B,YAAY,WAAwB,EAAE,MAAc,EAAE,WAAmB,EAAE,aAA6B;QACtG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,aAAmC,EAAE,WAAmB;QAC5E,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAEhE,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,EAAE,mCAAmC,CAAC,CAAC;YACvG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC3C,CAAC;QAED,qCAAqC;QACrC,MAAM,oBAAoB,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAEtE,0BAA0B;QAC1B,MAAM,eAAe,GAAoB;YACvC,iBAAiB,EAAE,aAAa,CAAC,SAAS;YAC1C,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,UAAU,EAAE,aAAa,CAAC,OAAO;YACjC,iBAAiB;SAClB,CAAC;QAEF,4BAA4B;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;QAEvF,yBAAyB;QACzB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;YAC7C,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,YAAY,aAAa,CAAC,SAAS,EAAE;SAC9C,CAAC,CAAC;QAEH,yEAAyE;QACzE,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAwB,EAAE,oBAA4B;QAChF,OAAO;;;;;;;;;;;;;;aAcE,OAAO,CAAC,iBAAiB;aACzB,OAAO,CAAC,KAAK;;;;EAIxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;EAM7B,oBAAoB;;;;;;;;;;;;;;;;;;sKAkBgJ,CAAC;IACrK,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,OAAwB,EAAE,WAAmB;QAC9E,MAAM,cAAc,GAAG,qBAAqB,CAAC;QAC7C,MAAM,aAAa,GAAG,iBAAiB,CAAC;QAExC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,iBAAiB,EAAE,EAAE,6CAA6C,CAAC,CAAC;YAClH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,iBAAiB,EAAE,EAAE,+CAA+C,CAAC,CAAC;YACpH,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,qCAAqC;YACrC,MAAM,eAAe,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAE9D,qDAAqD;YACrD,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;YAEnD,sCAAsC;YACtC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YAED,4BAA4B;YAC5B,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YACpD,MAAM,UAAU,GAAG,GAAG,iBAAiB,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC/D,MAAM,eAAe,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YACjE,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;YAE3C,+BAA+B;YAC/B,aAAa,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;YAElD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBACvB,SAAS,EAAE,OAAO,CAAC,iBAAiB;gBACpC,UAAU;gBACV,YAAY,EAAE,iBAAiB;aAChC,EAAE,kDAAkD,CAAC,CAAC;QAEzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBACxB,GAAG;gBACH,SAAS,EAAE,OAAO,CAAC,iBAAiB;gBACpC,cAAc;aACf,EAAE,gDAAgD,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { ModelConfig } from "../shared/config.js";
2
+ export declare class ModelCircuitBreaker {
3
+ private cooldownMs;
4
+ private circuits;
5
+ constructor(cooldownMs?: number);
6
+ isAvailable(provider: string, model: string): boolean;
7
+ recordFailure(provider: string, model: string): void;
8
+ recordSuccess(provider: string, model: string): void;
9
+ }
10
+ /** Shared circuit breaker instance for the scheduler process. */
11
+ export declare const circuitBreaker: ModelCircuitBreaker;
12
+ /**
13
+ * Filter models to those not currently tripped. Falls back to the full list
14
+ * if every model is tripped (circuits may have expired by the time we try).
15
+ */
16
+ export declare function selectAvailableModels(models: ModelConfig[], breaker: ModelCircuitBreaker): ModelConfig[];
17
+ export declare function isRateLimitError(msg: string): boolean;
18
+ //# sourceMappingURL=model-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-fallback.d.ts","sourceRoot":"","sources":["../../src/agents/model-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAAa,mBAAmB;IAElB,OAAO,CAAC,UAAU;IAD9B,OAAO,CAAC,QAAQ,CAA8C;gBAC1C,UAAU,SAAS;IAEvC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAUrD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAGrD;AAED,iEAAiE;AACjE,eAAO,MAAM,cAAc,qBAA4B,CAAC;AAExD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,mBAAmB,GAC3B,WAAW,EAAE,CAGf;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOrD"}
@@ -0,0 +1,40 @@
1
+ export class ModelCircuitBreaker {
2
+ cooldownMs;
3
+ circuits = new Map();
4
+ constructor(cooldownMs = 60_000) {
5
+ this.cooldownMs = cooldownMs;
6
+ }
7
+ isAvailable(provider, model) {
8
+ const state = this.circuits.get(`${provider}:${model}`);
9
+ if (!state)
10
+ return true;
11
+ if (Date.now() - state.lastFailure > this.cooldownMs) {
12
+ this.circuits.delete(`${provider}:${model}`);
13
+ return true;
14
+ }
15
+ return false;
16
+ }
17
+ recordFailure(provider, model) {
18
+ this.circuits.set(`${provider}:${model}`, { lastFailure: Date.now() });
19
+ }
20
+ recordSuccess(provider, model) {
21
+ this.circuits.delete(`${provider}:${model}`);
22
+ }
23
+ }
24
+ /** Shared circuit breaker instance for the scheduler process. */
25
+ export const circuitBreaker = new ModelCircuitBreaker();
26
+ /**
27
+ * Filter models to those not currently tripped. Falls back to the full list
28
+ * if every model is tripped (circuits may have expired by the time we try).
29
+ */
30
+ export function selectAvailableModels(models, breaker) {
31
+ const available = models.filter((m) => breaker.isAvailable(m.provider, m.model));
32
+ return available.length > 0 ? available : models;
33
+ }
34
+ export function isRateLimitError(msg) {
35
+ return (msg.includes("rate_limit") ||
36
+ msg.includes("429") ||
37
+ msg.includes("529") ||
38
+ msg.includes("overloaded"));
39
+ }
40
+ //# sourceMappingURL=model-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-fallback.js","sourceRoot":"","sources":["../../src/agents/model-fallback.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IAEV;IADZ,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC9D,YAAoB,aAAa,MAAM;QAAnB,eAAU,GAAV,UAAU,CAAS;IAAG,CAAC;IAE3C,WAAW,CAAC,QAAgB,EAAE,KAAa;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,KAAa;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,KAAa;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAqB,EACrB,OAA4B;IAE5B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC3B,CAAC;AACJ,CAAC"}
@@ -2,10 +2,17 @@ import type { AgentConfig } from "../shared/config.js";
2
2
  import type { WebhookContext } from "../webhooks/types.js";
3
3
  export interface PromptSkills {
4
4
  locking?: boolean;
5
- calling?: boolean;
5
+ subagents?: boolean;
6
+ availableAgents?: Array<{
7
+ name: string;
8
+ description: string;
9
+ }>;
6
10
  }
7
11
  export declare function buildLockSkill(): string;
8
- export declare function buildCallSkill(): string;
12
+ export declare function buildSubagentSkill(availableAgents?: Array<{
13
+ name: string;
14
+ description: string;
15
+ }>): string;
9
16
  export declare function buildCredentialContext(credentials: string[]): string;
10
17
  /**
11
18
  * Build the static portion of the prompt that is identical across all trigger types.
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agents/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,IAAI,MAAM,CA+CvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAgDvC;AAMD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAkCpE;AAyBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAM3F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAGlE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAEzF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE/H;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAEnH"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/agents/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAiDvC;AAED,wBAAgB,kBAAkB,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CA4DzG;AAMD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAkCpE;AAyBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAM3F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAGlE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAEzF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE/H;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAEnH"}
@@ -8,21 +8,23 @@ export function buildLockSkill() {
8
8
  "Use locks to coordinate with other agent instances and avoid duplicate work.",
9
9
  "You may hold **at most one lock at a time**. Release your current lock before acquiring another.",
10
10
  "",
11
+ "**Important:** Resource keys must be valid URIs with proper schemes (e.g., github://, file://, https://).",
12
+ "",
11
13
  "### Commands",
12
14
  "",
13
15
  "**`rlock <resourceKey>`** — Acquire an exclusive lock before working on a shared resource.",
14
16
  "```",
15
- 'rlock "github issue acme/app#42"',
17
+ 'rlock "github://acme/app/issues/42"',
16
18
  "```",
17
19
  "",
18
20
  "**`runlock <resourceKey>`** — Release a lock when done with the resource.",
19
21
  "```",
20
- 'runlock "github issue acme/app#42"',
22
+ 'runlock "github://acme/app/issues/42"',
21
23
  "```",
22
24
  "",
23
25
  "**`rlock-heartbeat <resourceKey>`** — Extend the TTL on a lock you hold. Use during long-running work.",
24
26
  "```",
25
- 'rlock-heartbeat "github issue acme/app#42"',
27
+ 'rlock-heartbeat "github://acme/app/issues/42"',
26
28
  "```",
27
29
  "",
28
30
  "### Responses",
@@ -43,58 +45,28 @@ export function buildLockSkill() {
43
45
  '- If `rlock` returns `{"ok":false,...}` for ANY reason, skip that resource — do not wait, retry, or proceed without the lock',
44
46
  "- Use `rlock-heartbeat` during long operations to keep the lock alive",
45
47
  "- Locks expire automatically after 30 minutes if not refreshed",
46
- '- Use descriptive keys: `"github issue acme/app#42"`, `"deploy api-prod"`',
48
+ '- Resource keys must be valid URIs: `"github://acme/app/issues/42"`, `"file:///deployments/api-prod"`',
47
49
  "</skill-lock>",
48
50
  ];
49
51
  return lines.join("\n");
50
52
  }
51
- export function buildCallSkill() {
53
+ export function buildSubagentSkill(availableAgents) {
52
54
  const lines = [
53
- "<skill-call>",
54
- "## Skill: Agent-to-Agent Calls",
55
+ "<skill-subagent>",
56
+ "## Skill: Subagents",
55
57
  "",
56
58
  "Call other agents and retrieve their results. Calls are **non-blocking** — fire a call, continue working, then check or wait for results.",
57
59
  "",
58
- "### Commands",
59
- "",
60
- '**`al-call <agent>`** — Call another agent. Pass the context via stdin. Returns a call ID.',
61
- "```",
62
- 'CALL_ID=$(echo "find competitors for Acme" | al-call researcher | jq -r .callId)',
63
- "```",
64
- "",
65
- "**`al-check <callId>`** — Check the status of a call. Never blocks.",
66
- "```",
67
- 'al-check "$CALL_ID"',
68
- "```",
69
- '- Running: `{"status":"running"}`',
70
- '- Completed: `{"status":"completed","returnValue":"..."}`',
71
- '- Error: `{"status":"error","errorMessage":"..."}`',
72
- "",
73
- "**`al-wait <callId> [callId...] [--timeout N]`** — Wait for one or more calls to complete. Default timeout: 900s.",
74
- "```",
75
- 'RESULTS=$(al-wait "$CALL_ID1" "$CALL_ID2" --timeout 600)',
76
- "```",
77
- "Returns a JSON object keyed by call ID with each call's final status.",
78
- "",
79
- "### Returning Values",
80
- "",
81
- "When you are called by another agent, return your result with the `al-return` command:",
82
- "```",
83
- 'al-return "Your result text here"',
84
- "```",
85
- "For multiline results, pipe via stdin:",
86
- "```",
87
- 'echo "Line 1\\nLine 2" | al-return',
88
- "```",
89
- "",
90
- "### Guidelines",
91
- "- Calls are non-blocking — fire multiple calls then wait for all at once",
92
- "- Use `al-wait` to wait for multiple calls efficiently",
93
- "- Use `al-check` for polling when you want to do work between checks",
94
- "- Called agents cannot call back to the calling agent (no cycles)",
95
- "- There is a depth limit on nested calls to prevent infinite chains",
96
- "</skill-call>",
97
60
  ];
61
+ if (availableAgents && availableAgents.length > 0) {
62
+ lines.push("### Available Agents");
63
+ lines.push("");
64
+ for (const agent of availableAgents) {
65
+ lines.push(`- **${agent.name}**: ${agent.description}`);
66
+ }
67
+ lines.push("");
68
+ }
69
+ lines.push("### Commands", "", '**`al-subagent <agent>`** — Call another agent. Pass the context via stdin. Returns a call ID.', "```", 'CALL_ID=$(echo "find competitors for Acme" | al-subagent researcher | jq -r .callId)', "```", "", "**`al-subagent-check <callId>`** — Check the status of a call. Never blocks.", "```", 'al-subagent-check "$CALL_ID"', "```", '- Running: `{"status":"running"}`', '- Completed: `{"status":"completed","returnValue":"..."}`', '- Error: `{"status":"error","errorMessage":"..."}`', "", "**`al-subagent-wait <callId> [callId...] [--timeout N]`** — Wait for one or more calls to complete. Default timeout: 900s.", "```", 'RESULTS=$(al-subagent-wait "$CALL_ID1" "$CALL_ID2" --timeout 600)', "```", "Returns a JSON object keyed by call ID with each call's final status.", "", "### Returning Values", "", "When you are called by another agent, return your result with the `al-return` command:", "```", 'al-return "Your result text here"', "```", "For multiline results, pipe via stdin:", "```", 'echo "Line 1\\nLine 2" | al-return', "```", "", "### Guidelines", "- Calls are non-blocking — fire multiple calls then wait for all at once", "- Use `al-subagent-wait` to wait for multiple calls efficiently", "- Use `al-subagent-check` for polling when you want to do work between checks", "- Called agents cannot call back to the calling agent (no cycles)", "- There is a depth limit on nested calls to prevent infinite chains", "</skill-subagent>");
98
70
  return lines.join("\n");
99
71
  }
100
72
  function buildConfigBlock(agentConfig) {
@@ -137,7 +109,7 @@ function buildEnvironmentContext() {
137
109
  "<environment>",
138
110
  "**Filesystem:** The root filesystem is read-only. `/tmp` is the only writable directory.",
139
111
  "Use `/tmp` for cloning repos, writing scratch files, and any other disk I/O.",
140
- "Your working directory is `/app/static` which contains your agent files (ACTIONS.md, agent-config.json).",
112
+ "Your working directory is `/app/static` which contains your agent files (SKILL.md, agent-config.json).",
141
113
  "All write operations (git clone, file creation, etc.) must target `/tmp`.",
142
114
  "</environment>",
143
115
  ].join("\n");
@@ -149,8 +121,8 @@ function buildSkillsBlock(skills) {
149
121
  if (skills.locking) {
150
122
  blocks.push(buildLockSkill());
151
123
  }
152
- if (skills.calling) {
153
- blocks.push(buildCallSkill());
124
+ if (skills.subagents) {
125
+ blocks.push(buildSubagentSkill(skills.availableAgents));
154
126
  }
155
127
  return blocks.length > 0 ? "\n\n" + blocks.join("\n\n") : "";
156
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agents/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agents/prompt.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ export interface RunOutcome {
14
14
  exitCode?: number;
15
15
  exitReason?: string;
16
16
  usage?: TokenUsage;
17
+ preHookMs?: number;
18
+ postHookMs?: number;
17
19
  }
18
20
  export declare class AgentRunner {
19
21
  private running;
@@ -27,6 +29,10 @@ export declare class AgentRunner {
27
29
  constructor(agentConfig: AgentConfig, logger: Logger, projectPath: string, statusTracker?: StatusTracker);
28
30
  get isRunning(): boolean;
29
31
  abort(): void;
32
+ /**
33
+ * Trigger feedback monitoring if enabled (to be overridden by scheduler)
34
+ */
35
+ private triggerFeedbackIfEnabled;
30
36
  run(prompt: string, triggerInfo?: {
31
37
  type: 'schedule' | 'webhook' | 'agent';
32
38
  source?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAO9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAGD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;IAUxG,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,KAAK,IAAI,IAAI;IAKP,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAwC3G,YAAY;CAiT3B"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAO9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKrD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;IAUxG,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAM1B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YA+C3G,YAAY;CA2T3B"}