refactor: centralize task runtime contracts (#199)
This commit is contained in:
@@ -27,6 +27,16 @@ export {
|
||||
type GitHubEvidenceAction,
|
||||
type HostEvidenceAction,
|
||||
} from './evidence-actions.js';
|
||||
export {
|
||||
DEFAULT_SCHEDULE_TASK_CONTEXT_MODE,
|
||||
DEFAULT_TASK_CONTEXT_MODE,
|
||||
DEFAULT_WATCH_CI_CONTEXT_MODE,
|
||||
TASK_CONTEXT_MODES,
|
||||
WATCH_CI_PROMPT_PREFIX,
|
||||
isTaskContextMode,
|
||||
normalizeTaskContextMode,
|
||||
type TaskContextMode,
|
||||
} from './task-runtime.js';
|
||||
export {
|
||||
extractMarkdownImageAttachments,
|
||||
extractMediaAttachments,
|
||||
|
||||
18
runners/shared/src/task-runtime.ts
Normal file
18
runners/shared/src/task-runtime.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
export const TASK_CONTEXT_MODES = ['group', 'isolated'] as const;
|
||||
export type TaskContextMode = (typeof TASK_CONTEXT_MODES)[number];
|
||||
|
||||
export const DEFAULT_TASK_CONTEXT_MODE: TaskContextMode = 'isolated';
|
||||
export const DEFAULT_SCHEDULE_TASK_CONTEXT_MODE: TaskContextMode = 'group';
|
||||
export const DEFAULT_WATCH_CI_CONTEXT_MODE: TaskContextMode = 'isolated';
|
||||
export const WATCH_CI_PROMPT_PREFIX = '[BACKGROUND CI WATCH]';
|
||||
|
||||
export function isTaskContextMode(value: unknown): value is TaskContextMode {
|
||||
return value === 'group' || value === 'isolated';
|
||||
}
|
||||
|
||||
export function normalizeTaskContextMode(
|
||||
value: unknown,
|
||||
fallback: TaskContextMode = DEFAULT_TASK_CONTEXT_MODE,
|
||||
): TaskContextMode {
|
||||
return isTaskContextMode(value) ? value : fallback;
|
||||
}
|
||||
32
runners/shared/test/task-runtime.test.ts
Normal file
32
runners/shared/test/task-runtime.test.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import {
|
||||
DEFAULT_SCHEDULE_TASK_CONTEXT_MODE,
|
||||
DEFAULT_TASK_CONTEXT_MODE,
|
||||
DEFAULT_WATCH_CI_CONTEXT_MODE,
|
||||
TASK_CONTEXT_MODES,
|
||||
WATCH_CI_PROMPT_PREFIX,
|
||||
isTaskContextMode,
|
||||
normalizeTaskContextMode,
|
||||
} from '../src/task-runtime.js';
|
||||
|
||||
describe('task runtime constants', () => {
|
||||
it('defines the task context modes and default', () => {
|
||||
expect(TASK_CONTEXT_MODES).toEqual(['group', 'isolated']);
|
||||
expect(DEFAULT_TASK_CONTEXT_MODE).toBe('isolated');
|
||||
expect(DEFAULT_SCHEDULE_TASK_CONTEXT_MODE).toBe('group');
|
||||
expect(DEFAULT_WATCH_CI_CONTEXT_MODE).toBe('isolated');
|
||||
});
|
||||
|
||||
it('normalizes task context modes consistently', () => {
|
||||
expect(isTaskContextMode('group')).toBe(true);
|
||||
expect(isTaskContextMode('isolated')).toBe(true);
|
||||
expect(isTaskContextMode('invalid')).toBe(false);
|
||||
expect(normalizeTaskContextMode('group')).toBe('group');
|
||||
expect(normalizeTaskContextMode('invalid')).toBe('isolated');
|
||||
});
|
||||
|
||||
it('defines the watch CI prompt sentinel', () => {
|
||||
expect(WATCH_CI_PROMPT_PREFIX).toBe('[BACKGROUND CI WATCH]');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user