reflectt-node 0.1.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/LICENSE +178 -0
- package/README.md +188 -0
- package/dist/activationEvents.d.ts +110 -0
- package/dist/activationEvents.d.ts.map +1 -0
- package/dist/activationEvents.js +378 -0
- package/dist/activationEvents.js.map +1 -0
- package/dist/activity-signal.d.ts +30 -0
- package/dist/activity-signal.d.ts.map +1 -0
- package/dist/activity-signal.js +93 -0
- package/dist/activity-signal.js.map +1 -0
- package/dist/alert-integrity.d.ts +100 -0
- package/dist/alert-integrity.d.ts.map +1 -0
- package/dist/alert-integrity.js +333 -0
- package/dist/alert-integrity.js.map +1 -0
- package/dist/alert-preflight.d.ts +40 -0
- package/dist/alert-preflight.d.ts.map +1 -0
- package/dist/alert-preflight.js +235 -0
- package/dist/alert-preflight.js.map +1 -0
- package/dist/analytics.d.ts +131 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +371 -0
- package/dist/analytics.js.map +1 -0
- package/dist/artifact-mirror.d.ts +26 -0
- package/dist/artifact-mirror.d.ts.map +1 -0
- package/dist/artifact-mirror.js +170 -0
- package/dist/artifact-mirror.js.map +1 -0
- package/dist/artifact-resolver.d.ts +48 -0
- package/dist/artifact-resolver.d.ts.map +1 -0
- package/dist/artifact-resolver.js +164 -0
- package/dist/artifact-resolver.js.map +1 -0
- package/dist/assignment.d.ts +116 -0
- package/dist/assignment.d.ts.map +1 -0
- package/dist/assignment.js +475 -0
- package/dist/assignment.js.map +1 -0
- package/dist/auditLedger.d.ts +50 -0
- package/dist/auditLedger.d.ts.map +1 -0
- package/dist/auditLedger.js +136 -0
- package/dist/auditLedger.js.map +1 -0
- package/dist/boardHealthWorker.d.ts +134 -0
- package/dist/boardHealthWorker.d.ts.map +1 -0
- package/dist/boardHealthWorker.js +882 -0
- package/dist/boardHealthWorker.js.map +1 -0
- package/dist/bootstrap-team.d.ts +42 -0
- package/dist/bootstrap-team.d.ts.map +1 -0
- package/dist/bootstrap-team.js +111 -0
- package/dist/bootstrap-team.js.map +1 -0
- package/dist/buildInfo.d.ts +17 -0
- package/dist/buildInfo.d.ts.map +1 -0
- package/dist/buildInfo.js +56 -0
- package/dist/buildInfo.js.map +1 -0
- package/dist/calendar-events.d.ts +133 -0
- package/dist/calendar-events.d.ts.map +1 -0
- package/dist/calendar-events.js +615 -0
- package/dist/calendar-events.js.map +1 -0
- package/dist/calendar-ical.d.ts +41 -0
- package/dist/calendar-ical.d.ts.map +1 -0
- package/dist/calendar-ical.js +413 -0
- package/dist/calendar-ical.js.map +1 -0
- package/dist/calendar-reminder-engine.d.ts +10 -0
- package/dist/calendar-reminder-engine.d.ts.map +1 -0
- package/dist/calendar-reminder-engine.js +143 -0
- package/dist/calendar-reminder-engine.js.map +1 -0
- package/dist/calendar.d.ts +75 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +391 -0
- package/dist/calendar.js.map +1 -0
- package/dist/canvas-multiplexer.d.ts +44 -0
- package/dist/canvas-multiplexer.d.ts.map +1 -0
- package/dist/canvas-multiplexer.js +150 -0
- package/dist/canvas-multiplexer.js.map +1 -0
- package/dist/canvas-slots.d.ts +83 -0
- package/dist/canvas-slots.d.ts.map +1 -0
- package/dist/canvas-slots.js +144 -0
- package/dist/canvas-slots.js.map +1 -0
- package/dist/canvas-types.d.ts +56 -0
- package/dist/canvas-types.d.ts.map +1 -0
- package/dist/canvas-types.js +54 -0
- package/dist/canvas-types.js.map +1 -0
- package/dist/cf-keepalive.d.ts +40 -0
- package/dist/cf-keepalive.d.ts.map +1 -0
- package/dist/cf-keepalive.js +153 -0
- package/dist/cf-keepalive.js.map +1 -0
- package/dist/changeFeed.d.ts +38 -0
- package/dist/changeFeed.d.ts.map +1 -0
- package/dist/changeFeed.js +324 -0
- package/dist/changeFeed.js.map +1 -0
- package/dist/channels.d.ts +28 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +23 -0
- package/dist/channels.js.map +1 -0
- package/dist/chat-approval-detector.d.ts +47 -0
- package/dist/chat-approval-detector.d.ts.map +1 -0
- package/dist/chat-approval-detector.js +224 -0
- package/dist/chat-approval-detector.js.map +1 -0
- package/dist/chat.d.ts +119 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +666 -0
- package/dist/chat.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1142 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud.d.ts +45 -0
- package/dist/cloud.d.ts.map +1 -0
- package/dist/cloud.js +962 -0
- package/dist/cloud.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +33 -0
- package/dist/config.js.map +1 -0
- package/dist/connectivity.d.ts +59 -0
- package/dist/connectivity.d.ts.map +1 -0
- package/dist/connectivity.js +173 -0
- package/dist/connectivity.js.map +1 -0
- package/dist/contacts.d.ts +59 -0
- package/dist/contacts.d.ts.map +1 -0
- package/dist/contacts.js +183 -0
- package/dist/contacts.js.map +1 -0
- package/dist/content.d.ts +130 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +186 -0
- package/dist/content.js.map +1 -0
- package/dist/context-budget.d.ts +87 -0
- package/dist/context-budget.d.ts.map +1 -0
- package/dist/context-budget.js +459 -0
- package/dist/context-budget.js.map +1 -0
- package/dist/continuity-loop.d.ts +55 -0
- package/dist/continuity-loop.d.ts.map +1 -0
- package/dist/continuity-loop.js +267 -0
- package/dist/continuity-loop.js.map +1 -0
- package/dist/dashboard.d.ts +6 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +2348 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/db.d.ts +44 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +648 -0
- package/dist/db.js.map +1 -0
- package/dist/doctor.d.ts +30 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +159 -0
- package/dist/doctor.js.map +1 -0
- package/dist/duplicateClosureGuard.d.ts +31 -0
- package/dist/duplicateClosureGuard.d.ts.map +1 -0
- package/dist/duplicateClosureGuard.js +83 -0
- package/dist/duplicateClosureGuard.js.map +1 -0
- package/dist/embeddings.d.ts +13 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +78 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/escalation.d.ts +80 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +213 -0
- package/dist/escalation.js.map +1 -0
- package/dist/events.d.ts +130 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +382 -0
- package/dist/events.js.map +1 -0
- package/dist/executionSweeper.d.ts +97 -0
- package/dist/executionSweeper.d.ts.map +1 -0
- package/dist/executionSweeper.js +875 -0
- package/dist/executionSweeper.js.map +1 -0
- package/dist/experiments.d.ts +47 -0
- package/dist/experiments.d.ts.map +1 -0
- package/dist/experiments.js +133 -0
- package/dist/experiments.js.map +1 -0
- package/dist/feedback.d.ts +179 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +397 -0
- package/dist/feedback.js.map +1 -0
- package/dist/files.d.ts +52 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +172 -0
- package/dist/files.js.map +1 -0
- package/dist/format-duration.d.ts +19 -0
- package/dist/format-duration.d.ts.map +1 -0
- package/dist/format-duration.js +33 -0
- package/dist/format-duration.js.map +1 -0
- package/dist/github-actor-auth.d.ts +20 -0
- package/dist/github-actor-auth.d.ts.map +1 -0
- package/dist/github-actor-auth.js +54 -0
- package/dist/github-actor-auth.js.map +1 -0
- package/dist/github-ci.d.ts +16 -0
- package/dist/github-ci.d.ts.map +1 -0
- package/dist/github-ci.js +37 -0
- package/dist/github-ci.js.map +1 -0
- package/dist/github-identity.d.ts +30 -0
- package/dist/github-identity.d.ts.map +1 -0
- package/dist/github-identity.js +96 -0
- package/dist/github-identity.js.map +1 -0
- package/dist/github-reviews.d.ts +24 -0
- package/dist/github-reviews.d.ts.map +1 -0
- package/dist/github-reviews.js +56 -0
- package/dist/github-reviews.js.map +1 -0
- package/dist/health.d.ts +391 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +1841 -0
- package/dist/health.js.map +1 -0
- package/dist/host-keepalive.d.ts +22 -0
- package/dist/host-keepalive.d.ts.map +1 -0
- package/dist/host-keepalive.js +126 -0
- package/dist/host-keepalive.js.map +1 -0
- package/dist/host-registry.d.ts +43 -0
- package/dist/host-registry.d.ts.map +1 -0
- package/dist/host-registry.js +93 -0
- package/dist/host-registry.js.map +1 -0
- package/dist/inbox.d.ts +87 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +410 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +306 -0
- package/dist/index.js.map +1 -0
- package/dist/insight-mutation.d.ts +32 -0
- package/dist/insight-mutation.d.ts.map +1 -0
- package/dist/insight-mutation.js +160 -0
- package/dist/insight-mutation.js.map +1 -0
- package/dist/insight-promotion.d.ts +89 -0
- package/dist/insight-promotion.d.ts.map +1 -0
- package/dist/insight-promotion.js +278 -0
- package/dist/insight-promotion.js.map +1 -0
- package/dist/insight-task-bridge.d.ts +77 -0
- package/dist/insight-task-bridge.d.ts.map +1 -0
- package/dist/insight-task-bridge.js +556 -0
- package/dist/insight-task-bridge.js.map +1 -0
- package/dist/insights.d.ts +222 -0
- package/dist/insights.d.ts.map +1 -0
- package/dist/insights.js +871 -0
- package/dist/insights.js.map +1 -0
- package/dist/intake-pipeline.d.ts +74 -0
- package/dist/intake-pipeline.d.ts.map +1 -0
- package/dist/intake-pipeline.js +199 -0
- package/dist/intake-pipeline.js.map +1 -0
- package/dist/intensity.d.ts +31 -0
- package/dist/intensity.d.ts.map +1 -0
- package/dist/intensity.js +94 -0
- package/dist/intensity.js.map +1 -0
- package/dist/knowledge-auto-index.d.ts +37 -0
- package/dist/knowledge-auto-index.d.ts.map +1 -0
- package/dist/knowledge-auto-index.js +149 -0
- package/dist/knowledge-auto-index.js.map +1 -0
- package/dist/knowledge-docs.d.ts +45 -0
- package/dist/knowledge-docs.d.ts.map +1 -0
- package/dist/knowledge-docs.js +188 -0
- package/dist/knowledge-docs.js.map +1 -0
- package/dist/lane-config.d.ts +25 -0
- package/dist/lane-config.d.ts.map +1 -0
- package/dist/lane-config.js +105 -0
- package/dist/lane-config.js.map +1 -0
- package/dist/lineage.d.ts +86 -0
- package/dist/lineage.d.ts.map +1 -0
- package/dist/lineage.js +303 -0
- package/dist/lineage.js.map +1 -0
- package/dist/logStore.d.ts +25 -0
- package/dist/logStore.d.ts.map +1 -0
- package/dist/logStore.js +83 -0
- package/dist/logStore.js.map +1 -0
- package/dist/manage.d.ts +12 -0
- package/dist/manage.d.ts.map +1 -0
- package/dist/manage.js +253 -0
- package/dist/manage.js.map +1 -0
- package/dist/mcp.d.ts +5 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +604 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +47 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +149 -0
- package/dist/memory.js.map +1 -0
- package/dist/mention-ack.d.ts +80 -0
- package/dist/mention-ack.d.ts.map +1 -0
- package/dist/mention-ack.js +175 -0
- package/dist/mention-ack.js.map +1 -0
- package/dist/messageRouter.d.ts +60 -0
- package/dist/messageRouter.d.ts.map +1 -0
- package/dist/messageRouter.js +309 -0
- package/dist/messageRouter.js.map +1 -0
- package/dist/mutationAlert.d.ts +44 -0
- package/dist/mutationAlert.d.ts.map +1 -0
- package/dist/mutationAlert.js +174 -0
- package/dist/mutationAlert.js.map +1 -0
- package/dist/noise-budget.d.ts +136 -0
- package/dist/noise-budget.d.ts.map +1 -0
- package/dist/noise-budget.js +340 -0
- package/dist/noise-budget.js.map +1 -0
- package/dist/notifications.d.ts +67 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +253 -0
- package/dist/notifications.js.map +1 -0
- package/dist/openclaw.d.ts +34 -0
- package/dist/openclaw.d.ts.map +1 -0
- package/dist/openclaw.js +208 -0
- package/dist/openclaw.js.map +1 -0
- package/dist/pause-controls.d.ts +31 -0
- package/dist/pause-controls.d.ts.map +1 -0
- package/dist/pause-controls.js +130 -0
- package/dist/pause-controls.js.map +1 -0
- package/dist/pidlock.d.ts +25 -0
- package/dist/pidlock.d.ts.map +1 -0
- package/dist/pidlock.js +179 -0
- package/dist/pidlock.js.map +1 -0
- package/dist/policy.d.ts +139 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +264 -0
- package/dist/policy.js.map +1 -0
- package/dist/polls.d.ts +47 -0
- package/dist/polls.d.ts.map +1 -0
- package/dist/polls.js +162 -0
- package/dist/polls.js.map +1 -0
- package/dist/portability.d.ts +55 -0
- package/dist/portability.d.ts.map +1 -0
- package/dist/portability.js +292 -0
- package/dist/portability.js.map +1 -0
- package/dist/pr-integrity.d.ts +45 -0
- package/dist/pr-integrity.d.ts.map +1 -0
- package/dist/pr-integrity.js +124 -0
- package/dist/pr-integrity.js.map +1 -0
- package/dist/prAutoMerge.d.ts +62 -0
- package/dist/prAutoMerge.d.ts.map +1 -0
- package/dist/prAutoMerge.js +493 -0
- package/dist/prAutoMerge.js.map +1 -0
- package/dist/preflight.d.ts +66 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +864 -0
- package/dist/preflight.js.map +1 -0
- package/dist/presence.d.ts +98 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +347 -0
- package/dist/presence.js.map +1 -0
- package/dist/provisioning.d.ts +101 -0
- package/dist/provisioning.d.ts.map +1 -0
- package/dist/provisioning.js +430 -0
- package/dist/provisioning.js.map +1 -0
- package/dist/reflection-automation.d.ts +59 -0
- package/dist/reflection-automation.d.ts.map +1 -0
- package/dist/reflection-automation.js +350 -0
- package/dist/reflection-automation.js.map +1 -0
- package/dist/reflections.d.ts +65 -0
- package/dist/reflections.d.ts.map +1 -0
- package/dist/reflections.js +306 -0
- package/dist/reflections.js.map +1 -0
- package/dist/release.d.ts +67 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +275 -0
- package/dist/release.js.map +1 -0
- package/dist/request-tracker.d.ts +36 -0
- package/dist/request-tracker.d.ts.map +1 -0
- package/dist/request-tracker.js +109 -0
- package/dist/request-tracker.js.map +1 -0
- package/dist/research.d.ts +75 -0
- package/dist/research.d.ts.map +1 -0
- package/dist/research.js +171 -0
- package/dist/research.js.map +1 -0
- package/dist/routing-approvals.d.ts +73 -0
- package/dist/routing-approvals.d.ts.map +1 -0
- package/dist/routing-approvals.js +88 -0
- package/dist/routing-approvals.js.map +1 -0
- package/dist/routing-override.d.ts +94 -0
- package/dist/routing-override.d.ts.map +1 -0
- package/dist/routing-override.js +290 -0
- package/dist/routing-override.js.map +1 -0
- package/dist/scope-routing.d.ts +18 -0
- package/dist/scope-routing.d.ts.map +1 -0
- package/dist/scope-routing.js +29 -0
- package/dist/scope-routing.js.map +1 -0
- package/dist/secrets.d.ts +77 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +287 -0
- package/dist/secrets.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +10887 -0
- package/dist/server.js.map +1 -0
- package/dist/service-probe.d.ts +53 -0
- package/dist/service-probe.d.ts.map +1 -0
- package/dist/service-probe.js +225 -0
- package/dist/service-probe.js.map +1 -0
- package/dist/shared-workspace-api.d.ts +73 -0
- package/dist/shared-workspace-api.d.ts.map +1 -0
- package/dist/shared-workspace-api.js +281 -0
- package/dist/shared-workspace-api.js.map +1 -0
- package/dist/shipped-heartbeat.d.ts +91 -0
- package/dist/shipped-heartbeat.d.ts.map +1 -0
- package/dist/shipped-heartbeat.js +272 -0
- package/dist/shipped-heartbeat.js.map +1 -0
- package/dist/starter-team.d.ts +23 -0
- package/dist/starter-team.d.ts.map +1 -0
- package/dist/starter-team.js +88 -0
- package/dist/starter-team.js.map +1 -0
- package/dist/suppression-ledger.d.ts +73 -0
- package/dist/suppression-ledger.d.ts.map +1 -0
- package/dist/suppression-ledger.js +125 -0
- package/dist/suppression-ledger.js.map +1 -0
- package/dist/system-loop-state.d.ts +4 -0
- package/dist/system-loop-state.d.ts.map +1 -0
- package/dist/system-loop-state.js +40 -0
- package/dist/system-loop-state.js.map +1 -0
- package/dist/taskCommentIngest.d.ts +43 -0
- package/dist/taskCommentIngest.d.ts.map +1 -0
- package/dist/taskCommentIngest.js +59 -0
- package/dist/taskCommentIngest.js.map +1 -0
- package/dist/taskPrecheck.d.ts +20 -0
- package/dist/taskPrecheck.d.ts.map +1 -0
- package/dist/taskPrecheck.js +329 -0
- package/dist/taskPrecheck.js.map +1 -0
- package/dist/taskStateSync.d.ts +8 -0
- package/dist/taskStateSync.d.ts.map +1 -0
- package/dist/taskStateSync.js +79 -0
- package/dist/taskStateSync.js.map +1 -0
- package/dist/tasks.d.ts +140 -0
- package/dist/tasks.d.ts.map +1 -0
- package/dist/tasks.js +1281 -0
- package/dist/tasks.js.map +1 -0
- package/dist/team-config.d.ts +24 -0
- package/dist/team-config.d.ts.map +1 -0
- package/dist/team-config.js +221 -0
- package/dist/team-config.js.map +1 -0
- package/dist/team-doctor.d.ts +22 -0
- package/dist/team-doctor.d.ts.map +1 -0
- package/dist/team-doctor.js +270 -0
- package/dist/team-doctor.js.map +1 -0
- package/dist/team-pulse.d.ts +52 -0
- package/dist/team-pulse.d.ts.map +1 -0
- package/dist/team-pulse.js +176 -0
- package/dist/team-pulse.js.map +1 -0
- package/dist/telemetry.d.ts +74 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +256 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/test-task-filter.d.ts +21 -0
- package/dist/test-task-filter.d.ts.map +1 -0
- package/dist/test-task-filter.js +48 -0
- package/dist/test-task-filter.js.map +1 -0
- package/dist/types.d.ts +126 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/usage-tracking.d.ts +101 -0
- package/dist/usage-tracking.d.ts.map +1 -0
- package/dist/usage-tracking.js +325 -0
- package/dist/usage-tracking.js.map +1 -0
- package/dist/vector-store.d.ts +87 -0
- package/dist/vector-store.d.ts.map +1 -0
- package/dist/vector-store.js +247 -0
- package/dist/vector-store.js.map +1 -0
- package/dist/watchdog/idleNudgeLane.d.ts +22 -0
- package/dist/watchdog/idleNudgeLane.d.ts.map +1 -0
- package/dist/watchdog/idleNudgeLane.js +98 -0
- package/dist/watchdog/idleNudgeLane.js.map +1 -0
- package/dist/webhooks.d.ts +103 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +398 -0
- package/dist/webhooks.js.map +1 -0
- package/dist/working-contract.d.ts +42 -0
- package/dist/working-contract.d.ts.map +1 -0
- package/dist/working-contract.js +228 -0
- package/dist/working-contract.js.map +1 -0
- package/dist/ws-heartbeat.d.ts +66 -0
- package/dist/ws-heartbeat.d.ts.map +1 -0
- package/dist/ws-heartbeat.js +174 -0
- package/dist/ws-heartbeat.js.map +1 -0
- package/package.json +87 -0
- package/plugins/reflectt-channel/README.md +96 -0
- package/plugins/reflectt-channel/index.ts +789 -0
- package/plugins/reflectt-channel/openclaw.plugin.json +23 -0
- package/plugins/reflectt-channel/package.json +23 -0
- package/plugins/reflectt-channel/src/channel.ts +433 -0
- package/plugins/reflectt-channel/src/types.ts +29 -0
- package/public/avatars/echo.png +0 -0
- package/public/avatars/harmony.png +0 -0
- package/public/avatars/kai.png +0 -0
- package/public/avatars/link.png +0 -0
- package/public/avatars/pixel.png +0 -0
- package/public/avatars/rhythm.png +0 -0
- package/public/avatars/ryan.png +0 -0
- package/public/avatars/sage.png +0 -0
- package/public/avatars/scout.png +0 -0
- package/public/avatars/spark.png +0 -0
- package/public/dashboard-animations.css +381 -0
- package/public/dashboard.js +3479 -0
- package/public/docs.md +1062 -0
- package/public/file-upload-mock.html +1097 -0
- package/public/og-card.png +0 -0
- package/public/ui-kit.html +318 -0
- package/public/widget/feedback.js +194 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) Reflectt AI
|
|
3
|
+
/**
|
|
4
|
+
* Host Provisioning Module
|
|
5
|
+
*
|
|
6
|
+
* Connects a fresh host to Reflectt Cloud:
|
|
7
|
+
* 1. Enrolls with a join token (or API key)
|
|
8
|
+
* 2. Pulls encrypted config + secrets on first connect
|
|
9
|
+
* 3. Auto-configures webhook routes for the host
|
|
10
|
+
* 4. Reports provisioning status for dashboard visibility
|
|
11
|
+
*
|
|
12
|
+
* Depends on: cloud.ts (heartbeat/sync), secrets.ts (vault), config.ts (REFLECTT_HOME)
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { randomBytes } from 'node:crypto';
|
|
17
|
+
import { REFLECTT_HOME } from './config.js';
|
|
18
|
+
// ── Constants ──
|
|
19
|
+
const STATE_FILE = 'provisioning.json';
|
|
20
|
+
const CONFIG_PULL_ENDPOINT = '/api/hosts/{hostId}/config';
|
|
21
|
+
const SECRETS_PULL_ENDPOINT = '/api/hosts/{hostId}/secrets';
|
|
22
|
+
const WEBHOOKS_ENDPOINT = '/api/hosts/{hostId}/webhooks';
|
|
23
|
+
// ── Provisioning Manager ──
|
|
24
|
+
export class ProvisioningManager {
|
|
25
|
+
state;
|
|
26
|
+
statePath;
|
|
27
|
+
vault = null;
|
|
28
|
+
constructor(reflecttHome = REFLECTT_HOME) {
|
|
29
|
+
this.statePath = join(reflecttHome, STATE_FILE);
|
|
30
|
+
this.state = this.loadState(reflecttHome);
|
|
31
|
+
}
|
|
32
|
+
/** Attach a secret vault instance for encrypted secret storage */
|
|
33
|
+
setVault(vault) {
|
|
34
|
+
this.vault = vault;
|
|
35
|
+
}
|
|
36
|
+
/** Get current provisioning state (safe for dashboard) */
|
|
37
|
+
getStatus() {
|
|
38
|
+
return {
|
|
39
|
+
phase: this.state.phase,
|
|
40
|
+
hostId: this.state.hostId,
|
|
41
|
+
hostName: this.state.hostName,
|
|
42
|
+
cloudUrl: this.state.cloudUrl,
|
|
43
|
+
enrolledAt: this.state.enrolledAt,
|
|
44
|
+
provisionedAt: this.state.provisionedAt,
|
|
45
|
+
lastError: this.state.lastError,
|
|
46
|
+
webhooks: this.state.webhooks,
|
|
47
|
+
configPulledAt: this.state.configPulledAt,
|
|
48
|
+
secretsPulledAt: this.state.secretsPulledAt,
|
|
49
|
+
hasCredential: this.state.credential !== null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Check if host is fully provisioned */
|
|
53
|
+
isProvisioned() {
|
|
54
|
+
return this.state.phase === 'ready';
|
|
55
|
+
}
|
|
56
|
+
/** Check if host has been enrolled (has hostId + credential) */
|
|
57
|
+
isEnrolled() {
|
|
58
|
+
return this.state.hostId !== null && this.state.credential !== null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Full provisioning flow:
|
|
62
|
+
* 1. Enroll with cloud (get hostId + credential)
|
|
63
|
+
* 2. Pull config from cloud
|
|
64
|
+
* 3. Pull encrypted secrets
|
|
65
|
+
* 4. Configure webhook routes
|
|
66
|
+
*
|
|
67
|
+
* Idempotent — skips already-completed phases.
|
|
68
|
+
*/
|
|
69
|
+
async provision(options) {
|
|
70
|
+
this.state.cloudUrl = options.cloudUrl.replace(/\/+$/, '');
|
|
71
|
+
this.state.hostName = options.hostName;
|
|
72
|
+
try {
|
|
73
|
+
// Phase 1: Enroll
|
|
74
|
+
if (!this.isEnrolled()) {
|
|
75
|
+
this.setPhase('enrolling');
|
|
76
|
+
await this.enroll(options);
|
|
77
|
+
}
|
|
78
|
+
// Phase 2: Pull config
|
|
79
|
+
this.setPhase('pulling_config');
|
|
80
|
+
await this.pullConfig();
|
|
81
|
+
// Phase 3: Pull secrets
|
|
82
|
+
this.setPhase('pulling_secrets');
|
|
83
|
+
await this.pullSecrets();
|
|
84
|
+
// Phase 4: Configure webhooks
|
|
85
|
+
this.setPhase('configuring_webhooks');
|
|
86
|
+
await this.configureWebhooks();
|
|
87
|
+
// Done
|
|
88
|
+
this.setPhase('ready');
|
|
89
|
+
this.state.provisionedAt = Date.now();
|
|
90
|
+
this.persistState();
|
|
91
|
+
return {
|
|
92
|
+
success: true,
|
|
93
|
+
phase: 'ready',
|
|
94
|
+
hostId: this.state.hostId,
|
|
95
|
+
message: `Host ${this.state.hostName} provisioned successfully`,
|
|
96
|
+
details: {
|
|
97
|
+
webhookCount: this.state.webhooks.length,
|
|
98
|
+
configPulled: this.state.configPulledAt !== null,
|
|
99
|
+
secretsPulled: this.state.secretsPulledAt !== null,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
this.state.lastError = err?.message || 'Provisioning failed';
|
|
105
|
+
this.setPhase('error');
|
|
106
|
+
this.persistState();
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
phase: 'error',
|
|
110
|
+
hostId: this.state.hostId,
|
|
111
|
+
message: this.state.lastError,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Re-provision: pull latest config + secrets + webhooks from cloud.
|
|
117
|
+
* Requires existing enrollment.
|
|
118
|
+
*/
|
|
119
|
+
async refresh() {
|
|
120
|
+
if (!this.isEnrolled()) {
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
phase: this.state.phase,
|
|
124
|
+
hostId: null,
|
|
125
|
+
message: 'Host not enrolled — run full provision first',
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
this.setPhase('pulling_config');
|
|
130
|
+
await this.pullConfig();
|
|
131
|
+
this.setPhase('pulling_secrets');
|
|
132
|
+
await this.pullSecrets();
|
|
133
|
+
this.setPhase('configuring_webhooks');
|
|
134
|
+
await this.configureWebhooks();
|
|
135
|
+
this.setPhase('ready');
|
|
136
|
+
this.persistState();
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
phase: 'ready',
|
|
140
|
+
hostId: this.state.hostId,
|
|
141
|
+
message: 'Host config refreshed from cloud',
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
this.state.lastError = err?.message || 'Refresh failed';
|
|
146
|
+
this.setPhase('error');
|
|
147
|
+
this.persistState();
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
phase: 'error',
|
|
151
|
+
hostId: this.state.hostId,
|
|
152
|
+
message: this.state.lastError,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Reset provisioning state (for re-enrollment)
|
|
158
|
+
*/
|
|
159
|
+
reset() {
|
|
160
|
+
this.state = {
|
|
161
|
+
phase: 'unprovisioned',
|
|
162
|
+
hostId: null,
|
|
163
|
+
hostName: '',
|
|
164
|
+
credential: null,
|
|
165
|
+
cloudUrl: '',
|
|
166
|
+
enrolledAt: null,
|
|
167
|
+
provisionedAt: null,
|
|
168
|
+
lastError: null,
|
|
169
|
+
webhooks: [],
|
|
170
|
+
configPulledAt: null,
|
|
171
|
+
secretsPulledAt: null,
|
|
172
|
+
};
|
|
173
|
+
this.persistState();
|
|
174
|
+
}
|
|
175
|
+
/** Add a webhook route (for local-first webhook configuration) */
|
|
176
|
+
addWebhookRoute(route) {
|
|
177
|
+
const webhook = {
|
|
178
|
+
...route,
|
|
179
|
+
id: `wh_${randomBytes(8).toString('hex')}`,
|
|
180
|
+
createdAt: Date.now(),
|
|
181
|
+
};
|
|
182
|
+
this.state.webhooks.push(webhook);
|
|
183
|
+
this.persistState();
|
|
184
|
+
return webhook;
|
|
185
|
+
}
|
|
186
|
+
/** Remove a webhook route */
|
|
187
|
+
removeWebhookRoute(id) {
|
|
188
|
+
const before = this.state.webhooks.length;
|
|
189
|
+
this.state.webhooks = this.state.webhooks.filter(w => w.id !== id);
|
|
190
|
+
if (this.state.webhooks.length !== before) {
|
|
191
|
+
this.persistState();
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
/** List configured webhook routes */
|
|
197
|
+
getWebhooks() {
|
|
198
|
+
return [...this.state.webhooks];
|
|
199
|
+
}
|
|
200
|
+
// ── Private: Enrollment ──
|
|
201
|
+
async enroll(options) {
|
|
202
|
+
const endpoint = options.apiKey
|
|
203
|
+
? '/api/hosts/enroll'
|
|
204
|
+
: '/api/hosts/claim';
|
|
205
|
+
const body = options.apiKey
|
|
206
|
+
? { name: options.hostName, capabilities: options.capabilities || [] }
|
|
207
|
+
: { joinToken: options.joinToken, name: options.hostName, capabilities: options.capabilities || [] };
|
|
208
|
+
const authHeader = options.apiKey
|
|
209
|
+
? `Bearer ${options.apiKey}`
|
|
210
|
+
: options.joinToken
|
|
211
|
+
? `Bearer ${options.joinToken}`
|
|
212
|
+
: undefined;
|
|
213
|
+
const result = await this.cloudRequest('POST', endpoint, body, authHeader);
|
|
214
|
+
if (!result.host?.id || !result.credential?.token) {
|
|
215
|
+
throw new Error('Enrollment failed: unexpected response shape');
|
|
216
|
+
}
|
|
217
|
+
this.state.hostId = result.host.id;
|
|
218
|
+
this.state.credential = result.credential.token;
|
|
219
|
+
this.state.enrolledAt = Date.now();
|
|
220
|
+
// Persist credential to config.json for future use
|
|
221
|
+
this.persistCloudConfig({
|
|
222
|
+
hostId: this.state.hostId,
|
|
223
|
+
credential: this.state.credential,
|
|
224
|
+
cloudUrl: this.state.cloudUrl,
|
|
225
|
+
hostName: this.state.hostName,
|
|
226
|
+
});
|
|
227
|
+
this.persistState();
|
|
228
|
+
console.log(`[Provisioning] Enrolled as ${this.state.hostId}`);
|
|
229
|
+
}
|
|
230
|
+
// ── Private: Config Pull ──
|
|
231
|
+
async pullConfig() {
|
|
232
|
+
if (!this.state.hostId)
|
|
233
|
+
throw new Error('Not enrolled');
|
|
234
|
+
try {
|
|
235
|
+
const endpoint = CONFIG_PULL_ENDPOINT.replace('{hostId}', this.state.hostId);
|
|
236
|
+
const config = await this.cloudRequest('GET', endpoint, undefined, `Bearer ${this.state.credential}`);
|
|
237
|
+
// Write team config to ~/.reflectt/ if received
|
|
238
|
+
if (config.settings) {
|
|
239
|
+
const settingsPath = join(REFLECTT_HOME, 'cloud-config.json');
|
|
240
|
+
writeFileSync(settingsPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
241
|
+
console.log(`[Provisioning] Cloud config saved to ${settingsPath}`);
|
|
242
|
+
}
|
|
243
|
+
this.state.configPulledAt = Date.now();
|
|
244
|
+
this.persistState();
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
// Config pull is optional for MVP — cloud endpoint may not exist yet
|
|
248
|
+
if (err?.message?.includes('404') || err?.message?.includes('not found')) {
|
|
249
|
+
console.log('[Provisioning] Config pull skipped (endpoint not available)');
|
|
250
|
+
this.state.configPulledAt = Date.now();
|
|
251
|
+
this.persistState();
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
throw err;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// ── Private: Secrets Pull ──
|
|
258
|
+
async pullSecrets() {
|
|
259
|
+
if (!this.state.hostId)
|
|
260
|
+
throw new Error('Not enrolled');
|
|
261
|
+
try {
|
|
262
|
+
const endpoint = SECRETS_PULL_ENDPOINT.replace('{hostId}', this.state.hostId);
|
|
263
|
+
const result = await this.cloudRequest('GET', endpoint, undefined, `Bearer ${this.state.credential}`);
|
|
264
|
+
if (this.vault && result.secrets?.length) {
|
|
265
|
+
// Store pulled secrets in local vault (they arrive already encrypted
|
|
266
|
+
// with the host's HMK if the cloud has the wrapped DEKs from a prior export)
|
|
267
|
+
console.log(`[Provisioning] Received ${result.secrets.length} encrypted secrets from cloud`);
|
|
268
|
+
// Note: actual import requires the source HMK. For now we log receipt.
|
|
269
|
+
// Full import flow uses vault.import() with the source HMK.
|
|
270
|
+
}
|
|
271
|
+
this.state.secretsPulledAt = Date.now();
|
|
272
|
+
this.persistState();
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
// Secrets pull optional for MVP
|
|
276
|
+
if (err?.message?.includes('404') || err?.message?.includes('not found')) {
|
|
277
|
+
console.log('[Provisioning] Secrets pull skipped (endpoint not available)');
|
|
278
|
+
this.state.secretsPulledAt = Date.now();
|
|
279
|
+
this.persistState();
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
throw err;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// ── Private: Webhook Configuration ──
|
|
286
|
+
async configureWebhooks() {
|
|
287
|
+
if (!this.state.hostId)
|
|
288
|
+
throw new Error('Not enrolled');
|
|
289
|
+
try {
|
|
290
|
+
const endpoint = WEBHOOKS_ENDPOINT.replace('{hostId}', this.state.hostId);
|
|
291
|
+
const result = await this.cloudRequest('GET', endpoint, undefined, `Bearer ${this.state.credential}`);
|
|
292
|
+
if (result.webhooks?.length) {
|
|
293
|
+
// Merge cloud-configured webhooks with local state
|
|
294
|
+
for (const cloudWebhook of result.webhooks) {
|
|
295
|
+
const exists = this.state.webhooks.find(w => w.id === cloudWebhook.id);
|
|
296
|
+
if (!exists) {
|
|
297
|
+
this.state.webhooks.push({
|
|
298
|
+
id: cloudWebhook.id,
|
|
299
|
+
provider: cloudWebhook.provider,
|
|
300
|
+
path: `/webhooks/${cloudWebhook.provider}`,
|
|
301
|
+
events: cloudWebhook.events,
|
|
302
|
+
active: cloudWebhook.active,
|
|
303
|
+
createdAt: Date.now(),
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Store webhook signing secrets in vault
|
|
308
|
+
if (this.vault) {
|
|
309
|
+
for (const wh of result.webhooks) {
|
|
310
|
+
if (wh.signingSecretName) {
|
|
311
|
+
console.log(`[Provisioning] Webhook ${wh.provider}: signing secret → ${wh.signingSecretName}`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
console.log(`[Provisioning] Configured ${result.webhooks.length} webhook routes`);
|
|
316
|
+
}
|
|
317
|
+
this.persistState();
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
// Webhook config optional for MVP
|
|
321
|
+
if (err?.message?.includes('404') || err?.message?.includes('not found')) {
|
|
322
|
+
console.log('[Provisioning] Webhook config skipped (endpoint not available)');
|
|
323
|
+
this.persistState();
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
throw err;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
// ── Private: Cloud HTTP ──
|
|
330
|
+
async cloudRequest(method, path, body, authorization) {
|
|
331
|
+
const url = `${this.state.cloudUrl}${path}`;
|
|
332
|
+
const headers = {
|
|
333
|
+
'Content-Type': 'application/json',
|
|
334
|
+
};
|
|
335
|
+
if (authorization) {
|
|
336
|
+
headers['Authorization'] = authorization;
|
|
337
|
+
}
|
|
338
|
+
const fetchOptions = { method, headers };
|
|
339
|
+
if (body && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
|
|
340
|
+
fetchOptions.body = JSON.stringify(body);
|
|
341
|
+
}
|
|
342
|
+
const response = await fetch(url, fetchOptions);
|
|
343
|
+
if (!response.ok) {
|
|
344
|
+
const errBody = await response.json().catch(() => ({}));
|
|
345
|
+
throw new Error(errBody.error || `HTTP ${response.status} ${response.statusText} from ${path}`);
|
|
346
|
+
}
|
|
347
|
+
return await response.json();
|
|
348
|
+
}
|
|
349
|
+
// ── Private: State Management ──
|
|
350
|
+
loadState(reflecttHome) {
|
|
351
|
+
if (existsSync(this.statePath)) {
|
|
352
|
+
try {
|
|
353
|
+
const data = JSON.parse(readFileSync(this.statePath, 'utf-8'));
|
|
354
|
+
return {
|
|
355
|
+
phase: data.phase || 'unprovisioned',
|
|
356
|
+
hostId: data.hostId || null,
|
|
357
|
+
hostName: data.hostName || '',
|
|
358
|
+
credential: data.credential || null,
|
|
359
|
+
cloudUrl: data.cloudUrl || '',
|
|
360
|
+
enrolledAt: data.enrolledAt || null,
|
|
361
|
+
provisionedAt: data.provisionedAt || null,
|
|
362
|
+
lastError: data.lastError || null,
|
|
363
|
+
webhooks: data.webhooks || [],
|
|
364
|
+
configPulledAt: data.configPulledAt || null,
|
|
365
|
+
secretsPulledAt: data.secretsPulledAt || null,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
console.error('[Provisioning] Failed to load state, starting fresh');
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return {
|
|
373
|
+
phase: 'unprovisioned',
|
|
374
|
+
hostId: null,
|
|
375
|
+
hostName: '',
|
|
376
|
+
credential: null,
|
|
377
|
+
cloudUrl: '',
|
|
378
|
+
enrolledAt: null,
|
|
379
|
+
provisionedAt: null,
|
|
380
|
+
lastError: null,
|
|
381
|
+
webhooks: [],
|
|
382
|
+
configPulledAt: null,
|
|
383
|
+
secretsPulledAt: null,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
persistState() {
|
|
387
|
+
const dir = join(REFLECTT_HOME);
|
|
388
|
+
if (!existsSync(dir)) {
|
|
389
|
+
mkdirSync(dir, { recursive: true });
|
|
390
|
+
}
|
|
391
|
+
writeFileSync(this.statePath, JSON.stringify(this.state, null, 2), 'utf-8');
|
|
392
|
+
}
|
|
393
|
+
setPhase(phase) {
|
|
394
|
+
this.state.phase = phase;
|
|
395
|
+
if (phase !== 'error') {
|
|
396
|
+
this.state.lastError = null;
|
|
397
|
+
}
|
|
398
|
+
this.persistState();
|
|
399
|
+
}
|
|
400
|
+
persistCloudConfig(config) {
|
|
401
|
+
const configPath = join(REFLECTT_HOME, 'config.json');
|
|
402
|
+
let existing = {};
|
|
403
|
+
if (existsSync(configPath)) {
|
|
404
|
+
try {
|
|
405
|
+
existing = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
// Start fresh if corrupt
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
existing.cloud = {
|
|
412
|
+
...(existing.cloud || {}),
|
|
413
|
+
hostId: config.hostId,
|
|
414
|
+
credential: config.credential,
|
|
415
|
+
cloudUrl: config.cloudUrl,
|
|
416
|
+
hostName: config.hostName,
|
|
417
|
+
};
|
|
418
|
+
writeFileSync(configPath, JSON.stringify(existing, null, 2), 'utf-8');
|
|
419
|
+
console.log(`[Provisioning] Cloud credentials saved to ${configPath}`);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// ── Singleton ──
|
|
423
|
+
let _manager = null;
|
|
424
|
+
export function getProvisioningManager() {
|
|
425
|
+
if (!_manager) {
|
|
426
|
+
_manager = new ProvisioningManager();
|
|
427
|
+
}
|
|
428
|
+
return _manager;
|
|
429
|
+
}
|
|
430
|
+
//# sourceMappingURL=provisioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../src/provisioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Task } from './types.js';
|
|
2
|
+
export interface ReflectionNudgeConfig {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
/** Nudge agent after task moves to done (minutes to wait before nudging) */
|
|
5
|
+
postTaskDelayMin: number;
|
|
6
|
+
/** Nudge if agent hasn't reflected in this many hours */
|
|
7
|
+
idleReflectionHours: number;
|
|
8
|
+
/** Minimum hours between nudges to same agent */
|
|
9
|
+
cooldownMin: number;
|
|
10
|
+
/** Agents to monitor (empty = all active agents) */
|
|
11
|
+
agents: string[];
|
|
12
|
+
/** Channel for nudge delivery */
|
|
13
|
+
channel: string;
|
|
14
|
+
/** Per-role cadence overrides: { engineering: 4, ops: 8 } hours */
|
|
15
|
+
roleCadenceHours: Record<string, number>;
|
|
16
|
+
/** Agent names to exclude from auto-discovery (test agents, system, etc.) */
|
|
17
|
+
excludeAgents?: string[];
|
|
18
|
+
/** Nudge agents who have never reflected (default: true) */
|
|
19
|
+
nudgeNeverReflected?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface ReflectionSLA {
|
|
22
|
+
agent: string;
|
|
23
|
+
lastReflectionAt: number | null;
|
|
24
|
+
lastNudgeAt: number | null;
|
|
25
|
+
tasksDoneSinceLastReflection: number;
|
|
26
|
+
hoursOverdue: number | null;
|
|
27
|
+
status: 'healthy' | 'due' | 'overdue';
|
|
28
|
+
}
|
|
29
|
+
interface PendingNudge {
|
|
30
|
+
agent: string;
|
|
31
|
+
taskId: string;
|
|
32
|
+
taskTitle: string;
|
|
33
|
+
taskStatus: string;
|
|
34
|
+
doneAt: number;
|
|
35
|
+
nudgeAt: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function ensureReflectionTrackingTable(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Called when a task transitions to done. Queues a reflection nudge.
|
|
40
|
+
*/
|
|
41
|
+
export declare function onTaskDone(task: Task): void;
|
|
42
|
+
/**
|
|
43
|
+
* Called when a reflection is submitted. Resets the agent's tracking.
|
|
44
|
+
*/
|
|
45
|
+
export declare function onReflectionSubmitted(agent: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Called periodically (e.g., every 5 min by board health worker).
|
|
48
|
+
* Fires queued post-task nudges and checks idle reflection SLA.
|
|
49
|
+
*/
|
|
50
|
+
export declare function tickReflectionNudges(): Promise<{
|
|
51
|
+
postTaskNudges: number;
|
|
52
|
+
idleNudges: number;
|
|
53
|
+
total: number;
|
|
54
|
+
}>;
|
|
55
|
+
export declare function getReflectionSLAs(): ReflectionSLA[];
|
|
56
|
+
export declare function _clearReflectionTracking(): void;
|
|
57
|
+
export declare function _getPendingNudges(): PendingNudge[];
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=reflection-automation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflection-automation.d.ts","sourceRoot":"","sources":["../src/reflection-automation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAOtC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAA;IACxB,yDAAyD;IACzD,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,4DAA4D;IAC5D,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,4BAA4B,EAAE,MAAM,CAAA;IACpC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,CAAA;CACtC;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AASD,wBAAgB,6BAA6B,IAAI,IAAI,CAWpD;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CA6B3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAWzD;AAID;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IACpD,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd,CAAC,CAoFD;AAID,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CA0DnD;AAwJD,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C;AAED,wBAAgB,iBAAiB,IAAI,YAAY,EAAE,CAElD"}
|