@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
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* 5. Logs the governance decision to the audit trail
|
|
14
14
|
*/
|
|
15
15
|
import { readFile } from "node:fs/promises";
|
|
16
|
-
import { join } from "node:path";
|
|
16
|
+
import { join, resolve } from "node:path";
|
|
17
17
|
import { issueVoucher, checkVoucher, revokeVoucher } from "../voucher.js";
|
|
18
18
|
import { loadLockedPaths } from "../lib/locked.js";
|
|
19
19
|
import { checkSpawnPolicy, loadSpawnPolicy } from "./spawn-policy.js";
|
|
@@ -69,6 +69,47 @@ ${keyPrinciples.map((p) => `- ${p}`).join("\n")}
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
// ---------------------------------------------------------------------------
|
|
72
|
+
// Scope ceiling validation
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
/**
|
|
75
|
+
* Check that a working directory falls within the scope ceiling.
|
|
76
|
+
* Both paths are resolved to absolute before comparison.
|
|
77
|
+
* Returns null if valid, or a denial reason string if out of scope.
|
|
78
|
+
*/
|
|
79
|
+
function validateScopeCeiling(cwd, ceiling) {
|
|
80
|
+
if (!ceiling)
|
|
81
|
+
return null; // No ceiling = no constraint
|
|
82
|
+
if (!cwd)
|
|
83
|
+
return null; // No cwd = will default to process.cwd(), checked at spawn time
|
|
84
|
+
const resolvedCwd = resolve(cwd).replace(/\\/g, "/").toLowerCase();
|
|
85
|
+
const resolvedCeiling = resolve(ceiling).replace(/\\/g, "/").toLowerCase();
|
|
86
|
+
// cwd must be equal to or a subdirectory of the ceiling
|
|
87
|
+
if (resolvedCwd === resolvedCeiling)
|
|
88
|
+
return null;
|
|
89
|
+
if (resolvedCwd.startsWith(resolvedCeiling + "/"))
|
|
90
|
+
return null;
|
|
91
|
+
return `Scope violation: cwd "${cwd}" escapes ceiling "${ceiling}". Agents cannot widen their parent's scope.`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Compute the effective scope ceiling for a child agent.
|
|
95
|
+
* Takes the narrower of: parent's ceiling vs requested cwd.
|
|
96
|
+
* If no parent ceiling exists, the cwd itself becomes the ceiling.
|
|
97
|
+
*/
|
|
98
|
+
export function narrowScopeCeiling(parentCeiling, cwd) {
|
|
99
|
+
const effectiveCwd = cwd || process.cwd();
|
|
100
|
+
if (!parentCeiling)
|
|
101
|
+
return resolve(effectiveCwd);
|
|
102
|
+
const resolvedCwd = resolve(effectiveCwd).replace(/\\/g, "/").toLowerCase();
|
|
103
|
+
const resolvedCeiling = resolve(parentCeiling).replace(/\\/g, "/").toLowerCase();
|
|
104
|
+
// Return whichever is deeper (more specific)
|
|
105
|
+
if (resolvedCwd.startsWith(resolvedCeiling + "/") || resolvedCwd === resolvedCeiling) {
|
|
106
|
+
return resolve(effectiveCwd); // cwd is inside ceiling — use cwd (narrower)
|
|
107
|
+
}
|
|
108
|
+
// cwd is outside ceiling — this shouldn't happen if validation runs first,
|
|
109
|
+
// but return ceiling as the safe fallback
|
|
110
|
+
return resolve(parentCeiling);
|
|
111
|
+
}
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
72
113
|
// Main governance gate
|
|
73
114
|
// ---------------------------------------------------------------------------
|
|
74
115
|
/**
|
|
@@ -79,6 +120,33 @@ export async function governanceGate(opts) {
|
|
|
79
120
|
const { taskId, label, prompt, origin, ltm, scope: scopeOverride, voucherTtlMinutes = 30, skipVoucher = false, } = opts;
|
|
80
121
|
const scope = scopeOverride ?? `agent:spawn:${taskId}`;
|
|
81
122
|
const timestamp = new Date().toISOString();
|
|
123
|
+
// 0. Scope ceiling check — before anything else
|
|
124
|
+
const scopeViolation = validateScopeCeiling(opts.cwd, opts.scopeCeiling);
|
|
125
|
+
if (scopeViolation) {
|
|
126
|
+
log.warn(scopeViolation, { taskId, cwd: opts.cwd, ceiling: opts.scopeCeiling });
|
|
127
|
+
const auditEntry = {
|
|
128
|
+
timestamp,
|
|
129
|
+
taskId,
|
|
130
|
+
label,
|
|
131
|
+
decision: "deny",
|
|
132
|
+
lockedPathCount: 0,
|
|
133
|
+
reason: scopeViolation,
|
|
134
|
+
};
|
|
135
|
+
logActivity({
|
|
136
|
+
source: "agent",
|
|
137
|
+
summary: `Governance DENIED (scope ceiling): ${label}`,
|
|
138
|
+
detail: scopeViolation,
|
|
139
|
+
actionLabel: origin === "ai" ? "AUTONOMOUS" : "PROMPTED",
|
|
140
|
+
reason: "governance-gate",
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
allowed: false,
|
|
144
|
+
deniedReason: scopeViolation,
|
|
145
|
+
governedPrompt: prompt,
|
|
146
|
+
lockedPaths: [],
|
|
147
|
+
auditEntry,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
82
150
|
// 1. Load locked paths
|
|
83
151
|
const lockedPaths = await loadLockedPaths();
|
|
84
152
|
// 1b. Spawn policy check (if agentType provided)
|
|
@@ -149,6 +217,9 @@ export async function governanceGate(opts) {
|
|
|
149
217
|
// 3. Load principles
|
|
150
218
|
const principlesSection = await loadPrinciples();
|
|
151
219
|
// 4. Build governed prompt
|
|
220
|
+
const scopeSection = opts.scopeCeiling
|
|
221
|
+
? `\n## Scope Ceiling\nYou may only operate within: \`${resolve(opts.scopeCeiling)}\`\nDo NOT read, write, or access files outside this directory. Sub-agents\nyou spawn inherit this ceiling and cannot widen it.\n`
|
|
222
|
+
: "";
|
|
152
223
|
const governancePreamble = [
|
|
153
224
|
"## Governance Context",
|
|
154
225
|
"This agent session is governed by the Core orchestration system.",
|
|
@@ -157,6 +228,7 @@ export async function governanceGate(opts) {
|
|
|
157
228
|
"controls will terminate your session.",
|
|
158
229
|
"",
|
|
159
230
|
voucherToken ? buildVoucherSection(voucherToken, scope) : "",
|
|
231
|
+
scopeSection,
|
|
160
232
|
buildLockedPathsSection(lockedPaths),
|
|
161
233
|
principlesSection,
|
|
162
234
|
"## Heartbeat Requirement",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/agents/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/agents/governance.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,12 @@ export interface GovernedSpawnRequest {
|
|
|
46
46
|
currentAgentCount?: number;
|
|
47
47
|
/** Current running count of this specific agent type. */
|
|
48
48
|
currentTypeCount?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Scope ceiling — the outermost directory this agent (and its children)
|
|
51
|
+
* may operate in. Inherited from parent, can only narrow downward.
|
|
52
|
+
* If omitted on a root spawn, defaults to cwd (or process.cwd()).
|
|
53
|
+
*/
|
|
54
|
+
scopeCeiling?: string;
|
|
49
55
|
}
|
|
50
56
|
/** Result of a governed spawn — includes governance metadata. */
|
|
51
57
|
export interface GovernedSpawnResult {
|
|
@@ -61,6 +67,12 @@ export interface GovernedSpawnResult {
|
|
|
61
67
|
traceId: string;
|
|
62
68
|
/** Denial reason (if not allowed). */
|
|
63
69
|
deniedReason?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Effective scope ceiling for this agent. Pass this as
|
|
72
|
+
* `scopeCeiling` when spawning child agents to enforce
|
|
73
|
+
* the narrowing constraint.
|
|
74
|
+
*/
|
|
75
|
+
scopeCeiling?: string;
|
|
64
76
|
}
|
|
65
77
|
/** Dependencies injected into the governed spawn system. */
|
|
66
78
|
export interface GovernedSpawnDeps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governed-spawn.d.ts","sourceRoot":"","sources":["../../src/agents/governed-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"governed-spawn.d.ts","sourceRoot":"","sources":["../../src/agents/governed-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAKL,KAAK,kBAAkB,EAExB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAUxB,wCAAwC;AACxC,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;IACjC,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iEAAiE;AACjE,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,mCAAmC;IACnC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,GAAG,EAAE,mBAAmB,CAAC;IACzB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAMD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAuL9B"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* equivalent where vouchers, locked paths, and principles replace the
|
|
14
14
|
* interactive permission prompt.
|
|
15
15
|
*/
|
|
16
|
-
import { governanceGate, revokeGovernanceVoucher, } from "./governance.js";
|
|
16
|
+
import { governanceGate, revokeGovernanceVoucher, narrowScopeCeiling, } from "./governance.js";
|
|
17
17
|
import { createHeartbeatTracker, removeHeartbeatTracker, extractTaskKeywords, } from "./heartbeat.js";
|
|
18
18
|
import { logActivity, generateTraceId } from "../activity/log.js";
|
|
19
19
|
import { createLogger } from "../utils/logger.js";
|
|
@@ -40,7 +40,7 @@ export async function governedSpawn(request, deps) {
|
|
|
40
40
|
origin: request.origin,
|
|
41
41
|
traceId,
|
|
42
42
|
});
|
|
43
|
-
// 1. Run governance gate
|
|
43
|
+
// 1. Run governance gate (scope ceiling validated here)
|
|
44
44
|
const govOpts = {
|
|
45
45
|
taskId: request.taskId,
|
|
46
46
|
label: request.label,
|
|
@@ -52,6 +52,8 @@ export async function governedSpawn(request, deps) {
|
|
|
52
52
|
agentType: request.agentType,
|
|
53
53
|
currentAgentCount: request.currentAgentCount,
|
|
54
54
|
currentTypeCount: request.currentTypeCount,
|
|
55
|
+
cwd: request.cwd,
|
|
56
|
+
scopeCeiling: request.scopeCeiling,
|
|
55
57
|
};
|
|
56
58
|
const governance = await governanceGate(govOpts);
|
|
57
59
|
// 2. Check governance decision
|
|
@@ -83,6 +85,8 @@ export async function governedSpawn(request, deps) {
|
|
|
83
85
|
deniedReason: reason,
|
|
84
86
|
};
|
|
85
87
|
}
|
|
88
|
+
// Compute effective scope ceiling for this agent and its children
|
|
89
|
+
const effectiveCeiling = narrowScopeCeiling(request.scopeCeiling, request.cwd);
|
|
86
90
|
let instance;
|
|
87
91
|
try {
|
|
88
92
|
const spawnRequest = {
|
|
@@ -95,6 +99,7 @@ export async function governedSpawn(request, deps) {
|
|
|
95
99
|
...(request.tags ?? []),
|
|
96
100
|
"governed",
|
|
97
101
|
governance.voucherToken ? `voucher:${governance.voucherToken}` : "voucher:none",
|
|
102
|
+
`scope-ceiling:${effectiveCeiling}`,
|
|
98
103
|
],
|
|
99
104
|
parentId: request.parentId,
|
|
100
105
|
};
|
|
@@ -181,6 +186,7 @@ export async function governedSpawn(request, deps) {
|
|
|
181
186
|
governance,
|
|
182
187
|
heartbeat,
|
|
183
188
|
traceId,
|
|
189
|
+
scopeCeiling: effectiveCeiling,
|
|
184
190
|
};
|
|
185
191
|
}
|
|
186
192
|
//# sourceMappingURL=governed-spawn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governed-spawn.js","sourceRoot":"","sources":["../../src/agents/governed-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EACL,cAAc,EACd,uBAAuB,
|
|
1
|
+
{"version":3,"file":"governed-spawn.js","sourceRoot":"","sources":["../../src/agents/governed-spawn.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export { WorkflowEngine, parseWorkflowFile, type WorkflowDefinition, type StepDe
|
|
|
10
10
|
export { governanceGate, revokeGovernanceVoucher, validateGovernanceVoucher, type GovernanceDecision, type GovernanceAuditEntry, type GovernanceOptions, } from "./governance.js";
|
|
11
11
|
export { HeartbeatTracker, createHeartbeatTracker, getHeartbeatTracker, removeHeartbeatTracker, getAllHeartbeatStatuses, shutdownHeartbeats, extractTaskKeywords, type HeartbeatPulse, type HeartbeatConfig, type HeartbeatStatus, type TerminateCallback, } from "./heartbeat.js";
|
|
12
12
|
export { governedSpawn, type GovernedSpawnRequest, type GovernedSpawnResult, type GovernedSpawnDeps, } from "./governed-spawn.js";
|
|
13
|
+
export { parseIssueReports, processAgentIssues, storeIssues, listIssues as listSelfReportedIssues, } from "./issues.js";
|
|
14
|
+
export type { SelfReportedIssue } from "./types.js";
|
|
13
15
|
import type { CreateTaskInput, AgentTask } from "./types.js";
|
|
14
16
|
/** Create a task and immediately spawn it. */
|
|
15
17
|
export declare function submitTask(input: CreateTaskInput): Promise<AgentTask>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export { WorkflowEngine, parseWorkflowFile, } from "./workflow.js";
|
|
|
8
8
|
export { governanceGate, revokeGovernanceVoucher, validateGovernanceVoucher, } from "./governance.js";
|
|
9
9
|
export { HeartbeatTracker, createHeartbeatTracker, getHeartbeatTracker, removeHeartbeatTracker, getAllHeartbeatStatuses, shutdownHeartbeats, extractTaskKeywords, } from "./heartbeat.js";
|
|
10
10
|
export { governedSpawn, } from "./governed-spawn.js";
|
|
11
|
+
export { parseIssueReports, processAgentIssues, storeIssues, listIssues as listSelfReportedIssues, } from "./issues.js";
|
|
11
12
|
import { ensureDirs, createTask, readTask, readTaskOutput } from "./store.js";
|
|
12
13
|
import { spawnAgent, cancelAgent } from "./spawn.js";
|
|
13
14
|
import { recoverTasks, startAgentMonitor, stopAgentMonitor } from "./monitor.js";
|
package/dist/agents/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GAInB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,oBAAoB,GAYrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,GAIpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,iBAAiB,GAQlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,yBAAyB,GAI1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,GAKpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,kBAAkB,GAInB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,oBAAoB,GAYrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,GAIpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,iBAAiB,GAQlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,yBAAyB,GAI1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,GAKpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,UAAU,IAAI,sBAAsB,GACrC,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAA6B,cAAc,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAsB;IACrD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAU;IACtC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAU;IAC5C,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAU;IACzC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,YAAY,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC;AACtB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,cAAc;IAC5B,gBAAgB,EAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue reporter — sends anonymized self-reported issues to runcore.sh.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in: only reports if settings.telemetry.issueReporting is true.
|
|
5
|
+
* Batched: collects issues and sends in batches (max every 5 minutes).
|
|
6
|
+
* Idempotent: tracks which issues have been reported to avoid duplicates.
|
|
7
|
+
*/
|
|
8
|
+
import type { SelfReportedIssue } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Report issues to runcore.sh.
|
|
11
|
+
* Call this after processAgentIssues() stores new issues.
|
|
12
|
+
* Batches and deduplicates automatically.
|
|
13
|
+
*/
|
|
14
|
+
export declare function reportIssuesUpstream(issues: SelfReportedIssue[]): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=issue-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-reporter.d.ts","sourceRoot":"","sources":["../../src/agents/issue-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA6CpD;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmErF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue reporter — sends anonymized self-reported issues to runcore.sh.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in: only reports if settings.telemetry.issueReporting is true.
|
|
5
|
+
* Batched: collects issues and sends in batches (max every 5 minutes).
|
|
6
|
+
* Idempotent: tracks which issues have been reported to avoid duplicates.
|
|
7
|
+
*/
|
|
8
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { BRAIN_DIR } from "../lib/paths.js";
|
|
11
|
+
import { createLogger } from "../utils/logger.js";
|
|
12
|
+
import { getInstanceName } from "../instance.js";
|
|
13
|
+
import { getSettings } from "../settings.js";
|
|
14
|
+
const log = createLogger("agents.issue-reporter");
|
|
15
|
+
const RUNCORE_ISSUES_URL = "https://runcore.sh/api/issues/report";
|
|
16
|
+
const REPORTED_FILE = join(BRAIN_DIR, "operations", "reported-issues.json");
|
|
17
|
+
const MIN_BATCH_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
|
|
18
|
+
let lastReportTime = 0;
|
|
19
|
+
let reportedIds = new Set();
|
|
20
|
+
let loaded = false;
|
|
21
|
+
/** Load the set of already-reported issue IDs from disk. */
|
|
22
|
+
async function loadReportedIds() {
|
|
23
|
+
if (loaded)
|
|
24
|
+
return;
|
|
25
|
+
try {
|
|
26
|
+
const data = await readFile(REPORTED_FILE, "utf-8");
|
|
27
|
+
const ids = JSON.parse(data);
|
|
28
|
+
reportedIds = new Set(ids);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
reportedIds = new Set();
|
|
32
|
+
}
|
|
33
|
+
loaded = true;
|
|
34
|
+
}
|
|
35
|
+
/** Persist the reported IDs to disk. */
|
|
36
|
+
async function saveReportedIds() {
|
|
37
|
+
try {
|
|
38
|
+
await mkdir(join(BRAIN_DIR, "operations"), { recursive: true });
|
|
39
|
+
// Keep last 500 IDs to prevent unbounded growth
|
|
40
|
+
const ids = [...reportedIds].slice(-500);
|
|
41
|
+
await writeFile(REPORTED_FILE, JSON.stringify(ids), "utf-8");
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
log.warn("Failed to save reported IDs", { error: err instanceof Error ? err.message : String(err) });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if issue reporting is enabled.
|
|
49
|
+
* Uses CoreSettings — opt-in only.
|
|
50
|
+
*/
|
|
51
|
+
function isReportingEnabled() {
|
|
52
|
+
return getSettings().issueReporting === true;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Report issues to runcore.sh.
|
|
56
|
+
* Call this after processAgentIssues() stores new issues.
|
|
57
|
+
* Batches and deduplicates automatically.
|
|
58
|
+
*/
|
|
59
|
+
export async function reportIssuesUpstream(issues) {
|
|
60
|
+
if (issues.length === 0)
|
|
61
|
+
return;
|
|
62
|
+
// Check opt-in
|
|
63
|
+
if (!isReportingEnabled()) {
|
|
64
|
+
log.debug("Issue reporting disabled (opt-in via settings.yaml: issueReporting: true)");
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Rate limit batches
|
|
68
|
+
const now = Date.now();
|
|
69
|
+
if (now - lastReportTime < MIN_BATCH_INTERVAL_MS) {
|
|
70
|
+
log.debug("Skipping report — too soon since last batch");
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
await loadReportedIds();
|
|
74
|
+
// Filter out already-reported issues
|
|
75
|
+
const newIssues = issues.filter(i => !reportedIds.has(i.id));
|
|
76
|
+
if (newIssues.length === 0) {
|
|
77
|
+
log.debug("All issues already reported");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Build payload — strip agentTaskId (internal) and reportedAt (use server time)
|
|
81
|
+
const payload = {
|
|
82
|
+
instanceId: getInstanceName(),
|
|
83
|
+
issues: newIssues.map(i => ({
|
|
84
|
+
title: i.title,
|
|
85
|
+
description: i.description,
|
|
86
|
+
severity: i.severity,
|
|
87
|
+
category: i.category,
|
|
88
|
+
files: i.files,
|
|
89
|
+
suggestion: i.suggestion,
|
|
90
|
+
coreVersion: i.coreVersion,
|
|
91
|
+
})),
|
|
92
|
+
};
|
|
93
|
+
try {
|
|
94
|
+
const response = await fetch(RUNCORE_ISSUES_URL, {
|
|
95
|
+
method: "POST",
|
|
96
|
+
headers: { "Content-Type": "application/json" },
|
|
97
|
+
body: JSON.stringify(payload),
|
|
98
|
+
signal: AbortSignal.timeout(10000),
|
|
99
|
+
});
|
|
100
|
+
if (response.ok) {
|
|
101
|
+
const result = await response.json();
|
|
102
|
+
log.info(`Reported ${result.accepted} issue(s) upstream (${result.duplicates} duplicates)`);
|
|
103
|
+
// Mark as reported
|
|
104
|
+
for (const issue of newIssues) {
|
|
105
|
+
reportedIds.add(issue.id);
|
|
106
|
+
}
|
|
107
|
+
await saveReportedIds();
|
|
108
|
+
lastReportTime = now;
|
|
109
|
+
}
|
|
110
|
+
else if (response.status === 429) {
|
|
111
|
+
log.warn("Rate limited by runcore.sh — will retry later");
|
|
112
|
+
lastReportTime = now; // Back off
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
log.warn(`Report failed: ${response.status}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
// Network errors are expected (offline, DNS, etc.) — don't spam logs
|
|
120
|
+
log.debug("Report failed (network)", { error: err instanceof Error ? err.message : String(err) });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=issue-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-reporter.js","sourceRoot":"","sources":["../../src/agents/issue-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-reported issue collector.
|
|
3
|
+
*
|
|
4
|
+
* Read-only autonomous agents produce [ISSUE_REPORT] blocks.
|
|
5
|
+
* This module parses them from agent output, stores them in
|
|
6
|
+
* brain/operations/self-reports.jsonl, and provides a list for
|
|
7
|
+
* centralized backlog aggregation.
|
|
8
|
+
*
|
|
9
|
+
* All reports are anonymized before storage:
|
|
10
|
+
* - Absolute paths stripped to relative
|
|
11
|
+
* - Instance name, brain dir, and user name removed
|
|
12
|
+
* - Only structural/code-level info preserved
|
|
13
|
+
*/
|
|
14
|
+
import type { SelfReportedIssue } from "./types.js";
|
|
15
|
+
/**
|
|
16
|
+
* Parse [ISSUE_REPORT] blocks from agent output.
|
|
17
|
+
* Returns parsed and anonymized issues.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseIssueReports(output: string, agentTaskId: string): SelfReportedIssue[];
|
|
20
|
+
/**
|
|
21
|
+
* Append issues to the self-reports JSONL file.
|
|
22
|
+
*/
|
|
23
|
+
export declare function storeIssues(issues: SelfReportedIssue[]): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Read all stored self-reported issues.
|
|
26
|
+
*/
|
|
27
|
+
export declare function listIssues(): Promise<SelfReportedIssue[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Process agent output: extract issue reports, store them.
|
|
30
|
+
* Call this when a read-only agent completes.
|
|
31
|
+
*/
|
|
32
|
+
export declare function processAgentIssues(output: string, agentTaskId: string): Promise<SelfReportedIssue[]>;
|
|
33
|
+
//# sourceMappingURL=issues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/agents/issues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA8CpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAiC1F;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5E;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAU/D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAW1G"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-reported issue collector.
|
|
3
|
+
*
|
|
4
|
+
* Read-only autonomous agents produce [ISSUE_REPORT] blocks.
|
|
5
|
+
* This module parses them from agent output, stores them in
|
|
6
|
+
* brain/operations/self-reports.jsonl, and provides a list for
|
|
7
|
+
* centralized backlog aggregation.
|
|
8
|
+
*
|
|
9
|
+
* All reports are anonymized before storage:
|
|
10
|
+
* - Absolute paths stripped to relative
|
|
11
|
+
* - Instance name, brain dir, and user name removed
|
|
12
|
+
* - Only structural/code-level info preserved
|
|
13
|
+
*/
|
|
14
|
+
import { appendFile, readFile, mkdir } from "node:fs/promises";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { BRAIN_DIR } from "../lib/paths.js";
|
|
17
|
+
import { createLogger } from "../utils/logger.js";
|
|
18
|
+
import { reportIssuesUpstream } from "./issue-reporter.js";
|
|
19
|
+
const log = createLogger("agents.issues");
|
|
20
|
+
const REPORTS_DIR = join(BRAIN_DIR, "operations");
|
|
21
|
+
const REPORTS_FILE = join(REPORTS_DIR, "self-reports.jsonl");
|
|
22
|
+
/** Get Core version from package.json (cached). */
|
|
23
|
+
let _version = null;
|
|
24
|
+
function getCoreVersion() {
|
|
25
|
+
if (_version)
|
|
26
|
+
return _version;
|
|
27
|
+
try {
|
|
28
|
+
const pkg = require("../../package.json");
|
|
29
|
+
_version = pkg.version ?? "unknown";
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
_version = "unknown";
|
|
33
|
+
}
|
|
34
|
+
return _version;
|
|
35
|
+
}
|
|
36
|
+
/** Strip absolute paths to relative, remove instance-specific info. */
|
|
37
|
+
function anonymize(raw) {
|
|
38
|
+
const cwd = process.cwd().replace(/\\/g, "/");
|
|
39
|
+
const brainDir = BRAIN_DIR.replace(/\\/g, "/");
|
|
40
|
+
function stripPaths(s) {
|
|
41
|
+
// Replace absolute paths with relative
|
|
42
|
+
return s
|
|
43
|
+
.replace(new RegExp(cwd.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "gi"), ".")
|
|
44
|
+
.replace(new RegExp(brainDir.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "gi"), "<brain>")
|
|
45
|
+
// Strip Windows drive letters: E:/... → ./...
|
|
46
|
+
.replace(/[A-Z]:[/\\]/gi, "./")
|
|
47
|
+
// Strip user home paths
|
|
48
|
+
.replace(/C:[/\\]Users[/\\][^/\\]+[/\\]/gi, "~/");
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
...raw,
|
|
52
|
+
title: raw.title ? stripPaths(raw.title) : raw.title,
|
|
53
|
+
description: raw.description ? stripPaths(raw.description) : raw.description,
|
|
54
|
+
suggestion: raw.suggestion ? stripPaths(raw.suggestion) : raw.suggestion,
|
|
55
|
+
files: raw.files?.map((f) => stripPaths(f.replace(/\\/g, "/"))),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse [ISSUE_REPORT] blocks from agent output.
|
|
60
|
+
* Returns parsed and anonymized issues.
|
|
61
|
+
*/
|
|
62
|
+
export function parseIssueReports(output, agentTaskId) {
|
|
63
|
+
const blocks = [...output.matchAll(/\[ISSUE_REPORT\]\s*([\s\S]*?)\s*\[\/ISSUE_REPORT\]/g)];
|
|
64
|
+
if (blocks.length === 0)
|
|
65
|
+
return [];
|
|
66
|
+
const issues = [];
|
|
67
|
+
const now = new Date().toISOString();
|
|
68
|
+
const version = getCoreVersion();
|
|
69
|
+
for (const block of blocks) {
|
|
70
|
+
try {
|
|
71
|
+
const raw = JSON.parse(block[1].trim());
|
|
72
|
+
const anon = anonymize(raw);
|
|
73
|
+
const issue = {
|
|
74
|
+
id: `sr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`,
|
|
75
|
+
title: anon.title || "Untitled issue",
|
|
76
|
+
description: anon.description || "",
|
|
77
|
+
severity: ["low", "medium", "high"].includes(anon.severity) ? anon.severity : "low",
|
|
78
|
+
category: ["crash", "error", "performance", "design", "missing-feature"].includes(anon.category)
|
|
79
|
+
? anon.category : "error",
|
|
80
|
+
files: anon.files || [],
|
|
81
|
+
suggestion: anon.suggestion,
|
|
82
|
+
agentTaskId,
|
|
83
|
+
reportedAt: now,
|
|
84
|
+
coreVersion: version,
|
|
85
|
+
};
|
|
86
|
+
issues.push(issue);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
log.warn("Failed to parse ISSUE_REPORT block", { error: err instanceof Error ? err.message : String(err) });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return issues;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Append issues to the self-reports JSONL file.
|
|
96
|
+
*/
|
|
97
|
+
export async function storeIssues(issues) {
|
|
98
|
+
if (issues.length === 0)
|
|
99
|
+
return;
|
|
100
|
+
try {
|
|
101
|
+
await mkdir(REPORTS_DIR, { recursive: true });
|
|
102
|
+
const lines = issues.map((i) => JSON.stringify(i)).join("\n") + "\n";
|
|
103
|
+
await appendFile(REPORTS_FILE, lines, "utf-8");
|
|
104
|
+
log.info(`Stored ${issues.length} self-reported issue(s)`);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
log.error("Failed to store issues", { error: err instanceof Error ? err.message : String(err) });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Read all stored self-reported issues.
|
|
112
|
+
*/
|
|
113
|
+
export async function listIssues() {
|
|
114
|
+
try {
|
|
115
|
+
const content = await readFile(REPORTS_FILE, "utf-8");
|
|
116
|
+
return content
|
|
117
|
+
.split("\n")
|
|
118
|
+
.filter((line) => line.trim())
|
|
119
|
+
.map((line) => JSON.parse(line));
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Process agent output: extract issue reports, store them.
|
|
127
|
+
* Call this when a read-only agent completes.
|
|
128
|
+
*/
|
|
129
|
+
export async function processAgentIssues(output, agentTaskId) {
|
|
130
|
+
const issues = parseIssueReports(output, agentTaskId);
|
|
131
|
+
if (issues.length > 0) {
|
|
132
|
+
await storeIssues(issues);
|
|
133
|
+
log.info(`Agent ${agentTaskId} reported ${issues.length} issue(s)`, {
|
|
134
|
+
titles: issues.map((i) => i.title),
|
|
135
|
+
});
|
|
136
|
+
// Fire-and-forget: attempt upstream report (opt-in, non-blocking)
|
|
137
|
+
reportIssuesUpstream(issues).catch(() => { });
|
|
138
|
+
}
|
|
139
|
+
return issues;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/agents/issues.ts"],"names":[],"mappings":"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"}
|