@runcore-sh/runcore 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -19
- package/brain-template/agents/README.md +20 -0
- package/brain-template/identity/README.md +20 -0
- package/brain-template/identity/brand.md +25 -0
- package/brain-template/identity/principles.md +21 -0
- package/brain-template/identity/tone-of-voice.md +23 -0
- package/brain-template/knowledge/notes/tier-gated-ui-spec.md +1 -1
- package/brain-template/metrics/README.md +13 -0
- package/brain-template/operations/goals.yaml +12 -0
- package/brain-template/operations/todos.md +17 -0
- package/brain-template/ops/README.md +13 -0
- package/brain-template/scheduling/README.md +2 -2
- package/brain-template/skills/README.md +23 -0
- package/brain-template/templates/README.md +9 -0
- package/brain-template/training/README.md +20 -0
- package/dictionary.json +2 -2
- package/dist/activity/log.d.ts +3 -0
- package/dist/activity/log.d.ts.map +1 -1
- package/dist/activity/log.js +12 -0
- package/dist/activity/log.js.map +1 -1
- package/dist/agents/autonomous.js +1 -0
- package/dist/agents/autonomous.js.map +1 -1
- package/dist/agents/commit.d.ts.map +1 -1
- package/dist/agents/commit.js +3 -10
- package/dist/agents/commit.js.map +1 -1
- package/dist/agents/dedup-guard.d.ts.map +1 -1
- package/dist/agents/dedup-guard.js +26 -23
- package/dist/agents/dedup-guard.js.map +1 -1
- package/dist/agents/feed.d.ts +69 -0
- package/dist/agents/feed.d.ts.map +1 -0
- package/dist/agents/feed.js +176 -0
- package/dist/agents/feed.js.map +1 -0
- package/dist/agents/governance.d.ts +14 -0
- package/dist/agents/governance.d.ts.map +1 -1
- package/dist/agents/governance.js +73 -1
- package/dist/agents/governance.js.map +1 -1
- package/dist/agents/governed-spawn.d.ts +12 -0
- package/dist/agents/governed-spawn.d.ts.map +1 -1
- package/dist/agents/governed-spawn.js +8 -2
- package/dist/agents/governed-spawn.js.map +1 -1
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +1 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/issue-reporter.d.ts +15 -0
- package/dist/agents/issue-reporter.d.ts.map +1 -0
- package/dist/agents/issue-reporter.js +123 -0
- package/dist/agents/issue-reporter.js.map +1 -0
- package/dist/agents/issues.d.ts +33 -0
- package/dist/agents/issues.d.ts.map +1 -0
- package/dist/agents/issues.js +141 -0
- package/dist/agents/issues.js.map +1 -0
- package/dist/agents/reflection.js +3 -3
- package/dist/agents/reflection.js.map +1 -1
- package/dist/agents/runtime/driver.d.ts.map +1 -1
- package/dist/agents/runtime/driver.js +1 -2
- package/dist/agents/runtime/driver.js.map +1 -1
- package/dist/agents/runtime/manager.d.ts.map +1 -1
- package/dist/agents/runtime/manager.js +1 -0
- package/dist/agents/runtime/manager.js.map +1 -1
- package/dist/agents/runtime/types.d.ts +2 -0
- package/dist/agents/runtime/types.d.ts.map +1 -1
- package/dist/agents/spawn.d.ts.map +1 -1
- package/dist/agents/spawn.js +20 -26
- package/dist/agents/spawn.js.map +1 -1
- package/dist/agents/store.d.ts.map +1 -1
- package/dist/agents/store.js +34 -1
- package/dist/agents/store.js.map +1 -1
- package/dist/agents/types.d.ts +27 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/auth/identity.d.ts +3 -0
- package/dist/auth/identity.d.ts.map +1 -1
- package/dist/auth/identity.js +9 -1
- package/dist/auth/identity.js.map +1 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +4 -0
- package/dist/auth/middleware.js.map +1 -1
- package/dist/calibration/conversation.d.ts +46 -0
- package/dist/calibration/conversation.d.ts.map +1 -0
- package/dist/calibration/conversation.js +295 -0
- package/dist/calibration/conversation.js.map +1 -0
- package/dist/calibration/index.d.ts +5 -0
- package/dist/calibration/index.d.ts.map +1 -0
- package/dist/calibration/index.js +5 -0
- package/dist/calibration/index.js.map +1 -0
- package/dist/calibration/runner.d.ts +127 -0
- package/dist/calibration/runner.d.ts.map +1 -0
- package/dist/calibration/runner.js +307 -0
- package/dist/calibration/runner.js.map +1 -0
- package/dist/calibration/store.d.ts +49 -0
- package/dist/calibration/store.d.ts.map +1 -0
- package/dist/calibration/store.js +140 -0
- package/dist/calibration/store.js.map +1 -0
- package/dist/calibration/types.d.ts +93 -0
- package/dist/calibration/types.d.ts.map +1 -0
- package/dist/calibration/types.js +53 -0
- package/dist/calibration/types.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +17 -2
- package/dist/cli.js.map +1 -1
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +28 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +181 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +76 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +93 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/dictionary/challenge.d.ts +66 -0
- package/dist/dictionary/challenge.d.ts.map +1 -0
- package/dist/dictionary/challenge.js +145 -0
- package/dist/dictionary/challenge.js.map +1 -0
- package/dist/dictionary/client.d.ts +32 -0
- package/dist/dictionary/client.d.ts.map +1 -0
- package/dist/dictionary/client.js +139 -0
- package/dist/dictionary/client.js.map +1 -0
- package/dist/dictionary/compatibility.d.ts +8 -0
- package/dist/dictionary/compatibility.d.ts.map +1 -0
- package/dist/dictionary/compatibility.js +56 -0
- package/dist/dictionary/compatibility.js.map +1 -0
- package/dist/dictionary/index.d.ts +22 -0
- package/dist/dictionary/index.d.ts.map +1 -0
- package/dist/dictionary/index.js +15 -0
- package/dist/dictionary/index.js.map +1 -0
- package/dist/dictionary/matcher.d.ts +18 -0
- package/dist/dictionary/matcher.d.ts.map +1 -0
- package/dist/dictionary/matcher.js +98 -0
- package/dist/dictionary/matcher.js.map +1 -0
- package/dist/dictionary/publisher.d.ts +17 -0
- package/dist/dictionary/publisher.d.ts.map +1 -0
- package/dist/dictionary/publisher.js +156 -0
- package/dist/dictionary/publisher.js.map +1 -0
- package/dist/dictionary/sync.d.ts +28 -0
- package/dist/dictionary/sync.d.ts.map +1 -0
- package/dist/dictionary/sync.js +268 -0
- package/dist/dictionary/sync.js.map +1 -0
- package/dist/dictionary/types.d.ts +75 -0
- package/dist/dictionary/types.d.ts.map +1 -0
- package/dist/dictionary/types.js +8 -0
- package/dist/dictionary/types.js.map +1 -0
- package/dist/dictionary/updater.d.ts +23 -0
- package/dist/dictionary/updater.d.ts.map +1 -0
- package/dist/dictionary/updater.js +84 -0
- package/dist/dictionary/updater.js.map +1 -0
- package/dist/dictionary/versioning.d.ts +15 -0
- package/dist/dictionary/versioning.d.ts.map +1 -0
- package/dist/dictionary/versioning.js +52 -0
- package/dist/dictionary/versioning.js.map +1 -0
- package/dist/errors.d.ts +36 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +66 -0
- package/dist/errors.js.map +1 -0
- package/dist/events/event-bus.d.ts +37 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +261 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +71 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +7 -0
- package/dist/events/types.js.map +1 -0
- package/dist/feed/client.d.ts +34 -0
- package/dist/feed/client.d.ts.map +1 -0
- package/dist/feed/client.js +206 -0
- package/dist/feed/client.js.map +1 -0
- package/dist/feed/index.d.ts +61 -0
- package/dist/feed/index.d.ts.map +1 -0
- package/dist/feed/index.js +115 -0
- package/dist/feed/index.js.map +1 -0
- package/dist/feed/metrics.d.ts +51 -0
- package/dist/feed/metrics.d.ts.map +1 -0
- package/dist/feed/metrics.js +84 -0
- package/dist/feed/metrics.js.map +1 -0
- package/dist/feed/mixer.d.ts +89 -0
- package/dist/feed/mixer.d.ts.map +1 -0
- package/dist/feed/mixer.js +230 -0
- package/dist/feed/mixer.js.map +1 -0
- package/dist/feed/tiers.d.ts +15 -0
- package/dist/feed/tiers.d.ts.map +1 -0
- package/dist/feed/tiers.js +75 -0
- package/dist/feed/tiers.js.map +1 -0
- package/dist/feed/types.d.ts +76 -0
- package/dist/feed/types.d.ts.map +1 -0
- package/dist/feed/types.js +6 -0
- package/dist/feed/types.js.map +1 -0
- package/dist/files/registry.d.ts +77 -0
- package/dist/files/registry.d.ts.map +1 -0
- package/dist/files/registry.js +222 -0
- package/dist/files/registry.js.map +1 -0
- package/dist/google/plugin.d.ts +17 -0
- package/dist/google/plugin.d.ts.map +1 -0
- package/dist/google/plugin.js +169 -0
- package/dist/google/plugin.js.map +1 -0
- package/dist/health/checker.d.ts.map +1 -1
- package/dist/health/checker.js +14 -4
- package/dist/health/checker.js.map +1 -1
- package/dist/health/checks/openrouter.js +1 -1
- package/dist/health/checks/openrouter.js.map +1 -1
- package/dist/health/checks.d.ts +1 -1
- package/dist/health/checks.d.ts.map +1 -1
- package/dist/health/checks.js +9 -3
- package/dist/health/checks.js.map +1 -1
- package/dist/ledger/distance.d.ts +19 -0
- package/dist/ledger/distance.d.ts.map +1 -0
- package/dist/ledger/distance.js +70 -0
- package/dist/ledger/distance.js.map +1 -0
- package/dist/ledger/index.d.ts +8 -0
- package/dist/ledger/index.d.ts.map +1 -0
- package/dist/ledger/index.js +7 -0
- package/dist/ledger/index.js.map +1 -0
- package/dist/ledger/store.d.ts +27 -0
- package/dist/ledger/store.d.ts.map +1 -0
- package/dist/ledger/store.js +123 -0
- package/dist/ledger/store.js.map +1 -0
- package/dist/ledger/types.d.ts +109 -0
- package/dist/ledger/types.d.ts.map +1 -0
- package/dist/ledger/types.js +57 -0
- package/dist/ledger/types.js.map +1 -0
- package/dist/literacy.d.ts +50 -0
- package/dist/literacy.d.ts.map +1 -0
- package/dist/literacy.js +141 -0
- package/dist/literacy.js.map +1 -0
- package/dist/llm/complete.d.ts.map +1 -1
- package/dist/llm/complete.js +36 -3
- package/dist/llm/complete.js.map +1 -1
- package/dist/llm/fetch-guard.d.ts.map +1 -1
- package/dist/llm/fetch-guard.js +2 -0
- package/dist/llm/fetch-guard.js.map +1 -1
- package/dist/llm/membrane.d.ts +5 -0
- package/dist/llm/membrane.d.ts.map +1 -1
- package/dist/llm/membrane.js +48 -8
- package/dist/llm/membrane.js.map +1 -1
- package/dist/llm/nlp-detect.d.ts +17 -0
- package/dist/llm/nlp-detect.d.ts.map +1 -0
- package/dist/llm/nlp-detect.js +45 -0
- package/dist/llm/nlp-detect.js.map +1 -0
- package/dist/llm/ollama.d.ts +5 -0
- package/dist/llm/ollama.d.ts.map +1 -1
- package/dist/llm/ollama.js +39 -1
- package/dist/llm/ollama.js.map +1 -1
- package/dist/llm/openrouter.d.ts.map +1 -1
- package/dist/llm/openrouter.js +17 -1
- package/dist/llm/openrouter.js.map +1 -1
- package/dist/llm/providers/ollama.d.ts +7 -2
- package/dist/llm/providers/ollama.d.ts.map +1 -1
- package/dist/llm/providers/ollama.js +109 -17
- package/dist/llm/providers/ollama.js.map +1 -1
- package/dist/llm/providers/openrouter.js +1 -1
- package/dist/llm/providers/openrouter.js.map +1 -1
- package/dist/llm/sensitive-registry.d.ts +6 -0
- package/dist/llm/sensitive-registry.d.ts.map +1 -1
- package/dist/llm/sensitive-registry.js +60 -1
- package/dist/llm/sensitive-registry.js.map +1 -1
- package/dist/mcp-server.js +25 -18
- package/dist/mcp-server.js.map +1 -1
- package/dist/metrics/collector.d.ts +6 -0
- package/dist/metrics/collector.d.ts.map +1 -1
- package/dist/metrics/collector.js +150 -0
- package/dist/metrics/collector.js.map +1 -1
- package/dist/metrics/types.d.ts +1 -1
- package/dist/metrics/types.d.ts.map +1 -1
- package/dist/middleware/error-handler.d.ts +13 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +71 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/notifications/channels/adapter.d.ts +28 -0
- package/dist/notifications/channels/adapter.d.ts.map +1 -0
- package/dist/notifications/channels/adapter.js +55 -0
- package/dist/notifications/channels/adapter.js.map +1 -0
- package/dist/notifications/channels/index.d.ts +6 -0
- package/dist/notifications/channels/index.d.ts.map +1 -0
- package/dist/notifications/channels/index.js +6 -0
- package/dist/notifications/channels/index.js.map +1 -0
- package/dist/notifications/channels/log.d.ts +15 -0
- package/dist/notifications/channels/log.d.ts.map +1 -0
- package/dist/notifications/channels/log.js +29 -0
- package/dist/notifications/channels/log.js.map +1 -0
- package/dist/notifications/engine.d.ts +37 -0
- package/dist/notifications/engine.d.ts.map +1 -0
- package/dist/notifications/engine.js +198 -0
- package/dist/notifications/engine.js.map +1 -0
- package/dist/notifications/index.d.ts +12 -3
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +15 -3
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/types.d.ts +97 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +14 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/onboarding/bootstrap.d.ts +51 -0
- package/dist/onboarding/bootstrap.d.ts.map +1 -0
- package/dist/onboarding/bootstrap.js +92 -0
- package/dist/onboarding/bootstrap.js.map +1 -0
- package/dist/onboarding/conversation.d.ts +131 -0
- package/dist/onboarding/conversation.d.ts.map +1 -0
- package/dist/onboarding/conversation.js +259 -0
- package/dist/onboarding/conversation.js.map +1 -0
- package/dist/onboarding/flow.d.ts +63 -0
- package/dist/onboarding/flow.d.ts.map +1 -0
- package/dist/onboarding/flow.js +287 -0
- package/dist/onboarding/flow.js.map +1 -0
- package/dist/onboarding/index.d.ts +17 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +23 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/name-extraction.d.ts +42 -0
- package/dist/onboarding/name-extraction.d.ts.map +1 -0
- package/dist/onboarding/name-extraction.js +164 -0
- package/dist/onboarding/name-extraction.js.map +1 -0
- package/dist/onboarding/nerve-link.d.ts +23 -0
- package/dist/onboarding/nerve-link.d.ts.map +1 -0
- package/dist/onboarding/nerve-link.js +24 -0
- package/dist/onboarding/nerve-link.js.map +1 -0
- package/dist/onboarding/phases.d.ts +66 -0
- package/dist/onboarding/phases.d.ts.map +1 -0
- package/dist/onboarding/phases.js +167 -0
- package/dist/onboarding/phases.js.map +1 -0
- package/dist/onboarding/safe-word.d.ts +39 -0
- package/dist/onboarding/safe-word.d.ts.map +1 -0
- package/dist/onboarding/safe-word.js +90 -0
- package/dist/onboarding/safe-word.js.map +1 -0
- package/dist/onboarding/types.d.ts +124 -0
- package/dist/onboarding/types.d.ts.map +1 -0
- package/dist/onboarding/types.js +46 -0
- package/dist/onboarding/types.js.map +1 -0
- package/dist/openloop/resolution-scanner.d.ts +1 -1
- package/dist/openloop/resolution-scanner.d.ts.map +1 -1
- package/dist/openloop/resolution-scanner.js +4 -14
- package/dist/openloop/resolution-scanner.js.map +1 -1
- package/dist/plugins/index.d.ts +24 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +91 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/status.d.ts +10 -0
- package/dist/plugins/status.d.ts.map +1 -0
- package/dist/plugins/status.js +12 -0
- package/dist/plugins/status.js.map +1 -0
- package/dist/posture/index.d.ts +2 -2
- package/dist/posture/index.d.ts.map +1 -1
- package/dist/posture/index.js +1 -1
- package/dist/posture/index.js.map +1 -1
- package/dist/posture/types.d.ts +34 -0
- package/dist/posture/types.d.ts.map +1 -1
- package/dist/posture/types.js +28 -0
- package/dist/posture/types.js.map +1 -1
- package/dist/pulse/activation-event.d.ts +5 -4
- package/dist/pulse/activation-event.d.ts.map +1 -1
- package/dist/pulse/activation-event.js +31 -8
- package/dist/pulse/activation-event.js.map +1 -1
- package/dist/pulse/activation-log.d.ts.map +1 -1
- package/dist/pulse/activation-log.js.map +1 -1
- package/dist/pulse/index.d.ts +3 -0
- package/dist/pulse/index.d.ts.map +1 -1
- package/dist/pulse/index.js +4 -0
- package/dist/pulse/index.js.map +1 -1
- package/dist/pulse/tier.d.ts +67 -0
- package/dist/pulse/tier.d.ts.map +1 -0
- package/dist/pulse/tier.js +104 -0
- package/dist/pulse/tier.js.map +1 -0
- package/dist/pulse/work.d.ts +66 -0
- package/dist/pulse/work.d.ts.map +1 -0
- package/dist/pulse/work.js +117 -0
- package/dist/pulse/work.js.map +1 -0
- package/dist/runtime-lock.d.ts +51 -0
- package/dist/runtime-lock.d.ts.map +1 -0
- package/dist/runtime-lock.js +147 -0
- package/dist/runtime-lock.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1244 -188
- package/dist/server.js.map +1 -1
- package/dist/services/whatsapp.js +1 -1
- package/dist/services/whatsapp.js.map +1 -1
- package/dist/settings.d.ts +15 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +48 -1
- package/dist/settings.js.map +1 -1
- package/dist/skills/index.d.ts +2 -2
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +2 -2
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/registry.d.ts +53 -142
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +249 -611
- package/dist/skills/registry.js.map +1 -1
- package/dist/stream/emitter.d.ts +36 -0
- package/dist/stream/emitter.d.ts.map +1 -0
- package/dist/stream/emitter.js +177 -0
- package/dist/stream/emitter.js.map +1 -0
- package/dist/stream/index.d.ts +4 -0
- package/dist/stream/index.d.ts.map +1 -0
- package/dist/stream/index.js +3 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/types.d.ts +100 -0
- package/dist/stream/types.d.ts.map +1 -0
- package/dist/stream/types.js +19 -0
- package/dist/stream/types.js.map +1 -0
- package/dist/threads/index.d.ts +3 -0
- package/dist/threads/index.d.ts.map +1 -0
- package/dist/threads/index.js +2 -0
- package/dist/threads/index.js.map +1 -0
- package/dist/threads/store.d.ts +36 -0
- package/dist/threads/store.d.ts.map +1 -0
- package/dist/threads/store.js +171 -0
- package/dist/threads/store.js.map +1 -0
- package/dist/threads/types.d.ts +16 -0
- package/dist/threads/types.d.ts.map +1 -0
- package/dist/threads/types.js +6 -0
- package/dist/threads/types.js.map +1 -0
- package/dist/tick/index.d.ts +10 -0
- package/dist/tick/index.d.ts.map +1 -0
- package/dist/tick/index.js +8 -0
- package/dist/tick/index.js.map +1 -0
- package/dist/tick/runner.d.ts +56 -0
- package/dist/tick/runner.d.ts.map +1 -0
- package/dist/tick/runner.js +235 -0
- package/dist/tick/runner.js.map +1 -0
- package/dist/tick/types.d.ts +73 -0
- package/dist/tick/types.d.ts.map +1 -0
- package/dist/tick/types.js +8 -0
- package/dist/tick/types.js.map +1 -0
- package/dist/tier/types.js +3 -3
- package/dist/tier/types.js.map +1 -1
- package/dist/ui-sync.d.ts +34 -0
- package/dist/ui-sync.d.ts.map +1 -0
- package/dist/ui-sync.js +108 -0
- package/dist/ui-sync.js.map +1 -0
- package/dist/utils/git.d.ts +12 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +44 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/volumes/index.d.ts +3 -0
- package/dist/volumes/index.d.ts.map +1 -0
- package/dist/volumes/index.js +2 -0
- package/dist/volumes/index.js.map +1 -0
- package/dist/volumes/manager.d.ts +83 -0
- package/dist/volumes/manager.d.ts.map +1 -0
- package/dist/volumes/manager.js +462 -0
- package/dist/volumes/manager.js.map +1 -0
- package/dist/volumes/types.d.ts +66 -0
- package/dist/volumes/types.d.ts.map +1 -0
- package/dist/volumes/types.js +8 -0
- package/dist/volumes/types.js.map +1 -0
- package/package.json +8 -5
- package/public/avatar/Hey-Dash_en_windows_v4_0_0.zip +0 -0
- package/public/avatar/README.md +43 -0
- package/public/avatar/cache/06fa55aececcc478.mp4 +0 -0
- package/public/avatar/cache/07a65738ba170827.mp4 +0 -0
- package/public/avatar/cache/08b6f4880f59a385.mp4 +0 -0
- package/public/avatar/cache/0ef9e0e78d715af4.mp4 +0 -0
- package/public/avatar/cache/0fa85e9e8f444a8b.mp4 +0 -0
- package/public/avatar/cache/1185fd491f413406.mp4 +0 -0
- package/public/avatar/cache/1b374d5390258fea.mp4 +0 -0
- package/public/avatar/cache/1e2367029b92f8aa.mp4 +0 -0
- package/public/avatar/cache/272c004a41087de5.mp4 +0 -0
- package/public/avatar/cache/2a0f3ff34d92521a.mp4 +0 -0
- package/public/avatar/cache/307a6f70859aeab8.mp4 +0 -0
- package/public/avatar/cache/332384e088ca214b.mp4 +0 -0
- package/public/avatar/cache/39fc4e81574d14ed.mp4 +0 -0
- package/public/avatar/cache/4a5c6051c1ef6a71.mp4 +0 -0
- package/public/avatar/cache/51f4aa76398c8c29.mp4 +0 -0
- package/public/avatar/cache/5d9a960bbf71732c.mp4 +0 -0
- package/public/avatar/cache/5e0954401e15af89.mp4 +0 -0
- package/public/avatar/cache/884ae6717fcacdd5.mp4 +0 -0
- package/public/avatar/cache/8ea0b7220d139615.mp4 +0 -0
- package/public/avatar/cache/9b9c4f7b8508eecc.mp4 +0 -0
- package/public/avatar/cache/9be1030ec2aa2b01.mp4 +0 -0
- package/public/avatar/cache/b35f7a3d558f22cb.mp4 +0 -0
- package/public/avatar/cache/be89f49970672374.mp4 +0 -0
- package/public/avatar/cache/c11fdc99479492b6.mp4 +0 -0
- package/public/avatar/cache/c900811e3382ac6d.mp4 +0 -0
- package/public/avatar/cache/d42a73667acf5716.mp4 +0 -0
- package/public/avatar/cache/e539f247a8908603.mp4 +0 -0
- package/public/avatar/cache/e78fceae2373b7c1.mp4 +0 -0
- package/public/avatar/cache/ec95af57d33b3f07.mp4 +0 -0
- package/public/avatar/cache/eeb8d775f40dbe2c.mp4 +0 -0
- package/public/avatar/dash_headhshot_v1.png +0 -0
- package/public/avatar/idle.mp4 +0 -0
- package/public/avatar/photo.png +0 -0
- package/public/board.html +6 -0
- package/public/browser.html +6 -2
- package/public/demo-data/Family Photos/2024/christmas-dinner.txt +13 -0
- package/public/demo-data/Family Photos/2025/summer-cookout.txt +13 -0
- package/public/demo-data/Financial/Insurance/auto-policy.txt +26 -0
- package/public/demo-data/Financial/Insurance/homeowners-policy.txt +20 -0
- package/public/demo-data/Financial/Taxes/property-tax-2025.txt +18 -0
- package/public/demo-data/Financial/Taxes/w2-2025.txt +18 -0
- package/public/demo-data/Health Records/lab-results-2026.txt +26 -0
- package/public/demo-data/Health Records/prescription-list.txt +24 -0
- package/public/demo-data/Health Records/vaccination-record.csv +8 -0
- package/public/demo-data/Legal/Estate/beneficiary-contacts.csv +4 -0
- package/public/demo-data/Legal/Estate/will-summary.txt +22 -0
- package/public/demo-data/Recipes/christmas-cookies.md +25 -0
- package/public/demo-data/Recipes/grandmas-chili.md +30 -0
- package/public/demo-data/Work/Contracts/lawn-service-2026.txt +23 -0
- package/public/demo-data/Work/Projects/project-status.md +19 -0
- package/public/demo-data/passwords.txt +13 -0
- package/public/demo-ingest.html +388 -0
- package/public/help.html +4 -1
- package/public/icon-192.png +0 -0
- package/public/icon-512.png +0 -0
- package/public/index.html +2641 -574
- package/public/library.html +51 -29
- package/public/manifest.json +21 -0
- package/public/nerve/icon-192.svg +6 -0
- package/public/nerve/icon-512.svg +6 -0
- package/public/nerve/index.html +698 -0
- package/public/nerve/manifest.json +24 -0
- package/public/nerve/sw.js +84 -0
- package/public/observatory.html +5 -1
- package/public/ops.html +33 -3
- package/public/pulse.html +3 -0
- package/public/registry.html +6 -2
- package/public/roadmap.html +7 -2
- package/public/sw.js +65 -0
- package/brain-template/registry.md +0 -566
- package/brain-template/rest_api-integration.md +0 -522
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ErrorHandler, NotFoundHandler } from "hono";
|
|
2
|
+
export declare class ApiError extends Error {
|
|
3
|
+
readonly status: number;
|
|
4
|
+
readonly code: string;
|
|
5
|
+
constructor(status: number, message: string, code?: string);
|
|
6
|
+
}
|
|
7
|
+
export declare const errorHandler: ErrorHandler;
|
|
8
|
+
export declare const notFoundHandler: NotFoundHandler;
|
|
9
|
+
export declare function badRequest(message: string): never;
|
|
10
|
+
export declare function unauthorized(message?: string): never;
|
|
11
|
+
export declare function forbidden(message?: string): never;
|
|
12
|
+
export declare function notFound(message?: string): never;
|
|
13
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAO1D,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAM3D;AAyBD,eAAO,MAAM,YAAY,EAAE,YA0B1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAO7B,CAAC;AAIF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAEjD;AAED,wBAAgB,YAAY,CAAC,OAAO,SAA4B,GAAG,KAAK,CAEvE;AAED,wBAAgB,SAAS,CAAC,OAAO,SAAc,GAAG,KAAK,CAEtD;AAED,wBAAgB,QAAQ,CAAC,OAAO,SAAc,GAAG,KAAK,CAErD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createLogger } from "../utils/logger.js";
|
|
2
|
+
const log = createLogger("error-handler");
|
|
3
|
+
// ── ApiError ─────────────────────────────────────────────────────────────────
|
|
4
|
+
export class ApiError extends Error {
|
|
5
|
+
status;
|
|
6
|
+
code;
|
|
7
|
+
constructor(status, message, code) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "ApiError";
|
|
10
|
+
this.status = status;
|
|
11
|
+
this.code = code ?? statusToCode(status);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function statusToCode(status) {
|
|
15
|
+
switch (status) {
|
|
16
|
+
case 400: return "BAD_REQUEST";
|
|
17
|
+
case 401: return "AUTH_REQUIRED";
|
|
18
|
+
case 403: return "FORBIDDEN";
|
|
19
|
+
case 404: return "NOT_FOUND";
|
|
20
|
+
case 409: return "CONFLICT";
|
|
21
|
+
case 422: return "UNPROCESSABLE";
|
|
22
|
+
case 429: return "RATE_LIMITED";
|
|
23
|
+
default: return "INTERNAL_ERROR";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// ── Handlers ─────────────────────────────────────────────────────────────────
|
|
27
|
+
export const errorHandler = (err, c) => {
|
|
28
|
+
if (err instanceof ApiError) {
|
|
29
|
+
log.warn(err.message, { status: err.status, code: err.code });
|
|
30
|
+
const body = {
|
|
31
|
+
error: err.message,
|
|
32
|
+
code: err.code,
|
|
33
|
+
status: err.status,
|
|
34
|
+
};
|
|
35
|
+
return c.json(body, err.status);
|
|
36
|
+
}
|
|
37
|
+
// Generic / unexpected error
|
|
38
|
+
const isProduction = process.env.NODE_ENV === "production";
|
|
39
|
+
const message = isProduction ? "Internal server error" : err.message;
|
|
40
|
+
log.error(err.message, {
|
|
41
|
+
stack: isProduction ? undefined : err.stack,
|
|
42
|
+
});
|
|
43
|
+
const body = {
|
|
44
|
+
error: message,
|
|
45
|
+
code: "INTERNAL_ERROR",
|
|
46
|
+
status: 500,
|
|
47
|
+
};
|
|
48
|
+
return c.json(body, 500);
|
|
49
|
+
};
|
|
50
|
+
export const notFoundHandler = (c) => {
|
|
51
|
+
const body = {
|
|
52
|
+
error: "Not found",
|
|
53
|
+
code: "NOT_FOUND",
|
|
54
|
+
status: 404,
|
|
55
|
+
};
|
|
56
|
+
return c.json(body, 404);
|
|
57
|
+
};
|
|
58
|
+
// ── Helper throwers ──────────────────────────────────────────────────────────
|
|
59
|
+
export function badRequest(message) {
|
|
60
|
+
throw new ApiError(400, message, "BAD_REQUEST");
|
|
61
|
+
}
|
|
62
|
+
export function unauthorized(message = "Authentication required") {
|
|
63
|
+
throw new ApiError(401, message, "AUTH_REQUIRED");
|
|
64
|
+
}
|
|
65
|
+
export function forbidden(message = "Forbidden") {
|
|
66
|
+
throw new ApiError(403, message, "FORBIDDEN");
|
|
67
|
+
}
|
|
68
|
+
export function notFound(message = "Not found") {
|
|
69
|
+
throw new ApiError(404, message, "NOT_FOUND");
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/middleware/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter that wraps legacy NotificationChannel (alert-based)
|
|
3
|
+
* into the SmartChannel interface (context-based).
|
|
4
|
+
*
|
|
5
|
+
* This allows existing email, SMS, and webhook channels to work
|
|
6
|
+
* with the smart notification engine without rewriting them.
|
|
7
|
+
*/
|
|
8
|
+
import type { NotificationChannel } from "../../health/alert-types.js";
|
|
9
|
+
import type { NotificationContext, NotificationPriority, SmartChannel } from "../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Wraps a legacy NotificationChannel as a SmartChannel.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```ts
|
|
15
|
+
* const legacyEmail = new EmailChannel(config);
|
|
16
|
+
* const smartEmail = new LegacyChannelAdapter(legacyEmail, "normal");
|
|
17
|
+
* engine.registerChannel(smartEmail);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare class LegacyChannelAdapter implements SmartChannel {
|
|
21
|
+
private inner;
|
|
22
|
+
readonly name: string;
|
|
23
|
+
get enabled(): boolean;
|
|
24
|
+
readonly minPriority: NotificationPriority;
|
|
25
|
+
constructor(inner: NotificationChannel, minPriority?: NotificationPriority);
|
|
26
|
+
send(ctx: NotificationContext, priority: NotificationPriority): Promise<boolean>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/notifications/channels/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAS,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAwB3F;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IAQrD,OAAO,CAAC,KAAK;IAPf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;gBAGjC,KAAK,EAAE,mBAAmB,EAClC,WAAW,GAAE,oBAA+B;IAMxC,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;CAIvF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter that wraps legacy NotificationChannel (alert-based)
|
|
3
|
+
* into the SmartChannel interface (context-based).
|
|
4
|
+
*
|
|
5
|
+
* This allows existing email, SMS, and webhook channels to work
|
|
6
|
+
* with the smart notification engine without rewriting them.
|
|
7
|
+
*/
|
|
8
|
+
/** Map smart priority to alert severity for the legacy interface. */
|
|
9
|
+
function priorityToSeverity(priority) {
|
|
10
|
+
return priority === "critical" || priority === "high" ? "critical" : "warning";
|
|
11
|
+
}
|
|
12
|
+
/** Build a minimal Alert from a NotificationContext for legacy channels. */
|
|
13
|
+
function contextToAlert(ctx, priority) {
|
|
14
|
+
const severity = priorityToSeverity(priority);
|
|
15
|
+
return {
|
|
16
|
+
id: `smart-${ctx.source}-${Date.now()}`,
|
|
17
|
+
thresholdId: ctx.eventType,
|
|
18
|
+
checkName: ctx.source,
|
|
19
|
+
metric: ctx.eventType,
|
|
20
|
+
severity,
|
|
21
|
+
state: "firing",
|
|
22
|
+
value: 0,
|
|
23
|
+
threshold: 0,
|
|
24
|
+
message: ctx.payload["message"] ?? `[${ctx.source}] ${ctx.eventType}`,
|
|
25
|
+
firedAt: ctx.timestamp,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Wraps a legacy NotificationChannel as a SmartChannel.
|
|
30
|
+
*
|
|
31
|
+
* Usage:
|
|
32
|
+
* ```ts
|
|
33
|
+
* const legacyEmail = new EmailChannel(config);
|
|
34
|
+
* const smartEmail = new LegacyChannelAdapter(legacyEmail, "normal");
|
|
35
|
+
* engine.registerChannel(smartEmail);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export class LegacyChannelAdapter {
|
|
39
|
+
inner;
|
|
40
|
+
name;
|
|
41
|
+
get enabled() {
|
|
42
|
+
return this.inner.enabled;
|
|
43
|
+
}
|
|
44
|
+
minPriority;
|
|
45
|
+
constructor(inner, minPriority = "normal") {
|
|
46
|
+
this.inner = inner;
|
|
47
|
+
this.name = inner.name;
|
|
48
|
+
this.minPriority = minPriority;
|
|
49
|
+
}
|
|
50
|
+
async send(ctx, priority) {
|
|
51
|
+
const alert = contextToAlert(ctx, priority);
|
|
52
|
+
return this.inner.send(alert);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/notifications/channels/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,qEAAqE;AACrE,SAAS,kBAAkB,CAAC,QAA8B;IACxD,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAED,4EAA4E;AAC5E,SAAS,cAAc,CAAC,GAAwB,EAAE,QAA8B;IAC9E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO;QACL,EAAE,EAAE,SAAS,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QACvC,WAAW,EAAE,GAAG,CAAC,SAAS;QAC1B,SAAS,EAAE,GAAG,CAAC,MAAM;QACrB,MAAM,EAAE,GAAG,CAAC,SAAS;QACrB,QAAQ;QACR,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,OAAO,EAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAY,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE;QACjF,OAAO,EAAE,GAAG,CAAC,SAAS;KACvB,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,oBAAoB;IAQrB;IAPD,IAAI,CAAS;IACtB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;IACQ,WAAW,CAAuB;IAE3C,YACU,KAA0B,EAClC,cAAoC,QAAQ;QADpC,UAAK,GAAL,KAAK,CAAqB;QAGlC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAwB,EAAE,QAA8B;QACjE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notifications/channels/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/notifications/channels/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log channel — writes notifications to the structured logger.
|
|
3
|
+
*
|
|
4
|
+
* Useful as a default/fallback channel, for development, and for
|
|
5
|
+
* maintaining an audit trail of all dispatched notifications.
|
|
6
|
+
*/
|
|
7
|
+
import type { NotificationContext, NotificationPriority, SmartChannel } from "../types.js";
|
|
8
|
+
export declare class LogChannel implements SmartChannel {
|
|
9
|
+
readonly name = "log";
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
readonly minPriority: NotificationPriority;
|
|
12
|
+
constructor(minPriority?: NotificationPriority);
|
|
13
|
+
send(ctx: NotificationContext, priority: NotificationPriority): Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/notifications/channels/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3F,qBAAa,UAAW,YAAW,YAAY;IAC7C,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,UAAQ;IACf,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;gBAE/B,WAAW,GAAE,oBAA4B;IAI/C,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;CAYvF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log channel — writes notifications to the structured logger.
|
|
3
|
+
*
|
|
4
|
+
* Useful as a default/fallback channel, for development, and for
|
|
5
|
+
* maintaining an audit trail of all dispatched notifications.
|
|
6
|
+
*/
|
|
7
|
+
import { createLogger } from "../../utils/logger.js";
|
|
8
|
+
const logger = createLogger("notifications.log-channel");
|
|
9
|
+
export class LogChannel {
|
|
10
|
+
name = "log";
|
|
11
|
+
enabled = true;
|
|
12
|
+
minPriority;
|
|
13
|
+
constructor(minPriority = "low") {
|
|
14
|
+
this.minPriority = minPriority;
|
|
15
|
+
}
|
|
16
|
+
async send(ctx, priority) {
|
|
17
|
+
logger.info("notification dispatched", {
|
|
18
|
+
priority,
|
|
19
|
+
source: ctx.source,
|
|
20
|
+
eventType: ctx.eventType,
|
|
21
|
+
gear: ctx.gear,
|
|
22
|
+
tags: ctx.tags,
|
|
23
|
+
actor: ctx.actor,
|
|
24
|
+
message: ctx.payload["message"],
|
|
25
|
+
});
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/notifications/channels/log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAC;AAEzD,MAAM,OAAO,UAAU;IACZ,IAAI,GAAG,KAAK,CAAC;IACtB,OAAO,GAAG,IAAI,CAAC;IACN,WAAW,CAAuB;IAE3C,YAAY,cAAoC,KAAK;QACnD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAwB,EAAE,QAA8B;QACjE,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACrC,QAAQ;YACR,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart notification engine.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates notification rules against event context,
|
|
5
|
+
* resolves priority and channels, and dispatches through
|
|
6
|
+
* registered smart channels with cooldown tracking.
|
|
7
|
+
*/
|
|
8
|
+
import type { EvaluationResult, NotificationContext, NotificationPriority, NotificationRule, RuleCondition, SmartChannel } from "./types.js";
|
|
9
|
+
/** Evaluate a single condition against a context. */
|
|
10
|
+
export declare function evaluateCondition(ctx: NotificationContext, condition: RuleCondition): boolean;
|
|
11
|
+
/** Check if all conditions of a rule match the context. */
|
|
12
|
+
export declare function matchRule(ctx: NotificationContext, rule: NotificationRule): boolean;
|
|
13
|
+
/** Derive a default priority from context when no rule overrides it. */
|
|
14
|
+
export declare function derivePriority(ctx: NotificationContext): NotificationPriority;
|
|
15
|
+
export declare class NotificationEngine {
|
|
16
|
+
private rules;
|
|
17
|
+
private channels;
|
|
18
|
+
/** Tracks last send time per cooldown key (ruleId:source). */
|
|
19
|
+
private cooldowns;
|
|
20
|
+
/** Add or replace a rule. */
|
|
21
|
+
addRule(rule: NotificationRule): void;
|
|
22
|
+
/** Remove a rule by id. */
|
|
23
|
+
removeRule(id: string): void;
|
|
24
|
+
/** Get all registered rules. */
|
|
25
|
+
getRules(): readonly NotificationRule[];
|
|
26
|
+
/** Register a smart channel. */
|
|
27
|
+
registerChannel(channel: SmartChannel): void;
|
|
28
|
+
/** Unregister a channel by name. */
|
|
29
|
+
unregisterChannel(name: string): void;
|
|
30
|
+
/** Evaluate all rules against a context and return the result. */
|
|
31
|
+
evaluate(ctx: NotificationContext): EvaluationResult;
|
|
32
|
+
/** Evaluate and dispatch a notification. Returns per-channel success map. */
|
|
33
|
+
dispatch(ctx: NotificationContext): Promise<Record<string, boolean>>;
|
|
34
|
+
/** Clear all cooldown state (useful for testing). */
|
|
35
|
+
clearCooldowns(): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/notifications/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAkBpB,qDAAqD;AACrD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,mBAAmB,EACxB,SAAS,EAAE,aAAa,GACvB,OAAO,CAuBT;AAED,2DAA2D;AAC3D,wBAAgB,SAAS,CACvB,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAGT;AAID,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,GAAG,EAAE,mBAAmB,GAAG,oBAAoB,CAM7E;AAID,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAmC;IACnD,8DAA8D;IAC9D,OAAO,CAAC,SAAS,CAA6B;IAE9C,6BAA6B;IAC7B,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAWrC,2BAA2B;IAC3B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,gCAAgC;IAChC,QAAQ,IAAI,SAAS,gBAAgB,EAAE;IAIvC,gCAAgC;IAChC,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAI5C,oCAAoC;IACpC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrC,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,gBAAgB;IAgDpD,6EAA6E;IACvE,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAyD1E,qDAAqD;IACrD,cAAc,IAAI,IAAI;CAGvB"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart notification engine.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates notification rules against event context,
|
|
5
|
+
* resolves priority and channels, and dispatches through
|
|
6
|
+
* registered smart channels with cooldown tracking.
|
|
7
|
+
*/
|
|
8
|
+
import { createLogger } from "../utils/logger.js";
|
|
9
|
+
import { PRIORITY_ORDER } from "./types.js";
|
|
10
|
+
const log = createLogger("notifications.engine");
|
|
11
|
+
// ─── Condition evaluation ───────────────────────────────────────────────────
|
|
12
|
+
/** Resolve a dot-separated field path from a NotificationContext. */
|
|
13
|
+
function resolveField(ctx, field) {
|
|
14
|
+
const parts = field.split(".");
|
|
15
|
+
let current = ctx;
|
|
16
|
+
for (const part of parts) {
|
|
17
|
+
if (current == null || typeof current !== "object")
|
|
18
|
+
return undefined;
|
|
19
|
+
current = current[part];
|
|
20
|
+
}
|
|
21
|
+
return current;
|
|
22
|
+
}
|
|
23
|
+
/** Evaluate a single condition against a context. */
|
|
24
|
+
export function evaluateCondition(ctx, condition) {
|
|
25
|
+
const actual = resolveField(ctx, condition.field);
|
|
26
|
+
switch (condition.operator) {
|
|
27
|
+
case "eq":
|
|
28
|
+
return actual === condition.value;
|
|
29
|
+
case "neq":
|
|
30
|
+
return actual !== condition.value;
|
|
31
|
+
case "in":
|
|
32
|
+
return Array.isArray(condition.value) && condition.value.includes(actual);
|
|
33
|
+
case "not_in":
|
|
34
|
+
return Array.isArray(condition.value) && !condition.value.includes(actual);
|
|
35
|
+
case "contains":
|
|
36
|
+
return Array.isArray(actual) && actual.includes(condition.value);
|
|
37
|
+
case "gt":
|
|
38
|
+
return typeof actual === "number" && typeof condition.value === "number" && actual > condition.value;
|
|
39
|
+
case "lt":
|
|
40
|
+
return typeof actual === "number" && typeof condition.value === "number" && actual < condition.value;
|
|
41
|
+
case "exists":
|
|
42
|
+
return condition.value ? actual !== undefined : actual === undefined;
|
|
43
|
+
default:
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Check if all conditions of a rule match the context. */
|
|
48
|
+
export function matchRule(ctx, rule) {
|
|
49
|
+
if (!rule.enabled)
|
|
50
|
+
return false;
|
|
51
|
+
return rule.conditions.every((c) => evaluateCondition(ctx, c));
|
|
52
|
+
}
|
|
53
|
+
// ─── Priority derivation ────────────────────────────────────────────────────
|
|
54
|
+
/** Derive a default priority from context when no rule overrides it. */
|
|
55
|
+
export function derivePriority(ctx) {
|
|
56
|
+
if (ctx.gear === "crisis")
|
|
57
|
+
return "critical";
|
|
58
|
+
if (ctx.tags.includes("critical"))
|
|
59
|
+
return "critical";
|
|
60
|
+
if (ctx.tags.includes("high"))
|
|
61
|
+
return "high";
|
|
62
|
+
if (ctx.tags.includes("low"))
|
|
63
|
+
return "low";
|
|
64
|
+
return "normal";
|
|
65
|
+
}
|
|
66
|
+
// ─── Engine ─────────────────────────────────────────────────────────────────
|
|
67
|
+
export class NotificationEngine {
|
|
68
|
+
rules = [];
|
|
69
|
+
channels = new Map();
|
|
70
|
+
/** Tracks last send time per cooldown key (ruleId:source). */
|
|
71
|
+
cooldowns = new Map();
|
|
72
|
+
/** Add or replace a rule. */
|
|
73
|
+
addRule(rule) {
|
|
74
|
+
const idx = this.rules.findIndex((r) => r.id === rule.id);
|
|
75
|
+
if (idx >= 0) {
|
|
76
|
+
this.rules[idx] = rule;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.rules.push(rule);
|
|
80
|
+
}
|
|
81
|
+
// Keep sorted by weight descending so highest-weight rules evaluate first.
|
|
82
|
+
this.rules.sort((a, b) => b.weight - a.weight);
|
|
83
|
+
}
|
|
84
|
+
/** Remove a rule by id. */
|
|
85
|
+
removeRule(id) {
|
|
86
|
+
this.rules = this.rules.filter((r) => r.id !== id);
|
|
87
|
+
}
|
|
88
|
+
/** Get all registered rules. */
|
|
89
|
+
getRules() {
|
|
90
|
+
return this.rules;
|
|
91
|
+
}
|
|
92
|
+
/** Register a smart channel. */
|
|
93
|
+
registerChannel(channel) {
|
|
94
|
+
this.channels.set(channel.name, channel);
|
|
95
|
+
}
|
|
96
|
+
/** Unregister a channel by name. */
|
|
97
|
+
unregisterChannel(name) {
|
|
98
|
+
this.channels.delete(name);
|
|
99
|
+
}
|
|
100
|
+
/** Evaluate all rules against a context and return the result. */
|
|
101
|
+
evaluate(ctx) {
|
|
102
|
+
const matchedRules = [];
|
|
103
|
+
const now = Date.now();
|
|
104
|
+
for (const rule of this.rules) {
|
|
105
|
+
if (!matchRule(ctx, rule))
|
|
106
|
+
continue;
|
|
107
|
+
// Cooldown check
|
|
108
|
+
if (rule.action.cooldownSeconds) {
|
|
109
|
+
const key = `${rule.id}:${ctx.source}`;
|
|
110
|
+
const lastSent = this.cooldowns.get(key);
|
|
111
|
+
if (lastSent && now - lastSent < rule.action.cooldownSeconds * 1000) {
|
|
112
|
+
log.debug("rule skipped by cooldown", { ruleId: rule.id, source: ctx.source });
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
matchedRules.push(rule);
|
|
117
|
+
if (rule.terminal)
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
// Resolve priority: highest from matched rules, falling back to context-derived
|
|
121
|
+
let priority = derivePriority(ctx);
|
|
122
|
+
for (const rule of matchedRules) {
|
|
123
|
+
if (rule.action.priority && PRIORITY_ORDER[rule.action.priority] > PRIORITY_ORDER[priority]) {
|
|
124
|
+
priority = rule.action.priority;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Collect channels from matched rules (deduplicated)
|
|
128
|
+
const channelSet = new Set();
|
|
129
|
+
for (const rule of matchedRules) {
|
|
130
|
+
for (const ch of rule.action.channels) {
|
|
131
|
+
channelSet.add(ch);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const channels = [...channelSet];
|
|
135
|
+
return {
|
|
136
|
+
context: ctx,
|
|
137
|
+
matchedRules,
|
|
138
|
+
priority,
|
|
139
|
+
channels,
|
|
140
|
+
shouldDeliver: matchedRules.length > 0,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/** Evaluate and dispatch a notification. Returns per-channel success map. */
|
|
144
|
+
async dispatch(ctx) {
|
|
145
|
+
const result = this.evaluate(ctx);
|
|
146
|
+
const outcomes = {};
|
|
147
|
+
if (!result.shouldDeliver) {
|
|
148
|
+
log.debug("no rules matched, skipping dispatch", { source: ctx.source, eventType: ctx.eventType });
|
|
149
|
+
return outcomes;
|
|
150
|
+
}
|
|
151
|
+
log.info("dispatching notification", {
|
|
152
|
+
matchedRules: result.matchedRules.length,
|
|
153
|
+
priority: result.priority,
|
|
154
|
+
channels: result.channels,
|
|
155
|
+
eventType: ctx.eventType,
|
|
156
|
+
});
|
|
157
|
+
const now = Date.now();
|
|
158
|
+
// Update cooldowns for matched rules
|
|
159
|
+
for (const rule of result.matchedRules) {
|
|
160
|
+
if (rule.action.cooldownSeconds) {
|
|
161
|
+
this.cooldowns.set(`${rule.id}:${ctx.source}`, now);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Dispatch to each resolved channel
|
|
165
|
+
const sends = result.channels.map(async (chName) => {
|
|
166
|
+
const channel = this.channels.get(chName);
|
|
167
|
+
if (!channel || !channel.enabled) {
|
|
168
|
+
log.warn("channel unavailable or disabled", { channel: chName });
|
|
169
|
+
outcomes[chName] = false;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
// Check channel's minimum priority
|
|
173
|
+
if (PRIORITY_ORDER[result.priority] < PRIORITY_ORDER[channel.minPriority]) {
|
|
174
|
+
log.debug("notification below channel min priority", {
|
|
175
|
+
channel: chName,
|
|
176
|
+
priority: result.priority,
|
|
177
|
+
minPriority: channel.minPriority,
|
|
178
|
+
});
|
|
179
|
+
outcomes[chName] = false;
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
outcomes[chName] = await channel.send(ctx, result.priority);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
log.error("channel send failed", { channel: chName, error: String(err) });
|
|
187
|
+
outcomes[chName] = false;
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
await Promise.allSettled(sends);
|
|
191
|
+
return outcomes;
|
|
192
|
+
}
|
|
193
|
+
/** Clear all cooldown state (useful for testing). */
|
|
194
|
+
clearCooldowns() {
|
|
195
|
+
this.cooldowns.clear();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/notifications/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Notification channels
|
|
2
|
+
* Notification system — legacy alert channels + smart rule-based engine.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Two layers:
|
|
5
|
+
* - Legacy: NotificationDispatcher broadcasts Alert objects to channels
|
|
6
|
+
* - Smart: NotificationEngine evaluates rules against context, routes to SmartChannels
|
|
7
|
+
*
|
|
8
|
+
* LegacyChannelAdapter bridges them — existing email/SMS/webhook channels
|
|
9
|
+
* work with both layers without rewriting.
|
|
6
10
|
*/
|
|
7
11
|
export { NotificationDispatcher } from "./channel.js";
|
|
8
12
|
export type { NotificationChannel } from "./channel.js";
|
|
@@ -13,4 +17,9 @@ export type { SmsChannelConfig } from "./sms.js";
|
|
|
13
17
|
export { WebhookChannel } from "./webhook.js";
|
|
14
18
|
export type { WebhookChannelConfig } from "./webhook.js";
|
|
15
19
|
export { PhoneChannel } from "./phone.js";
|
|
20
|
+
export { NotificationEngine, evaluateCondition, matchRule, derivePriority, } from "./engine.js";
|
|
21
|
+
export type { NotificationPriority, NotificationContext, NotificationRule, RuleCondition, RuleAction, RuleMatch, EvaluationResult, SmartChannel, } from "./types.js";
|
|
22
|
+
export { PRIORITY_ORDER } from "./types.js";
|
|
23
|
+
export { LegacyChannelAdapter } from "./channels/adapter.js";
|
|
24
|
+
export { LogChannel } from "./channels/log.js";
|
|
16
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Notification channels
|
|
2
|
+
* Notification system — legacy alert channels + smart rule-based engine.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Two layers:
|
|
5
|
+
* - Legacy: NotificationDispatcher broadcasts Alert objects to channels
|
|
6
|
+
* - Smart: NotificationEngine evaluates rules against context, routes to SmartChannels
|
|
7
|
+
*
|
|
8
|
+
* LegacyChannelAdapter bridges them — existing email/SMS/webhook channels
|
|
9
|
+
* work with both layers without rewriting.
|
|
6
10
|
*/
|
|
11
|
+
// ─── Legacy alert-based dispatch ─────────────────────────────────────────────
|
|
7
12
|
export { NotificationDispatcher } from "./channel.js";
|
|
13
|
+
// ─── Concrete channels (legacy interface) ────────────────────────────────────
|
|
8
14
|
export { EmailChannel } from "./email.js";
|
|
9
15
|
export { SmsChannel } from "./sms.js";
|
|
10
16
|
export { WebhookChannel } from "./webhook.js";
|
|
11
17
|
export { PhoneChannel } from "./phone.js";
|
|
18
|
+
// ─── Smart rule-based engine ─────────────────────────────────────────────────
|
|
19
|
+
export { NotificationEngine, evaluateCondition, matchRule, derivePriority, } from "./engine.js";
|
|
20
|
+
export { PRIORITY_ORDER } from "./types.js";
|
|
21
|
+
// ─── Smart channel adapters ──────────────────────────────────────────────────
|
|
22
|
+
export { LegacyChannelAdapter } from "./channels/adapter.js";
|
|
23
|
+
export { LogChannel } from "./channels/log.js";
|
|
12
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gFAAgF;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGtD,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,gFAAgF;AAChF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,aAAa,CAAC;AAarB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,gFAAgF;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|