reflectt-node 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +178 -0
- package/README.md +188 -0
- package/dist/activationEvents.d.ts +110 -0
- package/dist/activationEvents.d.ts.map +1 -0
- package/dist/activationEvents.js +378 -0
- package/dist/activationEvents.js.map +1 -0
- package/dist/activity-signal.d.ts +30 -0
- package/dist/activity-signal.d.ts.map +1 -0
- package/dist/activity-signal.js +93 -0
- package/dist/activity-signal.js.map +1 -0
- package/dist/alert-integrity.d.ts +100 -0
- package/dist/alert-integrity.d.ts.map +1 -0
- package/dist/alert-integrity.js +333 -0
- package/dist/alert-integrity.js.map +1 -0
- package/dist/alert-preflight.d.ts +40 -0
- package/dist/alert-preflight.d.ts.map +1 -0
- package/dist/alert-preflight.js +235 -0
- package/dist/alert-preflight.js.map +1 -0
- package/dist/analytics.d.ts +131 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +371 -0
- package/dist/analytics.js.map +1 -0
- package/dist/artifact-mirror.d.ts +26 -0
- package/dist/artifact-mirror.d.ts.map +1 -0
- package/dist/artifact-mirror.js +170 -0
- package/dist/artifact-mirror.js.map +1 -0
- package/dist/artifact-resolver.d.ts +48 -0
- package/dist/artifact-resolver.d.ts.map +1 -0
- package/dist/artifact-resolver.js +164 -0
- package/dist/artifact-resolver.js.map +1 -0
- package/dist/assignment.d.ts +116 -0
- package/dist/assignment.d.ts.map +1 -0
- package/dist/assignment.js +475 -0
- package/dist/assignment.js.map +1 -0
- package/dist/auditLedger.d.ts +50 -0
- package/dist/auditLedger.d.ts.map +1 -0
- package/dist/auditLedger.js +136 -0
- package/dist/auditLedger.js.map +1 -0
- package/dist/boardHealthWorker.d.ts +134 -0
- package/dist/boardHealthWorker.d.ts.map +1 -0
- package/dist/boardHealthWorker.js +882 -0
- package/dist/boardHealthWorker.js.map +1 -0
- package/dist/bootstrap-team.d.ts +42 -0
- package/dist/bootstrap-team.d.ts.map +1 -0
- package/dist/bootstrap-team.js +111 -0
- package/dist/bootstrap-team.js.map +1 -0
- package/dist/buildInfo.d.ts +17 -0
- package/dist/buildInfo.d.ts.map +1 -0
- package/dist/buildInfo.js +56 -0
- package/dist/buildInfo.js.map +1 -0
- package/dist/calendar-events.d.ts +133 -0
- package/dist/calendar-events.d.ts.map +1 -0
- package/dist/calendar-events.js +615 -0
- package/dist/calendar-events.js.map +1 -0
- package/dist/calendar-ical.d.ts +41 -0
- package/dist/calendar-ical.d.ts.map +1 -0
- package/dist/calendar-ical.js +413 -0
- package/dist/calendar-ical.js.map +1 -0
- package/dist/calendar-reminder-engine.d.ts +10 -0
- package/dist/calendar-reminder-engine.d.ts.map +1 -0
- package/dist/calendar-reminder-engine.js +143 -0
- package/dist/calendar-reminder-engine.js.map +1 -0
- package/dist/calendar.d.ts +75 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +391 -0
- package/dist/calendar.js.map +1 -0
- package/dist/canvas-multiplexer.d.ts +44 -0
- package/dist/canvas-multiplexer.d.ts.map +1 -0
- package/dist/canvas-multiplexer.js +150 -0
- package/dist/canvas-multiplexer.js.map +1 -0
- package/dist/canvas-slots.d.ts +83 -0
- package/dist/canvas-slots.d.ts.map +1 -0
- package/dist/canvas-slots.js +144 -0
- package/dist/canvas-slots.js.map +1 -0
- package/dist/canvas-types.d.ts +56 -0
- package/dist/canvas-types.d.ts.map +1 -0
- package/dist/canvas-types.js +54 -0
- package/dist/canvas-types.js.map +1 -0
- package/dist/cf-keepalive.d.ts +40 -0
- package/dist/cf-keepalive.d.ts.map +1 -0
- package/dist/cf-keepalive.js +153 -0
- package/dist/cf-keepalive.js.map +1 -0
- package/dist/changeFeed.d.ts +38 -0
- package/dist/changeFeed.d.ts.map +1 -0
- package/dist/changeFeed.js +324 -0
- package/dist/changeFeed.js.map +1 -0
- package/dist/channels.d.ts +28 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +23 -0
- package/dist/channels.js.map +1 -0
- package/dist/chat-approval-detector.d.ts +47 -0
- package/dist/chat-approval-detector.d.ts.map +1 -0
- package/dist/chat-approval-detector.js +224 -0
- package/dist/chat-approval-detector.js.map +1 -0
- package/dist/chat.d.ts +119 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +666 -0
- package/dist/chat.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1142 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud.d.ts +45 -0
- package/dist/cloud.d.ts.map +1 -0
- package/dist/cloud.js +962 -0
- package/dist/cloud.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +33 -0
- package/dist/config.js.map +1 -0
- package/dist/connectivity.d.ts +59 -0
- package/dist/connectivity.d.ts.map +1 -0
- package/dist/connectivity.js +173 -0
- package/dist/connectivity.js.map +1 -0
- package/dist/contacts.d.ts +59 -0
- package/dist/contacts.d.ts.map +1 -0
- package/dist/contacts.js +183 -0
- package/dist/contacts.js.map +1 -0
- package/dist/content.d.ts +130 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +186 -0
- package/dist/content.js.map +1 -0
- package/dist/context-budget.d.ts +87 -0
- package/dist/context-budget.d.ts.map +1 -0
- package/dist/context-budget.js +459 -0
- package/dist/context-budget.js.map +1 -0
- package/dist/continuity-loop.d.ts +55 -0
- package/dist/continuity-loop.d.ts.map +1 -0
- package/dist/continuity-loop.js +267 -0
- package/dist/continuity-loop.js.map +1 -0
- package/dist/dashboard.d.ts +6 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/dashboard.js +2348 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/db.d.ts +44 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +648 -0
- package/dist/db.js.map +1 -0
- package/dist/doctor.d.ts +30 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +159 -0
- package/dist/doctor.js.map +1 -0
- package/dist/duplicateClosureGuard.d.ts +31 -0
- package/dist/duplicateClosureGuard.d.ts.map +1 -0
- package/dist/duplicateClosureGuard.js +83 -0
- package/dist/duplicateClosureGuard.js.map +1 -0
- package/dist/embeddings.d.ts +13 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +78 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/escalation.d.ts +80 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +213 -0
- package/dist/escalation.js.map +1 -0
- package/dist/events.d.ts +130 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +382 -0
- package/dist/events.js.map +1 -0
- package/dist/executionSweeper.d.ts +97 -0
- package/dist/executionSweeper.d.ts.map +1 -0
- package/dist/executionSweeper.js +875 -0
- package/dist/executionSweeper.js.map +1 -0
- package/dist/experiments.d.ts +47 -0
- package/dist/experiments.d.ts.map +1 -0
- package/dist/experiments.js +133 -0
- package/dist/experiments.js.map +1 -0
- package/dist/feedback.d.ts +179 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +397 -0
- package/dist/feedback.js.map +1 -0
- package/dist/files.d.ts +52 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +172 -0
- package/dist/files.js.map +1 -0
- package/dist/format-duration.d.ts +19 -0
- package/dist/format-duration.d.ts.map +1 -0
- package/dist/format-duration.js +33 -0
- package/dist/format-duration.js.map +1 -0
- package/dist/github-actor-auth.d.ts +20 -0
- package/dist/github-actor-auth.d.ts.map +1 -0
- package/dist/github-actor-auth.js +54 -0
- package/dist/github-actor-auth.js.map +1 -0
- package/dist/github-ci.d.ts +16 -0
- package/dist/github-ci.d.ts.map +1 -0
- package/dist/github-ci.js +37 -0
- package/dist/github-ci.js.map +1 -0
- package/dist/github-identity.d.ts +30 -0
- package/dist/github-identity.d.ts.map +1 -0
- package/dist/github-identity.js +96 -0
- package/dist/github-identity.js.map +1 -0
- package/dist/github-reviews.d.ts +24 -0
- package/dist/github-reviews.d.ts.map +1 -0
- package/dist/github-reviews.js +56 -0
- package/dist/github-reviews.js.map +1 -0
- package/dist/health.d.ts +391 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +1841 -0
- package/dist/health.js.map +1 -0
- package/dist/host-keepalive.d.ts +22 -0
- package/dist/host-keepalive.d.ts.map +1 -0
- package/dist/host-keepalive.js +126 -0
- package/dist/host-keepalive.js.map +1 -0
- package/dist/host-registry.d.ts +43 -0
- package/dist/host-registry.d.ts.map +1 -0
- package/dist/host-registry.js +93 -0
- package/dist/host-registry.js.map +1 -0
- package/dist/inbox.d.ts +87 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +410 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +306 -0
- package/dist/index.js.map +1 -0
- package/dist/insight-mutation.d.ts +32 -0
- package/dist/insight-mutation.d.ts.map +1 -0
- package/dist/insight-mutation.js +160 -0
- package/dist/insight-mutation.js.map +1 -0
- package/dist/insight-promotion.d.ts +89 -0
- package/dist/insight-promotion.d.ts.map +1 -0
- package/dist/insight-promotion.js +278 -0
- package/dist/insight-promotion.js.map +1 -0
- package/dist/insight-task-bridge.d.ts +77 -0
- package/dist/insight-task-bridge.d.ts.map +1 -0
- package/dist/insight-task-bridge.js +556 -0
- package/dist/insight-task-bridge.js.map +1 -0
- package/dist/insights.d.ts +222 -0
- package/dist/insights.d.ts.map +1 -0
- package/dist/insights.js +871 -0
- package/dist/insights.js.map +1 -0
- package/dist/intake-pipeline.d.ts +74 -0
- package/dist/intake-pipeline.d.ts.map +1 -0
- package/dist/intake-pipeline.js +199 -0
- package/dist/intake-pipeline.js.map +1 -0
- package/dist/intensity.d.ts +31 -0
- package/dist/intensity.d.ts.map +1 -0
- package/dist/intensity.js +94 -0
- package/dist/intensity.js.map +1 -0
- package/dist/knowledge-auto-index.d.ts +37 -0
- package/dist/knowledge-auto-index.d.ts.map +1 -0
- package/dist/knowledge-auto-index.js +149 -0
- package/dist/knowledge-auto-index.js.map +1 -0
- package/dist/knowledge-docs.d.ts +45 -0
- package/dist/knowledge-docs.d.ts.map +1 -0
- package/dist/knowledge-docs.js +188 -0
- package/dist/knowledge-docs.js.map +1 -0
- package/dist/lane-config.d.ts +25 -0
- package/dist/lane-config.d.ts.map +1 -0
- package/dist/lane-config.js +105 -0
- package/dist/lane-config.js.map +1 -0
- package/dist/lineage.d.ts +86 -0
- package/dist/lineage.d.ts.map +1 -0
- package/dist/lineage.js +303 -0
- package/dist/lineage.js.map +1 -0
- package/dist/logStore.d.ts +25 -0
- package/dist/logStore.d.ts.map +1 -0
- package/dist/logStore.js +83 -0
- package/dist/logStore.js.map +1 -0
- package/dist/manage.d.ts +12 -0
- package/dist/manage.d.ts.map +1 -0
- package/dist/manage.js +253 -0
- package/dist/manage.js.map +1 -0
- package/dist/mcp.d.ts +5 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +604 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +47 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +149 -0
- package/dist/memory.js.map +1 -0
- package/dist/mention-ack.d.ts +80 -0
- package/dist/mention-ack.d.ts.map +1 -0
- package/dist/mention-ack.js +175 -0
- package/dist/mention-ack.js.map +1 -0
- package/dist/messageRouter.d.ts +60 -0
- package/dist/messageRouter.d.ts.map +1 -0
- package/dist/messageRouter.js +309 -0
- package/dist/messageRouter.js.map +1 -0
- package/dist/mutationAlert.d.ts +44 -0
- package/dist/mutationAlert.d.ts.map +1 -0
- package/dist/mutationAlert.js +174 -0
- package/dist/mutationAlert.js.map +1 -0
- package/dist/noise-budget.d.ts +136 -0
- package/dist/noise-budget.d.ts.map +1 -0
- package/dist/noise-budget.js +340 -0
- package/dist/noise-budget.js.map +1 -0
- package/dist/notifications.d.ts +67 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +253 -0
- package/dist/notifications.js.map +1 -0
- package/dist/openclaw.d.ts +34 -0
- package/dist/openclaw.d.ts.map +1 -0
- package/dist/openclaw.js +208 -0
- package/dist/openclaw.js.map +1 -0
- package/dist/pause-controls.d.ts +31 -0
- package/dist/pause-controls.d.ts.map +1 -0
- package/dist/pause-controls.js +130 -0
- package/dist/pause-controls.js.map +1 -0
- package/dist/pidlock.d.ts +25 -0
- package/dist/pidlock.d.ts.map +1 -0
- package/dist/pidlock.js +179 -0
- package/dist/pidlock.js.map +1 -0
- package/dist/policy.d.ts +139 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +264 -0
- package/dist/policy.js.map +1 -0
- package/dist/polls.d.ts +47 -0
- package/dist/polls.d.ts.map +1 -0
- package/dist/polls.js +162 -0
- package/dist/polls.js.map +1 -0
- package/dist/portability.d.ts +55 -0
- package/dist/portability.d.ts.map +1 -0
- package/dist/portability.js +292 -0
- package/dist/portability.js.map +1 -0
- package/dist/pr-integrity.d.ts +45 -0
- package/dist/pr-integrity.d.ts.map +1 -0
- package/dist/pr-integrity.js +124 -0
- package/dist/pr-integrity.js.map +1 -0
- package/dist/prAutoMerge.d.ts +62 -0
- package/dist/prAutoMerge.d.ts.map +1 -0
- package/dist/prAutoMerge.js +493 -0
- package/dist/prAutoMerge.js.map +1 -0
- package/dist/preflight.d.ts +66 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +864 -0
- package/dist/preflight.js.map +1 -0
- package/dist/presence.d.ts +98 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +347 -0
- package/dist/presence.js.map +1 -0
- package/dist/provisioning.d.ts +101 -0
- package/dist/provisioning.d.ts.map +1 -0
- package/dist/provisioning.js +430 -0
- package/dist/provisioning.js.map +1 -0
- package/dist/reflection-automation.d.ts +59 -0
- package/dist/reflection-automation.d.ts.map +1 -0
- package/dist/reflection-automation.js +350 -0
- package/dist/reflection-automation.js.map +1 -0
- package/dist/reflections.d.ts +65 -0
- package/dist/reflections.d.ts.map +1 -0
- package/dist/reflections.js +306 -0
- package/dist/reflections.js.map +1 -0
- package/dist/release.d.ts +67 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +275 -0
- package/dist/release.js.map +1 -0
- package/dist/request-tracker.d.ts +36 -0
- package/dist/request-tracker.d.ts.map +1 -0
- package/dist/request-tracker.js +109 -0
- package/dist/request-tracker.js.map +1 -0
- package/dist/research.d.ts +75 -0
- package/dist/research.d.ts.map +1 -0
- package/dist/research.js +171 -0
- package/dist/research.js.map +1 -0
- package/dist/routing-approvals.d.ts +73 -0
- package/dist/routing-approvals.d.ts.map +1 -0
- package/dist/routing-approvals.js +88 -0
- package/dist/routing-approvals.js.map +1 -0
- package/dist/routing-override.d.ts +94 -0
- package/dist/routing-override.d.ts.map +1 -0
- package/dist/routing-override.js +290 -0
- package/dist/routing-override.js.map +1 -0
- package/dist/scope-routing.d.ts +18 -0
- package/dist/scope-routing.d.ts.map +1 -0
- package/dist/scope-routing.js +29 -0
- package/dist/scope-routing.js.map +1 -0
- package/dist/secrets.d.ts +77 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +287 -0
- package/dist/secrets.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +10887 -0
- package/dist/server.js.map +1 -0
- package/dist/service-probe.d.ts +53 -0
- package/dist/service-probe.d.ts.map +1 -0
- package/dist/service-probe.js +225 -0
- package/dist/service-probe.js.map +1 -0
- package/dist/shared-workspace-api.d.ts +73 -0
- package/dist/shared-workspace-api.d.ts.map +1 -0
- package/dist/shared-workspace-api.js +281 -0
- package/dist/shared-workspace-api.js.map +1 -0
- package/dist/shipped-heartbeat.d.ts +91 -0
- package/dist/shipped-heartbeat.d.ts.map +1 -0
- package/dist/shipped-heartbeat.js +272 -0
- package/dist/shipped-heartbeat.js.map +1 -0
- package/dist/starter-team.d.ts +23 -0
- package/dist/starter-team.d.ts.map +1 -0
- package/dist/starter-team.js +88 -0
- package/dist/starter-team.js.map +1 -0
- package/dist/suppression-ledger.d.ts +73 -0
- package/dist/suppression-ledger.d.ts.map +1 -0
- package/dist/suppression-ledger.js +125 -0
- package/dist/suppression-ledger.js.map +1 -0
- package/dist/system-loop-state.d.ts +4 -0
- package/dist/system-loop-state.d.ts.map +1 -0
- package/dist/system-loop-state.js +40 -0
- package/dist/system-loop-state.js.map +1 -0
- package/dist/taskCommentIngest.d.ts +43 -0
- package/dist/taskCommentIngest.d.ts.map +1 -0
- package/dist/taskCommentIngest.js +59 -0
- package/dist/taskCommentIngest.js.map +1 -0
- package/dist/taskPrecheck.d.ts +20 -0
- package/dist/taskPrecheck.d.ts.map +1 -0
- package/dist/taskPrecheck.js +329 -0
- package/dist/taskPrecheck.js.map +1 -0
- package/dist/taskStateSync.d.ts +8 -0
- package/dist/taskStateSync.d.ts.map +1 -0
- package/dist/taskStateSync.js +79 -0
- package/dist/taskStateSync.js.map +1 -0
- package/dist/tasks.d.ts +140 -0
- package/dist/tasks.d.ts.map +1 -0
- package/dist/tasks.js +1281 -0
- package/dist/tasks.js.map +1 -0
- package/dist/team-config.d.ts +24 -0
- package/dist/team-config.d.ts.map +1 -0
- package/dist/team-config.js +221 -0
- package/dist/team-config.js.map +1 -0
- package/dist/team-doctor.d.ts +22 -0
- package/dist/team-doctor.d.ts.map +1 -0
- package/dist/team-doctor.js +270 -0
- package/dist/team-doctor.js.map +1 -0
- package/dist/team-pulse.d.ts +52 -0
- package/dist/team-pulse.d.ts.map +1 -0
- package/dist/team-pulse.js +176 -0
- package/dist/team-pulse.js.map +1 -0
- package/dist/telemetry.d.ts +74 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +256 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/test-task-filter.d.ts +21 -0
- package/dist/test-task-filter.d.ts.map +1 -0
- package/dist/test-task-filter.js +48 -0
- package/dist/test-task-filter.js.map +1 -0
- package/dist/types.d.ts +126 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/usage-tracking.d.ts +101 -0
- package/dist/usage-tracking.d.ts.map +1 -0
- package/dist/usage-tracking.js +325 -0
- package/dist/usage-tracking.js.map +1 -0
- package/dist/vector-store.d.ts +87 -0
- package/dist/vector-store.d.ts.map +1 -0
- package/dist/vector-store.js +247 -0
- package/dist/vector-store.js.map +1 -0
- package/dist/watchdog/idleNudgeLane.d.ts +22 -0
- package/dist/watchdog/idleNudgeLane.d.ts.map +1 -0
- package/dist/watchdog/idleNudgeLane.js +98 -0
- package/dist/watchdog/idleNudgeLane.js.map +1 -0
- package/dist/webhooks.d.ts +103 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +398 -0
- package/dist/webhooks.js.map +1 -0
- package/dist/working-contract.d.ts +42 -0
- package/dist/working-contract.d.ts.map +1 -0
- package/dist/working-contract.js +228 -0
- package/dist/working-contract.js.map +1 -0
- package/dist/ws-heartbeat.d.ts +66 -0
- package/dist/ws-heartbeat.d.ts.map +1 -0
- package/dist/ws-heartbeat.js +174 -0
- package/dist/ws-heartbeat.js.map +1 -0
- package/package.json +87 -0
- package/plugins/reflectt-channel/README.md +96 -0
- package/plugins/reflectt-channel/index.ts +789 -0
- package/plugins/reflectt-channel/openclaw.plugin.json +23 -0
- package/plugins/reflectt-channel/package.json +23 -0
- package/plugins/reflectt-channel/src/channel.ts +433 -0
- package/plugins/reflectt-channel/src/types.ts +29 -0
- package/public/avatars/echo.png +0 -0
- package/public/avatars/harmony.png +0 -0
- package/public/avatars/kai.png +0 -0
- package/public/avatars/link.png +0 -0
- package/public/avatars/pixel.png +0 -0
- package/public/avatars/rhythm.png +0 -0
- package/public/avatars/ryan.png +0 -0
- package/public/avatars/sage.png +0 -0
- package/public/avatars/scout.png +0 -0
- package/public/avatars/spark.png +0 -0
- package/public/dashboard-animations.css +381 -0
- package/public/dashboard.js +3479 -0
- package/public/docs.md +1062 -0
- package/public/file-upload-mock.html +1097 -0
- package/public/og-card.png +0 -0
- package/public/ui-kit.html +318 -0
- package/public/widget/feedback.js +194 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) Reflectt AI
|
|
3
|
+
/**
|
|
4
|
+
* StreamMultiplexer — validates render events against Screen Contract v0
|
|
5
|
+
* and broadcasts them as SSE events to canvas subscribers.
|
|
6
|
+
*
|
|
7
|
+
* Gate checks (from contract):
|
|
8
|
+
* 1. Relevance: slot must be in allowed list
|
|
9
|
+
* 2. Content type: must be in allowed list
|
|
10
|
+
* 3. Decision signal: required on all renders
|
|
11
|
+
* 4. Evidence: required for claims/recommendations
|
|
12
|
+
* 5. Actionability: action slots must include next step
|
|
13
|
+
*/
|
|
14
|
+
import { ALLOWED_SLOTS, ALLOWED_CONTENT_TYPES, AGENT_LANE_PREFIX, } from './canvas-types.js';
|
|
15
|
+
import { slotManager } from './canvas-slots.js';
|
|
16
|
+
function isAllowedSlot(slot) {
|
|
17
|
+
if (ALLOWED_SLOTS.includes(slot))
|
|
18
|
+
return true;
|
|
19
|
+
if (slot.startsWith(AGENT_LANE_PREFIX))
|
|
20
|
+
return true;
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
function isAllowedContentType(ct) {
|
|
24
|
+
return ALLOWED_CONTENT_TYPES.includes(ct);
|
|
25
|
+
}
|
|
26
|
+
/** Content types that make claims requiring evidence */
|
|
27
|
+
const CLAIM_CONTENT_TYPES = new Set([
|
|
28
|
+
'metric.single', 'metric.delta', 'task.card',
|
|
29
|
+
'code.diff.summary', 'cta.button',
|
|
30
|
+
]);
|
|
31
|
+
/** Decision signal kinds that require actionability */
|
|
32
|
+
const ACTIONABLE_KINDS = new Set(['action']);
|
|
33
|
+
export function validateSlotEvent(event) {
|
|
34
|
+
const errors = [];
|
|
35
|
+
const warnings = [];
|
|
36
|
+
// 1. Slot type
|
|
37
|
+
if (!event.slot || !isAllowedSlot(event.slot)) {
|
|
38
|
+
errors.push(`Invalid slot: "${event.slot}". Allowed: ${[...ALLOWED_SLOTS, 'agent_lane:<id>'].join(', ')}`);
|
|
39
|
+
}
|
|
40
|
+
// 2. Content type
|
|
41
|
+
if (!event.content_type || !isAllowedContentType(event.content_type)) {
|
|
42
|
+
errors.push(`Invalid content_type: "${event.content_type}". Allowed: ${ALLOWED_CONTENT_TYPES.join(', ')}`);
|
|
43
|
+
}
|
|
44
|
+
// 3. Payload basics
|
|
45
|
+
if (!event.payload) {
|
|
46
|
+
errors.push('payload is required');
|
|
47
|
+
return { valid: false, errors, warnings };
|
|
48
|
+
}
|
|
49
|
+
if (!event.payload.id) {
|
|
50
|
+
errors.push('payload.id is required');
|
|
51
|
+
}
|
|
52
|
+
if (!event.payload.priority || !['p0', 'p1', 'p2', 'p3'].includes(event.payload.priority)) {
|
|
53
|
+
errors.push('payload.priority must be p0|p1|p2|p3');
|
|
54
|
+
}
|
|
55
|
+
if (!event.payload.updated_at) {
|
|
56
|
+
errors.push('payload.updated_at is required (ISO8601)');
|
|
57
|
+
}
|
|
58
|
+
// 4. Decision signal gate
|
|
59
|
+
if (!event.payload.decision_signal) {
|
|
60
|
+
errors.push('payload.decision_signal is required (contract gate)');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
if (!event.payload.decision_signal.kind ||
|
|
64
|
+
!['status', 'risk', 'change', 'action'].includes(event.payload.decision_signal.kind)) {
|
|
65
|
+
errors.push('decision_signal.kind must be status|risk|change|action');
|
|
66
|
+
}
|
|
67
|
+
if (!event.payload.decision_signal.why_now || event.payload.decision_signal.why_now.trim().length === 0) {
|
|
68
|
+
errors.push('decision_signal.why_now is required (explain why this is on screen now)');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// 5. Evidence gate — required for claims/recommendations
|
|
72
|
+
const evidence = event.payload.evidence || [];
|
|
73
|
+
if (CLAIM_CONTENT_TYPES.has(event.content_type) && evidence.length === 0) {
|
|
74
|
+
warnings.push(`Content type "${event.content_type}" should include evidence links for claims`);
|
|
75
|
+
}
|
|
76
|
+
// Validate evidence link shapes
|
|
77
|
+
for (const ev of evidence) {
|
|
78
|
+
if (!ev.label || !ev.href || !ev.kind) {
|
|
79
|
+
errors.push('Each evidence entry requires label, href, and kind');
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// 6. Actionability gate
|
|
84
|
+
if (event.payload.decision_signal?.kind === 'action') {
|
|
85
|
+
if (!event.payload.body && !event.payload.action_url && !event.payload.label) {
|
|
86
|
+
warnings.push('Action signal should include a concrete next step (body, label, or action_url)');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// 7. Priority field
|
|
90
|
+
if (!event.priority || !['background', 'normal', 'dominant'].includes(event.priority)) {
|
|
91
|
+
errors.push('priority must be background|normal|dominant');
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
valid: errors.length === 0,
|
|
95
|
+
errors,
|
|
96
|
+
warnings,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const subscribers = new Set();
|
|
100
|
+
/**
|
|
101
|
+
* Subscribe to canvas render events (SSE connections call this).
|
|
102
|
+
*/
|
|
103
|
+
export function subscribeCanvas(callback) {
|
|
104
|
+
subscribers.add(callback);
|
|
105
|
+
return () => { subscribers.delete(callback); };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get current subscriber count.
|
|
109
|
+
*/
|
|
110
|
+
export function getCanvasSubscriberCount() {
|
|
111
|
+
return subscribers.size;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Process a render event: validate → store in slot manager → broadcast.
|
|
115
|
+
* Returns validation result (callers can check .valid).
|
|
116
|
+
*/
|
|
117
|
+
export function processRender(event) {
|
|
118
|
+
const validation = validateSlotEvent(event);
|
|
119
|
+
if (!validation.valid) {
|
|
120
|
+
return validation;
|
|
121
|
+
}
|
|
122
|
+
// Store in slot manager
|
|
123
|
+
const slot = slotManager.upsert(event);
|
|
124
|
+
// Broadcast to all canvas subscribers
|
|
125
|
+
for (const sub of subscribers) {
|
|
126
|
+
try {
|
|
127
|
+
sub(event, slot);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
console.error('[Canvas] Subscriber error:', err);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return { ...validation, slot };
|
|
134
|
+
}
|
|
135
|
+
const rejections = [];
|
|
136
|
+
const MAX_REJECTIONS = 50;
|
|
137
|
+
export function logRejection(event, errors) {
|
|
138
|
+
rejections.push({
|
|
139
|
+
event: { slot: event.slot, content_type: event.content_type, priority: event.priority },
|
|
140
|
+
errors,
|
|
141
|
+
timestamp: Date.now(),
|
|
142
|
+
});
|
|
143
|
+
if (rejections.length > MAX_REJECTIONS) {
|
|
144
|
+
rejections.splice(0, rejections.length - MAX_REJECTIONS);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export function getRecentRejections(limit = 10) {
|
|
148
|
+
return rejections.slice(-limit);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=canvas-multiplexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-multiplexer.js","sourceRoot":"","sources":["../src/canvas-multiplexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SlotManager — tracks active slots, ownership, priority, staleness.
|
|
3
|
+
*
|
|
4
|
+
* Each slot has an owner (agent), content, and a last-update timestamp.
|
|
5
|
+
* Stale slots (no update in STALE_THRESHOLD_MS) are auto-faded from
|
|
6
|
+
* the active set but preserved for history/drilldown.
|
|
7
|
+
*/
|
|
8
|
+
import type { SlotType, ContentType, RenderPayload, SlotEvent } from './canvas-types.js';
|
|
9
|
+
export interface ActiveSlot {
|
|
10
|
+
slot: SlotType;
|
|
11
|
+
content_type: ContentType;
|
|
12
|
+
payload: RenderPayload;
|
|
13
|
+
priority: 'background' | 'normal' | 'dominant';
|
|
14
|
+
agent_id: string;
|
|
15
|
+
updated_at: number;
|
|
16
|
+
created_at: number;
|
|
17
|
+
version: number;
|
|
18
|
+
}
|
|
19
|
+
type SlotSubscriber = (slot: ActiveSlot) => void;
|
|
20
|
+
declare class SlotManager {
|
|
21
|
+
private slots;
|
|
22
|
+
private history;
|
|
23
|
+
private maxHistory;
|
|
24
|
+
private subscribers;
|
|
25
|
+
/**
|
|
26
|
+
* Update or create a slot with new content.
|
|
27
|
+
*/
|
|
28
|
+
upsert(event: SlotEvent): ActiveSlot;
|
|
29
|
+
/**
|
|
30
|
+
* Subscribe to slot updates (same pattern as chatManager/taskManager).
|
|
31
|
+
* Returns an unsubscribe function.
|
|
32
|
+
*/
|
|
33
|
+
subscribe(callback: SlotSubscriber): () => void;
|
|
34
|
+
private notifySubscribers;
|
|
35
|
+
/**
|
|
36
|
+
* Get all currently active (non-stale) slots.
|
|
37
|
+
* Sorted by priority (dominant first) then recency.
|
|
38
|
+
*/
|
|
39
|
+
getActive(): ActiveSlot[];
|
|
40
|
+
/**
|
|
41
|
+
* Get a specific slot by key.
|
|
42
|
+
*/
|
|
43
|
+
get(slotKey: string): ActiveSlot | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Remove a slot entirely.
|
|
46
|
+
*/
|
|
47
|
+
remove(slotKey: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get all slots (including stale) for debug/audit.
|
|
50
|
+
*/
|
|
51
|
+
getAll(): ActiveSlot[];
|
|
52
|
+
/**
|
|
53
|
+
* Get recent history for a slot or all slots.
|
|
54
|
+
*/
|
|
55
|
+
getHistory(slotKey?: string, limit?: number): Array<{
|
|
56
|
+
event: SlotEvent;
|
|
57
|
+
timestamp: number;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Get stats for ops/debug.
|
|
61
|
+
*/
|
|
62
|
+
getStats(): {
|
|
63
|
+
total: number;
|
|
64
|
+
active: number;
|
|
65
|
+
stale: number;
|
|
66
|
+
historySize: number;
|
|
67
|
+
slots: {
|
|
68
|
+
slot: SlotType;
|
|
69
|
+
agent: string;
|
|
70
|
+
content_type: "text.brief" | "text.list" | "metric.single" | "metric.delta" | "task.card" | "chat.message" | "code.diff.summary" | "state.badge" | "cta.button" | "evidence.link" | "timeline.event";
|
|
71
|
+
priority: "normal" | "background" | "dominant";
|
|
72
|
+
age_ms: number;
|
|
73
|
+
version: number;
|
|
74
|
+
}[];
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Clean up stale slots older than maxAge.
|
|
78
|
+
*/
|
|
79
|
+
prune(maxAgeMs?: number): number;
|
|
80
|
+
}
|
|
81
|
+
export declare const slotManager: SlotManager;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=canvas-slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-slots.d.ts","sourceRoot":"","sources":["../src/canvas-slots.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAIxF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,YAAY,EAAE,WAAW,CAAA;IACzB,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAA;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,KAAK,cAAc,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;AAEhD,cAAM,WAAW;IACf,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAqD;IACpE,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,WAAW,CAA4B;IAE/C;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU;IA8BpC;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI;IAK/C,OAAO,CAAC,iBAAiB;IAUzB;;;OAGG;IACH,SAAS,IAAI,UAAU,EAAE;IAsBzB;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI5C;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,MAAM,IAAI,UAAU,EAAE;IAItB;;OAEG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAQxF;;OAEG;IACH,QAAQ;;;;;;;;;;;;;;IAsBR;;OAEG;IACH,KAAK,CAAC,QAAQ,SAAa,GAAG,MAAM;CAWrC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAA"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) Reflectt AI
|
|
3
|
+
const STALE_THRESHOLD_MS = 60_000; // 60s — slots fade after this
|
|
4
|
+
class SlotManager {
|
|
5
|
+
slots = new Map();
|
|
6
|
+
history = [];
|
|
7
|
+
maxHistory = 200;
|
|
8
|
+
subscribers = new Set();
|
|
9
|
+
/**
|
|
10
|
+
* Update or create a slot with new content.
|
|
11
|
+
*/
|
|
12
|
+
upsert(event) {
|
|
13
|
+
const key = event.slot;
|
|
14
|
+
const existing = this.slots.get(key);
|
|
15
|
+
const now = Date.now();
|
|
16
|
+
const slot = {
|
|
17
|
+
slot: event.slot,
|
|
18
|
+
content_type: event.content_type,
|
|
19
|
+
payload: event.payload,
|
|
20
|
+
priority: event.priority,
|
|
21
|
+
agent_id: event.payload.agent_id || 'unknown',
|
|
22
|
+
updated_at: now,
|
|
23
|
+
created_at: existing?.created_at || now,
|
|
24
|
+
version: (existing?.version || 0) + 1,
|
|
25
|
+
};
|
|
26
|
+
this.slots.set(key, slot);
|
|
27
|
+
// Record history
|
|
28
|
+
this.history.push({ event, timestamp: now });
|
|
29
|
+
if (this.history.length > this.maxHistory) {
|
|
30
|
+
this.history = this.history.slice(-this.maxHistory);
|
|
31
|
+
}
|
|
32
|
+
// Notify subscribers
|
|
33
|
+
this.notifySubscribers(slot);
|
|
34
|
+
return slot;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Subscribe to slot updates (same pattern as chatManager/taskManager).
|
|
38
|
+
* Returns an unsubscribe function.
|
|
39
|
+
*/
|
|
40
|
+
subscribe(callback) {
|
|
41
|
+
this.subscribers.add(callback);
|
|
42
|
+
return () => this.subscribers.delete(callback);
|
|
43
|
+
}
|
|
44
|
+
notifySubscribers(slot) {
|
|
45
|
+
this.subscribers.forEach(callback => {
|
|
46
|
+
try {
|
|
47
|
+
callback(slot);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.error('[SlotManager] Subscriber error:', err);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get all currently active (non-stale) slots.
|
|
56
|
+
* Sorted by priority (dominant first) then recency.
|
|
57
|
+
*/
|
|
58
|
+
getActive() {
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
const active = [];
|
|
61
|
+
for (const [key, slot] of this.slots) {
|
|
62
|
+
if (now - slot.updated_at > STALE_THRESHOLD_MS) {
|
|
63
|
+
continue; // skip stale
|
|
64
|
+
}
|
|
65
|
+
active.push(slot);
|
|
66
|
+
}
|
|
67
|
+
// Sort: dominant > normal > background, then by recency
|
|
68
|
+
const priorityOrder = { dominant: 0, normal: 1, background: 2 };
|
|
69
|
+
active.sort((a, b) => {
|
|
70
|
+
const pd = priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
71
|
+
if (pd !== 0)
|
|
72
|
+
return pd;
|
|
73
|
+
return b.updated_at - a.updated_at; // newest first
|
|
74
|
+
});
|
|
75
|
+
return active;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get a specific slot by key.
|
|
79
|
+
*/
|
|
80
|
+
get(slotKey) {
|
|
81
|
+
return this.slots.get(slotKey);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Remove a slot entirely.
|
|
85
|
+
*/
|
|
86
|
+
remove(slotKey) {
|
|
87
|
+
return this.slots.delete(slotKey);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get all slots (including stale) for debug/audit.
|
|
91
|
+
*/
|
|
92
|
+
getAll() {
|
|
93
|
+
return Array.from(this.slots.values());
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get recent history for a slot or all slots.
|
|
97
|
+
*/
|
|
98
|
+
getHistory(slotKey, limit = 20) {
|
|
99
|
+
let entries = this.history;
|
|
100
|
+
if (slotKey) {
|
|
101
|
+
entries = entries.filter(h => h.event.slot === slotKey);
|
|
102
|
+
}
|
|
103
|
+
return entries.slice(-limit);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get stats for ops/debug.
|
|
107
|
+
*/
|
|
108
|
+
getStats() {
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
const all = Array.from(this.slots.values());
|
|
111
|
+
const active = all.filter(s => now - s.updated_at <= STALE_THRESHOLD_MS);
|
|
112
|
+
const stale = all.filter(s => now - s.updated_at > STALE_THRESHOLD_MS);
|
|
113
|
+
return {
|
|
114
|
+
total: all.length,
|
|
115
|
+
active: active.length,
|
|
116
|
+
stale: stale.length,
|
|
117
|
+
historySize: this.history.length,
|
|
118
|
+
slots: active.map(s => ({
|
|
119
|
+
slot: s.slot,
|
|
120
|
+
agent: s.agent_id,
|
|
121
|
+
content_type: s.content_type,
|
|
122
|
+
priority: s.priority,
|
|
123
|
+
age_ms: now - s.updated_at,
|
|
124
|
+
version: s.version,
|
|
125
|
+
})),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Clean up stale slots older than maxAge.
|
|
130
|
+
*/
|
|
131
|
+
prune(maxAgeMs = 5 * 60_000) {
|
|
132
|
+
const now = Date.now();
|
|
133
|
+
let pruned = 0;
|
|
134
|
+
for (const [key, slot] of this.slots) {
|
|
135
|
+
if (now - slot.updated_at > maxAgeMs) {
|
|
136
|
+
this.slots.delete(key);
|
|
137
|
+
pruned++;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return pruned;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export const slotManager = new SlotManager();
|
|
144
|
+
//# sourceMappingURL=canvas-slots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-slots.js","sourceRoot":"","sources":["../src/canvas-slots.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen Contract v0 — Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the render primitive and all allowed slot/content types
|
|
5
|
+
* per docs/SCREEN_CONTRACT_V0.md
|
|
6
|
+
*/
|
|
7
|
+
export declare const ALLOWED_SLOTS: readonly ["objective", "narrative", "risk", "action", "evidence", "input", "status"];
|
|
8
|
+
/** Agent lane slots: agent_lane:<agent_id> */
|
|
9
|
+
export declare const AGENT_LANE_PREFIX = "agent_lane:";
|
|
10
|
+
export type SlotType = (typeof ALLOWED_SLOTS)[number] | `agent_lane:${string}`;
|
|
11
|
+
export declare const ALLOWED_CONTENT_TYPES: readonly ["text.brief", "text.list", "metric.single", "metric.delta", "task.card", "chat.message", "code.diff.summary", "state.badge", "cta.button", "evidence.link", "timeline.event"];
|
|
12
|
+
export type ContentType = (typeof ALLOWED_CONTENT_TYPES)[number];
|
|
13
|
+
export interface DecisionSignal {
|
|
14
|
+
kind: 'status' | 'risk' | 'change' | 'action';
|
|
15
|
+
why_now: string;
|
|
16
|
+
}
|
|
17
|
+
export interface EvidenceLink {
|
|
18
|
+
label: string;
|
|
19
|
+
href: string;
|
|
20
|
+
kind: 'pr' | 'task' | 'metric' | 'message' | 'doc' | 'log';
|
|
21
|
+
}
|
|
22
|
+
export interface RenderPayload {
|
|
23
|
+
id: string;
|
|
24
|
+
title?: string;
|
|
25
|
+
body?: string;
|
|
26
|
+
priority: 'p0' | 'p1' | 'p2' | 'p3';
|
|
27
|
+
confidence?: number;
|
|
28
|
+
freshness_ms?: number;
|
|
29
|
+
agent_id?: string;
|
|
30
|
+
decision_signal: DecisionSignal;
|
|
31
|
+
evidence: EvidenceLink[];
|
|
32
|
+
updated_at: string;
|
|
33
|
+
html?: string;
|
|
34
|
+
text?: string;
|
|
35
|
+
data?: unknown;
|
|
36
|
+
target?: string;
|
|
37
|
+
items?: string[];
|
|
38
|
+
value?: number;
|
|
39
|
+
delta?: number;
|
|
40
|
+
label?: string;
|
|
41
|
+
action_url?: string;
|
|
42
|
+
diff_summary?: string;
|
|
43
|
+
files_changed?: number;
|
|
44
|
+
additions?: number;
|
|
45
|
+
deletions?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface SlotEvent {
|
|
48
|
+
slot: SlotType;
|
|
49
|
+
content_type: ContentType;
|
|
50
|
+
payload: RenderPayload;
|
|
51
|
+
priority: 'background' | 'normal' | 'dominant';
|
|
52
|
+
append?: boolean;
|
|
53
|
+
}
|
|
54
|
+
export declare const AGENT_COLORS: Record<string, string>;
|
|
55
|
+
export declare const AGENT_DEFAULT_EXPRESSION: Record<string, ContentType>;
|
|
56
|
+
//# sourceMappingURL=canvas-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-types.d.ts","sourceRoot":"","sources":["../src/canvas-types.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AAIH,eAAO,MAAM,aAAa,sFAQhB,CAAA;AAEV,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,gBAAgB,CAAA;AAE9C,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,cAAc,MAAM,EAAE,CAAA;AAI9E,eAAO,MAAM,qBAAqB,yLAYxB,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAA;AAIhE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC7C,OAAO,EAAE,MAAM,CAAA;CAChB;AAID,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAA;CAC3D;AAID,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACnC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,cAAc,CAAA;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAGlB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,YAAY,EAAE,WAAW,CAAA;IACzB,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAA;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAID,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ/C,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAQhE,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) Reflectt AI
|
|
3
|
+
/**
|
|
4
|
+
* Screen Contract v0 — Types
|
|
5
|
+
*
|
|
6
|
+
* Defines the render primitive and all allowed slot/content types
|
|
7
|
+
* per docs/SCREEN_CONTRACT_V0.md
|
|
8
|
+
*/
|
|
9
|
+
// ── Allowed slot types (v0) ──────────────────────────────────────────
|
|
10
|
+
export const ALLOWED_SLOTS = [
|
|
11
|
+
'objective',
|
|
12
|
+
'narrative',
|
|
13
|
+
'risk',
|
|
14
|
+
'action',
|
|
15
|
+
'evidence',
|
|
16
|
+
'input',
|
|
17
|
+
'status',
|
|
18
|
+
];
|
|
19
|
+
/** Agent lane slots: agent_lane:<agent_id> */
|
|
20
|
+
export const AGENT_LANE_PREFIX = 'agent_lane:';
|
|
21
|
+
// ── Allowed content types (v0) ───────────────────────────────────────
|
|
22
|
+
export const ALLOWED_CONTENT_TYPES = [
|
|
23
|
+
'text.brief',
|
|
24
|
+
'text.list',
|
|
25
|
+
'metric.single',
|
|
26
|
+
'metric.delta',
|
|
27
|
+
'task.card',
|
|
28
|
+
'chat.message',
|
|
29
|
+
'code.diff.summary',
|
|
30
|
+
'state.badge',
|
|
31
|
+
'cta.button',
|
|
32
|
+
'evidence.link',
|
|
33
|
+
'timeline.event',
|
|
34
|
+
];
|
|
35
|
+
// ── Agent identity (from Pixel's spec) ───────────────────────────────
|
|
36
|
+
export const AGENT_COLORS = {
|
|
37
|
+
pixel: '#a78bfa', // violet
|
|
38
|
+
link: '#60a5fa', // blue
|
|
39
|
+
kai: '#f59e0b', // amber
|
|
40
|
+
harmony: '#34d399', // green
|
|
41
|
+
sage: '#9eb3ca', // slate
|
|
42
|
+
echo: '#f87171', // red
|
|
43
|
+
scout: '#fb923c', // orange
|
|
44
|
+
};
|
|
45
|
+
export const AGENT_DEFAULT_EXPRESSION = {
|
|
46
|
+
pixel: 'text.brief', // component / annotation
|
|
47
|
+
link: 'code.diff.summary', // code diff / stream
|
|
48
|
+
kai: 'text.brief', // narrative / directive
|
|
49
|
+
harmony: 'text.brief', // audio pulse / ambient
|
|
50
|
+
sage: 'text.brief', // document / policy
|
|
51
|
+
echo: 'text.brief', // alert / narration
|
|
52
|
+
scout: 'text.brief', // intelligence / briefing
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=canvas-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-types.js","sourceRoot":"","sources":["../src/canvas-types.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,4BAA4B;AAE5B;;;;;GAKG;AAEH,wEAAwE;AAExE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,WAAW;IACX,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;CACA,CAAA;AAEV,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAA;AAI9C,wEAAwE;AAExE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,YAAY;IACZ,WAAW;IACX,eAAe;IACf,cAAc;IACd,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,gBAAgB;CACR,CAAA;AA2DV,wEAAwE;AAExE,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,KAAK,EAAE,SAAS,EAAI,SAAS;IAC7B,IAAI,EAAE,SAAS,EAAK,OAAO;IAC3B,GAAG,EAAE,SAAS,EAAM,QAAQ;IAC5B,OAAO,EAAE,SAAS,EAAE,QAAQ;IAC5B,IAAI,EAAE,SAAS,EAAK,QAAQ;IAC5B,IAAI,EAAE,SAAS,EAAK,MAAM;IAC1B,KAAK,EAAE,SAAS,EAAI,SAAS;CAC9B,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAgC;IACnE,KAAK,EAAE,YAAY,EAAQ,yBAAyB;IACpD,IAAI,EAAE,mBAAmB,EAAE,qBAAqB;IAChD,GAAG,EAAE,YAAY,EAAU,wBAAwB;IACnD,OAAO,EAAE,YAAY,EAAM,wBAAwB;IACnD,IAAI,EAAE,YAAY,EAAS,oBAAoB;IAC/C,IAAI,EAAE,YAAY,EAAS,oBAAoB;IAC/C,KAAK,EAAE,YAAY,EAAQ,0BAA0B;CACtD,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface SelfKeepaliveState {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
intervalMs: number;
|
|
4
|
+
lastPingAt: number | null;
|
|
5
|
+
lastPingOk: boolean | null;
|
|
6
|
+
coldStarts: number;
|
|
7
|
+
timer: ReturnType<typeof setInterval> | null;
|
|
8
|
+
}
|
|
9
|
+
export interface WarmBootInfo {
|
|
10
|
+
isColdStart: boolean;
|
|
11
|
+
isWarmBoot: boolean;
|
|
12
|
+
lastActivityAge: number | null;
|
|
13
|
+
recoveredState: {
|
|
14
|
+
tasks: number;
|
|
15
|
+
chatMessages: number;
|
|
16
|
+
hosts: number;
|
|
17
|
+
reflections: number;
|
|
18
|
+
} | null;
|
|
19
|
+
}
|
|
20
|
+
export declare function detectWarmBoot(db: {
|
|
21
|
+
prepare: (sql: string) => {
|
|
22
|
+
get: () => Record<string, unknown> | undefined;
|
|
23
|
+
};
|
|
24
|
+
}): WarmBootInfo;
|
|
25
|
+
export declare function startSelfKeepalive(port: number, intervalMs?: number): void;
|
|
26
|
+
export declare function stopSelfKeepalive(): void;
|
|
27
|
+
export declare function getSelfKeepaliveStatus(): {
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
intervalMs: number;
|
|
30
|
+
lastPingAt: number | null;
|
|
31
|
+
lastPingOk: boolean | null;
|
|
32
|
+
coldStarts: number;
|
|
33
|
+
bootInfo: WarmBootInfo | null;
|
|
34
|
+
environment: {
|
|
35
|
+
cloudflare: boolean;
|
|
36
|
+
keepaliveEnv: string | undefined;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export declare function getBootInfo(): WarmBootInfo | null;
|
|
40
|
+
//# sourceMappingURL=cf-keepalive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cf-keepalive.d.ts","sourceRoot":"","sources":["../src/cf-keepalive.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAA;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,MAAM,CAAA;KACpB,GAAG,IAAI,CAAA;CACT;AA0DD,wBAAgB,cAAc,CAAC,EAAE,EAAE;IAAE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,GAAG,YAAY,CA6DjI;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAuB1E;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC;AAID,wBAAgB,sBAAsB,IAAI;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;IAC7B,WAAW,EAAE;QACX,UAAU,EAAE,OAAO,CAAA;QACnB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;KACjC,CAAA;CACF,CAaA;AAED,wBAAgB,WAAW,IAAI,YAAY,GAAG,IAAI,CAEjD"}
|