* feat: add packages/dispatcher — dual-loop OGraph projection watcher + OC scheduler Adds a new Node.js daemon that: - Loop A (ProjectionWatcher): polls OGraph projections, diffs against snapshot, merges changes into a pending queue. - Idle: 30s poll interval; active (changes detected): 5s - Loop B (OcScheduler): polls OC session-status, pushes pending queue when OC has available slots (>= minAvailable). - Idle (no pending): 60s; active (pending): 5s - Cooldown of 60s after each push to avoid spam Tech: - TypeScript + esbuild (zero runtime external deps) - Graceful error handling: each poll is independent try-catch, errors logged but never crash the process - Config from ~/.config/ograph/dispatcher.json + env-var overrides - OGRAPH_CONFIG_FILE env var for config path override - Push via /tmp/ograph-dispatch.json + openclaw message send (best-effort) Build: npm run build → dist/index.js Run: node dist/index.js * fix: address PR #17 review — package name, tests, shell safety, first-run --------- Co-authored-by: 小墨 <xiaomooo@shazhou.work>
25 lines
526 B
JavaScript
25 lines
526 B
JavaScript
// OGraph Dispatcher build script (esbuild)
|
|
// Usage: node build.mjs
|
|
|
|
import * as esbuild from 'esbuild'
|
|
import { mkdirSync } from 'node:fs'
|
|
|
|
mkdirSync('dist', { recursive: true })
|
|
|
|
await esbuild.build({
|
|
entryPoints: ['src/index.ts'],
|
|
bundle: true,
|
|
platform: 'node',
|
|
target: 'node18',
|
|
format: 'esm',
|
|
outfile: 'dist/index.js',
|
|
banner: {
|
|
js: '#!/usr/bin/env node',
|
|
},
|
|
// Mark all node: built-ins as external
|
|
packages: 'bundle',
|
|
external: ['node:*'],
|
|
})
|
|
|
|
console.log('Build complete → dist/index.js')
|