mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-23 06:54:13 +08:00
- Add new progress MCP server for reporting task status via API
- Support repository_dispatch events with task description and progress endpoint
- Introduce isDispatch flag to unify dispatch event handling
- Make GitHub data optional for dispatch events without issues/PRs
- Update prompt generation with dispatch-specific instructions
Enables triggering Claude via repository_dispatch with:
{
"event_type": "claude_task",
"client_payload": {
"description": "Task description",
"progress_endpoint": "https://api.example.com/progress"
}
}
82 lines
3.0 KiB
TypeScript
82 lines
3.0 KiB
TypeScript
import { describe, test, expect } from "bun:test";
|
|
import { getMode, isValidMode } from "../../src/modes/registry";
|
|
import type { ModeName } from "../../src/modes/types";
|
|
import { tagMode } from "../../src/modes/tag";
|
|
import { agentMode } from "../../src/modes/agent";
|
|
import { reviewMode } from "../../src/modes/review";
|
|
import { createMockContext, createMockAutomationContext } from "../mockContext";
|
|
|
|
describe("Mode Registry", () => {
|
|
const mockContext = createMockContext({
|
|
eventName: "issue_comment",
|
|
});
|
|
|
|
const mockWorkflowDispatchContext = createMockAutomationContext({
|
|
eventName: "workflow_dispatch",
|
|
});
|
|
|
|
const mockScheduleContext = createMockAutomationContext({
|
|
eventName: "schedule",
|
|
});
|
|
|
|
test("getMode returns tag mode for standard events", () => {
|
|
const mode = getMode("tag", mockContext);
|
|
expect(mode).toBe(tagMode);
|
|
expect(mode.name).toBe("tag");
|
|
});
|
|
|
|
test("getMode returns agent mode", () => {
|
|
const mode = getMode("agent", mockContext);
|
|
expect(mode).toBe(agentMode);
|
|
expect(mode.name).toBe("agent");
|
|
});
|
|
|
|
test("getMode returns experimental-review mode", () => {
|
|
const mode = getMode("experimental-review", mockContext);
|
|
expect(mode).toBe(reviewMode);
|
|
expect(mode.name).toBe("experimental-review");
|
|
});
|
|
|
|
test("getMode throws error for tag mode with workflow_dispatch event", () => {
|
|
expect(() => getMode("tag", mockWorkflowDispatchContext)).toThrow(
|
|
"Tag mode cannot handle workflow_dispatch events. Use 'agent' mode for automation events or 'remote-agent' mode for repository_dispatch events.",
|
|
);
|
|
});
|
|
|
|
test("getMode throws error for tag mode with schedule event", () => {
|
|
expect(() => getMode("tag", mockScheduleContext)).toThrow(
|
|
"Tag mode cannot handle schedule events. Use 'agent' mode for automation events or 'remote-agent' mode for repository_dispatch events.",
|
|
);
|
|
});
|
|
|
|
test("getMode allows agent mode for workflow_dispatch event", () => {
|
|
const mode = getMode("agent", mockWorkflowDispatchContext);
|
|
expect(mode).toBe(agentMode);
|
|
expect(mode.name).toBe("agent");
|
|
});
|
|
|
|
test("getMode allows agent mode for schedule event", () => {
|
|
const mode = getMode("agent", mockScheduleContext);
|
|
expect(mode).toBe(agentMode);
|
|
expect(mode.name).toBe("agent");
|
|
});
|
|
|
|
test("getMode throws error for invalid mode", () => {
|
|
const invalidMode = "invalid" as unknown as ModeName;
|
|
expect(() => getMode(invalidMode, mockContext)).toThrow(
|
|
"Invalid mode 'invalid'. Valid modes are: 'tag', 'agent', 'remote-agent', 'experimental-review'. Please check your workflow configuration.",
|
|
);
|
|
});
|
|
|
|
test("isValidMode returns true for all valid modes", () => {
|
|
expect(isValidMode("tag")).toBe(true);
|
|
expect(isValidMode("agent")).toBe(true);
|
|
expect(isValidMode("experimental-review")).toBe(true);
|
|
expect(isValidMode("remote-agent")).toBe(true);
|
|
});
|
|
|
|
test("isValidMode returns false for invalid mode", () => {
|
|
expect(isValidMode("invalid")).toBe(false);
|
|
});
|
|
});
|