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/feedback.js
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Feedback collection: in-memory store + CRUD + triage pipeline + support tier SLA
|
|
3
|
+
import { randomUUID } from 'crypto';
|
|
4
|
+
const HOUR = 3_600_000;
|
|
5
|
+
const DAY = 86_400_000;
|
|
6
|
+
export const TIER_POLICIES = {
|
|
7
|
+
free: {
|
|
8
|
+
tier: 'free',
|
|
9
|
+
responseSlaMs: 72 * HOUR, // 72h first response
|
|
10
|
+
resolutionSlaMs: 14 * DAY, // 14 days resolution
|
|
11
|
+
priorityBoost: 0,
|
|
12
|
+
label: 'Free — best effort',
|
|
13
|
+
},
|
|
14
|
+
pro: {
|
|
15
|
+
tier: 'pro',
|
|
16
|
+
responseSlaMs: 24 * HOUR, // 24h first response
|
|
17
|
+
resolutionSlaMs: 7 * DAY, // 7 days resolution
|
|
18
|
+
priorityBoost: 1,
|
|
19
|
+
label: 'Pro — priority support',
|
|
20
|
+
},
|
|
21
|
+
team: {
|
|
22
|
+
tier: 'team',
|
|
23
|
+
responseSlaMs: 4 * HOUR, // 4h first response
|
|
24
|
+
resolutionSlaMs: 2 * DAY, // 48h resolution
|
|
25
|
+
priorityBoost: 2,
|
|
26
|
+
label: 'Team — dedicated SLA',
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Compute breach risk for a single SLA timer.
|
|
31
|
+
* Thresholds: >100% = breached, >75% = at_risk, >50% = approaching, else none
|
|
32
|
+
*/
|
|
33
|
+
export function computeBreachRisk(elapsedMs, slaMs) {
|
|
34
|
+
if (slaMs <= 0)
|
|
35
|
+
return 'none';
|
|
36
|
+
const ratio = elapsedMs / slaMs;
|
|
37
|
+
if (ratio >= 1.0)
|
|
38
|
+
return 'breached';
|
|
39
|
+
if (ratio >= 0.75)
|
|
40
|
+
return 'at_risk';
|
|
41
|
+
if (ratio >= 0.5)
|
|
42
|
+
return 'approaching';
|
|
43
|
+
return 'none';
|
|
44
|
+
}
|
|
45
|
+
const BREACH_ORDER = { none: 0, approaching: 1, at_risk: 2, breached: 3 };
|
|
46
|
+
function worstBreachRisk(a, b) {
|
|
47
|
+
return BREACH_ORDER[a] >= BREACH_ORDER[b] ? a : b;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compute full SLA status for a feedback record at a given point in time.
|
|
51
|
+
*/
|
|
52
|
+
export function computeSLAStatus(record, now = Date.now()) {
|
|
53
|
+
const tier = record.tier || 'free';
|
|
54
|
+
const policy = TIER_POLICIES[tier];
|
|
55
|
+
const responseElapsedMs = record.respondedAt
|
|
56
|
+
? record.respondedAt - record.createdAt
|
|
57
|
+
: now - record.createdAt;
|
|
58
|
+
const resolutionElapsedMs = now - record.createdAt;
|
|
59
|
+
const responseBreachRisk = record.respondedAt
|
|
60
|
+
? computeBreachRisk(record.respondedAt - record.createdAt, policy.responseSlaMs)
|
|
61
|
+
: computeBreachRisk(responseElapsedMs, policy.responseSlaMs);
|
|
62
|
+
const resolutionBreachRisk = record.status === 'triaged'
|
|
63
|
+
? 'none' // resolved records don't accumulate resolution risk
|
|
64
|
+
: computeBreachRisk(resolutionElapsedMs, policy.resolutionSlaMs);
|
|
65
|
+
return {
|
|
66
|
+
tier,
|
|
67
|
+
responseSlaMs: policy.responseSlaMs,
|
|
68
|
+
resolutionSlaMs: policy.resolutionSlaMs,
|
|
69
|
+
responseElapsedMs,
|
|
70
|
+
resolutionElapsedMs,
|
|
71
|
+
responseBreachRisk,
|
|
72
|
+
resolutionBreachRisk,
|
|
73
|
+
overallBreachRisk: worstBreachRisk(responseBreachRisk, resolutionBreachRisk),
|
|
74
|
+
respondedAt: record.respondedAt,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// ── Severity inference ──
|
|
78
|
+
const CRITICAL_PATTERNS = /\b(crash|data loss|security|auth broken|production down|can't login|can't sign in)\b/i;
|
|
79
|
+
const HIGH_PATTERNS = /\b(broken|fails|error|not working|can't|unable to|blocks|regression)\b/i;
|
|
80
|
+
const MEDIUM_PATTERNS = /\b(slow|confusing|unexpected|wrong|incorrect|missing)\b/i;
|
|
81
|
+
export function inferSeverity(category, message) {
|
|
82
|
+
if (category === 'bug') {
|
|
83
|
+
if (CRITICAL_PATTERNS.test(message))
|
|
84
|
+
return 'critical';
|
|
85
|
+
if (HIGH_PATTERNS.test(message))
|
|
86
|
+
return 'high';
|
|
87
|
+
return 'medium';
|
|
88
|
+
}
|
|
89
|
+
if (category === 'feature')
|
|
90
|
+
return 'low';
|
|
91
|
+
// general
|
|
92
|
+
if (HIGH_PATTERNS.test(message))
|
|
93
|
+
return 'medium';
|
|
94
|
+
return 'low';
|
|
95
|
+
}
|
|
96
|
+
// ── Rate limiter ──
|
|
97
|
+
const rateLimits = new Map();
|
|
98
|
+
const RATE_LIMIT = 5;
|
|
99
|
+
const RATE_WINDOW_MS = 60_000;
|
|
100
|
+
export function checkRateLimit(ip) {
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
const entry = rateLimits.get(ip);
|
|
103
|
+
if (!entry || now - entry.windowStart > RATE_WINDOW_MS) {
|
|
104
|
+
rateLimits.set(ip, { count: 1, windowStart: now });
|
|
105
|
+
return { allowed: true };
|
|
106
|
+
}
|
|
107
|
+
if (entry.count >= RATE_LIMIT) {
|
|
108
|
+
const retryAfterSec = Math.ceil((entry.windowStart + RATE_WINDOW_MS - now) / 1000);
|
|
109
|
+
return { allowed: false, retryAfterSec };
|
|
110
|
+
}
|
|
111
|
+
entry.count++;
|
|
112
|
+
return { allowed: true };
|
|
113
|
+
}
|
|
114
|
+
// ── Feedback store (in-memory, v1) ──
|
|
115
|
+
const feedbackStore = new Map();
|
|
116
|
+
export function submitFeedback(submission) {
|
|
117
|
+
const id = `fb-${randomUUID().slice(0, 8)}`;
|
|
118
|
+
const now = Date.now();
|
|
119
|
+
const severity = submission.severity || inferSeverity(submission.category, submission.message);
|
|
120
|
+
const reporterType = submission.reporterType || 'human';
|
|
121
|
+
const tier = submission.tier || 'free';
|
|
122
|
+
const record = {
|
|
123
|
+
...submission,
|
|
124
|
+
id,
|
|
125
|
+
status: 'new',
|
|
126
|
+
votes: 0,
|
|
127
|
+
severity,
|
|
128
|
+
reporterType,
|
|
129
|
+
tier,
|
|
130
|
+
createdAt: now,
|
|
131
|
+
updatedAt: now,
|
|
132
|
+
};
|
|
133
|
+
feedbackStore.set(id, record);
|
|
134
|
+
return record;
|
|
135
|
+
}
|
|
136
|
+
const SEVERITY_ORDER = {
|
|
137
|
+
critical: 0,
|
|
138
|
+
high: 1,
|
|
139
|
+
medium: 2,
|
|
140
|
+
low: 3,
|
|
141
|
+
};
|
|
142
|
+
export function listFeedback(query = {}) {
|
|
143
|
+
const now = Date.now();
|
|
144
|
+
let items = Array.from(feedbackStore.values());
|
|
145
|
+
// Filter by status
|
|
146
|
+
const statusFilter = query.status || 'new';
|
|
147
|
+
if (statusFilter !== 'all') {
|
|
148
|
+
items = items.filter(f => f.status === statusFilter);
|
|
149
|
+
}
|
|
150
|
+
// Filter by category
|
|
151
|
+
if (query.category && query.category !== 'all') {
|
|
152
|
+
items = items.filter(f => f.category === query.category);
|
|
153
|
+
}
|
|
154
|
+
// Filter by severity
|
|
155
|
+
if (query.severity && query.severity !== 'all') {
|
|
156
|
+
items = items.filter(f => f.severity === query.severity);
|
|
157
|
+
}
|
|
158
|
+
// Filter by reporter type
|
|
159
|
+
if (query.reporterType && query.reporterType !== 'all') {
|
|
160
|
+
items = items.filter(f => f.reporterType === query.reporterType);
|
|
161
|
+
}
|
|
162
|
+
// Filter by tier
|
|
163
|
+
if (query.tier && query.tier !== 'all') {
|
|
164
|
+
items = items.filter(f => (f.tier || 'free') === query.tier);
|
|
165
|
+
}
|
|
166
|
+
const total = items.length;
|
|
167
|
+
const newCount = Array.from(feedbackStore.values()).filter(f => f.status === 'new').length;
|
|
168
|
+
const breachedCount = Array.from(feedbackStore.values()).filter(f => {
|
|
169
|
+
if (f.status === 'triaged' || f.status === 'archived')
|
|
170
|
+
return false;
|
|
171
|
+
return computeSLAStatus(f, now).overallBreachRisk === 'breached';
|
|
172
|
+
}).length;
|
|
173
|
+
// Sort
|
|
174
|
+
const sortBy = query.sort || 'date';
|
|
175
|
+
const order = query.order || 'desc';
|
|
176
|
+
items.sort((a, b) => {
|
|
177
|
+
if (sortBy === 'votes')
|
|
178
|
+
return order === 'desc' ? b.votes - a.votes : a.votes - b.votes;
|
|
179
|
+
if (sortBy === 'severity') {
|
|
180
|
+
const diff = SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity];
|
|
181
|
+
return order === 'desc' ? -diff : diff;
|
|
182
|
+
}
|
|
183
|
+
if (sortBy === 'breach_risk') {
|
|
184
|
+
const slaA = computeSLAStatus(a, now);
|
|
185
|
+
const slaB = computeSLAStatus(b, now);
|
|
186
|
+
const diff = BREACH_ORDER[slaB.overallBreachRisk] - BREACH_ORDER[slaA.overallBreachRisk];
|
|
187
|
+
if (diff !== 0)
|
|
188
|
+
return order === 'desc' ? diff : -diff;
|
|
189
|
+
// Secondary: tier priority (team > pro > free)
|
|
190
|
+
const tierOrder = { team: 2, pro: 1, free: 0 };
|
|
191
|
+
return tierOrder[b.tier || 'free'] - tierOrder[a.tier || 'free'];
|
|
192
|
+
}
|
|
193
|
+
// date
|
|
194
|
+
return order === 'desc' ? b.createdAt - a.createdAt : a.createdAt - b.createdAt;
|
|
195
|
+
});
|
|
196
|
+
// Pagination
|
|
197
|
+
const offset = query.offset || 0;
|
|
198
|
+
const limit = Math.min(query.limit || 25, 100);
|
|
199
|
+
items = items.slice(offset, offset + limit);
|
|
200
|
+
return {
|
|
201
|
+
items: items.map(f => ({
|
|
202
|
+
id: f.id,
|
|
203
|
+
category: f.category,
|
|
204
|
+
messagePreview: f.message.slice(0, 120),
|
|
205
|
+
status: f.status,
|
|
206
|
+
severity: f.severity,
|
|
207
|
+
reporterType: f.reporterType,
|
|
208
|
+
votes: f.votes,
|
|
209
|
+
createdAt: f.createdAt,
|
|
210
|
+
email: f.email,
|
|
211
|
+
url: f.url,
|
|
212
|
+
assignedTo: f.assignedTo,
|
|
213
|
+
triageResult: f.triageResult,
|
|
214
|
+
tier: f.tier || 'free',
|
|
215
|
+
sla: computeSLAStatus(f, now),
|
|
216
|
+
})),
|
|
217
|
+
total,
|
|
218
|
+
newCount,
|
|
219
|
+
breachedCount,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
export function getFeedback(id) {
|
|
223
|
+
return feedbackStore.get(id);
|
|
224
|
+
}
|
|
225
|
+
export function updateFeedback(id, patch) {
|
|
226
|
+
const record = feedbackStore.get(id);
|
|
227
|
+
if (!record)
|
|
228
|
+
return null;
|
|
229
|
+
if (patch.status !== undefined)
|
|
230
|
+
record.status = patch.status;
|
|
231
|
+
if (patch.notes !== undefined)
|
|
232
|
+
record.notes = patch.notes;
|
|
233
|
+
if (patch.assignedTo !== undefined)
|
|
234
|
+
record.assignedTo = patch.assignedTo;
|
|
235
|
+
if (patch.votes !== undefined)
|
|
236
|
+
record.votes = patch.votes;
|
|
237
|
+
if (patch.severity !== undefined)
|
|
238
|
+
record.severity = patch.severity;
|
|
239
|
+
if (patch.tier !== undefined)
|
|
240
|
+
record.tier = patch.tier;
|
|
241
|
+
if (patch.respondedAt !== undefined)
|
|
242
|
+
record.respondedAt = patch.respondedAt;
|
|
243
|
+
record.updatedAt = Date.now();
|
|
244
|
+
return record;
|
|
245
|
+
}
|
|
246
|
+
export function voteFeedback(id) {
|
|
247
|
+
const record = feedbackStore.get(id);
|
|
248
|
+
if (!record)
|
|
249
|
+
return null;
|
|
250
|
+
record.votes++;
|
|
251
|
+
record.updatedAt = Date.now();
|
|
252
|
+
return record;
|
|
253
|
+
}
|
|
254
|
+
const SEVERITY_TO_PRIORITY = {
|
|
255
|
+
critical: 'P0',
|
|
256
|
+
high: 'P1',
|
|
257
|
+
medium: 'P2',
|
|
258
|
+
low: 'P3',
|
|
259
|
+
};
|
|
260
|
+
export function buildTriageTask(input) {
|
|
261
|
+
const record = feedbackStore.get(input.feedbackId);
|
|
262
|
+
if (!record)
|
|
263
|
+
return { error: 'Feedback not found' };
|
|
264
|
+
if (record.status === 'triaged' && record.triageResult) {
|
|
265
|
+
return { error: `Already triaged as task ${record.triageResult.taskId}` };
|
|
266
|
+
}
|
|
267
|
+
const tier = record.tier || 'free';
|
|
268
|
+
const policy = TIER_POLICIES[tier];
|
|
269
|
+
// Apply tier priority boost
|
|
270
|
+
const basePriority = input.priority || SEVERITY_TO_PRIORITY[record.severity];
|
|
271
|
+
const priorities = ['P0', 'P1', 'P2', 'P3'];
|
|
272
|
+
const baseIdx = priorities.indexOf(basePriority);
|
|
273
|
+
const boostedIdx = baseIdx >= 0 ? Math.max(0, baseIdx - policy.priorityBoost) : baseIdx;
|
|
274
|
+
const priority = boostedIdx >= 0 ? priorities[boostedIdx] : basePriority;
|
|
275
|
+
const sla = computeSLAStatus(record);
|
|
276
|
+
const categoryLabel = record.category === 'bug' ? 'Bug' : record.category === 'feature' ? 'Feature request' : 'Feedback';
|
|
277
|
+
const tierLabel = tier !== 'free' ? ` [${tier.toUpperCase()}]` : '';
|
|
278
|
+
const title = input.title || `[${categoryLabel}]${tierLabel} ${record.message.slice(0, 80)}`;
|
|
279
|
+
const description = [
|
|
280
|
+
`**Source**: Feedback ${record.id} (${record.reporterType})`,
|
|
281
|
+
`**Tier**: ${tier} (${policy.label})`,
|
|
282
|
+
record.reporterAgent ? `**Reporter agent**: ${record.reporterAgent}` : null,
|
|
283
|
+
record.email ? `**Reporter email**: ${record.email}` : null,
|
|
284
|
+
`**Category**: ${record.category}`,
|
|
285
|
+
`**Severity**: ${record.severity}`,
|
|
286
|
+
sla.overallBreachRisk !== 'none' ? `**⚠️ SLA Risk**: ${sla.overallBreachRisk}` : null,
|
|
287
|
+
record.url ? `**URL**: ${record.url}` : null,
|
|
288
|
+
'',
|
|
289
|
+
record.message,
|
|
290
|
+
].filter(Boolean).join('\n');
|
|
291
|
+
return {
|
|
292
|
+
title,
|
|
293
|
+
description,
|
|
294
|
+
priority,
|
|
295
|
+
assignee: input.assignee,
|
|
296
|
+
lane: input.lane,
|
|
297
|
+
metadata: {
|
|
298
|
+
source: 'feedback',
|
|
299
|
+
feedbackId: record.id,
|
|
300
|
+
severity: record.severity,
|
|
301
|
+
reporterType: record.reporterType,
|
|
302
|
+
reporterAgent: record.reporterAgent,
|
|
303
|
+
reporterEmail: record.email,
|
|
304
|
+
category: record.category,
|
|
305
|
+
triagedBy: input.triageAgent,
|
|
306
|
+
triagedAt: Date.now(),
|
|
307
|
+
tier,
|
|
308
|
+
slaAtTriage: {
|
|
309
|
+
responseBreachRisk: sla.responseBreachRisk,
|
|
310
|
+
resolutionBreachRisk: sla.resolutionBreachRisk,
|
|
311
|
+
responseElapsedMs: sla.responseElapsedMs,
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
export function markTriaged(feedbackId, taskId, triageAgent, priority, assignee) {
|
|
317
|
+
const record = feedbackStore.get(feedbackId);
|
|
318
|
+
if (!record)
|
|
319
|
+
return null;
|
|
320
|
+
record.status = 'triaged';
|
|
321
|
+
record.triageResult = {
|
|
322
|
+
taskId,
|
|
323
|
+
triageAgent,
|
|
324
|
+
triagedAt: Date.now(),
|
|
325
|
+
priority,
|
|
326
|
+
assignee,
|
|
327
|
+
};
|
|
328
|
+
record.updatedAt = Date.now();
|
|
329
|
+
return record;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Get triage queue sorted by breach risk (highest first), then tier, then severity.
|
|
333
|
+
* This ensures SLA-breached items from paying tiers surface first.
|
|
334
|
+
*/
|
|
335
|
+
export function getTriageQueue() {
|
|
336
|
+
const now = Date.now();
|
|
337
|
+
const newItems = Array.from(feedbackStore.values())
|
|
338
|
+
.filter(f => f.status === 'new');
|
|
339
|
+
// Compute SLA for each item
|
|
340
|
+
const enriched = newItems.map(f => ({
|
|
341
|
+
record: f,
|
|
342
|
+
sla: computeSLAStatus(f, now),
|
|
343
|
+
}));
|
|
344
|
+
// Sort: breach risk desc → tier desc → severity asc → date desc
|
|
345
|
+
const tierOrder = { team: 2, pro: 1, free: 0 };
|
|
346
|
+
enriched.sort((a, b) => {
|
|
347
|
+
// Breach risk first (breached > at_risk > approaching > none)
|
|
348
|
+
const breachDiff = BREACH_ORDER[b.sla.overallBreachRisk] - BREACH_ORDER[a.sla.overallBreachRisk];
|
|
349
|
+
if (breachDiff !== 0)
|
|
350
|
+
return breachDiff;
|
|
351
|
+
// Then tier (team > pro > free)
|
|
352
|
+
const tierDiff = tierOrder[b.record.tier || 'free'] - tierOrder[a.record.tier || 'free'];
|
|
353
|
+
if (tierDiff !== 0)
|
|
354
|
+
return tierDiff;
|
|
355
|
+
// Then severity
|
|
356
|
+
const sevDiff = SEVERITY_ORDER[a.record.severity] - SEVERITY_ORDER[b.record.severity];
|
|
357
|
+
if (sevDiff !== 0)
|
|
358
|
+
return sevDiff;
|
|
359
|
+
return b.record.createdAt - a.record.createdAt;
|
|
360
|
+
});
|
|
361
|
+
const breachedCount = enriched.filter(e => e.sla.overallBreachRisk === 'breached').length;
|
|
362
|
+
const atRiskCount = enriched.filter(e => e.sla.overallBreachRisk === 'at_risk').length;
|
|
363
|
+
// Apply tier priority boost to suggested priority
|
|
364
|
+
function boostedPriority(severity, tier) {
|
|
365
|
+
const basePriority = SEVERITY_TO_PRIORITY[severity];
|
|
366
|
+
const boost = TIER_POLICIES[tier].priorityBoost;
|
|
367
|
+
if (boost === 0)
|
|
368
|
+
return basePriority;
|
|
369
|
+
const priorities = ['P0', 'P1', 'P2', 'P3'];
|
|
370
|
+
const baseIdx = priorities.indexOf(basePriority);
|
|
371
|
+
const boostedIdx = Math.max(0, baseIdx - boost);
|
|
372
|
+
return priorities[boostedIdx];
|
|
373
|
+
}
|
|
374
|
+
return {
|
|
375
|
+
items: enriched.map(({ record: f, sla }) => ({
|
|
376
|
+
feedbackId: f.id,
|
|
377
|
+
category: f.category,
|
|
378
|
+
severity: f.severity,
|
|
379
|
+
reporterType: f.reporterType,
|
|
380
|
+
messagePreview: f.message.slice(0, 120),
|
|
381
|
+
createdAt: f.createdAt,
|
|
382
|
+
votes: f.votes,
|
|
383
|
+
suggestedPriority: boostedPriority(f.severity, f.tier || 'free'),
|
|
384
|
+
tier: f.tier || 'free',
|
|
385
|
+
sla,
|
|
386
|
+
})),
|
|
387
|
+
total: enriched.length,
|
|
388
|
+
breachedCount,
|
|
389
|
+
atRiskCount,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
// Export for testing
|
|
393
|
+
export function _clearFeedbackStore() {
|
|
394
|
+
feedbackStore.clear();
|
|
395
|
+
rateLimits.clear();
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface FileMeta {
|
|
2
|
+
id: string;
|
|
3
|
+
originalName: string;
|
|
4
|
+
storedPath: string;
|
|
5
|
+
mimeType: string;
|
|
6
|
+
sizeBytes: number;
|
|
7
|
+
uploadedBy: string;
|
|
8
|
+
tags: string[];
|
|
9
|
+
createdAt: number;
|
|
10
|
+
}
|
|
11
|
+
declare const FILES_DIR: string;
|
|
12
|
+
declare const MAX_SIZE_BYTES: number;
|
|
13
|
+
export { MAX_SIZE_BYTES, FILES_DIR };
|
|
14
|
+
export interface UploadInput {
|
|
15
|
+
filename: string;
|
|
16
|
+
buffer: Buffer;
|
|
17
|
+
uploadedBy?: string;
|
|
18
|
+
tags?: string[];
|
|
19
|
+
mimeType?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface UploadResult {
|
|
22
|
+
success: boolean;
|
|
23
|
+
file?: FileMeta;
|
|
24
|
+
error?: string;
|
|
25
|
+
}
|
|
26
|
+
/** Upload a file. Returns metadata or error. */
|
|
27
|
+
export declare function uploadFile(input: UploadInput): UploadResult;
|
|
28
|
+
/** Get file metadata by ID. */
|
|
29
|
+
export declare function getFile(id: string): FileMeta | null;
|
|
30
|
+
/** Read file bytes. Returns null if not found. */
|
|
31
|
+
export declare function readFile(id: string): {
|
|
32
|
+
meta: FileMeta;
|
|
33
|
+
buffer: Buffer;
|
|
34
|
+
} | null;
|
|
35
|
+
/** List files with optional filters. */
|
|
36
|
+
export declare function listFiles(opts?: {
|
|
37
|
+
uploadedBy?: string;
|
|
38
|
+
tag?: string;
|
|
39
|
+
limit?: number;
|
|
40
|
+
offset?: number;
|
|
41
|
+
}): {
|
|
42
|
+
files: FileMeta[];
|
|
43
|
+
total: number;
|
|
44
|
+
};
|
|
45
|
+
/** Delete a file (metadata + disk). */
|
|
46
|
+
export declare function deleteFile(id: string): {
|
|
47
|
+
success: boolean;
|
|
48
|
+
error?: string;
|
|
49
|
+
};
|
|
50
|
+
/** Check if a MIME type is an image (for inline preview). */
|
|
51
|
+
export declare function isImage(mimeType: string): boolean;
|
|
52
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAID,QAAA,MAAM,SAAS,QAA+B,CAAA;AAC9C,QAAA,MAAM,cAAc,QAAmB,CAAA;AA2BvC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAA;AAuBpC,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CA4C3D;AAED,+BAA+B;AAC/B,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAMnD;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK9E;AAED,wCAAwC;AACxC,wBAAgB,SAAS,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAuBjJ;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAe3E;AAED,6DAA6D;AAC7D,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjD"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// File upload/download/management
|
|
3
|
+
//
|
|
4
|
+
// Stores file bytes under REFLECTT_HOME/files/<uuid>.<ext>
|
|
5
|
+
// Metadata in SQLite `files` table.
|
|
6
|
+
// 50MB upload limit. Extension allowlist for safety.
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { mkdirSync, writeFileSync, readFileSync, unlinkSync, existsSync } from 'node:fs';
|
|
9
|
+
import { join, extname } from 'node:path';
|
|
10
|
+
import { getDb } from './db.js';
|
|
11
|
+
import { REFLECTT_HOME } from './config.js';
|
|
12
|
+
// ── Constants ──
|
|
13
|
+
const FILES_DIR = join(REFLECTT_HOME, 'files');
|
|
14
|
+
const MAX_SIZE_BYTES = 50 * 1024 * 1024; // 50MB
|
|
15
|
+
// Extension → MIME type mapping (allowlist)
|
|
16
|
+
const ALLOWED_EXTENSIONS = {
|
|
17
|
+
'.pdf': 'application/pdf',
|
|
18
|
+
'.png': 'image/png',
|
|
19
|
+
'.jpg': 'image/jpeg',
|
|
20
|
+
'.jpeg': 'image/jpeg',
|
|
21
|
+
'.gif': 'image/gif',
|
|
22
|
+
'.webp': 'image/webp',
|
|
23
|
+
'.svg': 'image/svg+xml',
|
|
24
|
+
'.csv': 'text/csv',
|
|
25
|
+
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
26
|
+
'.xls': 'application/vnd.ms-excel',
|
|
27
|
+
'.doc': 'application/msword',
|
|
28
|
+
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
29
|
+
'.txt': 'text/plain',
|
|
30
|
+
'.md': 'text/markdown',
|
|
31
|
+
'.json': 'application/json',
|
|
32
|
+
'.yaml': 'text/yaml',
|
|
33
|
+
'.yml': 'text/yaml',
|
|
34
|
+
'.zip': 'application/zip',
|
|
35
|
+
'.log': 'text/plain',
|
|
36
|
+
};
|
|
37
|
+
const IMAGE_MIMES = new Set(['image/png', 'image/jpeg', 'image/gif', 'image/webp', 'image/svg+xml']);
|
|
38
|
+
export { MAX_SIZE_BYTES, FILES_DIR };
|
|
39
|
+
// ── DB ──
|
|
40
|
+
function ensureTable() {
|
|
41
|
+
const db = getDb();
|
|
42
|
+
db.exec(`
|
|
43
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
44
|
+
id TEXT PRIMARY KEY,
|
|
45
|
+
original_name TEXT NOT NULL,
|
|
46
|
+
stored_path TEXT NOT NULL,
|
|
47
|
+
mime_type TEXT NOT NULL,
|
|
48
|
+
size_bytes INTEGER NOT NULL,
|
|
49
|
+
uploaded_by TEXT NOT NULL DEFAULT 'anonymous',
|
|
50
|
+
tags TEXT NOT NULL DEFAULT '[]',
|
|
51
|
+
created_at INTEGER NOT NULL
|
|
52
|
+
)
|
|
53
|
+
`);
|
|
54
|
+
mkdirSync(FILES_DIR, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
/** Upload a file. Returns metadata or error. */
|
|
57
|
+
export function uploadFile(input) {
|
|
58
|
+
ensureTable();
|
|
59
|
+
const { filename, buffer, uploadedBy = 'anonymous', tags = [] } = input;
|
|
60
|
+
// Size check
|
|
61
|
+
if (buffer.length > MAX_SIZE_BYTES) {
|
|
62
|
+
return { success: false, error: `File exceeds ${MAX_SIZE_BYTES / (1024 * 1024)}MB limit (got ${(buffer.length / (1024 * 1024)).toFixed(1)}MB)` };
|
|
63
|
+
}
|
|
64
|
+
// Extension check
|
|
65
|
+
const ext = extname(filename).toLowerCase();
|
|
66
|
+
if (!ALLOWED_EXTENSIONS[ext]) {
|
|
67
|
+
return { success: false, error: `File extension "${ext}" is not allowed. Allowed: ${Object.keys(ALLOWED_EXTENSIONS).join(', ')}` };
|
|
68
|
+
}
|
|
69
|
+
const id = randomUUID();
|
|
70
|
+
const storedName = `${id}${ext}`;
|
|
71
|
+
const storedPath = join(FILES_DIR, storedName);
|
|
72
|
+
const mimeType = input.mimeType || ALLOWED_EXTENSIONS[ext] || 'application/octet-stream';
|
|
73
|
+
// Write to disk
|
|
74
|
+
writeFileSync(storedPath, buffer);
|
|
75
|
+
// Write metadata
|
|
76
|
+
const now = Date.now();
|
|
77
|
+
const db = getDb();
|
|
78
|
+
db.prepare(`
|
|
79
|
+
INSERT INTO files (id, original_name, stored_path, mime_type, size_bytes, uploaded_by, tags, created_at)
|
|
80
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
81
|
+
`).run(id, filename, storedPath, mimeType, buffer.length, uploadedBy, JSON.stringify(tags), now);
|
|
82
|
+
const file = {
|
|
83
|
+
id,
|
|
84
|
+
originalName: filename,
|
|
85
|
+
storedPath,
|
|
86
|
+
mimeType,
|
|
87
|
+
sizeBytes: buffer.length,
|
|
88
|
+
uploadedBy,
|
|
89
|
+
tags,
|
|
90
|
+
createdAt: now,
|
|
91
|
+
};
|
|
92
|
+
return { success: true, file };
|
|
93
|
+
}
|
|
94
|
+
/** Get file metadata by ID. */
|
|
95
|
+
export function getFile(id) {
|
|
96
|
+
ensureTable();
|
|
97
|
+
const db = getDb();
|
|
98
|
+
const row = db.prepare('SELECT * FROM files WHERE id = ?').get(id);
|
|
99
|
+
if (!row)
|
|
100
|
+
return null;
|
|
101
|
+
return rowToMeta(row);
|
|
102
|
+
}
|
|
103
|
+
/** Read file bytes. Returns null if not found. */
|
|
104
|
+
export function readFile(id) {
|
|
105
|
+
const meta = getFile(id);
|
|
106
|
+
if (!meta)
|
|
107
|
+
return null;
|
|
108
|
+
if (!existsSync(meta.storedPath))
|
|
109
|
+
return null;
|
|
110
|
+
return { meta, buffer: readFileSync(meta.storedPath) };
|
|
111
|
+
}
|
|
112
|
+
/** List files with optional filters. */
|
|
113
|
+
export function listFiles(opts = {}) {
|
|
114
|
+
ensureTable();
|
|
115
|
+
const db = getDb();
|
|
116
|
+
const conditions = [];
|
|
117
|
+
const params = [];
|
|
118
|
+
if (opts.uploadedBy) {
|
|
119
|
+
conditions.push('uploaded_by = ?');
|
|
120
|
+
params.push(opts.uploadedBy);
|
|
121
|
+
}
|
|
122
|
+
if (opts.tag) {
|
|
123
|
+
conditions.push("tags LIKE ?");
|
|
124
|
+
params.push(`%"${opts.tag}"%`);
|
|
125
|
+
}
|
|
126
|
+
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
127
|
+
const limit = Math.min(opts.limit || 50, 200);
|
|
128
|
+
const offset = opts.offset || 0;
|
|
129
|
+
const total = db.prepare(`SELECT COUNT(*) as c FROM files ${where}`).get(...params).c;
|
|
130
|
+
const rows = db.prepare(`SELECT * FROM files ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?`).all(...params, limit, offset);
|
|
131
|
+
return { files: rows.map(rowToMeta), total };
|
|
132
|
+
}
|
|
133
|
+
/** Delete a file (metadata + disk). */
|
|
134
|
+
export function deleteFile(id) {
|
|
135
|
+
ensureTable();
|
|
136
|
+
const meta = getFile(id);
|
|
137
|
+
if (!meta)
|
|
138
|
+
return { success: false, error: 'File not found' };
|
|
139
|
+
// Remove from disk
|
|
140
|
+
if (existsSync(meta.storedPath)) {
|
|
141
|
+
unlinkSync(meta.storedPath);
|
|
142
|
+
}
|
|
143
|
+
// Remove metadata
|
|
144
|
+
const db = getDb();
|
|
145
|
+
db.prepare('DELETE FROM files WHERE id = ?').run(id);
|
|
146
|
+
return { success: true };
|
|
147
|
+
}
|
|
148
|
+
/** Check if a MIME type is an image (for inline preview). */
|
|
149
|
+
export function isImage(mimeType) {
|
|
150
|
+
return IMAGE_MIMES.has(mimeType);
|
|
151
|
+
}
|
|
152
|
+
// ── Helpers ──
|
|
153
|
+
function rowToMeta(row) {
|
|
154
|
+
let tags = [];
|
|
155
|
+
try {
|
|
156
|
+
tags = JSON.parse(String(row.tags || '[]'));
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
tags = [];
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
id: String(row.id),
|
|
163
|
+
originalName: String(row.original_name),
|
|
164
|
+
storedPath: String(row.stored_path),
|
|
165
|
+
mimeType: String(row.mime_type),
|
|
166
|
+
sizeBytes: Number(row.size_bytes) || 0,
|
|
167
|
+
uploadedBy: String(row.uploaded_by || 'anonymous'),
|
|
168
|
+
tags,
|
|
169
|
+
createdAt: Number(row.created_at) || 0,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|