feat: daemon supports engine directory override for workflow definitions (pulse#11 prep)
CI / test (push) Has been cancelled

This commit is contained in:
2026-04-18 14:20:38 +00:00
parent 6f4886db6a
commit 8ef1926772
+35 -9
View File
@@ -21,11 +21,7 @@ import {
createRendererRole,
} from '@upulse/workflows';
import { createWorkflowTicker } from '../workflows/index.js';
import { createMetaWorkflow } from '../workflows/meta.js';
import { createCursorRunner } from '../workflows/roles/agent-executor.js';
import { createMetaCoderRole } from '../workflows/roles/meta-coder-cursor.js';
import { createMetaTesterRole } from '../workflows/roles/meta-tester.js';
import { createMetaCheckerRole } from '../workflows/roles/meta-checker.js';
import { createWorkflowRule } from '../workflows/workflow-rule-adapter.js';
// ── Config ─────────────────────────────────────────────────────
@@ -80,11 +76,28 @@ const logStore = createStore({
const codingWf = createCodingWorkflow();
const codingRule = createWorkflowRule(codingWf, store, logStore);
// 2. Meta workflow (simplified: coder → tester → promoter)
const metaWf = createMetaWorkflow({
coder: createMetaCoderRole(cursorRunner, llm, ENGINE_DIR),
checker: createMetaCheckerRole({ engineDir: ENGINE_DIR }),
tester: createMetaTesterRole({ repoDir: ENGINE_DIR }),
// 2. Meta workflow — engine override > core fallback
const metaMod = await tryLoadFromEngine(
'src/workflows/meta.ts',
() => import('../workflows/meta.js')
);
const metaCoderMod = await tryLoadFromEngine(
'src/workflows/roles/meta-coder-cursor.ts',
() => import('../workflows/roles/meta-coder-cursor.js')
);
const metaCheckerMod = await tryLoadFromEngine(
'src/workflows/roles/meta-checker.ts',
() => import('../workflows/roles/meta-checker.js')
);
const metaTesterMod = await tryLoadFromEngine(
'src/workflows/roles/meta-tester.ts',
() => import('../workflows/roles/meta-tester.js')
);
const metaWf = metaMod.createMetaWorkflow({
coder: metaCoderMod.createMetaCoderRole(cursorRunner, llm, ENGINE_DIR),
checker: metaCheckerMod.createMetaCheckerRole({ engineDir: ENGINE_DIR }),
tester: metaTesterMod.createMetaTesterRole({ repoDir: ENGINE_DIR }),
});
const metaRule = createWorkflowRule(metaWf, store, logStore);
@@ -106,6 +119,7 @@ console.log(` Store: ${DATA_DIR}/workflows.db`);
console.log(
` Tick: adaptive ${BASE_TICK_MS / 1000}s → ${MAX_TICK_MS / 1000}s (×${BACKOFF_FACTOR})`,
);
console.log(` Engine override: ${existsSync(join(ENGINE_DIR, 'src/workflows/meta.ts')) ? 'YES' : 'no'}`);
console.log(` Workflows: coding, meta, report`);
console.log('');
@@ -153,6 +167,18 @@ const scheduleNext = () => {
scheduleNext();
/**
* Try loading a workflow module from ENGINE_DIR, fallback to core package.
*/
async function tryLoadFromEngine<T>(engineRelPath: string, fallbackImport: () => Promise<T>): Promise<T> {
const enginePath = join(ENGINE_DIR, engineRelPath);
if (existsSync(enginePath)) {
console.log(` 📦 Loading from engine: ${engineRelPath}`);
return import(enginePath);
}
return fallbackImport();
}
// Graceful shutdown
const shutdown = (signal: string) => {
console.log(`\n⏹️ ${signal} received, shutting down...`);