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,170 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Artifact mirror: auto-copies process/ artifacts to workspace-shared/process/
|
|
3
|
+
// so reviewers in other workspaces can access them without manual copying.
|
|
4
|
+
//
|
|
5
|
+
// Triggered on task transition to validating or done.
|
|
6
|
+
import { promises as fs } from 'fs';
|
|
7
|
+
import { join, resolve, dirname } from 'path';
|
|
8
|
+
import { homedir } from 'os';
|
|
9
|
+
// ── Config (lazy for testability — env is read at call time) ──
|
|
10
|
+
/**
|
|
11
|
+
* Canonical shared workspace: ~/.openclaw/workspace-shared
|
|
12
|
+
*
|
|
13
|
+
* Override with REFLECTT_SHARED_WORKSPACE env var.
|
|
14
|
+
* The previous default (../workspace-shared relative to project root)
|
|
15
|
+
* was wrong when running from a nested project directory.
|
|
16
|
+
*/
|
|
17
|
+
function getWorkspaceRoot() {
|
|
18
|
+
const explicit = process.env.REFLECTT_WORKSPACE;
|
|
19
|
+
if (explicit)
|
|
20
|
+
return resolve(explicit);
|
|
21
|
+
// reflectt-node commonly runs with CWD inside a nested project directory:
|
|
22
|
+
// ~/.openclaw/workspace/projects/reflectt-node
|
|
23
|
+
// In that case, the actual workspace root is the parent *before* /projects/reflectt-node.
|
|
24
|
+
const cwd = resolve(process.cwd());
|
|
25
|
+
const normalized = cwd.replace(/\\/g, '/');
|
|
26
|
+
const marker = '/projects/reflectt-node';
|
|
27
|
+
const idx = normalized.lastIndexOf(marker);
|
|
28
|
+
if (idx !== -1) {
|
|
29
|
+
const root = normalized.slice(0, idx);
|
|
30
|
+
if (root)
|
|
31
|
+
return root;
|
|
32
|
+
}
|
|
33
|
+
return cwd;
|
|
34
|
+
}
|
|
35
|
+
function getSharedWorkspace() {
|
|
36
|
+
return process.env.REFLECTT_SHARED_WORKSPACE
|
|
37
|
+
|| resolve(homedir(), '.openclaw', 'workspace-shared');
|
|
38
|
+
}
|
|
39
|
+
export function WORKSPACE_ROOT() { return getWorkspaceRoot(); }
|
|
40
|
+
export function SHARED_WORKSPACE() { return getSharedWorkspace(); }
|
|
41
|
+
async function listCandidateWorkspaceRoots() {
|
|
42
|
+
const roots = [];
|
|
43
|
+
const seen = new Set();
|
|
44
|
+
const add = (p) => {
|
|
45
|
+
if (!p)
|
|
46
|
+
return;
|
|
47
|
+
const r = resolve(p);
|
|
48
|
+
if (seen.has(r))
|
|
49
|
+
return;
|
|
50
|
+
seen.add(r);
|
|
51
|
+
roots.push(r);
|
|
52
|
+
};
|
|
53
|
+
// Prefer the inferred runtime workspace root first (fast path).
|
|
54
|
+
add(getWorkspaceRoot());
|
|
55
|
+
// Then search all known OpenClaw workspaces so artifacts produced by other
|
|
56
|
+
// agents can still be mirrored on review transition.
|
|
57
|
+
const base = resolve(homedir(), '.openclaw');
|
|
58
|
+
try {
|
|
59
|
+
const entries = await fs.readdir(base, { withFileTypes: true });
|
|
60
|
+
for (const e of entries) {
|
|
61
|
+
if (!e.isDirectory())
|
|
62
|
+
continue;
|
|
63
|
+
if (!e.name.startsWith('workspace'))
|
|
64
|
+
continue;
|
|
65
|
+
if (e.name === 'workspace-shared')
|
|
66
|
+
continue;
|
|
67
|
+
add(resolve(base, e.name));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Non-fatal: in some deployments we may not have directory read access.
|
|
72
|
+
}
|
|
73
|
+
return roots;
|
|
74
|
+
}
|
|
75
|
+
async function findArtifactSource(artifactPath) {
|
|
76
|
+
const candidates = await listCandidateWorkspaceRoots();
|
|
77
|
+
const checked = [];
|
|
78
|
+
for (const root of candidates) {
|
|
79
|
+
const candidate = resolve(root, artifactPath);
|
|
80
|
+
checked.push(candidate);
|
|
81
|
+
const stat = await fs.stat(candidate).catch(() => null);
|
|
82
|
+
if (stat)
|
|
83
|
+
return { sourcePath: candidate, stat, checked };
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Mirror a task's process artifacts to the shared workspace.
|
|
89
|
+
*
|
|
90
|
+
* Supports both directory-style artifacts (process/task-xxx/) and
|
|
91
|
+
* single-file artifacts (process/task-xxx-proof.md).
|
|
92
|
+
*/
|
|
93
|
+
export async function mirrorArtifacts(artifactPath) {
|
|
94
|
+
if (!artifactPath || !artifactPath.startsWith('process/')) {
|
|
95
|
+
return { mirrored: false, source: artifactPath, destination: '', filesCopied: 0, error: 'Not a process/ artifact path' };
|
|
96
|
+
}
|
|
97
|
+
const destPath = resolve(getSharedWorkspace(), artifactPath);
|
|
98
|
+
let sourcePath = resolve(getWorkspaceRoot(), artifactPath);
|
|
99
|
+
try {
|
|
100
|
+
const lookup = await findArtifactSource(artifactPath);
|
|
101
|
+
if (!lookup) {
|
|
102
|
+
return {
|
|
103
|
+
mirrored: false,
|
|
104
|
+
source: sourcePath,
|
|
105
|
+
destination: destPath,
|
|
106
|
+
filesCopied: 0,
|
|
107
|
+
error: 'Source artifact not found (checked all ~/.openclaw/workspace* roots)',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
sourcePath = lookup.sourcePath;
|
|
111
|
+
const stat = lookup.stat;
|
|
112
|
+
// Ensure destination directory exists
|
|
113
|
+
await fs.mkdir(dirname(destPath), { recursive: true });
|
|
114
|
+
let filesCopied = 0;
|
|
115
|
+
if (stat.isDirectory()) {
|
|
116
|
+
// Mirror entire directory
|
|
117
|
+
await fs.mkdir(destPath, { recursive: true });
|
|
118
|
+
const files = await fs.readdir(sourcePath, { recursive: true });
|
|
119
|
+
for (const file of files) {
|
|
120
|
+
const srcFile = join(sourcePath, file);
|
|
121
|
+
const dstFile = join(destPath, file);
|
|
122
|
+
const fileStat = await fs.stat(srcFile).catch(() => null);
|
|
123
|
+
if (fileStat?.isFile()) {
|
|
124
|
+
await fs.mkdir(dirname(dstFile), { recursive: true });
|
|
125
|
+
await fs.copyFile(srcFile, dstFile);
|
|
126
|
+
filesCopied++;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Mirror single file
|
|
132
|
+
await fs.copyFile(sourcePath, destPath);
|
|
133
|
+
filesCopied = 1;
|
|
134
|
+
}
|
|
135
|
+
return { mirrored: true, source: sourcePath, destination: destPath, filesCopied };
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
return {
|
|
139
|
+
mirrored: false,
|
|
140
|
+
source: sourcePath,
|
|
141
|
+
destination: destPath,
|
|
142
|
+
filesCopied: 0,
|
|
143
|
+
error: `Mirror failed: ${err.message}`,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Called on task status transition to validating or done.
|
|
149
|
+
* Extracts artifact_path from task metadata and mirrors it.
|
|
150
|
+
*/
|
|
151
|
+
export async function onTaskReadyForReview(taskMeta) {
|
|
152
|
+
const artifactPath = typeof taskMeta.artifact_path === 'string' ? taskMeta.artifact_path : null;
|
|
153
|
+
if (!artifactPath)
|
|
154
|
+
return null;
|
|
155
|
+
return mirrorArtifacts(artifactPath);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Check if shared workspace is accessible.
|
|
159
|
+
*/
|
|
160
|
+
export async function isSharedWorkspaceReady() {
|
|
161
|
+
try {
|
|
162
|
+
await fs.access(getSharedWorkspace());
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// WORKSPACE_ROOT and SHARED_WORKSPACE exported as functions above
|
|
170
|
+
//# sourceMappingURL=artifact-mirror.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-mirror.js","sourceRoot":"","sources":["../src/artifact-mirror.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact path normalization + GitHub blob fallback.
|
|
3
|
+
*
|
|
4
|
+
* Solves: reviewers can't access artifacts because paths are workspace-dependent
|
|
5
|
+
* (absolute, or prefixed with workspace-<agent>/).
|
|
6
|
+
*
|
|
7
|
+
* Strategy:
|
|
8
|
+
* 1) Normalize: strip workspace prefixes → repo-relative process/...
|
|
9
|
+
* 2) Reject: absolute paths that don't contain a recognizable workspace/repo pattern
|
|
10
|
+
* 3) GitHub fallback: if local file missing but PR is known, build GitHub blob URL
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Normalize an artifact path to repo-relative.
|
|
14
|
+
* Returns { normalized, wasAbsolute, wasNormalized }.
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* "/Users/ryan/.openclaw/workspace-link/process/QA.md" → "process/QA.md"
|
|
18
|
+
* "workspace-shared/process/QA.md" → "process/QA.md"
|
|
19
|
+
* "process/QA.md" → "process/QA.md" (unchanged)
|
|
20
|
+
* "/etc/passwd" → null (rejected)
|
|
21
|
+
*/
|
|
22
|
+
export declare function normalizeArtifactPath(raw: string): {
|
|
23
|
+
normalized: string | null;
|
|
24
|
+
wasAbsolute: boolean;
|
|
25
|
+
wasNormalized: boolean;
|
|
26
|
+
rejected: boolean;
|
|
27
|
+
rejectReason?: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Normalize all artifact paths in task metadata.
|
|
31
|
+
* Returns { patches, warnings } where patches is a metadata merge object
|
|
32
|
+
* and warnings lists any normalization events.
|
|
33
|
+
*/
|
|
34
|
+
export declare function normalizeTaskArtifactPaths(metadata: Record<string, unknown>): {
|
|
35
|
+
patches: Record<string, unknown>;
|
|
36
|
+
warnings: string[];
|
|
37
|
+
rejected: string[];
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Build a GitHub blob URL for an artifact when the local file is missing.
|
|
41
|
+
* Uses the PR's repo + head SHA + file path.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildGitHubBlobUrl(prUrl: string, commitSha: string, filePath: string): string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Build a GitHub raw URL for downloading artifact content.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildGitHubRawUrl(prUrl: string, commitSha: string, filePath: string): string | null;
|
|
48
|
+
//# sourceMappingURL=artifact-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-resolver.d.ts","sourceRoot":"","sources":["../src/artifact-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAClD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAyDA;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CA+CA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAUf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CASf"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact path normalization + GitHub blob fallback.
|
|
3
|
+
*
|
|
4
|
+
* Solves: reviewers can't access artifacts because paths are workspace-dependent
|
|
5
|
+
* (absolute, or prefixed with workspace-<agent>/).
|
|
6
|
+
*
|
|
7
|
+
* Strategy:
|
|
8
|
+
* 1) Normalize: strip workspace prefixes → repo-relative process/...
|
|
9
|
+
* 2) Reject: absolute paths that don't contain a recognizable workspace/repo pattern
|
|
10
|
+
* 3) GitHub fallback: if local file missing but PR is known, build GitHub blob URL
|
|
11
|
+
*/
|
|
12
|
+
import { isAbsolute } from 'node:path';
|
|
13
|
+
// ── Known workspace prefix patterns ──────────────────────────────────
|
|
14
|
+
const WORKSPACE_PATTERNS = [
|
|
15
|
+
// OpenClaw workspace paths
|
|
16
|
+
/^.*?\/\.openclaw\/workspace[^/]*\//,
|
|
17
|
+
// Reflectt home paths
|
|
18
|
+
/^.*?\/\.reflectt\//,
|
|
19
|
+
// Generic Users/*/projects/reflectt-node/ pattern
|
|
20
|
+
/^.*?\/projects\/reflectt-node\//,
|
|
21
|
+
// Generic Users/*/reflectt-node/ pattern
|
|
22
|
+
/^.*?\/reflectt-node\//,
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Normalize an artifact path to repo-relative.
|
|
26
|
+
* Returns { normalized, wasAbsolute, wasNormalized }.
|
|
27
|
+
*
|
|
28
|
+
* Examples:
|
|
29
|
+
* "/Users/ryan/.openclaw/workspace-link/process/QA.md" → "process/QA.md"
|
|
30
|
+
* "workspace-shared/process/QA.md" → "process/QA.md"
|
|
31
|
+
* "process/QA.md" → "process/QA.md" (unchanged)
|
|
32
|
+
* "/etc/passwd" → null (rejected)
|
|
33
|
+
*/
|
|
34
|
+
export function normalizeArtifactPath(raw) {
|
|
35
|
+
if (!raw || typeof raw !== 'string') {
|
|
36
|
+
return { normalized: null, wasAbsolute: false, wasNormalized: false, rejected: true, rejectReason: 'Empty path' };
|
|
37
|
+
}
|
|
38
|
+
const trimmed = raw.trim();
|
|
39
|
+
// Reject null bytes
|
|
40
|
+
if (trimmed.includes('\0')) {
|
|
41
|
+
return { normalized: null, wasAbsolute: false, wasNormalized: false, rejected: true, rejectReason: 'Null byte in path' };
|
|
42
|
+
}
|
|
43
|
+
// URLs pass through unchanged
|
|
44
|
+
if (/^https?:\/\//i.test(trimmed)) {
|
|
45
|
+
return { normalized: trimmed, wasAbsolute: false, wasNormalized: false, rejected: false };
|
|
46
|
+
}
|
|
47
|
+
const wasAbsolute = isAbsolute(trimmed);
|
|
48
|
+
// If absolute, try to strip known workspace prefixes
|
|
49
|
+
if (wasAbsolute) {
|
|
50
|
+
for (const pattern of WORKSPACE_PATTERNS) {
|
|
51
|
+
const match = trimmed.match(pattern);
|
|
52
|
+
if (match) {
|
|
53
|
+
const stripped = trimmed.slice(match[0].length);
|
|
54
|
+
if (stripped && !stripped.includes('..') && !isAbsolute(stripped)) {
|
|
55
|
+
return { normalized: stripped, wasAbsolute: true, wasNormalized: true, rejected: false };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Absolute path with no recognizable prefix → reject
|
|
60
|
+
return {
|
|
61
|
+
normalized: null,
|
|
62
|
+
wasAbsolute: true,
|
|
63
|
+
wasNormalized: false,
|
|
64
|
+
rejected: true,
|
|
65
|
+
rejectReason: `Absolute path does not match any known workspace pattern: ${trimmed.slice(0, 80)}...`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Strip common relative workspace prefixes
|
|
69
|
+
let result = trimmed;
|
|
70
|
+
const RELATIVE_PREFIXES = ['workspace-shared/', 'workspace-link/', 'workspace-echo/', 'workspace-kai/', 'workspace-sage/', 'workspace-pixel/', 'workspace-spark/', 'workspace-harmony/', 'workspace-scout/', 'workspace-rhythm/', 'shared/'];
|
|
71
|
+
for (const prefix of RELATIVE_PREFIXES) {
|
|
72
|
+
if (result.startsWith(prefix)) {
|
|
73
|
+
result = result.slice(prefix.length);
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Reject traversal
|
|
78
|
+
if (result.includes('..')) {
|
|
79
|
+
return { normalized: null, wasAbsolute: false, wasNormalized: false, rejected: true, rejectReason: 'Path contains ..' };
|
|
80
|
+
}
|
|
81
|
+
const wasNormalized = result !== trimmed;
|
|
82
|
+
return { normalized: result, wasAbsolute, wasNormalized, rejected: false };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Normalize all artifact paths in task metadata.
|
|
86
|
+
* Returns { patches, warnings } where patches is a metadata merge object
|
|
87
|
+
* and warnings lists any normalization events.
|
|
88
|
+
*/
|
|
89
|
+
export function normalizeTaskArtifactPaths(metadata) {
|
|
90
|
+
const patches = {};
|
|
91
|
+
const warnings = [];
|
|
92
|
+
const rejected = [];
|
|
93
|
+
// Normalize metadata.artifact_path
|
|
94
|
+
if (typeof metadata.artifact_path === 'string') {
|
|
95
|
+
const result = normalizeArtifactPath(metadata.artifact_path);
|
|
96
|
+
if (result.rejected) {
|
|
97
|
+
rejected.push(`artifact_path: ${result.rejectReason}`);
|
|
98
|
+
}
|
|
99
|
+
else if (result.wasNormalized && result.normalized) {
|
|
100
|
+
patches.artifact_path = result.normalized;
|
|
101
|
+
warnings.push(`artifact_path normalized: "${metadata.artifact_path}" → "${result.normalized}"`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Normalize qa_bundle.review_packet.artifact_path
|
|
105
|
+
const qaBundle = metadata.qa_bundle;
|
|
106
|
+
const reviewPacket = qaBundle?.review_packet;
|
|
107
|
+
if (typeof reviewPacket?.artifact_path === 'string') {
|
|
108
|
+
const result = normalizeArtifactPath(reviewPacket.artifact_path);
|
|
109
|
+
if (result.rejected) {
|
|
110
|
+
rejected.push(`qa_bundle.review_packet.artifact_path: ${result.rejectReason}`);
|
|
111
|
+
}
|
|
112
|
+
else if (result.wasNormalized && result.normalized) {
|
|
113
|
+
// Deep merge
|
|
114
|
+
patches.qa_bundle = {
|
|
115
|
+
...(patches.qa_bundle || {}),
|
|
116
|
+
...qaBundle,
|
|
117
|
+
review_packet: { ...reviewPacket, artifact_path: result.normalized },
|
|
118
|
+
};
|
|
119
|
+
warnings.push(`qa_bundle.review_packet.artifact_path normalized: "${reviewPacket.artifact_path}" → "${result.normalized}"`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Normalize review_handoff.artifact_path
|
|
123
|
+
const reviewHandoff = metadata.review_handoff;
|
|
124
|
+
if (typeof reviewHandoff?.artifact_path === 'string') {
|
|
125
|
+
const result = normalizeArtifactPath(reviewHandoff.artifact_path);
|
|
126
|
+
if (result.rejected) {
|
|
127
|
+
rejected.push(`review_handoff.artifact_path: ${result.rejectReason}`);
|
|
128
|
+
}
|
|
129
|
+
else if (result.wasNormalized && result.normalized) {
|
|
130
|
+
patches.review_handoff = { ...reviewHandoff, artifact_path: result.normalized };
|
|
131
|
+
warnings.push(`review_handoff.artifact_path normalized: "${reviewHandoff.artifact_path}" → "${result.normalized}"`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { patches, warnings, rejected };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Build a GitHub blob URL for an artifact when the local file is missing.
|
|
138
|
+
* Uses the PR's repo + head SHA + file path.
|
|
139
|
+
*/
|
|
140
|
+
export function buildGitHubBlobUrl(prUrl, commitSha, filePath) {
|
|
141
|
+
// Extract owner/repo from PR URL
|
|
142
|
+
const prMatch = prUrl.match(/github\.com\/([^/]+\/[^/]+)\/pull\/\d+/);
|
|
143
|
+
if (!prMatch)
|
|
144
|
+
return null;
|
|
145
|
+
const ownerRepo = prMatch[1];
|
|
146
|
+
const sha = commitSha.length >= 7 ? commitSha : null;
|
|
147
|
+
if (!sha)
|
|
148
|
+
return null;
|
|
149
|
+
return `https://github.com/${ownerRepo}/blob/${sha}/${filePath}`;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build a GitHub raw URL for downloading artifact content.
|
|
153
|
+
*/
|
|
154
|
+
export function buildGitHubRawUrl(prUrl, commitSha, filePath) {
|
|
155
|
+
const prMatch = prUrl.match(/github\.com\/([^/]+\/[^/]+)\/pull\/\d+/);
|
|
156
|
+
if (!prMatch)
|
|
157
|
+
return null;
|
|
158
|
+
const ownerRepo = prMatch[1];
|
|
159
|
+
const sha = commitSha.length >= 7 ? commitSha : null;
|
|
160
|
+
if (!sha)
|
|
161
|
+
return null;
|
|
162
|
+
return `https://raw.githubusercontent.com/${ownerRepo}/${sha}/${filePath}`;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=artifact-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-resolver.js","sourceRoot":"","sources":["../src/artifact-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export interface AgentRole {
|
|
2
|
+
name: string;
|
|
3
|
+
role: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
/** Optional: human-friendly display name (e.g. "Juniper" vs agent ID "agent-1"). Used in dashboard, chat, and mention resolution. */
|
|
6
|
+
displayName?: string;
|
|
7
|
+
/** Optional: additional names that should be treated as this agent for task lookup (e.g. OpenClaw agent "main" can act as "finance-agent"). */
|
|
8
|
+
aliases?: string[];
|
|
9
|
+
affinityTags: string[];
|
|
10
|
+
alwaysRoute?: string[];
|
|
11
|
+
neverRoute?: string[];
|
|
12
|
+
protectedDomains?: string[];
|
|
13
|
+
wipCap: number;
|
|
14
|
+
routingMode?: 'default' | 'opt-in';
|
|
15
|
+
neverRouteUnlessLane?: string;
|
|
16
|
+
}
|
|
17
|
+
declare const CONFIG_PATHS: string[];
|
|
18
|
+
/** Override built-in roles for tests. Call with null to reset. */
|
|
19
|
+
export declare function setTestRoles(roles: AgentRole[] | null): void;
|
|
20
|
+
declare function parseRolesYaml(content: string): AgentRole[];
|
|
21
|
+
/** Load roles from YAML config or fall back to built-in defaults */
|
|
22
|
+
export declare function loadAgentRoles(): {
|
|
23
|
+
roles: AgentRole[];
|
|
24
|
+
source: string;
|
|
25
|
+
};
|
|
26
|
+
/** Start watching the config file for changes (hot-reload) */
|
|
27
|
+
export declare function startConfigWatch(): void;
|
|
28
|
+
/** Stop watching config files */
|
|
29
|
+
export declare function stopConfigWatch(): void;
|
|
30
|
+
/** Get the current loaded roles */
|
|
31
|
+
export declare function getAgentRoles(): AgentRole[];
|
|
32
|
+
/** Get info about where roles were loaded from */
|
|
33
|
+
export declare function getAgentRolesSource(): {
|
|
34
|
+
source: string;
|
|
35
|
+
count: number;
|
|
36
|
+
};
|
|
37
|
+
export declare function getAgentRole(name: string): AgentRole | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve an "agent identity" (e.g. OpenClaw agent name) into all task-assignee names
|
|
40
|
+
* that should be treated as equivalent for lookup.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getAgentAliases(name: string): string[];
|
|
43
|
+
/** Save updated agent roles to YAML config file */
|
|
44
|
+
export declare function saveAgentRoles(roles: AgentRole[]): {
|
|
45
|
+
saved: boolean;
|
|
46
|
+
path: string;
|
|
47
|
+
version: number;
|
|
48
|
+
};
|
|
49
|
+
/** Update a single agent's display name (persisted to TEAM-ROLES.yaml). */
|
|
50
|
+
export declare function setAgentDisplayName(agentName: string, displayName: string): {
|
|
51
|
+
success: boolean;
|
|
52
|
+
error?: string;
|
|
53
|
+
};
|
|
54
|
+
/** Resolve a mention string to an agent name. Checks name, displayName, and aliases. */
|
|
55
|
+
export declare function resolveAgentMention(mention: string): string | undefined;
|
|
56
|
+
interface TaskForScoring {
|
|
57
|
+
id: string;
|
|
58
|
+
title: string;
|
|
59
|
+
status: string;
|
|
60
|
+
assignee?: string;
|
|
61
|
+
reviewer?: string;
|
|
62
|
+
tags?: string[];
|
|
63
|
+
done_criteria?: string[];
|
|
64
|
+
metadata?: Record<string, unknown>;
|
|
65
|
+
}
|
|
66
|
+
interface AssignmentScore {
|
|
67
|
+
agent: string;
|
|
68
|
+
score: number;
|
|
69
|
+
breakdown: {
|
|
70
|
+
affinity: number;
|
|
71
|
+
wipPenalty: number;
|
|
72
|
+
throughput: number;
|
|
73
|
+
};
|
|
74
|
+
wipCount: number;
|
|
75
|
+
wipCap: number;
|
|
76
|
+
overCap: boolean;
|
|
77
|
+
}
|
|
78
|
+
export declare function scoreAssignment(agent: AgentRole, task: {
|
|
79
|
+
title: string;
|
|
80
|
+
tags?: string[];
|
|
81
|
+
done_criteria?: string[];
|
|
82
|
+
metadata?: Record<string, unknown>;
|
|
83
|
+
}, currentWip: number, recentCompletions?: number): AssignmentScore;
|
|
84
|
+
export declare function suggestAssignee(task: {
|
|
85
|
+
title: string;
|
|
86
|
+
tags?: string[];
|
|
87
|
+
done_criteria?: string[];
|
|
88
|
+
metadata?: Record<string, unknown>;
|
|
89
|
+
}, allTasks: TaskForScoring[], recentCompletionsPerAgent?: Map<string, number>): {
|
|
90
|
+
suggested: string | null;
|
|
91
|
+
scores: AssignmentScore[];
|
|
92
|
+
protectedMatch?: string;
|
|
93
|
+
};
|
|
94
|
+
export declare function suggestReviewer(task: {
|
|
95
|
+
title: string;
|
|
96
|
+
assignee?: string;
|
|
97
|
+
tags?: string[];
|
|
98
|
+
done_criteria?: string[];
|
|
99
|
+
metadata?: Record<string, unknown>;
|
|
100
|
+
}, allTasks: TaskForScoring[]): {
|
|
101
|
+
suggested: string | null;
|
|
102
|
+
scores: Array<{
|
|
103
|
+
agent: string;
|
|
104
|
+
score: number;
|
|
105
|
+
validatingLoad: number;
|
|
106
|
+
role: string;
|
|
107
|
+
}>;
|
|
108
|
+
};
|
|
109
|
+
export declare function checkWipCap(agentName: string, allTasks: TaskForScoring[], override?: string): {
|
|
110
|
+
allowed: boolean;
|
|
111
|
+
wipCount: number;
|
|
112
|
+
wipCap: number;
|
|
113
|
+
message?: string;
|
|
114
|
+
};
|
|
115
|
+
export { parseRolesYaml as _parseRolesYaml, CONFIG_PATHS as _CONFIG_PATHS };
|
|
116
|
+
//# sourceMappingURL=assignment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assignment.d.ts","sourceRoot":"","sources":["../src/assignment.ts"],"names":[],"mappings":"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"}
|