@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.
- package/agent-docs/AGENTS.md +123 -207
- package/dist/agents/container-entry.d.ts +1 -3
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +208 -154
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +19 -8
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/context-injection.d.ts +7 -0
- package/dist/agents/context-injection.d.ts.map +1 -0
- package/dist/agents/context-injection.js +27 -0
- package/dist/agents/context-injection.js.map +1 -0
- package/dist/agents/execution-engine.d.ts.map +1 -1
- package/dist/agents/execution-engine.js +99 -109
- package/dist/agents/execution-engine.js.map +1 -1
- package/dist/agents/feedback-monitor.d.ts +56 -0
- package/dist/agents/feedback-monitor.d.ts.map +1 -0
- package/dist/agents/feedback-monitor.js +176 -0
- package/dist/agents/feedback-monitor.js.map +1 -0
- package/dist/agents/feedback-runner.d.ts +28 -0
- package/dist/agents/feedback-runner.d.ts.map +1 -0
- package/dist/agents/feedback-runner.js +138 -0
- package/dist/agents/feedback-runner.js.map +1 -0
- package/dist/agents/model-fallback.d.ts +18 -0
- package/dist/agents/model-fallback.d.ts.map +1 -0
- package/dist/agents/model-fallback.js +40 -0
- package/dist/agents/model-fallback.js.map +1 -0
- package/dist/agents/prompt.d.ts +9 -2
- package/dist/agents/prompt.d.ts.map +1 -1
- package/dist/agents/prompt.js +21 -49
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/runner.d.ts +6 -0
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +153 -124
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/session-factory.d.ts +13 -0
- package/dist/agents/session-factory.d.ts.map +1 -0
- package/dist/agents/session-factory.js +27 -0
- package/dist/agents/session-factory.js.map +1 -0
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +89 -23
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +26 -43
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/claude.d.ts +4 -0
- package/dist/cli/commands/claude.d.ts.map +1 -0
- package/dist/cli/commands/claude.js +8 -0
- package/dist/cli/commands/claude.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +24 -6
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +8 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +31 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +15 -6
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/run.js +1 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.js +3 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +9 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +149 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +3 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +50 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +7 -1
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/lock-store.d.ts +10 -0
- package/dist/gateway/lock-store.d.ts.map +1 -1
- package/dist/gateway/lock-store.js +38 -0
- package/dist/gateway/lock-store.js.map +1 -1
- package/dist/gateway/routes/control.d.ts +2 -0
- package/dist/gateway/routes/control.d.ts.map +1 -1
- package/dist/gateway/routes/control.js +56 -0
- package/dist/gateway/routes/control.js.map +1 -1
- package/dist/gateway/routes/dashboard.d.ts +2 -1
- package/dist/gateway/routes/dashboard.d.ts.map +1 -1
- package/dist/gateway/routes/dashboard.js +112 -6
- package/dist/gateway/routes/dashboard.js.map +1 -1
- package/dist/gateway/routes/locks.d.ts.map +1 -1
- package/dist/gateway/routes/locks.js +39 -0
- package/dist/gateway/routes/locks.js.map +1 -1
- package/dist/gateway/routes/logs.d.ts.map +1 -1
- package/dist/gateway/routes/logs.js +4 -5
- package/dist/gateway/routes/logs.js.map +1 -1
- package/dist/gateway/routes/stats.d.ts +4 -0
- package/dist/gateway/routes/stats.d.ts.map +1 -0
- package/dist/gateway/routes/stats.js +25 -0
- package/dist/gateway/routes/stats.js.map +1 -0
- package/dist/gateway/views/agent-detail-page.d.ts +14 -0
- package/dist/gateway/views/agent-detail-page.d.ts.map +1 -0
- package/dist/gateway/views/agent-detail-page.js +416 -0
- package/dist/gateway/views/agent-detail-page.js.map +1 -0
- package/dist/gateway/views/dashboard-page.d.ts.map +1 -1
- package/dist/gateway/views/dashboard-page.js +213 -245
- package/dist/gateway/views/dashboard-page.js.map +1 -1
- package/dist/gateway/views/instance-detail-page.d.ts +30 -0
- package/dist/gateway/views/instance-detail-page.d.ts.map +1 -0
- package/dist/gateway/views/instance-detail-page.js +360 -0
- package/dist/gateway/views/instance-detail-page.js.map +1 -0
- package/dist/gateway/views/layout.d.ts +17 -0
- package/dist/gateway/views/layout.d.ts.map +1 -0
- package/dist/gateway/views/layout.js +153 -0
- package/dist/gateway/views/layout.js.map +1 -0
- package/dist/gateway/views/login-page.d.ts.map +1 -1
- package/dist/gateway/views/login-page.js +24 -37
- package/dist/gateway/views/login-page.js.map +1 -1
- package/dist/gateway/views/project-config-page.d.ts +12 -0
- package/dist/gateway/views/project-config-page.d.ts.map +1 -0
- package/dist/gateway/views/project-config-page.js +199 -0
- package/dist/gateway/views/project-config-page.js.map +1 -0
- package/dist/hooks/runner.d.ts +12 -0
- package/dist/hooks/runner.d.ts.map +1 -0
- package/dist/hooks/runner.js +32 -0
- package/dist/hooks/runner.js.map +1 -0
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +336 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/scheduler/call-dispatcher.d.ts +2 -2
- package/dist/scheduler/call-dispatcher.js +3 -3
- package/dist/scheduler/call-dispatcher.js.map +1 -1
- package/dist/scheduler/execution.d.ts +5 -2
- package/dist/scheduler/execution.d.ts.map +1 -1
- package/dist/scheduler/execution.js +75 -4
- package/dist/scheduler/execution.js.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +2 -0
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js +21 -2
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/image-builder.js +3 -3
- package/dist/scheduler/image-builder.js.map +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +90 -3
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/shutdown.d.ts +2 -0
- package/dist/scheduler/shutdown.d.ts.map +1 -1
- package/dist/scheduler/shutdown.js +4 -1
- package/dist/scheduler/shutdown.js.map +1 -1
- package/dist/scheduler/validation.d.ts.map +1 -1
- package/dist/scheduler/validation.js +5 -3
- package/dist/scheduler/validation.js.map +1 -1
- package/dist/scheduler/watcher.d.ts +1 -1
- package/dist/scheduler/watcher.js +1 -1
- package/dist/scheduler/webhook-setup.d.ts +2 -0
- package/dist/scheduler/webhook-setup.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.js +2 -0
- package/dist/scheduler/webhook-setup.js.map +1 -1
- package/dist/setup/prompts.d.ts.map +1 -1
- package/dist/setup/prompts.js +35 -6
- package/dist/setup/prompts.js.map +1 -1
- package/dist/setup/scaffold.d.ts +6 -0
- package/dist/setup/scaffold.d.ts.map +1 -1
- package/dist/setup/scaffold.js +185 -7
- package/dist/setup/scaffold.js.map +1 -1
- package/dist/shared/config.d.ts +42 -5
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +126 -20
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/credential-refs.d.ts.map +1 -1
- package/dist/shared/credential-refs.js +8 -0
- package/dist/shared/credential-refs.js.map +1 -1
- package/dist/shared/default-feedback-agent.d.ts +10 -0
- package/dist/shared/default-feedback-agent.d.ts.map +1 -0
- package/dist/shared/default-feedback-agent.js +114 -0
- package/dist/shared/default-feedback-agent.js.map +1 -0
- package/dist/shared/environment.d.ts +0 -1
- package/dist/shared/environment.d.ts.map +1 -1
- package/dist/shared/environment.js +19 -3
- package/dist/shared/environment.js.map +1 -1
- package/dist/shared/frontmatter.d.ts +11 -0
- package/dist/shared/frontmatter.d.ts.map +1 -0
- package/dist/shared/frontmatter.js +30 -0
- package/dist/shared/frontmatter.js.map +1 -0
- package/dist/shared/paths.d.ts +1 -0
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +3 -0
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/usage.d.ts.map +1 -1
- package/dist/shared/usage.js +52 -7
- package/dist/shared/usage.js.map +1 -1
- package/dist/stats/index.d.ts +3 -0
- package/dist/stats/index.d.ts.map +1 -0
- package/dist/stats/index.js +2 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/store.d.ts +89 -0
- package/dist/stats/store.d.ts.map +1 -0
- package/dist/stats/store.js +242 -0
- package/dist/stats/store.js.map +1 -0
- package/dist/tui/App.d.ts +2 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +132 -5
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/render.d.ts +1 -1
- package/dist/tui/render.d.ts.map +1 -1
- package/dist/tui/render.js +2 -2
- package/dist/tui/render.js.map +1 -1
- package/dist/tui/status-tracker.d.ts +18 -1
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +32 -1
- package/dist/tui/status-tracker.js.map +1 -1
- package/docker/bin/{al-call → al-subagent} +2 -2
- package/docker/bin/{al-check → al-subagent-check} +2 -2
- package/docker/bin/{al-wait → al-subagent-wait} +2 -2
- package/package.json +8 -21
- package/LICENSE +0 -21
- package/README.md +0 -192
- package/dist/gateway/views/logs-page.d.ts +0 -2
- package/dist/gateway/views/logs-page.d.ts.map +0 -1
- package/dist/gateway/views/logs-page.js +0 -280
- package/dist/gateway/views/logs-page.js.map +0 -1
- package/dist/preflight/interpolate.d.ts +0 -10
- package/dist/preflight/interpolate.d.ts.map +0 -1
- package/dist/preflight/interpolate.js +0 -33
- package/dist/preflight/interpolate.js.map +0 -1
- package/dist/preflight/providers/git-clone.d.ts +0 -3
- package/dist/preflight/providers/git-clone.d.ts.map +0 -1
- package/dist/preflight/providers/git-clone.js +0 -36
- package/dist/preflight/providers/git-clone.js.map +0 -1
- package/dist/preflight/providers/http.d.ts +0 -3
- package/dist/preflight/providers/http.d.ts.map +0 -1
- package/dist/preflight/providers/http.js +0 -36
- package/dist/preflight/providers/http.js.map +0 -1
- package/dist/preflight/providers/shell.d.ts +0 -3
- package/dist/preflight/providers/shell.d.ts.map +0 -1
- package/dist/preflight/providers/shell.js +0 -28
- package/dist/preflight/providers/shell.js.map +0 -1
- package/dist/preflight/registry.d.ts +0 -4
- package/dist/preflight/registry.d.ts.map +0 -1
- package/dist/preflight/registry.js +0 -20
- package/dist/preflight/registry.js.map +0 -1
- package/dist/preflight/runner.d.ts +0 -7
- package/dist/preflight/runner.d.ts.map +0 -1
- package/dist/preflight/runner.js +0 -28
- package/dist/preflight/runner.js.map +0 -1
- package/dist/preflight/schema.d.ts +0 -21
- package/dist/preflight/schema.d.ts.map +0 -1
- package/dist/preflight/schema.js +0 -9
- 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"}
|
package/dist/agents/prompt.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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,
|
|
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"}
|
package/dist/agents/prompt.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
-
'-
|
|
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
|
|
53
|
+
export function buildSubagentSkill(availableAgents) {
|
|
52
54
|
const lines = [
|
|
53
|
-
"<skill-
|
|
54
|
-
"## Skill:
|
|
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 (
|
|
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.
|
|
153
|
-
blocks.push(
|
|
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":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/agents/prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/runner.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|