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 @@
|
|
|
1
|
+
{"version":3,"file":"shared-workspace-api.js","sourceRoot":"","sources":["../src/shared-workspace-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shipped-Artifact Auto-Heartbeat
|
|
3
|
+
*
|
|
4
|
+
* Emits a compact status update to #general when a task transitions to
|
|
5
|
+
* validating or done AND has an artifact_path in metadata.
|
|
6
|
+
*
|
|
7
|
+
* Payload format (sage-validated contract):
|
|
8
|
+
* [SHIP] <task_id> | shipped:<ref> | next:<eta> | review:@<reviewer> | by:@<owner>
|
|
9
|
+
*
|
|
10
|
+
* Suppression rules:
|
|
11
|
+
* 1. Dedup window (30m) — same task won't re-fire within 30 minutes
|
|
12
|
+
* 2. Reviewer override — if reviewer posts in #general within 5m of the
|
|
13
|
+
* trigger, the auto-heartbeat is suppressed (they wrote their own)
|
|
14
|
+
* 3. Missing/invalid artifact — silently skipped with warning log
|
|
15
|
+
*
|
|
16
|
+
* Failure modes (documented per done criteria):
|
|
17
|
+
* - Duplicate spam: dedup map with 30m TTL prevents double-posts on rapid
|
|
18
|
+
* status flips (e.g., validating→blocked→validating)
|
|
19
|
+
* - Missing artifact link: task without metadata.artifact_path is skipped;
|
|
20
|
+
* logged at warn level for ops visibility
|
|
21
|
+
* - Reviewer already posted: 5m look-back in #general for reviewer messages
|
|
22
|
+
* mentioning the task ID suppresses the auto-heartbeat
|
|
23
|
+
* - Chat budget exceeded: respects existing noise-budget in chat.sendMessage;
|
|
24
|
+
* if budget blocks the message, it's logged but not retried
|
|
25
|
+
*
|
|
26
|
+
* Task: task-1771691652369-2c2y0uknl
|
|
27
|
+
* Design: scout (pilot spec) → Implementation: link
|
|
28
|
+
*/
|
|
29
|
+
import { type Event } from './events.js';
|
|
30
|
+
import type { Task } from './types.js';
|
|
31
|
+
export interface ShippedHeartbeatPayload {
|
|
32
|
+
taskId: string;
|
|
33
|
+
shipped: string;
|
|
34
|
+
next: string;
|
|
35
|
+
reviewer: string;
|
|
36
|
+
owner: string;
|
|
37
|
+
lane: 'ops' | 'product' | 'comms' | 'engineering' | 'unknown';
|
|
38
|
+
}
|
|
39
|
+
export interface HeartbeatStats {
|
|
40
|
+
totalEmitted: number;
|
|
41
|
+
totalSuppressed: number;
|
|
42
|
+
suppressionReasons: Record<string, number>;
|
|
43
|
+
lastEmittedAt: number | null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build a compact heartbeat payload from a task.
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildPayload(task: Task): ShippedHeartbeatPayload | null;
|
|
49
|
+
/**
|
|
50
|
+
* Format the canonical compact message.
|
|
51
|
+
*
|
|
52
|
+
* Examples:
|
|
53
|
+
* [SHIP] task-abc123 | shipped:process/spec.md | next:pending review | review:@sage | by:@scout
|
|
54
|
+
* [SHIP] task-def456 | shipped:src/feature.ts | next:done | review:@kai | by:@link
|
|
55
|
+
* [SHIP] task-ghi789 | shipped:docs/runbook.md | next:~2h | review:@pixel | by:@echo
|
|
56
|
+
*/
|
|
57
|
+
export declare function formatMessage(payload: ShippedHeartbeatPayload): string;
|
|
58
|
+
/**
|
|
59
|
+
* Infer the task lane from metadata, tags, or title keywords.
|
|
60
|
+
*/
|
|
61
|
+
declare function inferLane(task: Task): ShippedHeartbeatPayload['lane'];
|
|
62
|
+
/**
|
|
63
|
+
* Check dedup window — returns true if this task was already emitted recently.
|
|
64
|
+
*/
|
|
65
|
+
declare function isDuplicate(taskId: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Check if reviewer already posted about this task in #general recently.
|
|
68
|
+
* Returns true if reviewer override should suppress the auto-heartbeat.
|
|
69
|
+
*/
|
|
70
|
+
declare function isReviewerOverride(task: Task): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Validate artifact_path is under process/ (canonical location).
|
|
73
|
+
*/
|
|
74
|
+
declare function isValidArtifactPath(artifactPath: string): boolean;
|
|
75
|
+
declare function handleTaskEvent(event: Event): Promise<void>;
|
|
76
|
+
export declare function startShippedHeartbeat(): void;
|
|
77
|
+
export declare function stopShippedHeartbeat(): void;
|
|
78
|
+
export declare function getShippedHeartbeatStats(): HeartbeatStats;
|
|
79
|
+
export declare const _testing: {
|
|
80
|
+
handleTaskEvent: typeof handleTaskEvent;
|
|
81
|
+
isDuplicate: typeof isDuplicate;
|
|
82
|
+
isReviewerOverride: typeof isReviewerOverride;
|
|
83
|
+
isValidArtifactPath: typeof isValidArtifactPath;
|
|
84
|
+
inferLane: typeof inferLane;
|
|
85
|
+
dedupMap: Map<string, number>;
|
|
86
|
+
stats: HeartbeatStats;
|
|
87
|
+
DEDUP_WINDOW_MS: number;
|
|
88
|
+
REVIEWER_OVERRIDE_WINDOW_MS: number;
|
|
89
|
+
};
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=shipped-heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shipped-heartbeat.d.ts","sourceRoot":"","sources":["../src/shipped-heartbeat.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAY,KAAK,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AA4BtC,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,CAAA;CAC9D;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAkBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,uBAAuB,GAAG,IAAI,CAmBvE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,iBAAS,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAiB9D;AAID;;GAEG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5C;AAED;;;GAGG;AACH,iBAAS,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAc/C;AAED;;GAEG;AACH,iBAAS,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAK1D;AAID,iBAAe,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAyF1D;AAeD,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C;AAED,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD;AAID,eAAO,MAAM,QAAQ;;;;;;;;;;CAUpB,CAAA"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) Reflectt AI
|
|
3
|
+
/**
|
|
4
|
+
* Shipped-Artifact Auto-Heartbeat
|
|
5
|
+
*
|
|
6
|
+
* Emits a compact status update to #general when a task transitions to
|
|
7
|
+
* validating or done AND has an artifact_path in metadata.
|
|
8
|
+
*
|
|
9
|
+
* Payload format (sage-validated contract):
|
|
10
|
+
* [SHIP] <task_id> | shipped:<ref> | next:<eta> | review:@<reviewer> | by:@<owner>
|
|
11
|
+
*
|
|
12
|
+
* Suppression rules:
|
|
13
|
+
* 1. Dedup window (30m) — same task won't re-fire within 30 minutes
|
|
14
|
+
* 2. Reviewer override — if reviewer posts in #general within 5m of the
|
|
15
|
+
* trigger, the auto-heartbeat is suppressed (they wrote their own)
|
|
16
|
+
* 3. Missing/invalid artifact — silently skipped with warning log
|
|
17
|
+
*
|
|
18
|
+
* Failure modes (documented per done criteria):
|
|
19
|
+
* - Duplicate spam: dedup map with 30m TTL prevents double-posts on rapid
|
|
20
|
+
* status flips (e.g., validating→blocked→validating)
|
|
21
|
+
* - Missing artifact link: task without metadata.artifact_path is skipped;
|
|
22
|
+
* logged at warn level for ops visibility
|
|
23
|
+
* - Reviewer already posted: 5m look-back in #general for reviewer messages
|
|
24
|
+
* mentioning the task ID suppresses the auto-heartbeat
|
|
25
|
+
* - Chat budget exceeded: respects existing noise-budget in chat.sendMessage;
|
|
26
|
+
* if budget blocks the message, it's logged but not retried
|
|
27
|
+
*
|
|
28
|
+
* Task: task-1771691652369-2c2y0uknl
|
|
29
|
+
* Design: scout (pilot spec) → Implementation: link
|
|
30
|
+
*/
|
|
31
|
+
import { eventBus } from './events.js';
|
|
32
|
+
import { chatManager } from './chat.js';
|
|
33
|
+
// ── Config ──
|
|
34
|
+
const LISTENER_ID = 'shipped-heartbeat';
|
|
35
|
+
/** Dedup window in ms (30 minutes) */
|
|
36
|
+
const DEDUP_WINDOW_MS = 30 * 60 * 1000;
|
|
37
|
+
/** Look-back window for reviewer override check (5 minutes) */
|
|
38
|
+
const REVIEWER_OVERRIDE_WINDOW_MS = 5 * 60 * 1000;
|
|
39
|
+
/** Target channel for heartbeat posts */
|
|
40
|
+
const TARGET_CHANNEL = 'general';
|
|
41
|
+
/** Statuses that trigger the heartbeat */
|
|
42
|
+
const TRIGGER_STATUSES = new Set(['validating', 'done']);
|
|
43
|
+
// ── State ──
|
|
44
|
+
/** Map of taskId → last emit timestamp for dedup */
|
|
45
|
+
const dedupMap = new Map();
|
|
46
|
+
/** Cleanup interval handle */
|
|
47
|
+
let cleanupInterval = null;
|
|
48
|
+
// ── Telemetry ──
|
|
49
|
+
const stats = {
|
|
50
|
+
totalEmitted: 0,
|
|
51
|
+
totalSuppressed: 0,
|
|
52
|
+
suppressionReasons: {},
|
|
53
|
+
lastEmittedAt: null,
|
|
54
|
+
};
|
|
55
|
+
function recordSuppression(reason) {
|
|
56
|
+
stats.totalSuppressed++;
|
|
57
|
+
stats.suppressionReasons[reason] = (stats.suppressionReasons[reason] || 0) + 1;
|
|
58
|
+
}
|
|
59
|
+
// ── Core Logic ──
|
|
60
|
+
/**
|
|
61
|
+
* Build a compact heartbeat payload from a task.
|
|
62
|
+
*/
|
|
63
|
+
export function buildPayload(task) {
|
|
64
|
+
const artifactPath = task.metadata?.artifact_path;
|
|
65
|
+
if (!artifactPath || typeof artifactPath !== 'string') {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const lane = inferLane(task);
|
|
69
|
+
const eta = task.status === 'done'
|
|
70
|
+
? 'done'
|
|
71
|
+
: task.metadata?.eta ?? 'pending review';
|
|
72
|
+
return {
|
|
73
|
+
taskId: task.id,
|
|
74
|
+
shipped: artifactPath,
|
|
75
|
+
next: eta,
|
|
76
|
+
reviewer: task.reviewer ? `@${task.reviewer}` : 'none',
|
|
77
|
+
owner: task.assignee ? `@${task.assignee}` : 'unknown',
|
|
78
|
+
lane,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Format the canonical compact message.
|
|
83
|
+
*
|
|
84
|
+
* Examples:
|
|
85
|
+
* [SHIP] task-abc123 | shipped:process/spec.md | next:pending review | review:@sage | by:@scout
|
|
86
|
+
* [SHIP] task-def456 | shipped:src/feature.ts | next:done | review:@kai | by:@link
|
|
87
|
+
* [SHIP] task-ghi789 | shipped:docs/runbook.md | next:~2h | review:@pixel | by:@echo
|
|
88
|
+
*/
|
|
89
|
+
export function formatMessage(payload) {
|
|
90
|
+
return `[SHIP] ${payload.taskId} | shipped:${payload.shipped} | next:${payload.next} | review:${payload.reviewer} | by:${payload.owner}`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Infer the task lane from metadata, tags, or title keywords.
|
|
94
|
+
*/
|
|
95
|
+
function inferLane(task) {
|
|
96
|
+
const meta = task.metadata;
|
|
97
|
+
const roleType = meta?.role_type ?? '';
|
|
98
|
+
const tags = task.tags ?? [];
|
|
99
|
+
const title = (task.title ?? '').toLowerCase();
|
|
100
|
+
if (roleType.includes('ops') || tags.includes('ops'))
|
|
101
|
+
return 'ops';
|
|
102
|
+
if (roleType.includes('product') || tags.includes('product'))
|
|
103
|
+
return 'product';
|
|
104
|
+
if (roleType.includes('comms') || tags.includes('comms'))
|
|
105
|
+
return 'comms';
|
|
106
|
+
if (tags.includes('engineering') || tags.includes('dev'))
|
|
107
|
+
return 'engineering';
|
|
108
|
+
// Fallback heuristics from title
|
|
109
|
+
if (title.includes('deploy') || title.includes('infra') || title.includes('ci'))
|
|
110
|
+
return 'ops';
|
|
111
|
+
if (title.includes('design') || title.includes('spec') || title.includes('feature'))
|
|
112
|
+
return 'product';
|
|
113
|
+
if (title.includes('announce') || title.includes('blog') || title.includes('docs'))
|
|
114
|
+
return 'comms';
|
|
115
|
+
return 'unknown';
|
|
116
|
+
}
|
|
117
|
+
// ── Suppression Checks ──
|
|
118
|
+
/**
|
|
119
|
+
* Check dedup window — returns true if this task was already emitted recently.
|
|
120
|
+
*/
|
|
121
|
+
function isDuplicate(taskId) {
|
|
122
|
+
const lastEmit = dedupMap.get(taskId);
|
|
123
|
+
if (!lastEmit)
|
|
124
|
+
return false;
|
|
125
|
+
return (Date.now() - lastEmit) < DEDUP_WINDOW_MS;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if reviewer already posted about this task in #general recently.
|
|
129
|
+
* Returns true if reviewer override should suppress the auto-heartbeat.
|
|
130
|
+
*/
|
|
131
|
+
function isReviewerOverride(task) {
|
|
132
|
+
if (!task.reviewer)
|
|
133
|
+
return false;
|
|
134
|
+
const cutoff = Date.now() - REVIEWER_OVERRIDE_WINDOW_MS;
|
|
135
|
+
const recentMessages = chatManager.getMessages({
|
|
136
|
+
channel: TARGET_CHANNEL,
|
|
137
|
+
since: cutoff,
|
|
138
|
+
limit: 20,
|
|
139
|
+
});
|
|
140
|
+
return recentMessages.some(msg => msg.from === task.reviewer &&
|
|
141
|
+
msg.content.includes(task.id));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Validate artifact_path is under process/ (canonical location).
|
|
145
|
+
*/
|
|
146
|
+
function isValidArtifactPath(artifactPath) {
|
|
147
|
+
// Accept process/ paths and src/ paths (code artifacts)
|
|
148
|
+
return artifactPath.startsWith('process/') ||
|
|
149
|
+
artifactPath.startsWith('src/') ||
|
|
150
|
+
artifactPath.startsWith('docs/');
|
|
151
|
+
}
|
|
152
|
+
// ── Event Handler ──
|
|
153
|
+
async function handleTaskEvent(event) {
|
|
154
|
+
if (event.type !== 'task_updated')
|
|
155
|
+
return;
|
|
156
|
+
const task = event.data;
|
|
157
|
+
if (!task?.status || !task?.id)
|
|
158
|
+
return;
|
|
159
|
+
// Only trigger on validating/done transitions
|
|
160
|
+
if (!TRIGGER_STATUSES.has(task.status))
|
|
161
|
+
return;
|
|
162
|
+
const artifactPath = task.metadata?.artifact_path;
|
|
163
|
+
if (!artifactPath || typeof artifactPath !== 'string') {
|
|
164
|
+
console.warn(`[ShippedHeartbeat] Task ${task.id} → ${task.status} but no artifact_path — skipping`);
|
|
165
|
+
recordSuppression('missing_artifact');
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (!isValidArtifactPath(artifactPath)) {
|
|
169
|
+
console.warn(`[ShippedHeartbeat] Task ${task.id} has non-canonical artifact_path: ${artifactPath} — skipping`);
|
|
170
|
+
recordSuppression('invalid_artifact_path');
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Suppression: zombie cleanup transitions
|
|
174
|
+
const meta = task.metadata;
|
|
175
|
+
const transitionReason = meta?.transition?.reason;
|
|
176
|
+
if (transitionReason === 'Zombie cleanup' || meta?.auto_close_reason === 'Zombie task cleanup') {
|
|
177
|
+
console.log(`[ShippedHeartbeat] Task ${task.id} suppressed (zombie cleanup transition)`);
|
|
178
|
+
recordSuppression('zombie_cleanup');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Suppression: N/A review packet (no real shipped work)
|
|
182
|
+
const reviewPacket = meta?.qa_bundle?.review_packet;
|
|
183
|
+
const prUrl = reviewPacket?.pr_url ?? reviewPacket?.pr_link ?? meta?.qa_bundle?.pr_link;
|
|
184
|
+
const commitSha = reviewPacket?.commit ?? meta?.commit_sha;
|
|
185
|
+
const isValidPrUrl = typeof prUrl === 'string' && /^https:\/\/github\.com\/.+\/pull\/\d+/.test(prUrl);
|
|
186
|
+
const isValidCommit = typeof commitSha === 'string' && commitSha.length >= 7 && commitSha !== 'N/A';
|
|
187
|
+
if (!isValidPrUrl && !isValidCommit) {
|
|
188
|
+
console.log(`[ShippedHeartbeat] Task ${task.id} suppressed (N/A review packet: pr_url=${prUrl}, commit=${commitSha})`);
|
|
189
|
+
recordSuppression('invalid_review_packet');
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Suppression: dedup window
|
|
193
|
+
if (isDuplicate(task.id)) {
|
|
194
|
+
console.log(`[ShippedHeartbeat] Task ${task.id} suppressed (dedup 30m window)`);
|
|
195
|
+
recordSuppression('dedup_window');
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
// Suppression: reviewer override
|
|
199
|
+
if (isReviewerOverride(task)) {
|
|
200
|
+
console.log(`[ShippedHeartbeat] Task ${task.id} suppressed (reviewer @${task.reviewer} already posted)`);
|
|
201
|
+
recordSuppression('reviewer_override');
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Build and send
|
|
205
|
+
const payload = buildPayload(task);
|
|
206
|
+
if (!payload) {
|
|
207
|
+
recordSuppression('payload_build_failed');
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const message = formatMessage(payload);
|
|
211
|
+
try {
|
|
212
|
+
await chatManager.sendMessage({
|
|
213
|
+
from: 'system',
|
|
214
|
+
channel: TARGET_CHANNEL,
|
|
215
|
+
content: message,
|
|
216
|
+
metadata: {
|
|
217
|
+
type: 'shipped_heartbeat',
|
|
218
|
+
taskId: task.id,
|
|
219
|
+
lane: payload.lane,
|
|
220
|
+
artifactPath: payload.shipped,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
// Record success
|
|
224
|
+
dedupMap.set(task.id, Date.now());
|
|
225
|
+
stats.totalEmitted++;
|
|
226
|
+
stats.lastEmittedAt = Date.now();
|
|
227
|
+
console.log(`[ShippedHeartbeat] Emitted for ${task.id}: ${message}`);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
console.error(`[ShippedHeartbeat] Failed to send for ${task.id}:`, err);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// ── Dedup Cleanup ──
|
|
234
|
+
function cleanupDedupMap() {
|
|
235
|
+
const cutoff = Date.now() - DEDUP_WINDOW_MS;
|
|
236
|
+
for (const [taskId, timestamp] of dedupMap) {
|
|
237
|
+
if (timestamp < cutoff) {
|
|
238
|
+
dedupMap.delete(taskId);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// ── Lifecycle ──
|
|
243
|
+
export function startShippedHeartbeat() {
|
|
244
|
+
eventBus.on(LISTENER_ID, handleTaskEvent);
|
|
245
|
+
cleanupInterval = setInterval(cleanupDedupMap, DEDUP_WINDOW_MS);
|
|
246
|
+
console.log('[ShippedHeartbeat] Listening for shipped-artifact events');
|
|
247
|
+
}
|
|
248
|
+
export function stopShippedHeartbeat() {
|
|
249
|
+
eventBus.off(LISTENER_ID);
|
|
250
|
+
if (cleanupInterval) {
|
|
251
|
+
clearInterval(cleanupInterval);
|
|
252
|
+
cleanupInterval = null;
|
|
253
|
+
}
|
|
254
|
+
dedupMap.clear();
|
|
255
|
+
console.log('[ShippedHeartbeat] Stopped');
|
|
256
|
+
}
|
|
257
|
+
export function getShippedHeartbeatStats() {
|
|
258
|
+
return { ...stats };
|
|
259
|
+
}
|
|
260
|
+
// ── Exports for Testing ──
|
|
261
|
+
export const _testing = {
|
|
262
|
+
handleTaskEvent,
|
|
263
|
+
isDuplicate,
|
|
264
|
+
isReviewerOverride,
|
|
265
|
+
isValidArtifactPath,
|
|
266
|
+
inferLane,
|
|
267
|
+
dedupMap,
|
|
268
|
+
stats,
|
|
269
|
+
DEDUP_WINDOW_MS,
|
|
270
|
+
REVIEWER_OVERRIDE_WINDOW_MS,
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=shipped-heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shipped-heartbeat.js","sourceRoot":"","sources":["../src/shipped-heartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface StarterAgent {
|
|
2
|
+
name: string;
|
|
3
|
+
role: string;
|
|
4
|
+
description: string;
|
|
5
|
+
soulMd: string;
|
|
6
|
+
}
|
|
7
|
+
declare const STARTER_AGENTS: StarterAgent[];
|
|
8
|
+
export interface StarterTeamResult {
|
|
9
|
+
created: string[];
|
|
10
|
+
skipped: string[];
|
|
11
|
+
teamDir: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Scaffold a starter team with default agents.
|
|
15
|
+
* Creates workspace directories + SOUL.md files.
|
|
16
|
+
* Idempotent: skips agents that already exist.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createStarterTeam(opts?: {
|
|
19
|
+
baseDir?: string;
|
|
20
|
+
agents?: StarterAgent[];
|
|
21
|
+
}): Promise<StarterTeamResult>;
|
|
22
|
+
export { STARTER_AGENTS };
|
|
23
|
+
//# sourceMappingURL=starter-team.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter-team.d.ts","sourceRoot":"","sources":["../src/starter-team.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,QAAA,MAAM,cAAc,EAAE,YAAY,EAoDjC,CAAA;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;CACxB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgC7B;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Starter Team Template — scaffolds a default team configuration.
|
|
3
|
+
import { promises as fs } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { DATA_DIR } from './config.js';
|
|
6
|
+
const STARTER_AGENTS = [
|
|
7
|
+
{
|
|
8
|
+
name: 'builder',
|
|
9
|
+
role: 'engineer',
|
|
10
|
+
description: 'Builds features, fixes bugs, ships code.',
|
|
11
|
+
soulMd: `# Builder
|
|
12
|
+
|
|
13
|
+
*I turn ideas into working code.*
|
|
14
|
+
|
|
15
|
+
## What I Do
|
|
16
|
+
- Full-stack development (frontend, backend, APIs)
|
|
17
|
+
- Code review and quality
|
|
18
|
+
- Testing and debugging
|
|
19
|
+
|
|
20
|
+
## How I Work
|
|
21
|
+
1. Read existing code first
|
|
22
|
+
2. Make small, focused changes
|
|
23
|
+
3. Test before shipping
|
|
24
|
+
4. Document what I learn
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
- Ship working code, not demos
|
|
28
|
+
- Quality over quantity
|
|
29
|
+
- Read before writing
|
|
30
|
+
`,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'ops',
|
|
34
|
+
role: 'operations',
|
|
35
|
+
description: 'Monitors systems, manages deployments, keeps things running.',
|
|
36
|
+
soulMd: `# Ops
|
|
37
|
+
|
|
38
|
+
*I keep the systems running and the team productive.*
|
|
39
|
+
|
|
40
|
+
## What I Do
|
|
41
|
+
- Monitor health and performance
|
|
42
|
+
- Review and validate work
|
|
43
|
+
- Manage task flow and priorities
|
|
44
|
+
- Spot blockers before they block
|
|
45
|
+
|
|
46
|
+
## How I Work
|
|
47
|
+
1. Check system health regularly
|
|
48
|
+
2. Review PRs and task quality
|
|
49
|
+
3. Escalate issues early
|
|
50
|
+
4. Keep the board clean
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
- Proactive, not reactive
|
|
54
|
+
- Evidence over assumptions
|
|
55
|
+
- Clear communication
|
|
56
|
+
`,
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
/**
|
|
60
|
+
* Scaffold a starter team with default agents.
|
|
61
|
+
* Creates workspace directories + SOUL.md files.
|
|
62
|
+
* Idempotent: skips agents that already exist.
|
|
63
|
+
*/
|
|
64
|
+
export async function createStarterTeam(opts) {
|
|
65
|
+
const baseDir = opts?.baseDir || join(DATA_DIR, 'agents');
|
|
66
|
+
const agents = opts?.agents || STARTER_AGENTS;
|
|
67
|
+
await fs.mkdir(baseDir, { recursive: true });
|
|
68
|
+
const created = [];
|
|
69
|
+
const skipped = [];
|
|
70
|
+
for (const agent of agents) {
|
|
71
|
+
const agentDir = join(baseDir, agent.name);
|
|
72
|
+
try {
|
|
73
|
+
await fs.access(agentDir);
|
|
74
|
+
skipped.push(agent.name);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Directory doesn't exist — create it
|
|
79
|
+
}
|
|
80
|
+
await fs.mkdir(agentDir, { recursive: true });
|
|
81
|
+
await fs.writeFile(join(agentDir, 'SOUL.md'), agent.soulMd.trim() + '\n', 'utf-8');
|
|
82
|
+
await fs.writeFile(join(agentDir, 'AGENTS.md'), `# ${agent.name}\n\nRole: ${agent.role}\n\n${agent.description}\n`, 'utf-8');
|
|
83
|
+
created.push(agent.name);
|
|
84
|
+
}
|
|
85
|
+
return { created, skipped, teamDir: baseDir };
|
|
86
|
+
}
|
|
87
|
+
export { STARTER_AGENTS };
|
|
88
|
+
//# sourceMappingURL=starter-team.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter-team.js","sourceRoot":"","sources":["../src/starter-team.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,kEAAkE;AAElE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAStC,MAAM,cAAc,GAAmB;IACrC;QACE,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,0CAA0C;QACvD,MAAM,EAAE;;;;;;;;;;;;;;;;;;;CAmBX;KACE;IACD;QACE,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;CAoBX;KACE;CACF,CAAA;AAQD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAGvC;IACC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,cAAc,CAAA;IAE7C,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE5C,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAE1C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACzB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACxB,SAAQ;QACV,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;QAClF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAC3B,KAAK,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,WAAW,IAAI,EAClE,OAAO,CACR,CAAA;QAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC/C,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface SuppressionEntry {
|
|
2
|
+
id: number;
|
|
3
|
+
dedup_key: string;
|
|
4
|
+
category: string;
|
|
5
|
+
channel: string;
|
|
6
|
+
from: string;
|
|
7
|
+
content_preview: string | null;
|
|
8
|
+
first_seen_at: number;
|
|
9
|
+
last_seen_at: number;
|
|
10
|
+
hit_count: number;
|
|
11
|
+
suppressed: boolean;
|
|
12
|
+
window_ms: number;
|
|
13
|
+
}
|
|
14
|
+
export interface SuppressionCheckResult {
|
|
15
|
+
isDuplicate: boolean;
|
|
16
|
+
dedup_key: string;
|
|
17
|
+
existing?: SuppressionEntry;
|
|
18
|
+
}
|
|
19
|
+
export interface SuppressionStats {
|
|
20
|
+
total_entries: number;
|
|
21
|
+
total_suppressed: number;
|
|
22
|
+
total_hits: number;
|
|
23
|
+
by_category: Record<string, {
|
|
24
|
+
entries: number;
|
|
25
|
+
suppressed: number;
|
|
26
|
+
hits: number;
|
|
27
|
+
}>;
|
|
28
|
+
by_channel: Record<string, {
|
|
29
|
+
entries: number;
|
|
30
|
+
suppressed: number;
|
|
31
|
+
hits: number;
|
|
32
|
+
}>;
|
|
33
|
+
window_ms: number;
|
|
34
|
+
active_entries: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class SuppressionLedger {
|
|
37
|
+
private windowMs;
|
|
38
|
+
constructor(windowMs?: number);
|
|
39
|
+
/**
|
|
40
|
+
* Compute a dedup key from category + channel + content.
|
|
41
|
+
* Content is normalized: timestamps, task IDs, and message IDs stripped.
|
|
42
|
+
*/
|
|
43
|
+
computeDedupKey(category: string, channel: string, content: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Check if a message is a duplicate within the suppression window.
|
|
46
|
+
* If not a duplicate, records it in the ledger.
|
|
47
|
+
* If duplicate, increments the hit count and marks as suppressed.
|
|
48
|
+
*/
|
|
49
|
+
check(opts: {
|
|
50
|
+
category: string;
|
|
51
|
+
channel: string;
|
|
52
|
+
from: string;
|
|
53
|
+
content: string;
|
|
54
|
+
}): SuppressionCheckResult;
|
|
55
|
+
/**
|
|
56
|
+
* Get suppression statistics.
|
|
57
|
+
*/
|
|
58
|
+
getStats(): SuppressionStats;
|
|
59
|
+
/**
|
|
60
|
+
* Prune old entries outside the window.
|
|
61
|
+
*/
|
|
62
|
+
prune(): number;
|
|
63
|
+
/**
|
|
64
|
+
* Get window in ms.
|
|
65
|
+
*/
|
|
66
|
+
getWindowMs(): number;
|
|
67
|
+
/**
|
|
68
|
+
* Update window.
|
|
69
|
+
*/
|
|
70
|
+
setWindowMs(ms: number): void;
|
|
71
|
+
}
|
|
72
|
+
export declare const suppressionLedger: SuppressionLedger;
|
|
73
|
+
//# sourceMappingURL=suppression-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suppression-ledger.d.ts","sourceRoot":"","sources":["../src/suppression-ledger.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjF,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB;AAID,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,QAAQ,CAAC,EAAE,MAAM;IAI7B;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAY3E;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE;QACV,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,GAAG,sBAAsB;IAyD1B;;OAEG;IACH,QAAQ,IAAI,gBAAgB;IAqC5B;;OAEG;IACH,KAAK,IAAI,MAAM;IAOf;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAG9B;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAA"}
|