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
package/dist/db.js
ADDED
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) Reflectt AI
|
|
3
|
+
/**
|
|
4
|
+
* SQLite database module for reflectt-node
|
|
5
|
+
*
|
|
6
|
+
* Primary local store with WAL mode for concurrent reads.
|
|
7
|
+
* Replaces JSONL flat files while keeping JSONL as append-only audit log.
|
|
8
|
+
*/
|
|
9
|
+
import Database from 'better-sqlite3';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { existsSync, readFileSync, mkdirSync } from 'fs';
|
|
12
|
+
import { DATA_DIR } from './config.js';
|
|
13
|
+
const DB_PATH = join(DATA_DIR, 'reflectt.db');
|
|
14
|
+
let _db = null;
|
|
15
|
+
/**
|
|
16
|
+
* Get or create the SQLite database connection
|
|
17
|
+
*/
|
|
18
|
+
export function getDb() {
|
|
19
|
+
if (_db)
|
|
20
|
+
return _db;
|
|
21
|
+
mkdirSync(DATA_DIR, { recursive: true });
|
|
22
|
+
_db = new Database(DB_PATH);
|
|
23
|
+
// WAL mode for concurrent reads + better write performance
|
|
24
|
+
_db.pragma('journal_mode = WAL');
|
|
25
|
+
_db.pragma('synchronous = NORMAL');
|
|
26
|
+
_db.pragma('foreign_keys = ON');
|
|
27
|
+
// Prevent SQLITE_BUSY timeouts under concurrent agent access.
|
|
28
|
+
// 5000ms wait before returning BUSY — covers typical heartbeat storms.
|
|
29
|
+
_db.pragma('busy_timeout = 5000');
|
|
30
|
+
// WAL auto-checkpoint every 1000 pages (~4MB) to prevent unbounded WAL growth
|
|
31
|
+
_db.pragma('wal_autocheckpoint = 1000');
|
|
32
|
+
// Checkpoint WAL on startup to reclaim disk space from accumulated writes
|
|
33
|
+
try {
|
|
34
|
+
_db.pragma('wal_checkpoint(TRUNCATE)');
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Non-fatal: checkpoint may fail if another process holds a read lock
|
|
38
|
+
}
|
|
39
|
+
// Run schema migrations
|
|
40
|
+
runMigrations(_db);
|
|
41
|
+
return _db;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Close the database connection (call on shutdown)
|
|
45
|
+
*/
|
|
46
|
+
export function closeDb() {
|
|
47
|
+
if (_db) {
|
|
48
|
+
_db.close();
|
|
49
|
+
_db = null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Schema version tracking + migrations
|
|
54
|
+
*/
|
|
55
|
+
export function runMigrations(db) {
|
|
56
|
+
// Create migration tracking table
|
|
57
|
+
db.exec(`
|
|
58
|
+
CREATE TABLE IF NOT EXISTS _migrations (
|
|
59
|
+
version INTEGER PRIMARY KEY,
|
|
60
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
61
|
+
)
|
|
62
|
+
`);
|
|
63
|
+
const currentVersion = db.prepare('SELECT MAX(version) as v FROM _migrations').get();
|
|
64
|
+
const version = currentVersion?.v ?? 0;
|
|
65
|
+
const migrations = [
|
|
66
|
+
{
|
|
67
|
+
version: 1,
|
|
68
|
+
sql: `
|
|
69
|
+
-- Tasks table
|
|
70
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
71
|
+
id TEXT PRIMARY KEY,
|
|
72
|
+
title TEXT NOT NULL,
|
|
73
|
+
description TEXT,
|
|
74
|
+
status TEXT NOT NULL DEFAULT 'todo',
|
|
75
|
+
assignee TEXT,
|
|
76
|
+
reviewer TEXT,
|
|
77
|
+
done_criteria TEXT, -- JSON array
|
|
78
|
+
created_by TEXT NOT NULL,
|
|
79
|
+
created_at INTEGER NOT NULL,
|
|
80
|
+
updated_at INTEGER NOT NULL,
|
|
81
|
+
priority TEXT,
|
|
82
|
+
blocked_by TEXT, -- JSON array
|
|
83
|
+
epic_id TEXT,
|
|
84
|
+
tags TEXT, -- JSON array
|
|
85
|
+
metadata TEXT, -- JSON object
|
|
86
|
+
comment_count INTEGER NOT NULL DEFAULT 0
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assignee ON tasks(assignee);
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);
|
|
92
|
+
|
|
93
|
+
-- Task comments
|
|
94
|
+
CREATE TABLE IF NOT EXISTS task_comments (
|
|
95
|
+
id TEXT PRIMARY KEY,
|
|
96
|
+
task_id TEXT NOT NULL,
|
|
97
|
+
author TEXT NOT NULL,
|
|
98
|
+
content TEXT NOT NULL,
|
|
99
|
+
timestamp INTEGER NOT NULL,
|
|
100
|
+
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
CREATE INDEX IF NOT EXISTS idx_task_comments_task_id ON task_comments(task_id);
|
|
104
|
+
|
|
105
|
+
-- Task history
|
|
106
|
+
CREATE TABLE IF NOT EXISTS task_history (
|
|
107
|
+
id TEXT PRIMARY KEY,
|
|
108
|
+
task_id TEXT NOT NULL,
|
|
109
|
+
type TEXT NOT NULL,
|
|
110
|
+
actor TEXT NOT NULL,
|
|
111
|
+
timestamp INTEGER NOT NULL,
|
|
112
|
+
data TEXT -- JSON object
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_task_history_task_id ON task_history(task_id);
|
|
116
|
+
|
|
117
|
+
-- Recurring tasks
|
|
118
|
+
CREATE TABLE IF NOT EXISTS recurring_tasks (
|
|
119
|
+
id TEXT PRIMARY KEY,
|
|
120
|
+
title TEXT NOT NULL,
|
|
121
|
+
description TEXT,
|
|
122
|
+
assignee TEXT,
|
|
123
|
+
reviewer TEXT,
|
|
124
|
+
done_criteria TEXT, -- JSON array
|
|
125
|
+
created_by TEXT NOT NULL,
|
|
126
|
+
priority TEXT,
|
|
127
|
+
blocked_by TEXT, -- JSON array
|
|
128
|
+
epic_id TEXT,
|
|
129
|
+
tags TEXT, -- JSON array
|
|
130
|
+
metadata TEXT, -- JSON object
|
|
131
|
+
schedule TEXT NOT NULL, -- JSON object
|
|
132
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
133
|
+
status TEXT DEFAULT 'todo',
|
|
134
|
+
last_run_at INTEGER,
|
|
135
|
+
last_skip_at INTEGER,
|
|
136
|
+
last_skip_reason TEXT,
|
|
137
|
+
next_run_at INTEGER NOT NULL,
|
|
138
|
+
created_at INTEGER NOT NULL,
|
|
139
|
+
updated_at INTEGER NOT NULL
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
-- Chat messages
|
|
143
|
+
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
144
|
+
id TEXT PRIMARY KEY,
|
|
145
|
+
"from" TEXT NOT NULL,
|
|
146
|
+
"to" TEXT,
|
|
147
|
+
content TEXT NOT NULL,
|
|
148
|
+
timestamp INTEGER NOT NULL,
|
|
149
|
+
channel TEXT DEFAULT 'general',
|
|
150
|
+
reactions TEXT, -- JSON object
|
|
151
|
+
thread_id TEXT,
|
|
152
|
+
reply_count INTEGER DEFAULT 0,
|
|
153
|
+
metadata TEXT -- JSON object
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_channel ON chat_messages(channel);
|
|
157
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_timestamp ON chat_messages(timestamp);
|
|
158
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_from ON chat_messages("from");
|
|
159
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_thread_id ON chat_messages(thread_id);
|
|
160
|
+
|
|
161
|
+
-- Legacy inbox message table (kept for backward compatibility)
|
|
162
|
+
CREATE TABLE IF NOT EXISTS inbox (
|
|
163
|
+
id TEXT PRIMARY KEY,
|
|
164
|
+
agent TEXT NOT NULL,
|
|
165
|
+
"from" TEXT NOT NULL,
|
|
166
|
+
content TEXT NOT NULL,
|
|
167
|
+
timestamp INTEGER NOT NULL,
|
|
168
|
+
read INTEGER NOT NULL DEFAULT 0,
|
|
169
|
+
metadata TEXT -- JSON object
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_agent ON inbox(agent);
|
|
173
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_read ON inbox(read);
|
|
174
|
+
`,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
version: 2,
|
|
178
|
+
sql: `
|
|
179
|
+
-- Sync ledger for incremental cloud coordination
|
|
180
|
+
CREATE TABLE IF NOT EXISTS sync_ledger (
|
|
181
|
+
record_type TEXT NOT NULL,
|
|
182
|
+
record_id TEXT NOT NULL,
|
|
183
|
+
local_updated_at INTEGER NOT NULL,
|
|
184
|
+
cloud_synced_at INTEGER,
|
|
185
|
+
sync_status TEXT NOT NULL DEFAULT 'pending',
|
|
186
|
+
attempt_count INTEGER NOT NULL DEFAULT 0,
|
|
187
|
+
last_error TEXT,
|
|
188
|
+
PRIMARY KEY (record_type, record_id)
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_sync_ledger_status ON sync_ledger(sync_status);
|
|
192
|
+
CREATE INDEX IF NOT EXISTS idx_sync_ledger_local_updated ON sync_ledger(local_updated_at);
|
|
193
|
+
|
|
194
|
+
-- Backfill current task state into sync ledger (first incremental run)
|
|
195
|
+
INSERT OR IGNORE INTO sync_ledger (record_type, record_id, local_updated_at, sync_status)
|
|
196
|
+
SELECT 'task', id, updated_at, 'pending'
|
|
197
|
+
FROM tasks;
|
|
198
|
+
|
|
199
|
+
-- Keep ledger pending whenever tasks are inserted/updated/deleted
|
|
200
|
+
CREATE TRIGGER IF NOT EXISTS trg_tasks_sync_ledger_insert
|
|
201
|
+
AFTER INSERT ON tasks
|
|
202
|
+
BEGIN
|
|
203
|
+
INSERT INTO sync_ledger (record_type, record_id, local_updated_at, cloud_synced_at, sync_status, attempt_count, last_error)
|
|
204
|
+
VALUES ('task', NEW.id, NEW.updated_at, NULL, 'pending', 0, NULL)
|
|
205
|
+
ON CONFLICT(record_type, record_id) DO UPDATE SET
|
|
206
|
+
local_updated_at = excluded.local_updated_at,
|
|
207
|
+
sync_status = 'pending',
|
|
208
|
+
last_error = NULL;
|
|
209
|
+
END;
|
|
210
|
+
|
|
211
|
+
CREATE TRIGGER IF NOT EXISTS trg_tasks_sync_ledger_update
|
|
212
|
+
AFTER UPDATE ON tasks
|
|
213
|
+
BEGIN
|
|
214
|
+
INSERT INTO sync_ledger (record_type, record_id, local_updated_at, cloud_synced_at, sync_status, attempt_count, last_error)
|
|
215
|
+
VALUES ('task', NEW.id, NEW.updated_at, NULL, 'pending', 0, NULL)
|
|
216
|
+
ON CONFLICT(record_type, record_id) DO UPDATE SET
|
|
217
|
+
local_updated_at = excluded.local_updated_at,
|
|
218
|
+
sync_status = 'pending',
|
|
219
|
+
last_error = NULL;
|
|
220
|
+
END;
|
|
221
|
+
|
|
222
|
+
CREATE TRIGGER IF NOT EXISTS trg_tasks_sync_ledger_delete
|
|
223
|
+
AFTER DELETE ON tasks
|
|
224
|
+
BEGIN
|
|
225
|
+
DELETE FROM sync_ledger
|
|
226
|
+
WHERE record_type = 'task' AND record_id = OLD.id;
|
|
227
|
+
END;
|
|
228
|
+
`,
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
version: 3,
|
|
232
|
+
sql: `
|
|
233
|
+
-- Inbox state moved from per-agent files to SQLite
|
|
234
|
+
CREATE TABLE IF NOT EXISTS inbox_states (
|
|
235
|
+
agent TEXT PRIMARY KEY,
|
|
236
|
+
subscriptions TEXT NOT NULL, -- JSON array
|
|
237
|
+
last_read_timestamp INTEGER NOT NULL DEFAULT 0,
|
|
238
|
+
last_updated INTEGER NOT NULL
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
CREATE TABLE IF NOT EXISTS inbox_acks (
|
|
242
|
+
agent TEXT NOT NULL,
|
|
243
|
+
message_id TEXT NOT NULL,
|
|
244
|
+
acked_at INTEGER NOT NULL,
|
|
245
|
+
PRIMARY KEY (agent, message_id)
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_acks_agent ON inbox_acks(agent);
|
|
249
|
+
CREATE INDEX IF NOT EXISTS idx_inbox_acks_message_id ON inbox_acks(message_id);
|
|
250
|
+
`,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
version: 4,
|
|
254
|
+
sql: 'SELECT 1', // Vector tables initialized via initVectorTables() after extension load
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
version: 5,
|
|
258
|
+
sql: `
|
|
259
|
+
-- Focus mode persistence across restarts
|
|
260
|
+
CREATE TABLE IF NOT EXISTS focus_states (
|
|
261
|
+
agent TEXT PRIMARY KEY,
|
|
262
|
+
active INTEGER NOT NULL DEFAULT 0,
|
|
263
|
+
level TEXT NOT NULL DEFAULT 'soft',
|
|
264
|
+
started_at INTEGER NOT NULL DEFAULT 0,
|
|
265
|
+
expires_at INTEGER,
|
|
266
|
+
reason TEXT,
|
|
267
|
+
updated_at INTEGER NOT NULL
|
|
268
|
+
);
|
|
269
|
+
`,
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
version: 6,
|
|
273
|
+
sql: `
|
|
274
|
+
ALTER TABLE tasks ADD COLUMN team_id TEXT;
|
|
275
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_team_id ON tasks(team_id);
|
|
276
|
+
`,
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
version: 7,
|
|
280
|
+
sql: `
|
|
281
|
+
CREATE TABLE IF NOT EXISTS reflections (
|
|
282
|
+
id TEXT PRIMARY KEY,
|
|
283
|
+
pain TEXT NOT NULL,
|
|
284
|
+
impact TEXT NOT NULL,
|
|
285
|
+
evidence TEXT NOT NULL, -- JSON array of strings
|
|
286
|
+
went_well TEXT NOT NULL,
|
|
287
|
+
suspected_why TEXT NOT NULL,
|
|
288
|
+
proposed_fix TEXT NOT NULL,
|
|
289
|
+
confidence REAL NOT NULL, -- 0-10
|
|
290
|
+
role_type TEXT NOT NULL, -- engineering|product|ops|comms|growth|support|sales|finance|hr|other
|
|
291
|
+
severity TEXT, -- low|medium|high|critical (nullable)
|
|
292
|
+
author TEXT NOT NULL,
|
|
293
|
+
task_id TEXT, -- optional link to originating task
|
|
294
|
+
tags TEXT, -- JSON array (nullable)
|
|
295
|
+
team_id TEXT, -- optional team scope
|
|
296
|
+
metadata TEXT, -- JSON object (nullable)
|
|
297
|
+
created_at INTEGER NOT NULL,
|
|
298
|
+
updated_at INTEGER NOT NULL
|
|
299
|
+
);
|
|
300
|
+
CREATE INDEX IF NOT EXISTS idx_reflections_author ON reflections(author);
|
|
301
|
+
CREATE INDEX IF NOT EXISTS idx_reflections_role_type ON reflections(role_type);
|
|
302
|
+
CREATE INDEX IF NOT EXISTS idx_reflections_severity ON reflections(severity);
|
|
303
|
+
CREATE INDEX IF NOT EXISTS idx_reflections_task_id ON reflections(task_id);
|
|
304
|
+
CREATE INDEX IF NOT EXISTS idx_reflections_created_at ON reflections(created_at);
|
|
305
|
+
`,
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
version: 8,
|
|
309
|
+
sql: `
|
|
310
|
+
CREATE TABLE IF NOT EXISTS insights (
|
|
311
|
+
id TEXT PRIMARY KEY,
|
|
312
|
+
cluster_key TEXT NOT NULL,
|
|
313
|
+
workflow_stage TEXT NOT NULL,
|
|
314
|
+
failure_family TEXT NOT NULL,
|
|
315
|
+
impacted_unit TEXT NOT NULL,
|
|
316
|
+
title TEXT NOT NULL,
|
|
317
|
+
status TEXT NOT NULL DEFAULT 'candidate',
|
|
318
|
+
score REAL NOT NULL DEFAULT 0,
|
|
319
|
+
priority TEXT NOT NULL DEFAULT 'P3',
|
|
320
|
+
reflection_ids TEXT NOT NULL, -- JSON array
|
|
321
|
+
independent_count INTEGER NOT NULL DEFAULT 0,
|
|
322
|
+
evidence_refs TEXT NOT NULL, -- JSON array
|
|
323
|
+
authors TEXT NOT NULL, -- JSON array
|
|
324
|
+
promotion_readiness TEXT NOT NULL DEFAULT 'not_ready',
|
|
325
|
+
recurring_candidate INTEGER NOT NULL DEFAULT 0,
|
|
326
|
+
cooldown_until INTEGER,
|
|
327
|
+
cooldown_reason TEXT,
|
|
328
|
+
severity_max TEXT,
|
|
329
|
+
task_id TEXT,
|
|
330
|
+
metadata TEXT,
|
|
331
|
+
created_at INTEGER NOT NULL,
|
|
332
|
+
updated_at INTEGER NOT NULL
|
|
333
|
+
);
|
|
334
|
+
CREATE INDEX IF NOT EXISTS idx_insights_cluster_key ON insights(cluster_key);
|
|
335
|
+
CREATE INDEX IF NOT EXISTS idx_insights_status ON insights(status);
|
|
336
|
+
CREATE INDEX IF NOT EXISTS idx_insights_priority ON insights(priority);
|
|
337
|
+
CREATE INDEX IF NOT EXISTS idx_insights_score ON insights(score);
|
|
338
|
+
`,
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
version: 9,
|
|
342
|
+
// task_id now in base schema; ALTER handled via runFn for legacy DBs
|
|
343
|
+
runFn: (database) => {
|
|
344
|
+
const cols = database.pragma('table_info(insights)');
|
|
345
|
+
if (!cols.some(c => c.name === 'task_id')) {
|
|
346
|
+
database.exec('ALTER TABLE insights ADD COLUMN task_id TEXT');
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
version: 10,
|
|
352
|
+
sql: `
|
|
353
|
+
CREATE TABLE IF NOT EXISTS mention_rescue_state (
|
|
354
|
+
thread_key TEXT PRIMARY KEY,
|
|
355
|
+
message_ids TEXT NOT NULL DEFAULT '[]',
|
|
356
|
+
rescued_at INTEGER NOT NULL,
|
|
357
|
+
rescue_count INTEGER NOT NULL DEFAULT 1
|
|
358
|
+
);
|
|
359
|
+
`,
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
version: 11,
|
|
363
|
+
// Add task_id column to insights table for insight→task linkage
|
|
364
|
+
runFn: (db) => {
|
|
365
|
+
// Check if column already exists (idempotent)
|
|
366
|
+
const cols = db.prepare("PRAGMA table_info(insights)").all();
|
|
367
|
+
if (!cols.some(c => c.name === 'task_id')) {
|
|
368
|
+
db.exec("ALTER TABLE insights ADD COLUMN task_id TEXT DEFAULT NULL");
|
|
369
|
+
}
|
|
370
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_insights_task_id ON insights(task_id)");
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
version: 12,
|
|
375
|
+
// Compound indexes for hot query paths — eliminates TEMP B-TREE sorts
|
|
376
|
+
// on chat_messages (92K+ rows) and tasks (900+ rows) under concurrent agent load.
|
|
377
|
+
sql: `
|
|
378
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_channel_ts ON chat_messages(channel, timestamp DESC);
|
|
379
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_from_ts ON chat_messages("from", timestamp DESC);
|
|
380
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assignee_status ON tasks(assignee, status);
|
|
381
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status_priority ON tasks(status, priority);
|
|
382
|
+
`,
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
version: 13,
|
|
386
|
+
// Task comment comms_policy suppression metadata
|
|
387
|
+
runFn: (db) => {
|
|
388
|
+
const table = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='task_comments'").get();
|
|
389
|
+
if (!table) {
|
|
390
|
+
// Some synthetic migration tests construct partial pre-v1 schemas.
|
|
391
|
+
// If task_comments does not exist, skip this migration safely.
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
const cols = db.prepare('PRAGMA table_info(task_comments)').all();
|
|
395
|
+
const has = (name) => cols.some(c => c.name === name);
|
|
396
|
+
if (!has('category'))
|
|
397
|
+
db.exec('ALTER TABLE task_comments ADD COLUMN category TEXT');
|
|
398
|
+
if (!has('suppressed'))
|
|
399
|
+
db.exec('ALTER TABLE task_comments ADD COLUMN suppressed INTEGER NOT NULL DEFAULT 0');
|
|
400
|
+
if (!has('suppressed_reason'))
|
|
401
|
+
db.exec('ALTER TABLE task_comments ADD COLUMN suppressed_reason TEXT');
|
|
402
|
+
if (!has('suppressed_rule'))
|
|
403
|
+
db.exec('ALTER TABLE task_comments ADD COLUMN suppressed_rule TEXT');
|
|
404
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_task_comments_task_id_ts ON task_comments(task_id, timestamp ASC)');
|
|
405
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_task_comments_task_id_suppressed ON task_comments(task_id, suppressed)');
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
version: 14,
|
|
410
|
+
sql: `
|
|
411
|
+
-- Persistent suppression ledger for system message deduplication
|
|
412
|
+
CREATE TABLE IF NOT EXISTS suppression_ledger (
|
|
413
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
414
|
+
dedup_key TEXT NOT NULL,
|
|
415
|
+
category TEXT NOT NULL,
|
|
416
|
+
channel TEXT NOT NULL,
|
|
417
|
+
"from" TEXT NOT NULL,
|
|
418
|
+
content_preview TEXT,
|
|
419
|
+
first_seen_at INTEGER NOT NULL,
|
|
420
|
+
last_seen_at INTEGER NOT NULL,
|
|
421
|
+
hit_count INTEGER NOT NULL DEFAULT 1,
|
|
422
|
+
suppressed INTEGER NOT NULL DEFAULT 0,
|
|
423
|
+
window_ms INTEGER NOT NULL DEFAULT 1800000
|
|
424
|
+
);
|
|
425
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_suppression_ledger_dedup_key ON suppression_ledger(dedup_key);
|
|
426
|
+
CREATE INDEX IF NOT EXISTS idx_suppression_ledger_last_seen ON suppression_ledger(last_seen_at);
|
|
427
|
+
CREATE INDEX IF NOT EXISTS idx_suppression_ledger_channel ON suppression_ledger(channel);
|
|
428
|
+
|
|
429
|
+
-- Add dedup_key column to chat_messages for traceability
|
|
430
|
+
ALTER TABLE chat_messages ADD COLUMN dedup_key TEXT;
|
|
431
|
+
`,
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
version: 15,
|
|
435
|
+
sql: `
|
|
436
|
+
-- Context budget memos (persisted summaries)
|
|
437
|
+
CREATE TABLE IF NOT EXISTS context_memos (
|
|
438
|
+
scope_id TEXT NOT NULL,
|
|
439
|
+
layer TEXT NOT NULL,
|
|
440
|
+
memo_version INTEGER NOT NULL DEFAULT 1,
|
|
441
|
+
content TEXT NOT NULL,
|
|
442
|
+
source_window TEXT, -- JSON object
|
|
443
|
+
source_hash TEXT,
|
|
444
|
+
created_at INTEGER NOT NULL,
|
|
445
|
+
updated_at INTEGER NOT NULL,
|
|
446
|
+
PRIMARY KEY (scope_id, layer)
|
|
447
|
+
);
|
|
448
|
+
|
|
449
|
+
CREATE INDEX IF NOT EXISTS idx_context_memos_updated_at ON context_memos(updated_at);
|
|
450
|
+
`,
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
version: 16,
|
|
454
|
+
sql: `
|
|
455
|
+
-- Host registry: remote hosts phone-home via heartbeat
|
|
456
|
+
CREATE TABLE IF NOT EXISTS hosts (
|
|
457
|
+
id TEXT PRIMARY KEY,
|
|
458
|
+
hostname TEXT,
|
|
459
|
+
os TEXT,
|
|
460
|
+
arch TEXT,
|
|
461
|
+
ip TEXT,
|
|
462
|
+
version TEXT,
|
|
463
|
+
agents TEXT, -- JSON array of agent names
|
|
464
|
+
metadata TEXT, -- JSON object
|
|
465
|
+
status TEXT NOT NULL DEFAULT 'online',
|
|
466
|
+
last_seen_at INTEGER NOT NULL,
|
|
467
|
+
registered_at INTEGER NOT NULL
|
|
468
|
+
);
|
|
469
|
+
|
|
470
|
+
CREATE INDEX IF NOT EXISTS idx_hosts_last_seen ON hosts(last_seen_at);
|
|
471
|
+
CREATE INDEX IF NOT EXISTS idx_hosts_status ON hosts(status);
|
|
472
|
+
`,
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
version: 17,
|
|
476
|
+
sql: `
|
|
477
|
+
-- Persisted loop tick timestamps for /health/system
|
|
478
|
+
CREATE TABLE IF NOT EXISTS system_loop_ticks (
|
|
479
|
+
name TEXT PRIMARY KEY,
|
|
480
|
+
last_tick_at INTEGER NOT NULL
|
|
481
|
+
);
|
|
482
|
+
`,
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
version: 18,
|
|
486
|
+
sql: `
|
|
487
|
+
-- Chat message attachments (JSON array of file references)
|
|
488
|
+
ALTER TABLE chat_messages ADD COLUMN attachments TEXT;
|
|
489
|
+
`,
|
|
490
|
+
},
|
|
491
|
+
];
|
|
492
|
+
const insertMigration = db.prepare('INSERT INTO _migrations (version) VALUES (?)');
|
|
493
|
+
for (const migration of migrations) {
|
|
494
|
+
if (migration.version > version) {
|
|
495
|
+
if ('runFn' in migration && typeof migration.runFn === 'function') {
|
|
496
|
+
migration.runFn(db);
|
|
497
|
+
}
|
|
498
|
+
else if ('sql' in migration) {
|
|
499
|
+
db.exec(migration.sql);
|
|
500
|
+
}
|
|
501
|
+
insertMigration.run(migration.version);
|
|
502
|
+
console.log(`[DB] Applied migration v${migration.version}`);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
// ── Migration integrity check ──────────────────────────────────────────
|
|
506
|
+
// Verify tables that should exist actually do. If a migration was recorded
|
|
507
|
+
// as applied but the table is missing (e.g. transaction anomaly), re-run
|
|
508
|
+
// the SQL to recreate it. Only covers SQL-based migrations with CREATE TABLE.
|
|
509
|
+
const expectedTables = [
|
|
510
|
+
{ version: 1, tables: ['tasks', 'task_comments', 'task_history', 'recurring_tasks', 'chat_messages', 'inbox'] },
|
|
511
|
+
{ version: 2, tables: ['sync_ledger'] },
|
|
512
|
+
{ version: 3, tables: ['inbox_states', 'inbox_acks'] },
|
|
513
|
+
{ version: 5, tables: ['focus_states'] },
|
|
514
|
+
{ version: 7, tables: ['reflections'] },
|
|
515
|
+
{ version: 8, tables: ['insights'] },
|
|
516
|
+
{ version: 10, tables: ['mention_rescue_state'] },
|
|
517
|
+
{ version: 14, tables: ['suppression_ledger'] },
|
|
518
|
+
{ version: 15, tables: ['context_memos'] },
|
|
519
|
+
{ version: 16, tables: ['hosts'] },
|
|
520
|
+
{ version: 17, tables: ['system_loop_ticks'] },
|
|
521
|
+
];
|
|
522
|
+
const existingTables = new Set(db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all()
|
|
523
|
+
.map(r => r.name));
|
|
524
|
+
const appliedVersions = new Set(db.prepare('SELECT version FROM _migrations').all()
|
|
525
|
+
.map(r => r.version));
|
|
526
|
+
for (const entry of expectedTables) {
|
|
527
|
+
if (!appliedVersions.has(entry.version))
|
|
528
|
+
continue; // not yet applied — skip
|
|
529
|
+
const missing = entry.tables.filter(t => !existingTables.has(t));
|
|
530
|
+
if (missing.length === 0)
|
|
531
|
+
continue;
|
|
532
|
+
// Find the migration SQL and re-run it
|
|
533
|
+
const migration = migrations.find(m => m.version === entry.version);
|
|
534
|
+
if (migration && 'sql' in migration && migration.sql) {
|
|
535
|
+
console.warn(`[DB] Migration v${entry.version} recorded but tables missing: ${missing.join(', ')}. Re-running SQL.`);
|
|
536
|
+
db.exec(migration.sql);
|
|
537
|
+
}
|
|
538
|
+
else if (migration && 'runFn' in migration && typeof migration.runFn === 'function') {
|
|
539
|
+
console.warn(`[DB] Migration v${entry.version} recorded but tables missing: ${missing.join(', ')}. Re-running function.`);
|
|
540
|
+
migration.runFn(db);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
// ---- JSONL import helpers ----
|
|
545
|
+
/**
|
|
546
|
+
* Import data from a JSONL file into a table
|
|
547
|
+
* Used for one-time migration from JSONL → SQLite on first boot
|
|
548
|
+
*/
|
|
549
|
+
export function importJsonlIfNeeded(db, jsonlPath, tableName, importFn) {
|
|
550
|
+
// Check if table already has data
|
|
551
|
+
const count = db.prepare(`SELECT COUNT(*) as c FROM ${tableName}`).get();
|
|
552
|
+
if (count.c > 0)
|
|
553
|
+
return 0;
|
|
554
|
+
if (!existsSync(jsonlPath))
|
|
555
|
+
return 0;
|
|
556
|
+
try {
|
|
557
|
+
const content = readFileSync(jsonlPath, 'utf-8');
|
|
558
|
+
const records = content
|
|
559
|
+
.split('\n')
|
|
560
|
+
.filter(line => line.trim().length > 0)
|
|
561
|
+
.map(line => {
|
|
562
|
+
try {
|
|
563
|
+
return JSON.parse(line);
|
|
564
|
+
}
|
|
565
|
+
catch {
|
|
566
|
+
return null;
|
|
567
|
+
}
|
|
568
|
+
})
|
|
569
|
+
.filter(Boolean);
|
|
570
|
+
if (records.length === 0)
|
|
571
|
+
return 0;
|
|
572
|
+
const imported = importFn(db, records);
|
|
573
|
+
console.log(`[DB] Imported ${imported} records from ${jsonlPath} → ${tableName}`);
|
|
574
|
+
return imported;
|
|
575
|
+
}
|
|
576
|
+
catch (err) {
|
|
577
|
+
console.error(`[DB] Failed to import ${jsonlPath}:`, err?.message);
|
|
578
|
+
return 0;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Helper to safely parse JSON or return null
|
|
583
|
+
*/
|
|
584
|
+
export function safeJsonStringify(value) {
|
|
585
|
+
if (value === null || value === undefined)
|
|
586
|
+
return null;
|
|
587
|
+
try {
|
|
588
|
+
return JSON.stringify(value);
|
|
589
|
+
}
|
|
590
|
+
catch {
|
|
591
|
+
return null;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
/**
|
|
595
|
+
* Helper to safely parse JSON string
|
|
596
|
+
*/
|
|
597
|
+
export function safeJsonParse(value) {
|
|
598
|
+
if (!value)
|
|
599
|
+
return undefined;
|
|
600
|
+
try {
|
|
601
|
+
return JSON.parse(value);
|
|
602
|
+
}
|
|
603
|
+
catch {
|
|
604
|
+
return undefined;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* SQLite-vec helper utilities.
|
|
609
|
+
*
|
|
610
|
+
* Kept in db.ts so search/indexing code can depend on one storage module
|
|
611
|
+
* while embeddings implementation stays isolated in src/embeddings.ts.
|
|
612
|
+
*/
|
|
613
|
+
export async function embedTextForDb(text) {
|
|
614
|
+
const { embed } = await import('./embeddings.js');
|
|
615
|
+
return embed(text);
|
|
616
|
+
}
|
|
617
|
+
export async function embedBatchForDb(texts) {
|
|
618
|
+
const { embedBatch } = await import('./embeddings.js');
|
|
619
|
+
return embedBatch(texts);
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Initialize vector search tables (sqlite-vec).
|
|
623
|
+
* Called lazily on first vector operation or explicitly at startup.
|
|
624
|
+
* Safe to call multiple times.
|
|
625
|
+
*/
|
|
626
|
+
let _vecInitialized = false;
|
|
627
|
+
export function initVectorSearch() {
|
|
628
|
+
if (_vecInitialized)
|
|
629
|
+
return;
|
|
630
|
+
try {
|
|
631
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
632
|
+
const { initVectorTables } = require('./vector-store.js');
|
|
633
|
+
const db = getDb();
|
|
634
|
+
initVectorTables(db);
|
|
635
|
+
_vecInitialized = true;
|
|
636
|
+
console.log('[DB] Vector search tables initialized');
|
|
637
|
+
}
|
|
638
|
+
catch (err) {
|
|
639
|
+
console.warn('[DB] Vector search not available:', err?.message);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
export function isVectorSearchAvailable() {
|
|
643
|
+
return _vecInitialized;
|
|
644
|
+
}
|
|
645
|
+
export function resetVecInitForTests() {
|
|
646
|
+
_vecInitialized = false;
|
|
647
|
+
}
|
|
648
|
+
//# sourceMappingURL=db.js.map
|
package/dist/db.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type DoctorFetch = (input: string | URL, init?: RequestInit) => Promise<Response>;
|
|
2
|
+
export type DoctorSectionResult = {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
status?: number;
|
|
5
|
+
ms?: number;
|
|
6
|
+
error?: string;
|
|
7
|
+
data?: any;
|
|
8
|
+
};
|
|
9
|
+
export type DoctorReport = {
|
|
10
|
+
baseUrl: string;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
overall: 'pass' | 'warn' | 'fail';
|
|
13
|
+
ok: boolean;
|
|
14
|
+
sections: {
|
|
15
|
+
health: DoctorSectionResult;
|
|
16
|
+
system: DoctorSectionResult;
|
|
17
|
+
execution: DoctorSectionResult;
|
|
18
|
+
policy: DoctorSectionResult;
|
|
19
|
+
teamDoctor: DoctorSectionResult;
|
|
20
|
+
preflight: DoctorSectionResult;
|
|
21
|
+
};
|
|
22
|
+
hints: string[];
|
|
23
|
+
};
|
|
24
|
+
export declare function collectDoctorReport(input: {
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
fetchFn?: DoctorFetch;
|
|
28
|
+
}): Promise<DoctorReport>;
|
|
29
|
+
export declare function formatDoctorHuman(report: DoctorReport): string;
|
|
30
|
+
//# sourceMappingURL=doctor.d.ts.map
|