Update working comment on error or non responsive agent
This commit is contained in:
@@ -23,6 +23,7 @@ import {
|
|||||||
setupGitHubInstallationToken,
|
setupGitHubInstallationToken,
|
||||||
} from "./utils/github.ts";
|
} from "./utils/github.ts";
|
||||||
import { setupGitAuth, setupGitBranch, setupGitConfig } from "./utils/setup.ts";
|
import { setupGitAuth, setupGitBranch, setupGitConfig } from "./utils/setup.ts";
|
||||||
|
import { Timer } from "./utils/timer.ts";
|
||||||
|
|
||||||
// runtime validation using agents (needed for ArkType)
|
// runtime validation using agents (needed for ArkType)
|
||||||
// Note: The AgentName type is defined in external.ts, this is the runtime validator
|
// Note: The AgentName type is defined in external.ts, this is the runtime validator
|
||||||
@@ -53,23 +54,34 @@ export async function main(inputs: Inputs): Promise<MainResult> {
|
|||||||
let mcpServerClose: (() => Promise<void>) | undefined;
|
let mcpServerClose: (() => Promise<void>) | undefined;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const timer = new Timer();
|
||||||
|
|
||||||
// parse payload early to extract agent
|
// parse payload early to extract agent
|
||||||
const payload = parsePayload(inputs);
|
const payload = parsePayload(inputs);
|
||||||
|
|
||||||
const partialCtx = await initializeContext(inputs, payload);
|
const partialCtx = await initializeContext(inputs, payload);
|
||||||
const ctx = partialCtx as MainContext;
|
const ctx = partialCtx as MainContext;
|
||||||
|
timer.checkpoint("initializeContext");
|
||||||
|
|
||||||
setupGitAuth({
|
setupGitAuth({
|
||||||
githubInstallationToken: ctx.githubInstallationToken,
|
githubInstallationToken: ctx.githubInstallationToken,
|
||||||
repoContext: ctx.repoContext,
|
repoContext: ctx.repoContext,
|
||||||
});
|
});
|
||||||
|
|
||||||
await setupTempDirectory(ctx);
|
await setupTempDirectory(ctx);
|
||||||
|
timer.checkpoint("setupTempDirectory");
|
||||||
|
|
||||||
setupGitBranch(ctx.payload);
|
setupGitBranch(ctx.payload);
|
||||||
|
|
||||||
await startMcpServer(ctx);
|
await startMcpServer(ctx);
|
||||||
mcpServerClose = ctx.mcpServerClose;
|
mcpServerClose = ctx.mcpServerClose;
|
||||||
|
timer.checkpoint("startMcpServer");
|
||||||
|
|
||||||
setupMcpServers(ctx);
|
setupMcpServers(ctx);
|
||||||
|
|
||||||
await installAgentCli(ctx);
|
await installAgentCli(ctx);
|
||||||
|
timer.checkpoint("installAgentCli");
|
||||||
|
|
||||||
await validateApiKey(ctx);
|
await validateApiKey(ctx);
|
||||||
|
|
||||||
const result = await runAgent(ctx);
|
const result = await runAgent(ctx);
|
||||||
|
|||||||
+8
-2
@@ -245,9 +245,15 @@ export async function ensureProgressCommentUpdated(): Promise<void> {
|
|||||||
// check if MCP context is initialized (MCP server started)
|
// check if MCP context is initialized (MCP server started)
|
||||||
try {
|
try {
|
||||||
const ctx = getMcpContext();
|
const ctx = getMcpContext();
|
||||||
const errorMessage = `🐸 this run croaked
|
const repoContext = parseRepoContext();
|
||||||
|
const runId = process.env.GITHUB_RUN_ID;
|
||||||
|
const workflowRunLink = runId
|
||||||
|
? `[workflow](https://github.com/${repoContext.owner}/${repoContext.name}/actions/runs/${runId})`
|
||||||
|
: "workflow";
|
||||||
|
|
||||||
The workflow encountered an error before any progress could be reported. Please check the workflow run logs for details.`;
|
const errorMessage = `❌ this run croaked
|
||||||
|
|
||||||
|
The workflow encountered an error before any progress could be reported. Please check the ${workflowRunLink} for details.`;
|
||||||
|
|
||||||
const bodyWithFooter = addFooter(errorMessage, ctx.payload);
|
const bodyWithFooter = addFooter(errorMessage, ctx.payload);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import { log } from "./cli.ts";
|
||||||
|
|
||||||
|
export class Timer {
|
||||||
|
private initialTimestamp: number;
|
||||||
|
private lastCheckpointTimestamp: number | null = null;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.initialTimestamp = Date.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
checkpoint(name: string): void {
|
||||||
|
const now = Date.now();
|
||||||
|
const duration = this.lastCheckpointTimestamp
|
||||||
|
? now - this.lastCheckpointTimestamp
|
||||||
|
: now - this.initialTimestamp;
|
||||||
|
|
||||||
|
log.info(`${name}: ${duration}ms`);
|
||||||
|
this.lastCheckpointTimestamp = now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user