feat: daemon supports engine directory override for workflow definitions (pulse#11 prep)
CI / test (push) Has been cancelled
CI / test (push) Has been cancelled
This commit is contained in:
@@ -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...`);
|
||||
|
||||
Reference in New Issue
Block a user