@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
|
@@ -1,566 +0,0 @@
|
|
|
1
|
-
# Template & Skill Sharing Registry — Design Document
|
|
2
|
-
|
|
3
|
-
This document specifies the design for a registry system that enables sharing, discovery, and installation of skills, templates, and brain module extensions between Core instances. It integrates with the existing skills system (`skills/`), brain module structure (`brain/`), and follows established Core patterns: file-backed storage, append-only JSONL, provider abstraction, and progressive disclosure.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1. Problem statement
|
|
8
|
-
|
|
9
|
-
Today, skills and templates are local to a single Core instance. There is no way to:
|
|
10
|
-
|
|
11
|
-
- Publish a skill or template so others can use it.
|
|
12
|
-
- Discover community-contributed skills for new task types.
|
|
13
|
-
- Install a third-party skill and have it integrate with the existing routing table.
|
|
14
|
-
- Version or update skills after installation.
|
|
15
|
-
- Validate that a skill is safe and compatible before loading it into context.
|
|
16
|
-
|
|
17
|
-
The registry solves these problems while preserving Core's principles: files are the database, context is progressively disclosed, and nothing requires an external API to function locally.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 2. Concepts
|
|
22
|
-
|
|
23
|
-
### 2.1 Package
|
|
24
|
-
|
|
25
|
-
A **package** is the unit of sharing. It wraps one or more related files into a distributable unit.
|
|
26
|
-
|
|
27
|
-
```yaml
|
|
28
|
-
# package.yaml — lives at the root of every package
|
|
29
|
-
name: "write-blog"
|
|
30
|
-
version: "1.2.0"
|
|
31
|
-
type: "skill" # skill | template | module-extension
|
|
32
|
-
description: "Full workflow to write a long-form blog post."
|
|
33
|
-
author: "dash-core"
|
|
34
|
-
license: "MIT"
|
|
35
|
-
core-compat: ">=0.1.0" # minimum Core version
|
|
36
|
-
|
|
37
|
-
# What this package provides
|
|
38
|
-
provides:
|
|
39
|
-
- kind: skill
|
|
40
|
-
path: write-blog.md
|
|
41
|
-
slot: task # task | reference
|
|
42
|
-
- kind: template
|
|
43
|
-
path: templates/blog.md
|
|
44
|
-
slot: content
|
|
45
|
-
|
|
46
|
-
# What this package requires from the host brain
|
|
47
|
-
requires:
|
|
48
|
-
modules: ["identity", "content"]
|
|
49
|
-
files:
|
|
50
|
-
- brain/identity/tone-of-voice.md
|
|
51
|
-
- brain/content/CONTENT.md
|
|
52
|
-
|
|
53
|
-
# Optional: rules for auto-loading (see §5)
|
|
54
|
-
rules:
|
|
55
|
-
- trigger: { intent: "write *" }
|
|
56
|
-
action: load
|
|
57
|
-
priority: 50
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### 2.2 Registry
|
|
61
|
-
|
|
62
|
-
A **registry** is a source of packages. Three tiers, from local to remote:
|
|
63
|
-
|
|
64
|
-
| Tier | Name | Location | Requires network |
|
|
65
|
-
|------|------|----------|-----------------|
|
|
66
|
-
| 0 | Local | `brain/registry/installed/` | No |
|
|
67
|
-
| 1 | Workspace | Shared filesystem or Git repo | LAN only |
|
|
68
|
-
| 2 | Remote | HTTPS index (static JSON or API) | Yes |
|
|
69
|
-
|
|
70
|
-
The runtime queries tiers in order (local first). Offline operation always works because Tier 0 is self-contained.
|
|
71
|
-
|
|
72
|
-
### 2.3 Manifest
|
|
73
|
-
|
|
74
|
-
The **registry manifest** is the local index of all known packages (installed and available). Stored as append-only JSONL at `brain/registry/manifest.jsonl`.
|
|
75
|
-
|
|
76
|
-
```jsonl
|
|
77
|
-
{"_schema":"registry-manifest","version":"1.0","description":"Append-only index of registry packages."}
|
|
78
|
-
{"id":"pkg_write-blog_1.2.0","name":"write-blog","version":"1.2.0","type":"skill","source":"local","state":"installed","installedAt":"2026-02-27T10:00:00Z","checksum":"sha256:abc123...","status":"active"}
|
|
79
|
-
{"id":"pkg_log-okr_0.1.0","name":"log-okr","version":"0.1.0","type":"skill","source":"remote:dash-community","state":"available","discoveredAt":"2026-02-27T12:00:00Z","status":"active"}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Entry states: `available` → `installing` → `installed` → `updating` → `installed` | `uninstalled` (archived).
|
|
83
|
-
|
|
84
|
-
State transitions follow the same validation pattern as the agent runtime (`VALID_TRANSITIONS` + `isValidTransition()`).
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## 3. File layout
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
brain/registry/
|
|
92
|
-
├── manifest.jsonl # Append-only package index
|
|
93
|
-
├── sources.yaml # Configured registry sources (Tier 1 & 2)
|
|
94
|
-
└── installed/
|
|
95
|
-
├── write-blog/
|
|
96
|
-
│ ├── package.yaml # Package metadata
|
|
97
|
-
│ ├── write-blog.md # The skill file
|
|
98
|
-
│ └── templates/
|
|
99
|
-
│ └── blog.md # Bundled template
|
|
100
|
-
└── log-okr/
|
|
101
|
-
├── package.yaml
|
|
102
|
-
└── log-okr.md
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
`sources.yaml` defines non-local registries:
|
|
106
|
-
|
|
107
|
-
```yaml
|
|
108
|
-
sources:
|
|
109
|
-
- name: dash-community
|
|
110
|
-
type: git
|
|
111
|
-
url: https://github.com/dash-brain/community-skills.git
|
|
112
|
-
branch: main
|
|
113
|
-
path: packages/
|
|
114
|
-
- name: team-internal
|
|
115
|
-
type: filesystem
|
|
116
|
-
path: /mnt/shared/dash-skills/
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## 4. Integration with the existing skills system
|
|
122
|
-
|
|
123
|
-
The current skills system (`skills/README.md`) is the **primary skill location**. The registry is an additional source, not a replacement. The loader checks both locations.
|
|
124
|
-
|
|
125
|
-
### 4.1 Skill resolution order
|
|
126
|
-
|
|
127
|
-
When the agent routes a task (via AGENT.md decision table), the skill loader resolves in this order:
|
|
128
|
-
|
|
129
|
-
1. `skills/` directory (local, hand-authored — always wins)
|
|
130
|
-
2. `brain/registry/installed/` (registry-installed packages)
|
|
131
|
-
|
|
132
|
-
If the same `name` exists in both locations, the local `skills/` version takes precedence. This ensures the user can always override a registry skill by placing a file in `skills/`.
|
|
133
|
-
|
|
134
|
-
### 4.2 Routing table extension
|
|
135
|
-
|
|
136
|
-
Installed packages can add rows to the decision table. The registry does **not** modify `AGENT.md` directly. Instead, it maintains a supplemental routing file:
|
|
137
|
-
|
|
138
|
-
```
|
|
139
|
-
brain/registry/routes.yaml
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
```yaml
|
|
143
|
-
# Auto-generated from installed packages. Do not edit manually.
|
|
144
|
-
routes:
|
|
145
|
-
- intent: "log an OKR"
|
|
146
|
-
skill: log-okr
|
|
147
|
-
source: registry
|
|
148
|
-
steps:
|
|
149
|
-
- "Load brain/operations/OPERATIONS.md + goals"
|
|
150
|
-
- "Append to brain/operations/okrs.jsonl"
|
|
151
|
-
- "Confirm with user"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
The agent reads `AGENT.md` first, then `brain/registry/routes.yaml` for supplemental routes. AGENT.md routes always take priority.
|
|
155
|
-
|
|
156
|
-
### 4.3 Skill format compatibility
|
|
157
|
-
|
|
158
|
-
Registry skills use the same format as local skills — YAML frontmatter + Markdown body. No new format is introduced. A registry skill can be "ejected" into `skills/` by copying the `.md` file, with no conversion needed.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## 5. Rules engine synergies
|
|
163
|
-
|
|
164
|
-
Core doesn't have a formal rules engine today, but conditional logic is embedded in the goal loop, sync rules, and memory extraction heuristics. The registry introduces a lightweight **rule evaluation layer** that can later generalize into a standalone rules engine.
|
|
165
|
-
|
|
166
|
-
### 5.1 Package rules
|
|
167
|
-
|
|
168
|
-
Each package can declare rules in `package.yaml` (see §2.1). Rules follow a `trigger → condition → action` model:
|
|
169
|
-
|
|
170
|
-
```yaml
|
|
171
|
-
rules:
|
|
172
|
-
- trigger: { intent: "write *" } # Glob match on user intent
|
|
173
|
-
condition: { module_loaded: "content" } # Optional guard
|
|
174
|
-
action: load # load | suggest | block
|
|
175
|
-
priority: 50 # Lower = higher priority
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**Trigger types:**
|
|
179
|
-
|
|
180
|
-
| Trigger | Matches on | Example |
|
|
181
|
-
|---------|-----------|---------|
|
|
182
|
-
| `intent` | User intent string (glob) | `"write *"`, `"log * decision"` |
|
|
183
|
-
| `task_type` | Skill slot type | `"writing"`, `"operations"` |
|
|
184
|
-
| `file_changed` | Brain file path (glob) | `"brain/operations/goals.yaml"` |
|
|
185
|
-
| `schedule` | Cron expression | `"0 9 * * MON"` (Monday 9am) |
|
|
186
|
-
| `event` | Runtime event name | `"agent:completed"`, `"sync:done"` |
|
|
187
|
-
|
|
188
|
-
**Actions:**
|
|
189
|
-
|
|
190
|
-
| Action | Effect |
|
|
191
|
-
|--------|--------|
|
|
192
|
-
| `load` | Auto-load the skill/template into context |
|
|
193
|
-
| `suggest` | Surface a suggestion to the user ("You might want to use X") |
|
|
194
|
-
| `block` | Prevent execution if a condition is unmet (e.g., missing dependency) |
|
|
195
|
-
|
|
196
|
-
### 5.2 Rule evaluation
|
|
197
|
-
|
|
198
|
-
Rules are evaluated in two phases:
|
|
199
|
-
|
|
200
|
-
1. **Static phase** (at routing time): Check `intent` and `task_type` triggers. This extends the existing "route first" logic in AGENT.md without changing its file.
|
|
201
|
-
2. **Dynamic phase** (at runtime): Check `file_changed`, `schedule`, and `event` triggers. These integrate with the existing goal loop and sync timer infrastructure.
|
|
202
|
-
|
|
203
|
-
Rules from all installed packages are merged, sorted by priority, and deduplicated. Conflicts (two rules with the same trigger and different actions) are resolved by:
|
|
204
|
-
|
|
205
|
-
1. Local `skills/` rules always win over registry rules.
|
|
206
|
-
2. Lower `priority` number wins.
|
|
207
|
-
3. If still tied, `block` > `load` > `suggest`.
|
|
208
|
-
|
|
209
|
-
### 5.3 Path to a standalone rules engine
|
|
210
|
-
|
|
211
|
-
The rule evaluation logic lives in a single module (`src/registry/rules.ts`). This module is designed so it can later be extracted into a general-purpose `src/rules/engine.ts` that the goal loop, sync system, and memory extractor can also use. The key interface:
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
interface Rule {
|
|
215
|
-
id: string;
|
|
216
|
-
trigger: RuleTrigger;
|
|
217
|
-
condition?: RuleCondition;
|
|
218
|
-
action: RuleAction;
|
|
219
|
-
priority: number;
|
|
220
|
-
source: string; // "local" | package name
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
interface RuleEngine {
|
|
224
|
-
evaluate(context: RuleContext): RuleResult[];
|
|
225
|
-
register(rules: Rule[]): void;
|
|
226
|
-
unregister(source: string): void;
|
|
227
|
-
}
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
This is intentionally minimal — no RETE algorithm, no forward chaining. Just sorted filter + match, which is sufficient for Core's scale (tens of rules, not thousands).
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## 6. TypeScript runtime integration
|
|
235
|
-
|
|
236
|
-
### 6.1 New types (`src/registry/types.ts`)
|
|
237
|
-
|
|
238
|
-
```typescript
|
|
239
|
-
export interface PackageMeta {
|
|
240
|
-
id: string; // "pkg_{name}_{version}"
|
|
241
|
-
name: string;
|
|
242
|
-
version: string;
|
|
243
|
-
type: "skill" | "template" | "module-extension";
|
|
244
|
-
description: string;
|
|
245
|
-
author: string;
|
|
246
|
-
license: string;
|
|
247
|
-
coreCompat: string;
|
|
248
|
-
provides: PackageProvide[];
|
|
249
|
-
requires: PackageRequires;
|
|
250
|
-
rules: PackageRule[];
|
|
251
|
-
checksum: string;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
export type PackageState =
|
|
255
|
-
| "available"
|
|
256
|
-
| "installing"
|
|
257
|
-
| "installed"
|
|
258
|
-
| "updating"
|
|
259
|
-
| "uninstalled";
|
|
260
|
-
|
|
261
|
-
export interface ManifestEntry {
|
|
262
|
-
id: string;
|
|
263
|
-
name: string;
|
|
264
|
-
version: string;
|
|
265
|
-
type: string;
|
|
266
|
-
source: string;
|
|
267
|
-
state: PackageState;
|
|
268
|
-
installedAt?: string;
|
|
269
|
-
discoveredAt?: string;
|
|
270
|
-
checksum?: string;
|
|
271
|
-
status: "active" | "archived";
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
export interface PackageProvide {
|
|
275
|
-
kind: "skill" | "template" | "module-extension";
|
|
276
|
-
path: string;
|
|
277
|
-
slot: string;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
export interface PackageRequires {
|
|
281
|
-
modules: string[];
|
|
282
|
-
files: string[];
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
export interface PackageRule {
|
|
286
|
-
trigger: Record<string, string>;
|
|
287
|
-
condition?: Record<string, string>;
|
|
288
|
-
action: "load" | "suggest" | "block";
|
|
289
|
-
priority: number;
|
|
290
|
-
}
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
### 6.2 RegistryProvider interface (`src/registry/provider.ts`)
|
|
294
|
-
|
|
295
|
-
Follows the same abstraction pattern as `BoardProvider`:
|
|
296
|
-
|
|
297
|
-
```typescript
|
|
298
|
-
export interface RegistryProvider {
|
|
299
|
-
readonly name: string;
|
|
300
|
-
|
|
301
|
-
/** Check if this source is reachable. */
|
|
302
|
-
isAvailable(): Promise<boolean>;
|
|
303
|
-
|
|
304
|
-
/** Search packages by query. */
|
|
305
|
-
search(query: string, opts?: {
|
|
306
|
-
type?: string;
|
|
307
|
-
limit?: number;
|
|
308
|
-
}): Promise<PackageMeta[]>;
|
|
309
|
-
|
|
310
|
-
/** Fetch full package metadata by name and version. */
|
|
311
|
-
getPackage(name: string, version?: string): Promise<PackageMeta | null>;
|
|
312
|
-
|
|
313
|
-
/** Download package files to a temp directory. Returns the path. */
|
|
314
|
-
download(name: string, version: string): Promise<string | null>;
|
|
315
|
-
|
|
316
|
-
/** List all available packages (paginated). */
|
|
317
|
-
list(opts?: {
|
|
318
|
-
offset?: number;
|
|
319
|
-
limit?: number;
|
|
320
|
-
type?: string;
|
|
321
|
-
}): Promise<PackageMeta[]>;
|
|
322
|
-
}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
**Implementations:**
|
|
326
|
-
|
|
327
|
-
| Provider | Source | Notes |
|
|
328
|
-
|----------|--------|-------|
|
|
329
|
-
| `LocalRegistryProvider` | `brain/registry/installed/` | Always available, reads package.yaml files |
|
|
330
|
-
| `GitRegistryProvider` | Git repo URL | Clones/pulls on demand, caches locally |
|
|
331
|
-
| `HttpRegistryProvider` | HTTPS endpoint | Fetches a static `index.json` or queries an API |
|
|
332
|
-
|
|
333
|
-
### 6.3 RegistryManager (`src/registry/manager.ts`)
|
|
334
|
-
|
|
335
|
-
Central orchestrator, analogous to the agent `RuntimeManager`:
|
|
336
|
-
|
|
337
|
-
```typescript
|
|
338
|
-
export class RegistryManager {
|
|
339
|
-
constructor(
|
|
340
|
-
private brainDir: string,
|
|
341
|
-
private providers: RegistryProvider[],
|
|
342
|
-
) {}
|
|
343
|
-
|
|
344
|
-
/** Initialize manifest, load installed packages. */
|
|
345
|
-
async init(): Promise<void>;
|
|
346
|
-
|
|
347
|
-
/** Search across all providers. */
|
|
348
|
-
async search(query: string): Promise<PackageMeta[]>;
|
|
349
|
-
|
|
350
|
-
/** Install a package: download → validate → copy → update manifest. */
|
|
351
|
-
async install(name: string, version?: string): Promise<InstallResult>;
|
|
352
|
-
|
|
353
|
-
/** Uninstall: archive manifest entry, remove files. */
|
|
354
|
-
async uninstall(name: string): Promise<boolean>;
|
|
355
|
-
|
|
356
|
-
/** Update a package to a new version. */
|
|
357
|
-
async update(name: string): Promise<InstallResult>;
|
|
358
|
-
|
|
359
|
-
/** List installed packages. */
|
|
360
|
-
listInstalled(): ManifestEntry[];
|
|
361
|
-
|
|
362
|
-
/** Get merged rules from all installed packages. */
|
|
363
|
-
getRules(): PackageRule[];
|
|
364
|
-
|
|
365
|
-
/** Resolve a skill name: check skills/ first, then registry. */
|
|
366
|
-
resolveSkill(name: string): string | null; // Returns file path
|
|
367
|
-
}
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
### 6.4 Integration points
|
|
371
|
-
|
|
372
|
-
| Existing component | Integration |
|
|
373
|
-
|-------------------|-------------|
|
|
374
|
-
| `Brain.getContextForTurn()` | After standard skill loading, check `RegistryManager.getRules()` for additional auto-load triggers |
|
|
375
|
-
| `src/server.ts` | Add `/api/registry/*` routes: search, install, uninstall, list |
|
|
376
|
-
| Goal loop (`src/goals/loop.ts`) | Evaluate `schedule` and `event` rule triggers during loop tick |
|
|
377
|
-
| Agent runtime | Emit events that rules can trigger on (`agent:completed`, etc.) |
|
|
378
|
-
| Context assembler | Registry-loaded skills feed into `instructions` or `supportingContent` sections |
|
|
379
|
-
|
|
380
|
-
---
|
|
381
|
-
|
|
382
|
-
## 7. Installation flow
|
|
383
|
-
|
|
384
|
-
```
|
|
385
|
-
User: "install the okr-tracker skill"
|
|
386
|
-
|
|
387
|
-
1. RegistryManager.search("okr-tracker")
|
|
388
|
-
→ queries providers in tier order (local → workspace → remote)
|
|
389
|
-
|
|
390
|
-
2. User confirms package: okr-tracker v1.0.0 by dash-community
|
|
391
|
-
→ display: name, description, requires, provides, rules
|
|
392
|
-
|
|
393
|
-
3. RegistryManager.install("okr-tracker", "1.0.0")
|
|
394
|
-
a. Download package files to temp dir
|
|
395
|
-
b. Validate:
|
|
396
|
-
- package.yaml schema check
|
|
397
|
-
- checksum verification
|
|
398
|
-
- dependency check (required modules exist in brain/)
|
|
399
|
-
- no file path collisions with existing skills/
|
|
400
|
-
- skill file format valid (YAML frontmatter + Markdown)
|
|
401
|
-
c. Copy to brain/registry/installed/okr-tracker/
|
|
402
|
-
d. Append to manifest.jsonl (state: "installed")
|
|
403
|
-
e. Regenerate brain/registry/routes.yaml from all installed package rules
|
|
404
|
-
f. Return InstallResult { ok: true, path, warnings }
|
|
405
|
-
|
|
406
|
-
4. Skill is now available via routing table
|
|
407
|
-
→ next time user says "log an OKR", it resolves
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### 7.1 Validation rules
|
|
411
|
-
|
|
412
|
-
| Check | Blocks install? | Rationale |
|
|
413
|
-
|-------|----------------|-----------|
|
|
414
|
-
| Valid `package.yaml` schema | Yes | Prevents corrupt packages |
|
|
415
|
-
| Checksum mismatch | Yes | Integrity |
|
|
416
|
-
| Missing required brain modules | Yes | Skill would fail at runtime |
|
|
417
|
-
| Name collision with `skills/` | No (warn) | Local always takes precedence |
|
|
418
|
-
| `core-compat` version mismatch | No (warn) | May still work |
|
|
419
|
-
| Skill references non-existent files | No (warn) | User may create them later |
|
|
420
|
-
|
|
421
|
-
---
|
|
422
|
-
|
|
423
|
-
## 8. Security model
|
|
424
|
-
|
|
425
|
-
The registry handles untrusted content (community packages). Security is layered:
|
|
426
|
-
|
|
427
|
-
### 8.1 Package integrity
|
|
428
|
-
|
|
429
|
-
- Every package has a `checksum` (SHA-256 of the package directory contents).
|
|
430
|
-
- Remote registries serve checksums alongside metadata; the installer verifies after download.
|
|
431
|
-
|
|
432
|
-
### 8.2 Sandboxed content
|
|
433
|
-
|
|
434
|
-
Skills and templates are **passive Markdown files**. They contain instructions for the agent, not executable code. This is a fundamental security advantage — a malicious skill can only attempt prompt injection, not execute arbitrary code.
|
|
435
|
-
|
|
436
|
-
Mitigations for prompt injection:
|
|
437
|
-
|
|
438
|
-
- Installed skills are clearly tagged in context as `[registry: package-name]` so the agent (and user) can distinguish them from trusted local skills.
|
|
439
|
-
- Skills cannot modify `AGENT.md`, `CLAUDE.md`, or core brain module instruction files.
|
|
440
|
-
- Skills cannot write to `brain/memory/` directly — they can only instruct the agent to do so, and the agent follows the existing append-only rules.
|
|
441
|
-
|
|
442
|
-
### 8.3 Permission model
|
|
443
|
-
|
|
444
|
-
| Action | Requires |
|
|
445
|
-
|--------|----------|
|
|
446
|
-
| Install from local/workspace | No confirmation |
|
|
447
|
-
| Install from remote | User confirmation (display package metadata first) |
|
|
448
|
-
| Install a package with `module-extension` type | Explicit user approval + display of what it modifies |
|
|
449
|
-
| Auto-load via rule trigger | Allowed for `installed` packages only |
|
|
450
|
-
| `block` action in rules | Only from local `skills/` or explicitly approved packages |
|
|
451
|
-
|
|
452
|
-
### 8.4 Trust levels
|
|
453
|
-
|
|
454
|
-
```yaml
|
|
455
|
-
trust:
|
|
456
|
-
local: full # skills/ directory — user-authored
|
|
457
|
-
installed: standard # brain/registry/installed/ — validated
|
|
458
|
-
available: none # not yet installed — display-only
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
---
|
|
462
|
-
|
|
463
|
-
## 9. Publishing flow
|
|
464
|
-
|
|
465
|
-
A user publishes a skill by creating a package directory and pushing it to a registry source.
|
|
466
|
-
|
|
467
|
-
### 9.1 Local authoring
|
|
468
|
-
|
|
469
|
-
```
|
|
470
|
-
# 1. Author the skill in skills/ as usual
|
|
471
|
-
skills/my-new-skill.md
|
|
472
|
-
|
|
473
|
-
# 2. Package it
|
|
474
|
-
brain/registry/staging/my-new-skill/
|
|
475
|
-
├── package.yaml # Fill in metadata
|
|
476
|
-
└── my-new-skill.md # Copy or symlink
|
|
477
|
-
|
|
478
|
-
# 3. Validate locally
|
|
479
|
-
dash registry validate brain/registry/staging/my-new-skill/
|
|
480
|
-
|
|
481
|
-
# 4. Publish to a Git registry
|
|
482
|
-
dash registry publish my-new-skill --to dash-community
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
### 9.2 Package validation (pre-publish)
|
|
486
|
-
|
|
487
|
-
- `package.yaml` has all required fields.
|
|
488
|
-
- All `provides[].path` files exist.
|
|
489
|
-
- All `requires.files` are valid brain paths (not absolute or escaping `brain/`).
|
|
490
|
-
- No files outside the package directory are referenced by relative path.
|
|
491
|
-
- Skill files have valid YAML frontmatter.
|
|
492
|
-
|
|
493
|
-
---
|
|
494
|
-
|
|
495
|
-
## 10. CLI and chat commands
|
|
496
|
-
|
|
497
|
-
| Command | Effect |
|
|
498
|
-
|---------|--------|
|
|
499
|
-
| `dash registry search <query>` | Search all configured sources |
|
|
500
|
-
| `dash registry install <name>` | Install a package |
|
|
501
|
-
| `dash registry uninstall <name>` | Archive and remove |
|
|
502
|
-
| `dash registry update <name>` | Update to latest compatible version |
|
|
503
|
-
| `dash registry list` | List installed packages |
|
|
504
|
-
| `dash registry validate <path>` | Validate a package directory |
|
|
505
|
-
| `dash registry publish <name> --to <source>` | Publish to a registry source |
|
|
506
|
-
|
|
507
|
-
These can also be invoked via natural language in chat:
|
|
508
|
-
|
|
509
|
-
- "install the okr-tracker skill" → `registry install okr-tracker`
|
|
510
|
-
- "what skills are available?" → `registry search *`
|
|
511
|
-
- "update all my skills" → `registry update --all`
|
|
512
|
-
|
|
513
|
-
---
|
|
514
|
-
|
|
515
|
-
## 11. AGENT.md decision table addition
|
|
516
|
-
|
|
517
|
-
Once the registry is implemented, add this row to AGENT.md:
|
|
518
|
-
|
|
519
|
-
| User says / intent | Step 1 | Step 2 | Step 3 |
|
|
520
|
-
|-------------------|--------|--------|--------|
|
|
521
|
-
| Install / find a skill | Load `brain/registry/manifest.jsonl` | Search configured sources | Install + confirm + regenerate routes |
|
|
522
|
-
|
|
523
|
-
---
|
|
524
|
-
|
|
525
|
-
## 12. Migration path
|
|
526
|
-
|
|
527
|
-
### Phase 1 — Local registry (no network)
|
|
528
|
-
|
|
529
|
-
- Create `brain/registry/` directory structure.
|
|
530
|
-
- Implement `LocalRegistryProvider` and `RegistryManager`.
|
|
531
|
-
- Package the three existing skills (`voice-guide`, `write-blog`, `log-decision`) as registry packages in `brain/registry/installed/`.
|
|
532
|
-
- Keep `skills/` as the primary location; registry is additive.
|
|
533
|
-
- Add `/api/registry/list` and `/api/registry/installed` routes.
|
|
534
|
-
|
|
535
|
-
### Phase 2 — Git-based sharing
|
|
536
|
-
|
|
537
|
-
- Implement `GitRegistryProvider`.
|
|
538
|
-
- Add `sources.yaml` configuration.
|
|
539
|
-
- Implement `install`, `uninstall`, and `search` commands.
|
|
540
|
-
- Add `brain/registry/routes.yaml` generation.
|
|
541
|
-
- Manifest JSONL tracking.
|
|
542
|
-
|
|
543
|
-
### Phase 3 — Rules engine extraction
|
|
544
|
-
|
|
545
|
-
- Factor out rule evaluation from `src/registry/rules.ts` into `src/rules/engine.ts`.
|
|
546
|
-
- Wire the goal loop, sync system, and memory extractor to use the shared rule engine.
|
|
547
|
-
- Support `schedule` and `event` triggers.
|
|
548
|
-
|
|
549
|
-
### Phase 4 — Remote registry
|
|
550
|
-
|
|
551
|
-
- Implement `HttpRegistryProvider`.
|
|
552
|
-
- Add checksum verification, trust levels.
|
|
553
|
-
- Publishing flow and validation.
|
|
554
|
-
- Community index (static `index.json` hosted on GitHub Pages or similar).
|
|
555
|
-
|
|
556
|
-
---
|
|
557
|
-
|
|
558
|
-
## 13. Design principles
|
|
559
|
-
|
|
560
|
-
1. **Files are the database.** No SQLite, no Redis. Packages are directories, the manifest is JSONL, configuration is YAML.
|
|
561
|
-
2. **Offline first.** Tier 0 (local) always works. Network is optional and additive.
|
|
562
|
-
3. **Skills stay passive.** Registry packages are Markdown instructions, not executable code. The security surface is prompt injection, not code execution.
|
|
563
|
-
4. **Override by proximity.** `skills/` > `brain/registry/installed/` > remote. The user's local files always win.
|
|
564
|
-
5. **Append-only audit trail.** The manifest records every install, update, and removal. History is never lost.
|
|
565
|
-
6. **Progressive disclosure.** The agent loads package metadata first, then package files only when a rule triggers or the user invokes the skill.
|
|
566
|
-
7. **Same format, no lock-in.** Registry skills use the same YAML frontmatter + Markdown format. "Ejecting" a skill from the registry to `skills/` is a file copy.
|