@almadar/std 16.252.0 → 16.253.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/behaviors/lolo/agent/atoms/std-agent-suggestions.lolo +16 -2
- package/behaviors/lolo/ui/learning/atoms/std-learn-generate.lolo +6 -4
- package/behaviors/registry/agent/atoms/std-agent-context.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-memory.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-planner.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-proposal.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-session.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-suggestions.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-tool-call.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-trace.orb +1 -1
- package/behaviors/registry/agent/organisms/std-agent-assistant.orb +1 -1
- package/behaviors/registry/infra/atoms/std-analytics.orb +1 -1
- package/behaviors/registry/infra/atoms/std-approval-gate.orb +1 -1
- package/behaviors/registry/infra/atoms/std-audit-capture.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cache-aside.orb +1 -1
- package/behaviors/registry/infra/atoms/std-calendar-sync.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cascade-on-delete.orb +1 -1
- package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cross-reference.orb +1 -1
- package/behaviors/registry/infra/atoms/std-data-erasure.orb +1 -1
- package/behaviors/registry/infra/atoms/std-data-import.orb +1 -1
- package/behaviors/registry/infra/atoms/std-global-search.orb +1 -1
- package/behaviors/registry/infra/atoms/std-knowledge-loop.orb +1 -1
- package/behaviors/registry/infra/atoms/std-lifecycle.orb +1 -1
- package/behaviors/registry/infra/atoms/std-migration-job.orb +1 -1
- package/behaviors/registry/infra/atoms/std-mod-queue.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notification-center.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notification-preferences.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notify-on-event.orb +1 -1
- package/behaviors/registry/infra/atoms/std-page-search.orb +1 -1
- package/behaviors/registry/infra/atoms/std-page-watch.orb +1 -1
- package/behaviors/registry/infra/atoms/std-permission-matrix.orb +1 -1
- package/behaviors/registry/infra/atoms/std-rate-limiter.orb +1 -1
- package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +1 -1
- package/behaviors/registry/infra/atoms/std-review-cycle.orb +1 -1
- package/behaviors/registry/infra/atoms/std-row-access-control.orb +1 -1
- package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +1 -1
- package/behaviors/registry/infra/organisms/std-status-lifecycle-control.orb +1 -1
- package/behaviors/registry/ml/atoms/std-data-collector.orb +1 -1
- package/behaviors/registry/ml/atoms/std-graph-builder.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-classify.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-infer.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-label-capture.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-posterior.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-similarity.orb +1 -1
- package/behaviors/registry/ml/atoms/std-tokenizer.orb +1 -1
- package/behaviors/registry/ml/atoms/std-weight-validator.orb +1 -1
- package/behaviors/registry/ml/organisms/std-escalating-decision.orb +1 -1
- package/behaviors/registry/ml/organisms/std-knowledge-tracing.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/std-avl-cosmic-zoom.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-glyph.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-transition-detail.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-transition-explainer.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-behavior-view.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-flow-canvas.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-layers-panel.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-orb-inspector.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-app-search.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-behavior-catalog.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-behavior-tour.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-board.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-book-reader.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-browse.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-calendar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-card-grid.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-confirmation.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-detail-layout.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-doc-page.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-esign-request.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-event-log.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-export.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-file-store.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-filter.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-gallery.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-gantt-schedule.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-geosearch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-graphs.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-hero.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-home.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-import.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-language-picker.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-media-section.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-modal-editor.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-modal.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-notification-panel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-panel-launcher.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-pricing.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-proof.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-prose.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-rating-review.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-record-detail.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-recurrence.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-related.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-saved-search.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-scatter.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-scoped-list.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-selection.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-site-footer.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-site-header.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-slide-deck.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-stat-band.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-stats.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-step-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-steps.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tabs.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-thread.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tree.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-wizard.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-workspace-layout.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-animated-graphic.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-animated-reveal.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-aside.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-avatar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-box.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-button.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-card.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-center.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-conditional-wrapper.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-confetti-effect.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-day-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-dialog.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-divider.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-filter-pill.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-flip-container.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-hstack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-icon.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-image.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-infinite-scroll-sentinel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-input.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-label.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-law-reference-tooltip.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-overlay.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-pattern-tile.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-presence.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-progress-bar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-radio.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-range-slider.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-section-header.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-select.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-spacer.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-sparkline.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-spinner.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-stack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-status-dot.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-branch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-connection.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-grid.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-lobe.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-mesh.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-morph.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-node.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-pulse.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-ring.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-shield.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-stack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-switch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-text-highlight.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-textarea.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-theme-toggle.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-trend-indicator.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-typewriter-text.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-typography.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-video-embed.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-vstack.orb +1 -1
- package/behaviors/registry/ui/core/molecules/std-stat-rows.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-accordion.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-activation-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-activity-rail.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-activity-feed.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-activity-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-chat-feed.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-alert.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-animated-counter.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-bloom-quiz-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-carousel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-change-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-chart-legend.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-chart.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-code-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-commit-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-connection-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-container.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-breadcrumb.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-pagination.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-search.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-sidebar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-toc.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-details.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-drawer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-edge-decoration.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-empty-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-error-boundary.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-error-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-feature-card.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-feature-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-flex.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-flip-card.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-field.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-section-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-fx-overlay.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-gantt.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-geometric-pattern.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-gradient-divider.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-icon-button.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-input-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-jazari-state-machine.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-line-chart.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-loading-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-map-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-markdown-content.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-menu.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-meter.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-modal.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-navigation.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-notification.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-number-stepper.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-page-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-page-transition.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-pagination.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-popover.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-positioned-canvas.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-progress-dots.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-pull-to-refresh.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-qr-scanner.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-quiz-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-reflection-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-rich-text-editor.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-scaled-diagram.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-search-input.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-section.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-side-panel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-simple-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-skeleton.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-social-proof.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-sortable-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-split.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-star-rating.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-stat-display.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tabs.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tag-input.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tooltip.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-top-nav-item.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-vote-stack.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-navigation.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-code-runner-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-dock-layout.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-drawer-slot.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-form-section.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-form.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-master-detail-layout.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-modal-slot.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-runtime-debugger.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-split-pane.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-timeline.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-toast-slot.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-auth-layout.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-counter-template.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-generic-app-template.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-arcade-play.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-area-fill.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-audio-cue.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-camera-rig.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-chase-ai.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-choice-gate.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-coef-pad.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-curve-fog.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-narrative.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-trail.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gate-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gather.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gold.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-grid-tactics.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-hero-nav.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-lives.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-loop-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-market-flow.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-motion-body.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-objective-reach.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-pad-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-patience.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-patrol-hazard.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-pickup.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-production.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-score.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-tutorial-autodemo.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-velocity-gate.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-xp.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-zone-card.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-control-button.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-mesh.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-cue.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-score-display.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-state-json-view.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-timer-display.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-platformer-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/templates/ui-game-shell.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-arrangement.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-compare.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-diagram.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-fx-cues.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-generate.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-live-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-measure.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-param-explorer.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-perturb.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sample-accumulator.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sandbox.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sim-3d.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-slope-probe.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-trace-player.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1 -1
- package/dist/behaviors-embeddings.hash.json +1 -1
- package/dist/behaviors-embeddings.json +1 -1
- package/dist/knob-embeddings.hash.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"std-agent-assistant","version":"2.0.0","description":"std-agent-assistant — an in-app assistant that operates the running app for the signed-in user. Each section's floating button opens it in a side panel docked beside the page (std-panel-launcher; a side sheet on small screens), where the conversation shows every step the assistant takes live as it works; /assistant is the same conversation as a full page, in the app's own shell (pass `appName` and `navItems`); past conversations and what the assistant remembers open in place from its toolbar (Back returns to the chat), on either surface. One request flows down a chain of std agent atoms on the bus: the conversation (std-agent-session) SENDs → CONVERSE → std-agent-context bounds it → std-agent-memory adds what it recalls → std-agent-tool-loop answers it through `call-service llm call-tools`, firing only the inputs and reading only the entities its `tools` allow, as the signed-in user → ASSISTANT_REPLIED goes back to the conversation, to memory (remembered) and to std-agent-trace (the run record). By default the tools are the program's own declarations: every `-> external` input (its @description is the tool text) and a read over every persisted entity, so composing building blocks composes the assistant's abilities. Any section's page gets the assistant with two traits, `XAssistant = AgentSession.traits.AgentConversation` and a std-panel-launcher dock: the conversation speaks the ASSISTANT_* contract from any orbital, so the assistant needs no per-section wiring. Import the orbital once per app: `orbital Assistant = Agent.orbitals.AgentAssistantOrbital { config { instructions: \"…\" } }`. The conversation, memory and run records live in AgentRecordsOrbital; retarget them onto your own owner-scoped entities (`ownerId` a relation to your [identity] roster, with @read/@create) with `entities { AgentMessage: …, AgentMemory: …, AgentRun: …, AgentChat: … }`. The conversation is kept across pages and reloads (each person's most recently used conversation is the current one);","orbitals":[{"name":"AgentAssistantOrbital","id":"orb_NM15HVQ38SHMCKTFNVGWCK343F","uses":[{"from":"std/behaviors/std-agent-session","as":"Session"},{"from":"std/behaviors/std-agent-context","as":"Context"},{"from":"std/behaviors/std-agent-memory","as":"Memory"},{"from":"std/behaviors/std-agent-tool-loop","as":"Loop"},{"from":"std/behaviors/std-agent-trace","as":"Trace"},{"from":"std/behaviors/std-app-layout","as":"Shell"}],"entity":{"name":"AgentAssistant","id":"ent_W0DCAJM26Z13FYF0AX98X1DZJW","persistence":"runtime","fields":[{"name":"id","type":"string","required":true}]},"traits":[{"ref":"Session.traits.AgentThread","id":"trt_PKMCT9CA1750KP1KRS5KN3WQCA","name":"AssistantThread","linkedEntity":"AgentMessage","events":{"CONVERSE":"REQUEST_CONTEXT"},"listens":[{"event":"ASSISTANT_CHAT_OPENED","triggers":"OPEN_CHAT","source":{"kind":"trait","trait":"AssistantChatKeeper"}},{"event":"ASSISTANT_SEND_IN_CHAT","triggers":"SEND_IN_CHAT","source":{"kind":"trait","trait":"AssistantChatKeeper"}},{"event":"ASSISTANT_REPLY_IN_CHAT","triggers":"REPLY_IN_CHAT","source":{"kind":"trait","trait":"AssistantChatKeeper"}}]},{"ref":"Session.traits.AgentChatKeeper","id":"trt_XXHER3E4A3251NAJDYXPHQF3JS","name":"AssistantChatKeeper","linkedEntity":"AgentChat","listens":[{"event":"ASSISTANT_SEND","triggers":"SEND","source":{"kind":"any"}},{"event":"ASSISTANT_HISTORY_REQUESTED","triggers":"LOAD_HISTORY","source":{"kind":"any"}},{"event":"ASSISTANT_NEW_CHAT","triggers":"NEW_CHAT","source":{"kind":"any"}},{"event":"ASSISTANT_CHAT_SELECTED","triggers":"SELECT_CHAT","source":{"kind":"any"}},{"event":"ASSISTANT_CHATS_REQUESTED","triggers":"LIST_CHATS","source":{"kind":"any"}},{"event":"ASSISTANT_REPLIED","triggers":"REPLIED","source":{"kind":"trait","trait":"AssistantLoop"}}]},{"ref":"Session.traits.AgentConversation","id":"trt_AEFXDE16MQKABHTMWG2CP8FCDG","name":"AssistantConversation","config":{"links":{"type":"unknown","default":"@config.links"}}},{"ref":"Shell.traits.AppLayout","id":"trt_3SR4F2YV0FDG7W0SH382JEP86M","name":"AssistantLayout","config":{"contentTrait":{"type":"unknown","default":"@trait.AssistantConversation"},"viewerEmail":{"type":"unknown","default":"@user.email"},"appName":{"type":"unknown","default":"@config.appName"},"navItems":{"type":"unknown","default":"@config.navItems"},"contentClassName":{"type":"unknown","default":"mx-auto flex w-full max-w-3xl flex-col h-[calc(100vh-9rem)] min-h-0"},"viewerRole":{"type":"unknown","default":"@config.viewerRole"},"viewerName":{"type":"unknown","default":"@user.name"}}},{"ref":"Context.traits.AgentContextCompactor","id":"trt_PQ9KRJT7353HJS7AD2DEVM4GGF","name":"AssistantContext","config":{"keepMessages":{"type":"unknown","default":"@config.keepMessages"}},"listens":[{"event":"REQUEST_CONTEXT","triggers":"COMPACT","source":{"kind":"trait","trait":"AssistantThread"}},{"event":"ASSISTANT_EPHEMERAL_SEND","triggers":"COMPACT","source":{"kind":"any"}}]},{"ref":"Memory.traits.AgentMemoryRecall","id":"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF","name":"AssistantMemory","linkedEntity":"AgentMemory","config":{"recallLimit":{"type":"unknown","default":"@config.recallLimit"}},"listens":[{"event":"COMPACTED","triggers":"RECALL","source":{"kind":"trait","trait":"AssistantContext"}},{"event":"ASSISTANT_REPLIED","triggers":"REMEMBER","source":{"kind":"trait","trait":"AssistantLoop"}},{"event":"ASSISTANT_MEMORIES_REQUESTED","triggers":"LIST","source":{"kind":"any"}}]},{"ref":"Loop.traits.AgentToolLoop","id":"trt_GESEH6VNG8TR40GAXX05FHSJP9","name":"AssistantLoop","config":{"instructions":{"type":"unknown","default":"@config.instructions"},"tools":{"type":"unknown","default":"@config.tools"},"maxSteps":{"type":"unknown","default":"@config.maxSteps"}},"listens":[{"event":"RECALLED","triggers":"CONVERSE","source":{"kind":"trait","trait":"AssistantMemory"}}]},{"ref":"Trace.traits.AgentTraceRecorder","id":"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ","name":"AssistantTrace","linkedEntity":"AgentRun","listens":[{"event":"ASSISTANT_REPLIED","triggers":"REPLIED","source":{"kind":"trait","trait":"AssistantLoop"}},{"event":"ASSISTANT_REPLY_FAILED","triggers":"REPLY_FAILED","source":{"kind":"trait","trait":"AssistantLoop"}}]}],"pages":[{"name":"AssistantPage","id":"pag_WGF1SH7M2RT1CCKW5T4SVGTWHG","path":"/assistant","traits":[{"ref":"AssistantLayout","refId":"trt_3SR4F2YV0FDG7W0SH382JEP86M"},{"ref":"AssistantThread","refId":"trt_PKMCT9CA1750KP1KRS5KN3WQCA"},{"ref":"AssistantChatKeeper","refId":"trt_XXHER3E4A3251NAJDYXPHQF3JS"},{"ref":"AssistantContext","refId":"trt_PQ9KRJT7353HJS7AD2DEVM4GGF"},{"ref":"AssistantMemory","refId":"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF"},{"ref":"AssistantLoop","refId":"trt_GESEH6VNG8TR40GAXX05FHSJP9"},{"ref":"AssistantTrace","refId":"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ"}]}],"config":{"instructions":{"type":"string","default":"You operate this app for the signed-in user. Use the tools to act and to look things up; when a tool reports that something was refused or denied, say so plainly.","label":"How should the assistant behave?","description":"Standing instructions sent with every request.","synonyms":"system prompt, persona, guidance","tier":"domain"},"recallLimit":{"type":"number","default":3,"label":"Memories recalled per request","tier":"policy"},"tools":{"type":"[AgentTool]","default":[{"scope":"declared"}],"label":"What may the assistant do?","description":"As the signed-in user: `{ scope: declared }` (the default) gives it every external input the program declares and a read over every persisted entity, so each building block's declared inputs become its abilities; or list them — `{ event: Orbital.Trait.EVENT }` for one input, `{ read: Entity }` for one entity.","synonyms":"allowlist, abilities, actions, permissions","tier":"domain","items":{"type":"union","values":["AgentToolScope","AgentToolInput","AgentToolRead"],"properties":{"AgentToolInput":{"name":"AgentToolInput","type":"object","properties":{"event":{"name":"event","type":"EventAddress","required":true}}},"AgentToolScope":{"name":"AgentToolScope","type":"object","properties":{"scope":{"name":"scope","type":"string","required":true,"values":["declared"]}}},"AgentToolRead":{"name":"AgentToolRead","type":"object","properties":{"read":{"name":"read","type":"string","required":true}}}}}},"navItems":{"type":"[NavItem]","default":[],"label":"Sidebar navigation on the assistant page","description":"Pass the app's own navItems so the assistant page keeps the app's sidebar.","tier":"presentation","items":{"type":"object","properties":{"href":{"name":"href","type":"string","required":true},"label":{"name":"label","type":"string","required":true},"icon":{"name":"icon","type":"string","required":false},"children":{"name":"children","type":"array","required":false,"items":{"type":"union","values":["NavItem"]}},"roles":{"name":"roles","type":"array","required":false,"items":{"type":"string"}},"badge":{"name":"badge","type":"string","required":false}}}},"maxSteps":{"type":"number","default":8,"label":"Model round-trips per request","tier":"policy"},"appName":{"type":"string","default":"Assistant","label":"App name in the assistant page's header","description":"Pass the app's own name so the assistant page matches the rest of the app.","tier":"presentation"},"keepMessages":{"type":"number","default":12,"label":"Turns kept verbatim","tier":"policy"},"links":{"type":"[AgentLink]","default":[{"label":"Run history","href":"/assistant/runs"}],"label":"Links above the conversation","description":"Related pages, e.g. the assistant's run history.","tier":"presentation","items":{"type":"object","properties":{"href":{"name":"href","type":"string","required":true},"label":{"name":"label","type":"string","required":true}}}},"viewerRole":{"type":"string","default":"","label":"Viewer role on the assistant page","description":"The role the assistant page's sidebar items and their `roles` are checked against. Bind `@user.role` in an app whose identity carries a role; left empty, only items with no `roles` show.","tier":"policy"}},"types":{"AgentLink":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true}],"AgentTool":[{"name":"","type":"union","properties":[{"name":"AgentToolScope","type":"object","properties":[{"name":"scope","type":"string","values":["declared"],"required":true}]},{"name":"AgentToolInput","type":"object","properties":[{"name":"event","type":"EventAddress","required":true}]},{"name":"AgentToolRead","type":"object","properties":[{"name":"read","type":"string","required":true}]}]}],"AgentToolInput":[{"name":"event","type":"EventAddress","required":true}],"AgentToolRead":[{"name":"read","type":"string","required":true}],"AgentToolScope":[{"name":"scope","type":"string","values":["declared"],"required":true}],"NavItem":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[object]","properties":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[NavItem]","properties":[]},{"name":"roles","type":"[string]"}]},{"name":"roles","type":"[string]"}]}},{"name":"AgentRecordsOrbital","id":"orb_DBA5TVNH8BRM5WMVDX592Q0T2S","uses":[{"from":"std/behaviors/std-agent-trace","as":"Trace"}],"entity":{"name":"AgentRun","id":"ent_8MQZK6X2YPHFBB69E8C5H8GXTH","collection":"agentRuns","persistence":"persistent","fields":[{"name":"id","type":"string","required":true}]},"auxiliaryEntities":[{"name":"AgentMessage","id":"ent_MRD3KCSV6BXK5VDJ9RG55TG7EB","collection":"agentMessages","persistence":"persistent","fields":[{"name":"id","type":"string","required":true}]},{"name":"AgentMemory","id":"ent_WDTVVEHKR5SW2YBCNSZAH9PVF2","collection":"agentMemories","persistence":"persistent","fields":[{"name":"id","type":"string","required":true}]},{"name":"AgentChat","id":"ent_BGASWWVQ4MVJA6NNKS6JV5W7TC","collection":"agentChats","persistence":"persistent","fields":[{"name":"id","type":"string","required":true},{"name":"ownerId","type":"string","required":true},{"name":"title","type":"string","default":""},{"name":"startedAt","type":"number","default":0},{"name":"lastActiveAt","type":"number","default":0},{"name":"pendingMessage","type":"string","default":"","intrinsic":true},{"name":"pendingReply","type":"string","default":"","intrinsic":true}]}],"traits":[{"ref":"Trace.traits.AgentRunBrowse","id":"trt_2YGC1BC6DH36RYBN7H76H48GNG","name":"AgentRunHistory","linkedEntity":"AgentRun","linkedEntityId":"ent_8MQZK6X2YPHFBB69E8C5H8GXTH","listens":[{"event":"RUN_RECORDED","triggers":"RUN_RECORDED","source":{"kind":"orbital","orbital":"AgentAssistantOrbital","trait":"AssistantTrace"}}]}],"pages":[{"name":"AssistantRunsPage","id":"pag_JPVXZ5NFZRQZW3W2EJMKBSCNAD","path":"/assistant/runs","traits":[{"ref":"AgentRunHistory","refId":"trt_2YGC1BC6DH36RYBN7H76H48GNG"}]}],"types":{"AgentLink":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true}],"AgentTool":[{"name":"","type":"union","properties":[{"name":"AgentToolScope","type":"object","properties":[{"name":"scope","type":"string","values":["declared"],"required":true}]},{"name":"AgentToolInput","type":"object","properties":[{"name":"event","type":"EventAddress","required":true}]},{"name":"AgentToolRead","type":"object","properties":[{"name":"read","type":"string","required":true}]}]}],"AgentToolInput":[{"name":"event","type":"EventAddress","required":true}],"AgentToolRead":[{"name":"read","type":"string","required":true}],"AgentToolScope":[{"name":"scope","type":"string","values":["declared"],"required":true}],"NavItem":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[object]","properties":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[NavItem]","properties":[]},{"name":"roles","type":"[string]"}]},{"name":"roles","type":"[string]"}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_8MQZK6X2YPHFBB69E8C5H8GXTH":{"id":"ent_8MQZK6X2YPHFBB69E8C5H8GXTH","kind":"entity","bakedName":"AgentRun","curName":"AgentRun","renames":[],"owner":"workspace"},"ent_BGASWWVQ4MVJA6NNKS6JV5W7TC":{"id":"ent_BGASWWVQ4MVJA6NNKS6JV5W7TC","kind":"entity","bakedName":"AgentChat","curName":"AgentChat","renames":[],"owner":"workspace"},"ent_MRD3KCSV6BXK5VDJ9RG55TG7EB":{"id":"ent_MRD3KCSV6BXK5VDJ9RG55TG7EB","kind":"entity","bakedName":"AgentMessage","curName":"AgentMessage","renames":[],"owner":"workspace"},"ent_W0DCAJM26Z13FYF0AX98X1DZJW":{"id":"ent_W0DCAJM26Z13FYF0AX98X1DZJW","kind":"entity","bakedName":"AgentAssistant","curName":"AgentAssistant","renames":[],"owner":"workspace"},"ent_WDTVVEHKR5SW2YBCNSZAH9PVF2":{"id":"ent_WDTVVEHKR5SW2YBCNSZAH9PVF2","kind":"entity","bakedName":"AgentMemory","curName":"AgentMemory","renames":[],"owner":"workspace"},"orb_DBA5TVNH8BRM5WMVDX592Q0T2S":{"id":"orb_DBA5TVNH8BRM5WMVDX592Q0T2S","kind":"orbital","bakedName":"AgentRecordsOrbital","curName":"AgentRecordsOrbital","renames":[],"owner":"workspace"},"orb_NM15HVQ38SHMCKTFNVGWCK343F":{"id":"orb_NM15HVQ38SHMCKTFNVGWCK343F","kind":"orbital","bakedName":"AgentAssistantOrbital","curName":"AgentAssistantOrbital","renames":[],"owner":"workspace"},"pag_JPVXZ5NFZRQZW3W2EJMKBSCNAD":{"id":"pag_JPVXZ5NFZRQZW3W2EJMKBSCNAD","kind":"page","bakedName":"AssistantRunsPage","curName":"AssistantRunsPage","renames":[],"owner":"workspace"},"pag_WGF1SH7M2RT1CCKW5T4SVGTWHG":{"id":"pag_WGF1SH7M2RT1CCKW5T4SVGTWHG","kind":"page","bakedName":"AssistantPage","curName":"AssistantPage","renames":[],"owner":"workspace"},"trt_2YGC1BC6DH36RYBN7H76H48GNG":{"id":"trt_2YGC1BC6DH36RYBN7H76H48GNG","kind":"trait","bakedName":"AgentRunHistory","curName":"AgentRunHistory","renames":[],"owner":"workspace"},"trt_3SR4F2YV0FDG7W0SH382JEP86M":{"id":"trt_3SR4F2YV0FDG7W0SH382JEP86M","kind":"trait","bakedName":"AssistantLayout","curName":"AssistantLayout","renames":[],"owner":"workspace"},"trt_AEFXDE16MQKABHTMWG2CP8FCDG":{"id":"trt_AEFXDE16MQKABHTMWG2CP8FCDG","kind":"trait","bakedName":"AssistantConversation","curName":"AssistantConversation","renames":[],"owner":"workspace"},"trt_GESEH6VNG8TR40GAXX05FHSJP9":{"id":"trt_GESEH6VNG8TR40GAXX05FHSJP9","kind":"trait","bakedName":"AssistantLoop","curName":"AssistantLoop","renames":[],"owner":"workspace"},"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF":{"id":"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF","kind":"trait","bakedName":"AssistantMemory","curName":"AssistantMemory","renames":[],"owner":"workspace"},"trt_PKMCT9CA1750KP1KRS5KN3WQCA":{"id":"trt_PKMCT9CA1750KP1KRS5KN3WQCA","kind":"trait","bakedName":"AssistantThread","curName":"AssistantThread","renames":[],"owner":"workspace"},"trt_PQ9KRJT7353HJS7AD2DEVM4GGF":{"id":"trt_PQ9KRJT7353HJS7AD2DEVM4GGF","kind":"trait","bakedName":"AssistantContext","curName":"AssistantContext","renames":[],"owner":"workspace"},"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ":{"id":"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ","kind":"trait","bakedName":"AssistantTrace","curName":"AssistantTrace","renames":[],"owner":"workspace"},"trt_XXHER3E4A3251NAJDYXPHQF3JS":{"id":"trt_XXHER3E4A3251NAJDYXPHQF3JS","kind":"trait","bakedName":"AssistantChatKeeper","curName":"AssistantChatKeeper","renames":[],"owner":"workspace"}}}}
|
|
1
|
+
{"name":"std-agent-assistant","version":"2.0.0","description":"std-agent-assistant — an in-app assistant that operates the running app for the signed-in user. Each section's floating button opens it in a side panel docked beside the page (std-panel-launcher; a side sheet on small screens), where the conversation shows every step the assistant takes live as it works; /assistant is the same conversation as a full page, in the app's own shell (pass `appName` and `navItems`); past conversations and what the assistant remembers open in place from its toolbar (Back returns to the chat), on either surface. One request flows down a chain of std agent atoms on the bus: the conversation (std-agent-session) SENDs → CONVERSE → std-agent-context bounds it → std-agent-memory adds what it recalls → std-agent-tool-loop answers it through `call-service llm call-tools`, firing only the inputs and reading only the entities its `tools` allow, as the signed-in user → ASSISTANT_REPLIED goes back to the conversation, to memory (remembered) and to std-agent-trace (the run record). By default the tools are the program's own declarations: every `-> external` input (its @description is the tool text) and a read over every persisted entity, so composing building blocks composes the assistant's abilities. Any section's page gets the assistant with two traits, `XAssistant = AgentSession.traits.AgentConversation` and a std-panel-launcher dock: the conversation speaks the ASSISTANT_* contract from any orbital, so the assistant needs no per-section wiring. Import the orbital once per app: `orbital Assistant = Agent.orbitals.AgentAssistantOrbital { config { instructions: \"…\" } }`. The conversation, memory and run records live in AgentRecordsOrbital; retarget them onto your own owner-scoped entities (`ownerId` a relation to your [identity] roster, with @read/@create) with `entities { AgentMessage: …, AgentMemory: …, AgentRun: …, AgentChat: … }`. The conversation is kept across pages and reloads (each person's most recently used conversation is the current one);","orbitals":[{"name":"AgentAssistantOrbital","id":"orb_NM15HVQ38SHMCKTFNVGWCK343F","uses":[{"from":"std/behaviors/std-agent-session","as":"Session"},{"from":"std/behaviors/std-agent-context","as":"Context"},{"from":"std/behaviors/std-agent-memory","as":"Memory"},{"from":"std/behaviors/std-agent-tool-loop","as":"Loop"},{"from":"std/behaviors/std-agent-trace","as":"Trace"},{"from":"std/behaviors/std-app-layout","as":"Shell"}],"entity":{"name":"AgentAssistant","id":"ent_W0DCAJM26Z13FYF0AX98X1DZJW","persistence":"runtime","fields":[{"name":"id","type":"string","required":true}]},"traits":[{"ref":"Session.traits.AgentThread","id":"trt_PKMCT9CA1750KP1KRS5KN3WQCA","name":"AssistantThread","linkedEntity":"AgentMessage","events":{"CONVERSE":"REQUEST_CONTEXT"},"listens":[{"event":"ASSISTANT_CHAT_OPENED","triggers":"OPEN_CHAT","source":{"kind":"trait","trait":"AssistantChatKeeper"}},{"event":"ASSISTANT_SEND_IN_CHAT","triggers":"SEND_IN_CHAT","source":{"kind":"trait","trait":"AssistantChatKeeper"}},{"event":"ASSISTANT_REPLY_IN_CHAT","triggers":"REPLY_IN_CHAT","source":{"kind":"trait","trait":"AssistantChatKeeper"}}]},{"ref":"Session.traits.AgentChatKeeper","id":"trt_XXHER3E4A3251NAJDYXPHQF3JS","name":"AssistantChatKeeper","linkedEntity":"AgentChat","listens":[{"event":"ASSISTANT_SEND","triggers":"SEND","source":{"kind":"any"}},{"event":"ASSISTANT_HISTORY_REQUESTED","triggers":"LOAD_HISTORY","source":{"kind":"any"}},{"event":"ASSISTANT_NEW_CHAT","triggers":"NEW_CHAT","source":{"kind":"any"}},{"event":"ASSISTANT_CHAT_SELECTED","triggers":"SELECT_CHAT","source":{"kind":"any"}},{"event":"ASSISTANT_CHATS_REQUESTED","triggers":"LIST_CHATS","source":{"kind":"any"}},{"event":"ASSISTANT_REPLIED","triggers":"REPLIED","source":{"kind":"trait","trait":"AssistantLoop"}}]},{"ref":"Session.traits.AgentConversation","id":"trt_AEFXDE16MQKABHTMWG2CP8FCDG","name":"AssistantConversation","config":{"links":{"type":"unknown","default":"@config.links"}}},{"ref":"Shell.traits.AppLayout","id":"trt_3SR4F2YV0FDG7W0SH382JEP86M","name":"AssistantLayout","config":{"viewerEmail":{"type":"unknown","default":"@user.email"},"navItems":{"type":"unknown","default":"@config.navItems"},"viewerRole":{"type":"unknown","default":"@config.viewerRole"},"viewerName":{"type":"unknown","default":"@user.name"},"contentTrait":{"type":"unknown","default":"@trait.AssistantConversation"},"contentClassName":{"type":"unknown","default":"mx-auto flex w-full max-w-3xl flex-col h-[calc(100vh-9rem)] min-h-0"},"appName":{"type":"unknown","default":"@config.appName"}}},{"ref":"Context.traits.AgentContextCompactor","id":"trt_PQ9KRJT7353HJS7AD2DEVM4GGF","name":"AssistantContext","config":{"keepMessages":{"type":"unknown","default":"@config.keepMessages"}},"listens":[{"event":"REQUEST_CONTEXT","triggers":"COMPACT","source":{"kind":"trait","trait":"AssistantThread"}},{"event":"ASSISTANT_EPHEMERAL_SEND","triggers":"COMPACT","source":{"kind":"any"}}]},{"ref":"Memory.traits.AgentMemoryRecall","id":"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF","name":"AssistantMemory","linkedEntity":"AgentMemory","config":{"recallLimit":{"type":"unknown","default":"@config.recallLimit"}},"listens":[{"event":"COMPACTED","triggers":"RECALL","source":{"kind":"trait","trait":"AssistantContext"}},{"event":"ASSISTANT_REPLIED","triggers":"REMEMBER","source":{"kind":"trait","trait":"AssistantLoop"}},{"event":"ASSISTANT_MEMORIES_REQUESTED","triggers":"LIST","source":{"kind":"any"}}]},{"ref":"Loop.traits.AgentToolLoop","id":"trt_GESEH6VNG8TR40GAXX05FHSJP9","name":"AssistantLoop","config":{"instructions":{"type":"unknown","default":"@config.instructions"},"maxSteps":{"type":"unknown","default":"@config.maxSteps"},"tools":{"type":"unknown","default":"@config.tools"}},"listens":[{"event":"RECALLED","triggers":"CONVERSE","source":{"kind":"trait","trait":"AssistantMemory"}}]},{"ref":"Trace.traits.AgentTraceRecorder","id":"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ","name":"AssistantTrace","linkedEntity":"AgentRun","listens":[{"event":"ASSISTANT_REPLIED","triggers":"REPLIED","source":{"kind":"trait","trait":"AssistantLoop"}},{"event":"ASSISTANT_REPLY_FAILED","triggers":"REPLY_FAILED","source":{"kind":"trait","trait":"AssistantLoop"}}]}],"pages":[{"name":"AssistantPage","id":"pag_WGF1SH7M2RT1CCKW5T4SVGTWHG","path":"/assistant","traits":[{"ref":"AssistantLayout","refId":"trt_3SR4F2YV0FDG7W0SH382JEP86M"},{"ref":"AssistantThread","refId":"trt_PKMCT9CA1750KP1KRS5KN3WQCA"},{"ref":"AssistantChatKeeper","refId":"trt_XXHER3E4A3251NAJDYXPHQF3JS"},{"ref":"AssistantContext","refId":"trt_PQ9KRJT7353HJS7AD2DEVM4GGF"},{"ref":"AssistantMemory","refId":"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF"},{"ref":"AssistantLoop","refId":"trt_GESEH6VNG8TR40GAXX05FHSJP9"},{"ref":"AssistantTrace","refId":"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ"}]}],"config":{"recallLimit":{"type":"number","default":3,"label":"Memories recalled per request","tier":"policy"},"viewerRole":{"type":"string","default":"","label":"Viewer role on the assistant page","description":"The role the assistant page's sidebar items and their `roles` are checked against. Bind `@user.role` in an app whose identity carries a role; left empty, only items with no `roles` show.","tier":"policy"},"appName":{"type":"string","default":"Assistant","label":"App name in the assistant page's header","description":"Pass the app's own name so the assistant page matches the rest of the app.","tier":"presentation"},"maxSteps":{"type":"number","default":8,"label":"Model round-trips per request","tier":"policy"},"navItems":{"type":"[NavItem]","default":[],"label":"Sidebar navigation on the assistant page","description":"Pass the app's own navItems so the assistant page keeps the app's sidebar.","tier":"presentation","items":{"type":"object","properties":{"children":{"name":"children","type":"array","required":false,"items":{"type":"union","values":["NavItem"]}},"label":{"name":"label","type":"string","required":true},"icon":{"name":"icon","type":"string","required":false},"badge":{"name":"badge","type":"string","required":false},"roles":{"name":"roles","type":"array","required":false,"items":{"type":"string"}},"href":{"name":"href","type":"string","required":true}}}},"instructions":{"type":"string","default":"You operate this app for the signed-in user. Use the tools to act and to look things up; when a tool reports that something was refused or denied, say so plainly.","label":"How should the assistant behave?","description":"Standing instructions sent with every request.","synonyms":"system prompt, persona, guidance","tier":"domain"},"links":{"type":"[AgentLink]","default":[{"label":"Run history","href":"/assistant/runs"}],"label":"Links above the conversation","description":"Related pages, e.g. the assistant's run history.","tier":"presentation","items":{"type":"object","properties":{"label":{"name":"label","type":"string","required":true},"href":{"name":"href","type":"string","required":true}}}},"keepMessages":{"type":"number","default":12,"label":"Turns kept verbatim","tier":"policy"},"tools":{"type":"[AgentTool]","default":[{"scope":"declared"}],"label":"What may the assistant do?","description":"As the signed-in user: `{ scope: declared }` (the default) gives it every external input the program declares and a read over every persisted entity, so each building block's declared inputs become its abilities; or list them — `{ event: Orbital.Trait.EVENT }` for one input, `{ read: Entity }` for one entity.","synonyms":"allowlist, abilities, actions, permissions","tier":"domain","items":{"type":"union","values":["AgentToolScope","AgentToolInput","AgentToolRead"],"properties":{"AgentToolInput":{"name":"AgentToolInput","type":"object","properties":{"event":{"name":"event","type":"EventAddress","required":true}}},"AgentToolRead":{"name":"AgentToolRead","type":"object","properties":{"read":{"name":"read","type":"string","required":true}}},"AgentToolScope":{"name":"AgentToolScope","type":"object","properties":{"scope":{"name":"scope","type":"string","required":true,"values":["declared"]}}}}}}},"types":{"AgentLink":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true}],"AgentTool":[{"name":"","type":"union","properties":[{"name":"AgentToolScope","type":"object","properties":[{"name":"scope","type":"string","values":["declared"],"required":true}]},{"name":"AgentToolInput","type":"object","properties":[{"name":"event","type":"EventAddress","required":true}]},{"name":"AgentToolRead","type":"object","properties":[{"name":"read","type":"string","required":true}]}]}],"AgentToolInput":[{"name":"event","type":"EventAddress","required":true}],"AgentToolRead":[{"name":"read","type":"string","required":true}],"AgentToolScope":[{"name":"scope","type":"string","values":["declared"],"required":true}],"NavItem":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[object]","properties":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[NavItem]","properties":[]},{"name":"roles","type":"[string]"}]},{"name":"roles","type":"[string]"}]}},{"name":"AgentRecordsOrbital","id":"orb_DBA5TVNH8BRM5WMVDX592Q0T2S","uses":[{"from":"std/behaviors/std-agent-trace","as":"Trace"}],"entity":{"name":"AgentRun","id":"ent_8MQZK6X2YPHFBB69E8C5H8GXTH","collection":"agentRuns","persistence":"persistent","fields":[{"name":"id","type":"string","required":true}]},"auxiliaryEntities":[{"name":"AgentMessage","id":"ent_MRD3KCSV6BXK5VDJ9RG55TG7EB","collection":"agentMessages","persistence":"persistent","fields":[{"name":"id","type":"string","required":true}]},{"name":"AgentMemory","id":"ent_WDTVVEHKR5SW2YBCNSZAH9PVF2","collection":"agentMemories","persistence":"persistent","fields":[{"name":"id","type":"string","required":true}]},{"name":"AgentChat","id":"ent_BGASWWVQ4MVJA6NNKS6JV5W7TC","collection":"agentChats","persistence":"persistent","fields":[{"name":"id","type":"string","required":true},{"name":"ownerId","type":"string","required":true},{"name":"title","type":"string","default":""},{"name":"startedAt","type":"number","default":0},{"name":"lastActiveAt","type":"number","default":0},{"name":"pendingMessage","type":"string","default":"","intrinsic":true},{"name":"pendingReply","type":"string","default":"","intrinsic":true}]}],"traits":[{"ref":"Trace.traits.AgentRunBrowse","id":"trt_2YGC1BC6DH36RYBN7H76H48GNG","name":"AgentRunHistory","linkedEntity":"AgentRun","linkedEntityId":"ent_8MQZK6X2YPHFBB69E8C5H8GXTH","listens":[{"event":"RUN_RECORDED","triggers":"RUN_RECORDED","source":{"kind":"orbital","orbital":"AgentAssistantOrbital","trait":"AssistantTrace"}}]}],"pages":[{"name":"AssistantRunsPage","id":"pag_JPVXZ5NFZRQZW3W2EJMKBSCNAD","path":"/assistant/runs","traits":[{"ref":"AgentRunHistory","refId":"trt_2YGC1BC6DH36RYBN7H76H48GNG"}]}],"types":{"AgentLink":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true}],"AgentTool":[{"name":"","type":"union","properties":[{"name":"AgentToolScope","type":"object","properties":[{"name":"scope","type":"string","values":["declared"],"required":true}]},{"name":"AgentToolInput","type":"object","properties":[{"name":"event","type":"EventAddress","required":true}]},{"name":"AgentToolRead","type":"object","properties":[{"name":"read","type":"string","required":true}]}]}],"AgentToolInput":[{"name":"event","type":"EventAddress","required":true}],"AgentToolRead":[{"name":"read","type":"string","required":true}],"AgentToolScope":[{"name":"scope","type":"string","values":["declared"],"required":true}],"NavItem":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[object]","properties":[{"name":"label","type":"string","required":true},{"name":"href","type":"string","required":true},{"name":"icon","type":"string"},{"name":"badge","type":"string"},{"name":"children","type":"[NavItem]","properties":[]},{"name":"roles","type":"[string]"}]},{"name":"roles","type":"[string]"}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_8MQZK6X2YPHFBB69E8C5H8GXTH":{"id":"ent_8MQZK6X2YPHFBB69E8C5H8GXTH","kind":"entity","bakedName":"AgentRun","curName":"AgentRun","renames":[],"owner":"workspace"},"ent_BGASWWVQ4MVJA6NNKS6JV5W7TC":{"id":"ent_BGASWWVQ4MVJA6NNKS6JV5W7TC","kind":"entity","bakedName":"AgentChat","curName":"AgentChat","renames":[],"owner":"workspace"},"ent_MRD3KCSV6BXK5VDJ9RG55TG7EB":{"id":"ent_MRD3KCSV6BXK5VDJ9RG55TG7EB","kind":"entity","bakedName":"AgentMessage","curName":"AgentMessage","renames":[],"owner":"workspace"},"ent_W0DCAJM26Z13FYF0AX98X1DZJW":{"id":"ent_W0DCAJM26Z13FYF0AX98X1DZJW","kind":"entity","bakedName":"AgentAssistant","curName":"AgentAssistant","renames":[],"owner":"workspace"},"ent_WDTVVEHKR5SW2YBCNSZAH9PVF2":{"id":"ent_WDTVVEHKR5SW2YBCNSZAH9PVF2","kind":"entity","bakedName":"AgentMemory","curName":"AgentMemory","renames":[],"owner":"workspace"},"orb_DBA5TVNH8BRM5WMVDX592Q0T2S":{"id":"orb_DBA5TVNH8BRM5WMVDX592Q0T2S","kind":"orbital","bakedName":"AgentRecordsOrbital","curName":"AgentRecordsOrbital","renames":[],"owner":"workspace"},"orb_NM15HVQ38SHMCKTFNVGWCK343F":{"id":"orb_NM15HVQ38SHMCKTFNVGWCK343F","kind":"orbital","bakedName":"AgentAssistantOrbital","curName":"AgentAssistantOrbital","renames":[],"owner":"workspace"},"pag_JPVXZ5NFZRQZW3W2EJMKBSCNAD":{"id":"pag_JPVXZ5NFZRQZW3W2EJMKBSCNAD","kind":"page","bakedName":"AssistantRunsPage","curName":"AssistantRunsPage","renames":[],"owner":"workspace"},"pag_WGF1SH7M2RT1CCKW5T4SVGTWHG":{"id":"pag_WGF1SH7M2RT1CCKW5T4SVGTWHG","kind":"page","bakedName":"AssistantPage","curName":"AssistantPage","renames":[],"owner":"workspace"},"trt_2YGC1BC6DH36RYBN7H76H48GNG":{"id":"trt_2YGC1BC6DH36RYBN7H76H48GNG","kind":"trait","bakedName":"AgentRunHistory","curName":"AgentRunHistory","renames":[],"owner":"workspace"},"trt_3SR4F2YV0FDG7W0SH382JEP86M":{"id":"trt_3SR4F2YV0FDG7W0SH382JEP86M","kind":"trait","bakedName":"AssistantLayout","curName":"AssistantLayout","renames":[],"owner":"workspace"},"trt_AEFXDE16MQKABHTMWG2CP8FCDG":{"id":"trt_AEFXDE16MQKABHTMWG2CP8FCDG","kind":"trait","bakedName":"AssistantConversation","curName":"AssistantConversation","renames":[],"owner":"workspace"},"trt_GESEH6VNG8TR40GAXX05FHSJP9":{"id":"trt_GESEH6VNG8TR40GAXX05FHSJP9","kind":"trait","bakedName":"AssistantLoop","curName":"AssistantLoop","renames":[],"owner":"workspace"},"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF":{"id":"trt_J0B7QV88SG4CRDEGQ7Z3W79VZF","kind":"trait","bakedName":"AssistantMemory","curName":"AssistantMemory","renames":[],"owner":"workspace"},"trt_PKMCT9CA1750KP1KRS5KN3WQCA":{"id":"trt_PKMCT9CA1750KP1KRS5KN3WQCA","kind":"trait","bakedName":"AssistantThread","curName":"AssistantThread","renames":[],"owner":"workspace"},"trt_PQ9KRJT7353HJS7AD2DEVM4GGF":{"id":"trt_PQ9KRJT7353HJS7AD2DEVM4GGF","kind":"trait","bakedName":"AssistantContext","curName":"AssistantContext","renames":[],"owner":"workspace"},"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ":{"id":"trt_WHMRBGRD0B6G5TPE11R8SVK1TZ","kind":"trait","bakedName":"AssistantTrace","curName":"AssistantTrace","renames":[],"owner":"workspace"},"trt_XXHER3E4A3251NAJDYXPHQF3JS":{"id":"trt_XXHER3E4A3251NAJDYXPHQF3JS","kind":"trait","bakedName":"AssistantChatKeeper","curName":"AssistantChatKeeper","renames":[],"owner":"workspace"}}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"std-analytics","version":"1.0.0","description":"std-analytics — cookieless first-party analytics for one page: on entry it reports a pageview of `path` to the collector at `endpoint`, and each TRACK it hears reports a named event (a download, a sign-up) with its properties. Calls run in the browser through the `analytics` service; an empty `endpoint` or a local host sends nothing. Compose one per tracked page, listed in that page's traits.","orbitals":[{"name":"AnalyticsOrbital","id":"orb_4WAPA1VE64Q32CBBX1ECPMEQ5K","entity":{"name":"AnalyticsRecord","id":"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB","persistence":"runtime","fields":[{"name":"reported","type":"number","default":0,"description":"How many pageviews and events the collector accepted","synonyms":"sent, count, beacons"},{"name":"status","type":"string","default":"reporting","values":["reporting","reported","skipped","failed"],"description":"What happened to the last report","synonyms":"state, result"},{"name":"errorMessage","type":"string","default":"","description":"Why the last report failed; blank = none","synonyms":"error, failure reason"}]},"traits":[{"name":"Analytics","id":"trt_456X8XW8EM47A6JJ2K2422QY6E","effectRow":[{"kind":"call-service","resource":"analytics.pageview"},{"kind":"call-service","resource":"analytics.track"},{"kind":"render-ui","resource":"@config.statusSlot","resolved":false},{"kind":"set","resource":"@entity.errorMessage"},{"kind":"set","resource":"@entity.reported"},{"kind":"set","resource":"@entity.status"}],"category":"lifecycle","linkedEntity":"AnalyticsRecord","linkedEntityId":"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB","entityRefIds":{"AnalyticsRecord":"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB"},"emits":[{"event":"REPORTED","eventId":"evt_6TMG0Y229D14PZ2DK03F0Y52BS","description":"The report was handed to the collector (`sent`), or skipped (no endpoint, or a local host)","tier":"secondary","payloadSchema":[{"name":"sent","type":"boolean","required":true}]},{"event":"REPORT_FAILED","eventId":"evt_JNR67YHADRN6WFVCA81ZWYAY2B","description":"The report could not be sent (a bad event name, or no analytics service on this host)","tier":"secondary","scope":"external","payloadSchema":[{"name":"error","type":"string","required":true}]}],"stateMachine":{"states":[{"name":"active","isInitial":true}],"events":[{"key":"INIT","id":"evt_RNKDRQMSYYCZFEYGMFKYKVE593","name":"Initialize"},{"key":"TRACK","id":"evt_0GB6VH59MKMT9VHA452HRZYDQN","name":"Track","description":"Report a named event on this page, with its properties","synonyms":"track event, log event, record click, analytics event","payloadSchema":[{"name":"name","type":"string","required":true},{"name":"props","type":"Map<string,string>"}],"external":true,"listened":true},{"key":"REPORTED","id":"evt_6TMG0Y229D14PZ2DK03F0Y52BS","name":"Reported","description":"The report was handed to the collector (`sent`), or skipped (no endpoint, or a local host)","tier":"secondary","payloadSchema":[{"name":"sent","type":"boolean","required":true}]},{"key":"REPORT_FAILED","id":"evt_JNR67YHADRN6WFVCA81ZWYAY2B","name":"Report Failed","description":"The report could not be sent (a bad event name, or no analytics service on this host)","tier":"secondary","payloadSchema":[{"name":"error","type":"string","required":true}]}],"transitions":[{"from":"active","to":"active","event":"INIT","eventId":"evt_RNKDRQMSYYCZFEYGMFKYKVE593","effects":[["call-service","analytics","pageview",{"endpoint":"@config.endpoint","path":"@config.path","domain":"@config.domain"},{"emit":{"success":"REPORTED","failure":"REPORT_FAILED"}}],["render-ui","@config.statusSlot",{"type":"typography","variant":"caption","role":"status","content":"Reporting this visit…"}]]},{"from":"active","to":"active","event":"TRACK","eventId":"evt_0GB6VH59MKMT9VHA452HRZYDQN","effects":[["call-service","analytics","track",{"endpoint":"@config.endpoint","name":"@payload.name","path":"@config.path","props":"@payload.props","domain":"@config.domain"},{"emit":{"success":"REPORTED","failure":"REPORT_FAILED"}}]]},{"from":"active","to":"active","event":"REPORTED","eventId":"evt_6TMG0Y229D14PZ2DK03F0Y52BS","effects":[["set","@entity.status",["if","@payload.sent","reported","skipped"]],["set","@entity.reported",["if","@payload.sent",["+","@entity.reported",1],"@entity.reported"]],["render-ui","@config.statusSlot",{"type":"typography","variant":"caption","role":"status","content":["if","@payload.sent","Visit reported","Not reported here"]}]]},{"from":"active","to":"active","event":"REPORT_FAILED","eventId":"evt_JNR67YHADRN6WFVCA81ZWYAY2B","effects":[["set","@entity.status","failed"],["set","@entity.errorMessage","@payload.error"],["render-ui","@config.statusSlot",{"type":"typography","variant":"caption","role":"status","content":["str/concat","Not reported: ","@payload.error"]}]]}]},"config":{"path":{"type":"string","default":"/","label":"Page path","description":"The path this page is reported under, starting with /","synonyms":"url, route, page","tier":"domain"},"
|
|
1
|
+
{"name":"std-analytics","version":"1.0.0","description":"std-analytics — cookieless first-party analytics for one page: on entry it reports a pageview of `path` to the collector at `endpoint`, and each TRACK it hears reports a named event (a download, a sign-up) with its properties. Calls run in the browser through the `analytics` service; an empty `endpoint` or a local host sends nothing. Compose one per tracked page, listed in that page's traits.","orbitals":[{"name":"AnalyticsOrbital","id":"orb_4WAPA1VE64Q32CBBX1ECPMEQ5K","entity":{"name":"AnalyticsRecord","id":"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB","persistence":"runtime","fields":[{"name":"reported","type":"number","default":0,"description":"How many pageviews and events the collector accepted","synonyms":"sent, count, beacons"},{"name":"status","type":"string","default":"reporting","values":["reporting","reported","skipped","failed"],"description":"What happened to the last report","synonyms":"state, result"},{"name":"errorMessage","type":"string","default":"","description":"Why the last report failed; blank = none","synonyms":"error, failure reason"}]},"traits":[{"name":"Analytics","id":"trt_456X8XW8EM47A6JJ2K2422QY6E","effectRow":[{"kind":"call-service","resource":"analytics.pageview"},{"kind":"call-service","resource":"analytics.track"},{"kind":"render-ui","resource":"@config.statusSlot","resolved":false},{"kind":"set","resource":"@entity.errorMessage"},{"kind":"set","resource":"@entity.reported"},{"kind":"set","resource":"@entity.status"}],"category":"lifecycle","linkedEntity":"AnalyticsRecord","linkedEntityId":"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB","entityRefIds":{"AnalyticsRecord":"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB"},"emits":[{"event":"REPORTED","eventId":"evt_6TMG0Y229D14PZ2DK03F0Y52BS","description":"The report was handed to the collector (`sent`), or skipped (no endpoint, or a local host)","tier":"secondary","payloadSchema":[{"name":"sent","type":"boolean","required":true}]},{"event":"REPORT_FAILED","eventId":"evt_JNR67YHADRN6WFVCA81ZWYAY2B","description":"The report could not be sent (a bad event name, or no analytics service on this host)","tier":"secondary","scope":"external","payloadSchema":[{"name":"error","type":"string","required":true}]}],"stateMachine":{"states":[{"name":"active","isInitial":true}],"events":[{"key":"INIT","id":"evt_RNKDRQMSYYCZFEYGMFKYKVE593","name":"Initialize"},{"key":"TRACK","id":"evt_0GB6VH59MKMT9VHA452HRZYDQN","name":"Track","description":"Report a named event on this page, with its properties","synonyms":"track event, log event, record click, analytics event","payloadSchema":[{"name":"name","type":"string","required":true},{"name":"props","type":"Map<string,string>"}],"external":true,"listened":true},{"key":"REPORTED","id":"evt_6TMG0Y229D14PZ2DK03F0Y52BS","name":"Reported","description":"The report was handed to the collector (`sent`), or skipped (no endpoint, or a local host)","tier":"secondary","payloadSchema":[{"name":"sent","type":"boolean","required":true}]},{"key":"REPORT_FAILED","id":"evt_JNR67YHADRN6WFVCA81ZWYAY2B","name":"Report Failed","description":"The report could not be sent (a bad event name, or no analytics service on this host)","tier":"secondary","payloadSchema":[{"name":"error","type":"string","required":true}]}],"transitions":[{"from":"active","to":"active","event":"INIT","eventId":"evt_RNKDRQMSYYCZFEYGMFKYKVE593","effects":[["call-service","analytics","pageview",{"endpoint":"@config.endpoint","path":"@config.path","domain":"@config.domain"},{"emit":{"success":"REPORTED","failure":"REPORT_FAILED"}}],["render-ui","@config.statusSlot",{"type":"typography","variant":"caption","role":"status","content":"Reporting this visit…"}]]},{"from":"active","to":"active","event":"TRACK","eventId":"evt_0GB6VH59MKMT9VHA452HRZYDQN","effects":[["call-service","analytics","track",{"endpoint":"@config.endpoint","name":"@payload.name","path":"@config.path","props":"@payload.props","domain":"@config.domain"},{"emit":{"success":"REPORTED","failure":"REPORT_FAILED"}}]]},{"from":"active","to":"active","event":"REPORTED","eventId":"evt_6TMG0Y229D14PZ2DK03F0Y52BS","effects":[["set","@entity.status",["if","@payload.sent","reported","skipped"]],["set","@entity.reported",["if","@payload.sent",["+","@entity.reported",1],"@entity.reported"]],["render-ui","@config.statusSlot",{"type":"typography","variant":"caption","role":"status","content":["if","@payload.sent","Visit reported","Not reported here"]}]]},{"from":"active","to":"active","event":"REPORT_FAILED","eventId":"evt_JNR67YHADRN6WFVCA81ZWYAY2B","effects":[["set","@entity.status","failed"],["set","@entity.errorMessage","@payload.error"],["render-ui","@config.statusSlot",{"type":"typography","variant":"caption","role":"status","content":["str/concat","Not reported: ","@payload.error"]}]]}]},"config":{"path":{"type":"string","default":"/","label":"Page path","description":"The path this page is reported under, starting with /","synonyms":"url, route, page","tier":"domain"},"domain":{"type":"string","default":"","label":"Site","description":"The site id each report is recorded under; empty records the page's host","synonyms":"site id, hostname, property","tier":"domain"},"endpoint":{"type":"string","default":"","label":"Collector endpoint","description":"The analytics collector's ingest URL (`POST`); empty sends nothing","synonyms":"analytics url, collector, stats endpoint, beacon url","tier":"domain"},"statusSlot":{"type":"slot","default":"main","label":"Status slot","description":"Where the atom shows its one-line status; a page running it in the background sends it to `system`","synonyms":"status area, slot","tier":"presentation"}},"scope":"instance"}],"pages":[{"name":"AnalyticsPage","id":"pag_ZG42HEMSHVCRXPMAYEME4D78EN","path":"/analytics","traits":[{"ref":"Analytics","refId":"trt_456X8XW8EM47A6JJ2K2422QY6E"}]}]}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB":{"id":"ent_A7Q1WFS8GRM8CEQF63T0K0P7JB","kind":"entity","bakedName":"AnalyticsRecord","curName":"AnalyticsRecord","renames":[],"owner":"workspace"},"evt_0GB6VH59MKMT9VHA452HRZYDQN":{"id":"evt_0GB6VH59MKMT9VHA452HRZYDQN","kind":"event","bakedName":"TRACK","curName":"TRACK","renames":[],"owner":"workspace","parent":"trt_456X8XW8EM47A6JJ2K2422QY6E"},"evt_6TMG0Y229D14PZ2DK03F0Y52BS":{"id":"evt_6TMG0Y229D14PZ2DK03F0Y52BS","kind":"event","bakedName":"REPORTED","curName":"REPORTED","renames":[],"owner":"workspace","parent":"trt_456X8XW8EM47A6JJ2K2422QY6E"},"evt_JNR67YHADRN6WFVCA81ZWYAY2B":{"id":"evt_JNR67YHADRN6WFVCA81ZWYAY2B","kind":"event","bakedName":"REPORT_FAILED","curName":"REPORT_FAILED","renames":[],"owner":"workspace","parent":"trt_456X8XW8EM47A6JJ2K2422QY6E"},"evt_RNKDRQMSYYCZFEYGMFKYKVE593":{"id":"evt_RNKDRQMSYYCZFEYGMFKYKVE593","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_456X8XW8EM47A6JJ2K2422QY6E"},"orb_4WAPA1VE64Q32CBBX1ECPMEQ5K":{"id":"orb_4WAPA1VE64Q32CBBX1ECPMEQ5K","kind":"orbital","bakedName":"AnalyticsOrbital","curName":"AnalyticsOrbital","renames":[],"owner":"workspace"},"pag_ZG42HEMSHVCRXPMAYEME4D78EN":{"id":"pag_ZG42HEMSHVCRXPMAYEME4D78EN","kind":"page","bakedName":"AnalyticsPage","curName":"AnalyticsPage","renames":[],"owner":"workspace"},"trt_456X8XW8EM47A6JJ2K2422QY6E":{"id":"trt_456X8XW8EM47A6JJ2K2422QY6E","kind":"trait","bakedName":"Analytics","curName":"Analytics","renames":[],"owner":"workspace"}}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"std-approval-gate","version":"1.1.0","description":"std-approval-gate — generic approval gate / approver workflow. Use when a user voices that an action must be reviewed, approved, signed off, or authorized by a privileged role before it proceeds (admin approval, supervisor sign-off, manager approval, gatekeeper review, editor approval, senior editor approval, reviewer approval, publishing approval, draft approval, content review, submit drafts then editors review and approve or reject, needs approval before going live, requires sign-off before publish). Persists ApprovalRequest rows + surfaces the PENDING ones in a review queue showing what is being approved and who asked, with Approve / Deny actions — Deny captures a written reason. approverRoles is ENFORCED by the review transitions themselves: an APPROVE/DENY from a viewer whose role is not listed does not fire. blockSelfApproval additionally stops a reviewer approving their own request (four-eyes) — DENY stays allowed as self-withdrawal. On approval emits ApprovalGranted; on denial emits ApprovalDenied (with the reason). Hosts that replay the gated action MUST route a failed replay back via APPROVAL_REPLAY_FAILED so the request reopens instead of being silently consumed. Compose onto any orbital whose action you want to gate: the target orbital emits an external event, an ApprovalRequest row is created (stamp subjectLabel/subjectId/requestedBy so reviewers see what they are judging), and downstream effects wait on ApprovalGranted. Differs from std-mod-queue, which is content-moderation-specific.","orbitals":[{"name":"ApprovalGateOrbital","id":"orb_C47DR6W7883M466T0XHH12YMAQ","uses":[{"from":"std/behaviors/ui-spinner","as":"Spinner"},{"from":"std/behaviors/ui-typography","as":"Typography"},{"from":"std/behaviors/ui-icon","as":"Icon"},{"from":"std/behaviors/ui-button","as":"Button"},{"from":"std/behaviors/ui-divider","as":"Divider"},{"from":"std/behaviors/ui-alert","as":"Alert"}],"entity":{"name":"ApprovalRequest","id":"ent_RHD868NFTHQX8X1NVP40WHT37D","collection":"approval_requests","persistence":"persistent","fields":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string","default":"","description":"The event that triggered the approval request.","synonyms":"trigger, event, source"},{"name":"subjectLabel","type":"string","default":"","description":"Human title of the thing being approved (the article's headline, the page's title) — what the reviewer sees in the queue.","synonyms":"title, subject, what is being approved"},{"name":"subjectId","type":"string","default":"","description":"Id of the record being approved, for a queue row's View click-through to the subject's own surface.","synonyms":"record id, target id, article id, page id"},{"name":"requestedBy","type":"string","default":"","description":"User id of the submitter.","synonyms":"submitter, author, requester id"},{"name":"requestedByName","type":"string","default":"","description":"Display name of the submitter shown in the queue.","synonyms":"submitter name, requester, who asked"},{"name":"status","type":"string","default":"pending","values":["pending","approved","denied","escalated"],"description":"Current state of the approval process.","synonyms":"approval status, state, condition"},{"name":"reviewer","type":"string","default":"","description":"The user or system responsible for reviewing the request.","synonyms":"assignee, owner, approver, responsible party"},{"name":"requestedAt","type":"number","default":0,"description":"Timestamp indicating when the approval request was initiated.","synonyms":"creation time, request date, submission time"},{"name":"decidedAt","type":"number","default":0,"description":"Timestamp indicating when a decision was made on the request.","synonyms":"decision time, resolved at, completed at"},{"name":"escalatedAt","type":"number","default":0,"description":"Timestamp indicating when the request was escalated.","synonyms":"escalation time, escalation timestamp, escalated time"},{"name":"notes","type":"string","default":"","description":"The reviewer's written reason, captured by the deny step.","synonyms":"comments, remarks, explanation, reason, details"},{"name":"payload","type":"string","default":"","description":"The held data of the gated action as JSON text, replayed by the downstream listener when the request is granted.","synonyms":"request data, held payload, pending data, gated data"}],"access_waivers":{"read":"Shared review surface: submitters watch their requests, approvers work the queue; decision authority is enforced at the transitions, not by hiding rows."}},"traits":[{"ref":"Spinner.traits.SpinnerRender","id":"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V","name":"LoadingSpinner","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D"},{"ref":"Spinner.traits.SpinnerRender","id":"trt_7ZRX4FHWYYYFF92MNANE0PZF9G","name":"ErrorSpinner","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"size":{"type":"unknown","default":"sm"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_BEBDJHPFW07Y06D1VMN21FN0JJ","name":"LoadingText","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"color":{"type":"unknown","default":"muted"},"variant":{"type":"unknown","default":"caption"},"content":{"type":"unknown","default":"Loading approval queue…"}}},{"ref":"Icon.traits.IconRender","id":"trt_96ATJ2K01YG0ZA385FMHPBNGC5","name":"ShieldCheckIcon","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"name":{"type":"unknown","default":"shield-check"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_RWMH37FBGHNR8Z65VXXBXQR9XH","name":"ApprovalQueueTitle","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"content":{"type":"unknown","default":"Approval queue"},"variant":{"type":"unknown","default":"h3"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_YA6J959W4TY2DEBPBGX4FGM2JK","name":"DenyReasonTitle","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"content":{"type":"unknown","default":"Deny request"},"variant":{"type":"unknown","default":"h3"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9","name":"DenyReasonHint","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"variant":{"type":"unknown","default":"caption"},"content":{"type":"unknown","default":"Tell the submitter why — the reason is recorded on the request."},"color":{"type":"unknown","default":"muted"}}},{"ref":"Button.traits.ButtonRender","id":"trt_BAA9G5YBEM5QA1NDKA9Q1XC940","name":"CloseButton","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"action":{"type":"unknown","default":"CLOSE"},"icon":{"type":"unknown","default":"x"},"label":{"type":"unknown","default":"Close"},"variant":{"type":"unknown","default":"ghost"}}},{"ref":"Divider.traits.DividerRender","id":"trt_MMHEPF3R0TW0DB4C0A82C1P6A4","name":"ApprovalDivider","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D"},{"ref":"Alert.traits.AlertRender","id":"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A","name":"ErrorAlert","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"message":{"type":"unknown","default":"@payload.error"},"variant":{"type":"unknown","default":"error"}}},{"name":"ApprovalGateReview","id":"trt_0380ZTKN4RTJC4JSD6H48CK9MY","entityRebindable":true,"entityContract":{"requires":[],"provides":["decidedAt","notes","reviewer","status","subjectLabel"]},"effectRow":[{"kind":"emit","resource":"ApprovalDenied"},{"kind":"emit","resource":"ApprovalGranted"},{"kind":"fetch","resource":"ApprovalRequest"},{"kind":"persist","resource":"ApprovalRequest"},{"kind":"render-ui","resource":"@config.reviewSlot","resolved":false},{"kind":"render-ui","resource":"toast"},{"kind":"set","resource":"@entity.decidedAt"},{"kind":"set","resource":"@entity.id"},{"kind":"set","resource":"@entity.notes"},{"kind":"set","resource":"@entity.reviewer"},{"kind":"set","resource":"@entity.status"},{"kind":"set","resource":"@entity.subjectLabel"}],"category":"interaction","capabilities":["approval"],"linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","entityRefIds":{"ApprovalRequest":"ent_RHD868NFTHQX8X1NVP40WHT37D"},"traitEmbedIds":{"LoadingText":"trt_BEBDJHPFW07Y06D1VMN21FN0JJ","CloseButton":"trt_BAA9G5YBEM5QA1NDKA9Q1XC940","ShieldCheckIcon":"trt_96ATJ2K01YG0ZA385FMHPBNGC5","ApprovalQueueTitle":"trt_RWMH37FBGHNR8Z65VXXBXQR9XH","ApprovalDivider":"trt_MMHEPF3R0TW0DB4C0A82C1P6A4","ErrorAlert":"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A","ErrorSpinner":"trt_7ZRX4FHWYYYFF92MNANE0PZF9G","DenyReasonTitle":"trt_YA6J959W4TY2DEBPBGX4FGM2JK","DenyReasonHint":"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9","LoadingSpinner":"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V"},"emits":[{"event":"APPROVE","eventId":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","description":"Signals that an approval request has been approved.","synonyms":"accept, authorize, confirm, pass","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}]},{"event":"DENY","eventId":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","description":"Opens the deny step for a request; the decision commits with the written reason.","synonyms":"reject, decline","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}]},{"event":"OPEN_SUBJECT","eventId":"evt_T1J65W89XH4YRTYM57QM1W5ZZP","description":"A reviewer clicked View on a queue row. Hosts route subjectId to the subject record's own surface so the reviewer can read what they are approving. Scalars only — the row stays in the queue.","synonyms":"view subject, open record, inspect request, see the article","tier":"domain","scope":"external","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"},{"name":"subjectId","type":"string"},{"name":"subjectLabel","type":"string"}]},{"event":"CONFIRM_DENY","eventId":"evt_175085C5M52T2SS2WHZRF8P52T","description":"The deny form committed; data carries the request id + the written reason.","synonyms":"submit denial, confirm rejection","tier":"internal","payloadSchema":[{"name":"data","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"notes","type":"string"}]}]},{"event":"CANCEL_DENY","eventId":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","description":"The deny form was dismissed without committing; the queue repaints.","synonyms":"cancel denial, back to queue","tier":"internal"},{"event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","description":"Dismisses the review queue overlay.","synonyms":"dismiss, hide, cancel, done","tier":"domain"},{"event":"ApprovalGranted","eventId":"evt_ZNTAM4EABM55T7A9SD59550RFN","description":"Signals that an approval process has been successfully completed; carries the held payload for the downstream listener to replay. Contract: if the replay fails (access denial, write failure), the host MUST emit APPROVAL_REPLAY_FAILED back so the request reopens.","synonyms":"approved, authorized, confirmed, validated","tier":"domain","scope":"external","payloadSchema":[{"name":"requestId","type":"string"},{"name":"payload","type":"$p"}]},{"event":"ApprovalDenied","eventId":"evt_HXXJW22J7K93SZJV6F963QC4Q8","description":"Indicates an approval request has been denied, with the reviewer's written reason.","synonyms":"rejected, declined","tier":"domain","scope":"external","payloadSchema":[{"name":"requestId","type":"string"},{"name":"reason","type":"string"}]},{"event":"ApprovalRequestLoaded","eventId":"evt_RC47PFV368HK4535PVWQWKS3MZ","description":"Indicates an approval request has been successfully loaded.","synonyms":"loaded, fetched, retrieved","tier":"internal","payloadSchema":[{"name":"data","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}]},{"event":"ApprovalRequestLoadFailed","eventId":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","description":"Indicates failure to load an approval request.","synonyms":"load error, failed load, request failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}]},{"event":"ApprovalRequestReviewed","eventId":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","description":"Signals that an approval request has been reviewed.","synonyms":"reviewed, processed, examined","tier":"internal","scope":"internal","payloadSchema":[{"name":"value","type":"@entity"}]},{"event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","description":"Indicates a failure to load or process an approval request for review.","synonyms":"load error, failed review, processing failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true},{"name":"loading"},{"name":"reviewing"},{"name":"denying"},{"name":"error"}],"events":[{"key":"INIT","id":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","name":"Initialize"},{"key":"ApprovalRequestLoaded","id":"evt_RC47PFV368HK4535PVWQWKS3MZ","name":"ApprovalRequest loaded","description":"Indicates an approval request has been successfully loaded.","synonyms":"loaded, fetched, retrieved","tier":"internal","payloadSchema":[{"name":"data","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}],"listened":true},{"key":"ApprovalRequestLoadFailed","id":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","name":"ApprovalRequest load failed","description":"Indicates failure to load an approval request.","synonyms":"load error, failed load, request failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}],"listened":true},{"key":"APPROVAL_REPLAY_FAILED","id":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","name":"Approval Replay Failed","description":"The host could not apply the granted action (access denial, failed write). The request reopens as pending so a decision is never silently lost.","synonyms":"replay failed, apply failed, approval rollback","tier":"domain","payloadSchema":[{"name":"requestId","type":"string","required":true},{"name":"error","type":"string"}],"listened":true},{"key":"ApprovalRequestReviewFailed","id":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","name":"ApprovalRequest review failed","description":"Indicates a failure to load or process an approval request for review.","synonyms":"load error, failed review, processing failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}],"listened":true},{"key":"OPEN","id":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","name":"Open","description":"Summons the review queue (host nav/affordance requests it).","synonyms":"open, show, review, view queue, open approvals","tier":"domain","listened":true},{"key":"CLOSE","id":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","name":"Close","description":"Dismisses the review queue overlay.","synonyms":"dismiss, hide, cancel, done","tier":"domain","listened":true},{"key":"APPROVE","id":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","name":"Approve","description":"Signals that an approval request has been approved.","synonyms":"accept, authorize, confirm, pass","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}],"listened":true},{"key":"DENY","id":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","name":"Deny","description":"Opens the deny step for a request; the decision commits with the written reason.","synonyms":"reject, decline","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}],"listened":true},{"key":"OPEN_SUBJECT","id":"evt_T1J65W89XH4YRTYM57QM1W5ZZP","name":"Open Subject","description":"A reviewer clicked View on a queue row. Hosts route subjectId to the subject record's own surface so the reviewer can read what they are approving. Scalars only — the row stays in the queue.","synonyms":"view subject, open record, inspect request, see the article","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"subjectId","type":"string"},{"name":"subjectLabel","type":"string"}],"listened":true},{"key":"ApprovalRequestReviewed","id":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","name":"ApprovalRequest reviewed","description":"Signals that an approval request has been reviewed.","synonyms":"reviewed, processed, examined","tier":"internal","payloadSchema":[{"name":"value","type":"@entity"}],"listened":true},{"key":"CONFIRM_DENY","id":"evt_175085C5M52T2SS2WHZRF8P52T","name":"Confirm Deny","description":"The deny form committed; data carries the request id + the written reason.","synonyms":"submit denial, confirm rejection","tier":"internal","payloadSchema":[{"name":"data","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"notes","type":"string"}]}],"listened":true},{"key":"CANCEL_DENY","id":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","name":"Cancel Deny","description":"The deny form was dismissed without committing; the queue repaints.","synonyms":"cancel denial, back to queue","tier":"internal","listened":true},{"key":"ApprovalGranted","id":"evt_ZNTAM4EABM55T7A9SD59550RFN","name":"Approval granted","description":"Signals that an approval process has been successfully completed; carries the held payload for the downstream listener to replay. Contract: if the replay fails (access denial, write failure), the host MUST emit APPROVAL_REPLAY_FAILED back so the request reopens.","synonyms":"approved, authorized, confirmed, validated","tier":"domain","payloadSchema":[{"name":"requestId","type":"string"},{"name":"payload","type":"$p"}]},{"key":"ApprovalDenied","id":"evt_HXXJW22J7K93SZJV6F963QC4Q8","name":"Approval denied","description":"Indicates an approval request has been denied, with the reviewer's written reason.","synonyms":"rejected, declined","tier":"domain","payloadSchema":[{"name":"requestId","type":"string"},{"name":"reason","type":"string"}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"idle","to":"idle","event":"ApprovalRequestLoaded","eventId":"evt_RC47PFV368HK4535PVWQWKS3MZ"},{"from":"idle","to":"idle","event":"ApprovalRequestLoadFailed","eventId":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","effects":[["render-ui","toast",{"type":"alert","variant":"error","message":["str/concat","Couldn't load the approval request — ","@payload.error"],"dismissible":true}]]},{"from":"idle","to":"idle","event":"APPROVAL_REPLAY_FAILED","eventId":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","effects":[["set","@entity.id","@payload.requestId"],["set","@entity.status","pending"],["set","@entity.reviewer",""],["set","@entity.decidedAt",0],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["render-ui","toast",{"type":"alert","variant":"error","message":"Approval could not be applied — the request was reopened.","dismissible":true}]]},{"from":"idle","to":"idle","event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","effects":[["render-ui","toast",{"type":"alert","variant":"error","message":["str/concat","Couldn't reopen the approval request — ","@payload.error"],"dismissible":true}]]},{"from":"idle","to":"loading","event":"OPEN","eventId":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","guard":"@config.enabled","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}],["render-ui","@config.reviewSlot",{"align":"center","children":["@trait.LoadingSpinner","@trait.LoadingText"],"className":"py-12","direction":"vertical","gap":"md","type":"stack"}]]},{"from":"loading","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"loading","to":"reviewing","event":"ApprovalRequestLoaded","eventId":"evt_RC47PFV368HK4535PVWQWKS3MZ","effects":[["render-ui","@config.reviewSlot",{"children":[{"align":"center","children":[{"align":"center","children":["@trait.ShieldCheckIcon","@trait.ApprovalQueueTitle"],"direction":"horizontal","gap":"sm","type":"stack"},"@trait.CloseButton"],"direction":"horizontal","gap":"sm","justify":"between","type":"stack"},"@trait.ApprovalDivider",{"cols":1,"entity":"@payload.data","fields":[{"label":"What","name":"subjectLabel","variant":"h4"},{"label":"Action","name":"gatedEvent","variant":"badge"},{"label":"Requested by","name":"requestedByName","variant":"caption"},{"label":"Requested","format":"date","name":"requestedAt","variant":"caption"}],"gap":"sm","itemClickEvent":"@config.itemClickEvent","itemActions":["array/filter","@config.itemActions",["fn","action",["or",["=",["array/len",["object/get","@action","roles",[]]],0],["array/includes",["object/get","@action","roles",[]],"@config.viewerRole"]]]],"look":"@config.tableLook","type":"data-grid"}],"direction":"vertical","gap":"md","type":"stack"}]]},{"from":"loading","to":"error","event":"ApprovalRequestLoadFailed","eventId":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","effects":[["render-ui","@config.reviewSlot",{"children":["@trait.ErrorAlert"],"type":"stack"}]]},{"from":"loading","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]},{"from":"reviewing","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"reviewing","to":"reviewing","event":"APPROVE","eventId":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","guard":["and",["or",["=",["array/len","@config.approverRoles"],0],["array/includes","@config.approverRoles","@user.role"]],["or",["=","@config.blockSelfApproval",false],["!=",["object/get","@payload.row","requestedBy"],"@user.id"]]],"effects":[["set","@entity.id","@payload.id"],["set","@entity.status","approved"],["set","@entity.reviewer","@user.id"],["set","@entity.decidedAt",["time/now"]],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["emit","ApprovalGranted",{"payload":["json/parse","@payload.row.payload","p"],"requestId":"@payload.id"}]]},{"from":"reviewing","to":"denying","event":"DENY","eventId":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","guard":["or",["=",["array/len","@config.approverRoles"],0],["array/includes","@config.approverRoles","@user.role"]],"effects":[["set","@entity.id","@payload.id"],["set","@entity.subjectLabel",["str/default",["object/get","@payload.row","subjectLabel"],""]],["render-ui","@config.reviewSlot",{"children":[{"align":"center","children":["@trait.DenyReasonTitle","@trait.CloseButton"],"direction":"horizontal","gap":"sm","justify":"between","type":"stack"},"@trait.DenyReasonHint","@trait.ApprovalDivider",{"cancelEvent":"CANCEL_DENY","entity":{"id":"@entity.id"},"fields":["notes"],"mode":"edit","submitEvent":"CONFIRM_DENY","type":"form-section"}],"direction":"vertical","gap":"md","type":"stack"}]]},{"from":"reviewing","to":"reviewing","event":"OPEN_SUBJECT","eventId":"evt_T1J65W89XH4YRTYM57QM1W5ZZP"},{"from":"reviewing","to":"loading","event":"ApprovalRequestReviewed","eventId":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"reviewing","to":"reviewing","event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","effects":[["render-ui","@config.reviewSlot",{"children":["@trait.ErrorAlert"],"type":"stack"}]]},{"from":"reviewing","to":"reviewing","event":"APPROVAL_REPLAY_FAILED","eventId":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","effects":[["set","@entity.id","@payload.requestId"],["set","@entity.status","pending"],["set","@entity.reviewer",""],["set","@entity.decidedAt",0],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["render-ui","toast",{"type":"alert","variant":"error","message":"Approval could not be applied — the request was reopened.","dismissible":true}]]},{"from":"reviewing","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]},{"from":"denying","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"denying","to":"reviewing","event":"CONFIRM_DENY","eventId":"evt_175085C5M52T2SS2WHZRF8P52T","effects":[["set","@entity.id",["object/get","@payload.data","id"]],["set","@entity.status","denied"],["set","@entity.reviewer","@user.id"],["set","@entity.decidedAt",["time/now"]],["set","@entity.notes",["str/default",["object/get","@payload.data","notes"],""]],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["emit","ApprovalDenied",{"requestId":["object/get","@payload.data","id"],"reason":["str/default",["object/get","@payload.data","notes"],""]}]]},{"from":"denying","to":"loading","event":"CANCEL_DENY","eventId":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"denying","to":"loading","event":"ApprovalRequestReviewed","eventId":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"denying","to":"denying","event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","effects":[["render-ui","@config.reviewSlot",{"children":["@trait.ErrorAlert"],"type":"stack"}]]},{"from":"denying","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]},{"from":"error","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"error","to":"loading","event":"OPEN","eventId":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}],["render-ui","@config.reviewSlot",{"children":["@trait.ErrorSpinner"],"type":"stack"}]]},{"from":"error","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]}]},"config":{"reviewSlot":{"type":"slot","default":"modal","label":"Review slot","description":"UI slot the review queue renders into. Defaults to the modal overlay so the queue never seizes the host's main content; summoned via OPEN, cleared via CLOSE.","tier":"internal"},"enabled":{"type":"boolean","default":false,"label":"Require approval","description":"Require sign-off before a record is finalized. Off by default.","synonyms":"enable, turn on, enforce, require, activate, apply, switch on, approval, needs approval, sign-off, signed off, review before, gatekeeper, editor approval, publishing approval, draft approval, content review, requires approval, manager approval, supervisor approval, admin approval, before going live","tier":"policy"},"itemActions":{"type":"[ItemAction]","default":[{"event":"OPEN_SUBJECT","icon":"eye","label":"View","variant":"ghost"},{"event":"APPROVE","icon":"check","label":"Approve","variant":"primary"},{"event":"DENY","icon":"x","label":"Deny","variant":"danger"}],"label":"Row actions","description":"Actions offered on each row; give an item `roles` to show it only to those viewer roles.","tier":"presentation","items":{"type":"object","properties":{"icon":{"name":"icon","type":"string","required":false},"when":{"name":"when","type":"SExpr","required":false},"roles":{"name":"roles","type":"array","required":false,"items":{"type":"string"}},"event":{"name":"event","type":"event","required":false},"variant":{"name":"variant","type":"string","required":false},"label":{"name":"label","type":"string","required":true}}}},"viewerRole":{"type":"string","default":"","label":"Viewer's role","description":"The signed-in viewer's role that each action's `roles` is checked against. Bind it explicitly at the call site (e.g. `viewerRole: @user.role`) in an app whose identity carries a role; left empty, only actions with no `roles` show.","tier":"policy"},"approverRoles":{"type":"[string]","default":[],"label":"Who can approve requests?","description":"Roles eligible to decide. ENFORCED by the APPROVE/DENY transition guards: a viewer whose @user.role is not listed cannot fire a decision, from the button or from the bus. Empty = every signed-in viewer may decide (ungated).","synonyms":"approver, reviewer, authorized roles, sign-off roles, who approves","tier":"policy","items":{"type":"string"}},"tableLook":{"type":"string","default":"dense","label":"Review queue table style","description":"Visual treatment for the approval-queue data table.","synonyms":"table style, grid look, compact, spacious, striped","tier":"presentation","values":["dense","spacious","striped","borderless","card-rows"]},"blockSelfApproval":{"type":"boolean","default":false,"label":"Block approving your own requests?","description":"When on, a reviewer cannot APPROVE a request they submitted themselves (requestedBy = the viewer's id) — enforced by the APPROVE transition guard, from the button or from the bus. Requires hosts to stamp requestedBy at request creation. DENY stays allowed on your own request (denying your own request withdraws it). Off by default.","synonyms":"self approval, self-approval, four eyes, four-eyes, separation of duties, cannot approve own, no self sign-off, dual control","tier":"policy"},"itemClickEvent":{"type":"event","default":"OPEN_SUBJECT","label":"Row click","description":"Event emitted when a row is clicked; opens the subject under review. Empty disables the row click.","tier":"presentation","refId":"evt_T1J65W89XH4YRTYM57QM1W5ZZP"}},"scope":"collection","typeParams":[{"name":"p","kind":"Entity"}]}],"pages":[{"name":"ApprovalGateReviewPage","id":"pag_24Y2VMS43ZJ1ZR1XKCWJHMSER6","path":"/approvals/queue","traits":[{"ref":"ApprovalGateReview","refId":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"}]}],"types":{"DenyCommit":[{"name":"id","type":"string","required":true},{"name":"notes","type":"string"}],"ItemAction":[{"name":"label","type":"string","required":true},{"name":"event","type":"event"},{"name":"variant","type":"string"},{"name":"icon","type":"string"},{"name":"roles","type":"[string]"},{"name":"when","type":"SExpr"}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_RHD868NFTHQX8X1NVP40WHT37D":{"id":"ent_RHD868NFTHQX8X1NVP40WHT37D","kind":"entity","bakedName":"ApprovalRequest","curName":"ApprovalRequest","renames":[],"owner":"workspace"},"evt_0EP4VEQCCFP67ZEN3TVAN67T85":{"id":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","kind":"event","bakedName":"ApprovalRequestReviewFailed","curName":"ApprovalRequestReviewFailed","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_175085C5M52T2SS2WHZRF8P52T":{"id":"evt_175085C5M52T2SS2WHZRF8P52T","kind":"event","bakedName":"CONFIRM_DENY","curName":"CONFIRM_DENY","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_4T4NEH25ND2TPR2KGREPNJPB1B":{"id":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","kind":"event","bakedName":"APPROVE","curName":"APPROVE","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_5MNE8EC51V2GXH0F0QN1WRQMY0":{"id":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_CRE6YWV91FMGQW6XGDFSF4K17X":{"id":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","kind":"event","bakedName":"ApprovalRequestLoadFailed","curName":"ApprovalRequestLoadFailed","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_HDQK9DN4WJJE90C3VEGJMWPSSK":{"id":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","kind":"event","bakedName":"CLOSE","curName":"CLOSE","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_HXXJW22J7K93SZJV6F963QC4Q8":{"id":"evt_HXXJW22J7K93SZJV6F963QC4Q8","kind":"event","bakedName":"ApprovalDenied","curName":"ApprovalDenied","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_JGR6YDM8BG45RB1CGAMBZB8JNP":{"id":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","kind":"event","bakedName":"DENY","curName":"DENY","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_KK89PCP4D526JHH5AKFWPHCHZ6":{"id":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","kind":"event","bakedName":"CANCEL_DENY","curName":"CANCEL_DENY","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ":{"id":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","kind":"event","bakedName":"APPROVAL_REPLAY_FAILED","curName":"APPROVAL_REPLAY_FAILED","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_RC47PFV368HK4535PVWQWKS3MZ":{"id":"evt_RC47PFV368HK4535PVWQWKS3MZ","kind":"event","bakedName":"ApprovalRequestLoaded","curName":"ApprovalRequestLoaded","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_S9CE4D2DFF6QQGRQG5YPK2N76C":{"id":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","kind":"event","bakedName":"OPEN","curName":"OPEN","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_T1J65W89XH4YRTYM57QM1W5ZZP":{"id":"evt_T1J65W89XH4YRTYM57QM1W5ZZP","kind":"event","bakedName":"OPEN_SUBJECT","curName":"OPEN_SUBJECT","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_W7SA338X5MEJT9XWWK0ZRKR0E7":{"id":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","kind":"event","bakedName":"ApprovalRequestReviewed","curName":"ApprovalRequestReviewed","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_ZNTAM4EABM55T7A9SD59550RFN":{"id":"evt_ZNTAM4EABM55T7A9SD59550RFN","kind":"event","bakedName":"ApprovalGranted","curName":"ApprovalGranted","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"orb_C47DR6W7883M466T0XHH12YMAQ":{"id":"orb_C47DR6W7883M466T0XHH12YMAQ","kind":"orbital","bakedName":"ApprovalGateOrbital","curName":"ApprovalGateOrbital","renames":[],"owner":"workspace"},"pag_24Y2VMS43ZJ1ZR1XKCWJHMSER6":{"id":"pag_24Y2VMS43ZJ1ZR1XKCWJHMSER6","kind":"page","bakedName":"ApprovalGateReviewPage","curName":"ApprovalGateReviewPage","renames":[],"owner":"workspace"},"trt_0380ZTKN4RTJC4JSD6H48CK9MY":{"id":"trt_0380ZTKN4RTJC4JSD6H48CK9MY","kind":"trait","bakedName":"ApprovalGateReview","curName":"ApprovalGateReview","renames":[],"owner":"workspace"},"trt_7ZRX4FHWYYYFF92MNANE0PZF9G":{"id":"trt_7ZRX4FHWYYYFF92MNANE0PZF9G","kind":"trait","bakedName":"ErrorSpinner","curName":"ErrorSpinner","renames":[],"owner":"workspace"},"trt_96ATJ2K01YG0ZA385FMHPBNGC5":{"id":"trt_96ATJ2K01YG0ZA385FMHPBNGC5","kind":"trait","bakedName":"ShieldCheckIcon","curName":"ShieldCheckIcon","renames":[],"owner":"workspace"},"trt_BAA9G5YBEM5QA1NDKA9Q1XC940":{"id":"trt_BAA9G5YBEM5QA1NDKA9Q1XC940","kind":"trait","bakedName":"CloseButton","curName":"CloseButton","renames":[],"owner":"workspace"},"trt_BEBDJHPFW07Y06D1VMN21FN0JJ":{"id":"trt_BEBDJHPFW07Y06D1VMN21FN0JJ","kind":"trait","bakedName":"LoadingText","curName":"LoadingText","renames":[],"owner":"workspace"},"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A":{"id":"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A","kind":"trait","bakedName":"ErrorAlert","curName":"ErrorAlert","renames":[],"owner":"workspace"},"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V":{"id":"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V","kind":"trait","bakedName":"LoadingSpinner","curName":"LoadingSpinner","renames":[],"owner":"workspace"},"trt_MMHEPF3R0TW0DB4C0A82C1P6A4":{"id":"trt_MMHEPF3R0TW0DB4C0A82C1P6A4","kind":"trait","bakedName":"ApprovalDivider","curName":"ApprovalDivider","renames":[],"owner":"workspace"},"trt_RWMH37FBGHNR8Z65VXXBXQR9XH":{"id":"trt_RWMH37FBGHNR8Z65VXXBXQR9XH","kind":"trait","bakedName":"ApprovalQueueTitle","curName":"ApprovalQueueTitle","renames":[],"owner":"workspace"},"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9":{"id":"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9","kind":"trait","bakedName":"DenyReasonHint","curName":"DenyReasonHint","renames":[],"owner":"workspace"},"trt_YA6J959W4TY2DEBPBGX4FGM2JK":{"id":"trt_YA6J959W4TY2DEBPBGX4FGM2JK","kind":"trait","bakedName":"DenyReasonTitle","curName":"DenyReasonTitle","renames":[],"owner":"workspace"}}}}
|
|
1
|
+
{"name":"std-approval-gate","version":"1.1.0","description":"std-approval-gate — generic approval gate / approver workflow. Use when a user voices that an action must be reviewed, approved, signed off, or authorized by a privileged role before it proceeds (admin approval, supervisor sign-off, manager approval, gatekeeper review, editor approval, senior editor approval, reviewer approval, publishing approval, draft approval, content review, submit drafts then editors review and approve or reject, needs approval before going live, requires sign-off before publish). Persists ApprovalRequest rows + surfaces the PENDING ones in a review queue showing what is being approved and who asked, with Approve / Deny actions — Deny captures a written reason. approverRoles is ENFORCED by the review transitions themselves: an APPROVE/DENY from a viewer whose role is not listed does not fire. blockSelfApproval additionally stops a reviewer approving their own request (four-eyes) — DENY stays allowed as self-withdrawal. On approval emits ApprovalGranted; on denial emits ApprovalDenied (with the reason). Hosts that replay the gated action MUST route a failed replay back via APPROVAL_REPLAY_FAILED so the request reopens instead of being silently consumed. Compose onto any orbital whose action you want to gate: the target orbital emits an external event, an ApprovalRequest row is created (stamp subjectLabel/subjectId/requestedBy so reviewers see what they are judging), and downstream effects wait on ApprovalGranted. Differs from std-mod-queue, which is content-moderation-specific.","orbitals":[{"name":"ApprovalGateOrbital","id":"orb_C47DR6W7883M466T0XHH12YMAQ","uses":[{"from":"std/behaviors/ui-spinner","as":"Spinner"},{"from":"std/behaviors/ui-typography","as":"Typography"},{"from":"std/behaviors/ui-icon","as":"Icon"},{"from":"std/behaviors/ui-button","as":"Button"},{"from":"std/behaviors/ui-divider","as":"Divider"},{"from":"std/behaviors/ui-alert","as":"Alert"}],"entity":{"name":"ApprovalRequest","id":"ent_RHD868NFTHQX8X1NVP40WHT37D","collection":"approval_requests","persistence":"persistent","fields":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string","default":"","description":"The event that triggered the approval request.","synonyms":"trigger, event, source"},{"name":"subjectLabel","type":"string","default":"","description":"Human title of the thing being approved (the article's headline, the page's title) — what the reviewer sees in the queue.","synonyms":"title, subject, what is being approved"},{"name":"subjectId","type":"string","default":"","description":"Id of the record being approved, for a queue row's View click-through to the subject's own surface.","synonyms":"record id, target id, article id, page id"},{"name":"requestedBy","type":"string","default":"","description":"User id of the submitter.","synonyms":"submitter, author, requester id"},{"name":"requestedByName","type":"string","default":"","description":"Display name of the submitter shown in the queue.","synonyms":"submitter name, requester, who asked"},{"name":"status","type":"string","default":"pending","values":["pending","approved","denied","escalated"],"description":"Current state of the approval process.","synonyms":"approval status, state, condition"},{"name":"reviewer","type":"string","default":"","description":"The user or system responsible for reviewing the request.","synonyms":"assignee, owner, approver, responsible party"},{"name":"requestedAt","type":"number","default":0,"description":"Timestamp indicating when the approval request was initiated.","synonyms":"creation time, request date, submission time"},{"name":"decidedAt","type":"number","default":0,"description":"Timestamp indicating when a decision was made on the request.","synonyms":"decision time, resolved at, completed at"},{"name":"escalatedAt","type":"number","default":0,"description":"Timestamp indicating when the request was escalated.","synonyms":"escalation time, escalation timestamp, escalated time"},{"name":"notes","type":"string","default":"","description":"The reviewer's written reason, captured by the deny step.","synonyms":"comments, remarks, explanation, reason, details"},{"name":"payload","type":"string","default":"","description":"The held data of the gated action as JSON text, replayed by the downstream listener when the request is granted.","synonyms":"request data, held payload, pending data, gated data"}],"access_waivers":{"read":"Shared review surface: submitters watch their requests, approvers work the queue; decision authority is enforced at the transitions, not by hiding rows."}},"traits":[{"ref":"Spinner.traits.SpinnerRender","id":"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V","name":"LoadingSpinner","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D"},{"ref":"Spinner.traits.SpinnerRender","id":"trt_7ZRX4FHWYYYFF92MNANE0PZF9G","name":"ErrorSpinner","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"size":{"type":"unknown","default":"sm"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_BEBDJHPFW07Y06D1VMN21FN0JJ","name":"LoadingText","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"content":{"type":"unknown","default":"Loading approval queue…"},"variant":{"type":"unknown","default":"caption"},"color":{"type":"unknown","default":"muted"}}},{"ref":"Icon.traits.IconRender","id":"trt_96ATJ2K01YG0ZA385FMHPBNGC5","name":"ShieldCheckIcon","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"name":{"type":"unknown","default":"shield-check"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_RWMH37FBGHNR8Z65VXXBXQR9XH","name":"ApprovalQueueTitle","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"content":{"type":"unknown","default":"Approval queue"},"variant":{"type":"unknown","default":"h3"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_YA6J959W4TY2DEBPBGX4FGM2JK","name":"DenyReasonTitle","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"content":{"type":"unknown","default":"Deny request"},"variant":{"type":"unknown","default":"h3"}}},{"ref":"Typography.traits.TypographyRender","id":"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9","name":"DenyReasonHint","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"color":{"type":"unknown","default":"muted"},"variant":{"type":"unknown","default":"caption"},"content":{"type":"unknown","default":"Tell the submitter why — the reason is recorded on the request."}}},{"ref":"Button.traits.ButtonRender","id":"trt_BAA9G5YBEM5QA1NDKA9Q1XC940","name":"CloseButton","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"icon":{"type":"unknown","default":"x"},"action":{"type":"unknown","default":"CLOSE"},"variant":{"type":"unknown","default":"ghost"},"label":{"type":"unknown","default":"Close"}}},{"ref":"Divider.traits.DividerRender","id":"trt_MMHEPF3R0TW0DB4C0A82C1P6A4","name":"ApprovalDivider","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D"},{"ref":"Alert.traits.AlertRender","id":"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A","name":"ErrorAlert","linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","config":{"message":{"type":"unknown","default":"@payload.error"},"variant":{"type":"unknown","default":"error"}}},{"name":"ApprovalGateReview","id":"trt_0380ZTKN4RTJC4JSD6H48CK9MY","entityRebindable":true,"entityContract":{"requires":[],"provides":["decidedAt","notes","reviewer","status","subjectLabel"]},"effectRow":[{"kind":"emit","resource":"ApprovalDenied"},{"kind":"emit","resource":"ApprovalGranted"},{"kind":"fetch","resource":"ApprovalRequest"},{"kind":"persist","resource":"ApprovalRequest"},{"kind":"render-ui","resource":"@config.reviewSlot","resolved":false},{"kind":"render-ui","resource":"toast"},{"kind":"set","resource":"@entity.decidedAt"},{"kind":"set","resource":"@entity.id"},{"kind":"set","resource":"@entity.notes"},{"kind":"set","resource":"@entity.reviewer"},{"kind":"set","resource":"@entity.status"},{"kind":"set","resource":"@entity.subjectLabel"}],"category":"interaction","capabilities":["approval"],"linkedEntity":"ApprovalRequest","linkedEntityId":"ent_RHD868NFTHQX8X1NVP40WHT37D","entityRefIds":{"ApprovalRequest":"ent_RHD868NFTHQX8X1NVP40WHT37D"},"traitEmbedIds":{"LoadingSpinner":"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V","LoadingText":"trt_BEBDJHPFW07Y06D1VMN21FN0JJ","ErrorAlert":"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A","ApprovalQueueTitle":"trt_RWMH37FBGHNR8Z65VXXBXQR9XH","ApprovalDivider":"trt_MMHEPF3R0TW0DB4C0A82C1P6A4","ShieldCheckIcon":"trt_96ATJ2K01YG0ZA385FMHPBNGC5","ErrorSpinner":"trt_7ZRX4FHWYYYFF92MNANE0PZF9G","CloseButton":"trt_BAA9G5YBEM5QA1NDKA9Q1XC940","DenyReasonTitle":"trt_YA6J959W4TY2DEBPBGX4FGM2JK","DenyReasonHint":"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9"},"emits":[{"event":"APPROVE","eventId":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","description":"Signals that an approval request has been approved.","synonyms":"accept, authorize, confirm, pass","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}]},{"event":"DENY","eventId":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","description":"Opens the deny step for a request; the decision commits with the written reason.","synonyms":"reject, decline","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}]},{"event":"OPEN_SUBJECT","eventId":"evt_T1J65W89XH4YRTYM57QM1W5ZZP","description":"A reviewer clicked View on a queue row. Hosts route subjectId to the subject record's own surface so the reviewer can read what they are approving. Scalars only — the row stays in the queue.","synonyms":"view subject, open record, inspect request, see the article","tier":"domain","scope":"external","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"},{"name":"subjectId","type":"string"},{"name":"subjectLabel","type":"string"}]},{"event":"CONFIRM_DENY","eventId":"evt_175085C5M52T2SS2WHZRF8P52T","description":"The deny form committed; data carries the request id + the written reason.","synonyms":"submit denial, confirm rejection","tier":"internal","payloadSchema":[{"name":"data","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"notes","type":"string"}]}]},{"event":"CANCEL_DENY","eventId":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","description":"The deny form was dismissed without committing; the queue repaints.","synonyms":"cancel denial, back to queue","tier":"internal"},{"event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","description":"Dismisses the review queue overlay.","synonyms":"dismiss, hide, cancel, done","tier":"domain"},{"event":"ApprovalGranted","eventId":"evt_ZNTAM4EABM55T7A9SD59550RFN","description":"Signals that an approval process has been successfully completed; carries the held payload for the downstream listener to replay. Contract: if the replay fails (access denial, write failure), the host MUST emit APPROVAL_REPLAY_FAILED back so the request reopens.","synonyms":"approved, authorized, confirmed, validated","tier":"domain","scope":"external","payloadSchema":[{"name":"requestId","type":"string"},{"name":"payload","type":"$p"}]},{"event":"ApprovalDenied","eventId":"evt_HXXJW22J7K93SZJV6F963QC4Q8","description":"Indicates an approval request has been denied, with the reviewer's written reason.","synonyms":"rejected, declined","tier":"domain","scope":"external","payloadSchema":[{"name":"requestId","type":"string"},{"name":"reason","type":"string"}]},{"event":"ApprovalRequestLoaded","eventId":"evt_RC47PFV368HK4535PVWQWKS3MZ","description":"Indicates an approval request has been successfully loaded.","synonyms":"loaded, fetched, retrieved","tier":"internal","payloadSchema":[{"name":"data","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}]},{"event":"ApprovalRequestLoadFailed","eventId":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","description":"Indicates failure to load an approval request.","synonyms":"load error, failed load, request failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}]},{"event":"ApprovalRequestReviewed","eventId":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","description":"Signals that an approval request has been reviewed.","synonyms":"reviewed, processed, examined","tier":"internal","scope":"internal","payloadSchema":[{"name":"value","type":"@entity"}]},{"event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","description":"Indicates a failure to load or process an approval request for review.","synonyms":"load error, failed review, processing failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true},{"name":"loading"},{"name":"reviewing"},{"name":"denying"},{"name":"error"}],"events":[{"key":"INIT","id":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","name":"Initialize"},{"key":"ApprovalRequestLoaded","id":"evt_RC47PFV368HK4535PVWQWKS3MZ","name":"ApprovalRequest loaded","description":"Indicates an approval request has been successfully loaded.","synonyms":"loaded, fetched, retrieved","tier":"internal","payloadSchema":[{"name":"data","type":"[object]","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}],"listened":true},{"key":"ApprovalRequestLoadFailed","id":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","name":"ApprovalRequest load failed","description":"Indicates failure to load an approval request.","synonyms":"load error, failed load, request failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}],"listened":true},{"key":"APPROVAL_REPLAY_FAILED","id":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","name":"Approval Replay Failed","description":"The host could not apply the granted action (access denial, failed write). The request reopens as pending so a decision is never silently lost.","synonyms":"replay failed, apply failed, approval rollback","tier":"domain","payloadSchema":[{"name":"requestId","type":"string","required":true},{"name":"error","type":"string"}],"listened":true},{"key":"ApprovalRequestReviewFailed","id":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","name":"ApprovalRequest review failed","description":"Indicates a failure to load or process an approval request for review.","synonyms":"load error, failed review, processing failure","tier":"internal","payloadSchema":[{"name":"error","type":"string"},{"name":"code","type":"string"}],"listened":true},{"key":"OPEN","id":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","name":"Open","description":"Summons the review queue (host nav/affordance requests it).","synonyms":"open, show, review, view queue, open approvals","tier":"domain","listened":true},{"key":"CLOSE","id":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","name":"Close","description":"Dismisses the review queue overlay.","synonyms":"dismiss, hide, cancel, done","tier":"domain","listened":true},{"key":"APPROVE","id":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","name":"Approve","description":"Signals that an approval request has been approved.","synonyms":"accept, authorize, confirm, pass","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}],"listened":true},{"key":"DENY","id":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","name":"Deny","description":"Opens the deny step for a request; the decision commits with the written reason.","synonyms":"reject, decline","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"row","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"gatedEvent","type":"string"},{"name":"subjectLabel","type":"string"},{"name":"subjectId","type":"string"},{"name":"requestedBy","type":"string"},{"name":"requestedByName","type":"string"},{"name":"status","type":"string","values":["pending","approved","denied","escalated"]},{"name":"reviewer","type":"string"},{"name":"requestedAt","type":"number"},{"name":"decidedAt","type":"number"},{"name":"escalatedAt","type":"number"},{"name":"notes","type":"string"},{"name":"payload","type":"string"}],"entity":"ApprovalRequest"}],"listened":true},{"key":"OPEN_SUBJECT","id":"evt_T1J65W89XH4YRTYM57QM1W5ZZP","name":"Open Subject","description":"A reviewer clicked View on a queue row. Hosts route subjectId to the subject record's own surface so the reviewer can read what they are approving. Scalars only — the row stays in the queue.","synonyms":"view subject, open record, inspect request, see the article","tier":"domain","payloadSchema":[{"name":"id","type":"string","required":true},{"name":"subjectId","type":"string"},{"name":"subjectLabel","type":"string"}],"listened":true},{"key":"ApprovalRequestReviewed","id":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","name":"ApprovalRequest reviewed","description":"Signals that an approval request has been reviewed.","synonyms":"reviewed, processed, examined","tier":"internal","payloadSchema":[{"name":"value","type":"@entity"}],"listened":true},{"key":"CONFIRM_DENY","id":"evt_175085C5M52T2SS2WHZRF8P52T","name":"Confirm Deny","description":"The deny form committed; data carries the request id + the written reason.","synonyms":"submit denial, confirm rejection","tier":"internal","payloadSchema":[{"name":"data","type":"object","properties":[{"name":"id","type":"string","required":true},{"name":"notes","type":"string"}]}],"listened":true},{"key":"CANCEL_DENY","id":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","name":"Cancel Deny","description":"The deny form was dismissed without committing; the queue repaints.","synonyms":"cancel denial, back to queue","tier":"internal","listened":true},{"key":"ApprovalGranted","id":"evt_ZNTAM4EABM55T7A9SD59550RFN","name":"Approval granted","description":"Signals that an approval process has been successfully completed; carries the held payload for the downstream listener to replay. Contract: if the replay fails (access denial, write failure), the host MUST emit APPROVAL_REPLAY_FAILED back so the request reopens.","synonyms":"approved, authorized, confirmed, validated","tier":"domain","payloadSchema":[{"name":"requestId","type":"string"},{"name":"payload","type":"$p"}]},{"key":"ApprovalDenied","id":"evt_HXXJW22J7K93SZJV6F963QC4Q8","name":"Approval denied","description":"Indicates an approval request has been denied, with the reviewer's written reason.","synonyms":"rejected, declined","tier":"domain","payloadSchema":[{"name":"requestId","type":"string"},{"name":"reason","type":"string"}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"idle","to":"idle","event":"ApprovalRequestLoaded","eventId":"evt_RC47PFV368HK4535PVWQWKS3MZ"},{"from":"idle","to":"idle","event":"ApprovalRequestLoadFailed","eventId":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","effects":[["render-ui","toast",{"type":"alert","variant":"error","message":["str/concat","Couldn't load the approval request — ","@payload.error"],"dismissible":true}]]},{"from":"idle","to":"idle","event":"APPROVAL_REPLAY_FAILED","eventId":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","effects":[["set","@entity.id","@payload.requestId"],["set","@entity.status","pending"],["set","@entity.reviewer",""],["set","@entity.decidedAt",0],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["render-ui","toast",{"type":"alert","variant":"error","message":"Approval could not be applied — the request was reopened.","dismissible":true}]]},{"from":"idle","to":"idle","event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","effects":[["render-ui","toast",{"type":"alert","variant":"error","message":["str/concat","Couldn't reopen the approval request — ","@payload.error"],"dismissible":true}]]},{"from":"idle","to":"loading","event":"OPEN","eventId":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","guard":"@config.enabled","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}],["render-ui","@config.reviewSlot",{"align":"center","children":["@trait.LoadingSpinner","@trait.LoadingText"],"className":"py-12","direction":"vertical","gap":"md","type":"stack"}]]},{"from":"loading","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"loading","to":"reviewing","event":"ApprovalRequestLoaded","eventId":"evt_RC47PFV368HK4535PVWQWKS3MZ","effects":[["render-ui","@config.reviewSlot",{"children":[{"align":"center","children":[{"align":"center","children":["@trait.ShieldCheckIcon","@trait.ApprovalQueueTitle"],"direction":"horizontal","gap":"sm","type":"stack"},"@trait.CloseButton"],"direction":"horizontal","gap":"sm","justify":"between","type":"stack"},"@trait.ApprovalDivider",{"cols":1,"entity":"@payload.data","fields":[{"label":"What","name":"subjectLabel","variant":"h4"},{"label":"Action","name":"gatedEvent","variant":"badge"},{"label":"Requested by","name":"requestedByName","variant":"caption"},{"label":"Requested","format":"date","name":"requestedAt","variant":"caption"}],"gap":"sm","itemClickEvent":"@config.itemClickEvent","itemActions":["array/filter","@config.itemActions",["fn","action",["or",["=",["array/len",["object/get","@action","roles",[]]],0],["array/includes",["object/get","@action","roles",[]],"@config.viewerRole"]]]],"look":"@config.tableLook","type":"data-grid"}],"direction":"vertical","gap":"md","type":"stack"}]]},{"from":"loading","to":"error","event":"ApprovalRequestLoadFailed","eventId":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","effects":[["render-ui","@config.reviewSlot",{"children":["@trait.ErrorAlert"],"type":"stack"}]]},{"from":"loading","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]},{"from":"reviewing","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"reviewing","to":"reviewing","event":"APPROVE","eventId":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","guard":["and",["or",["=",["array/len","@config.approverRoles"],0],["array/includes","@config.approverRoles","@user.role"]],["or",["=","@config.blockSelfApproval",false],["!=",["object/get","@payload.row","requestedBy"],"@user.id"]]],"effects":[["set","@entity.id","@payload.id"],["set","@entity.status","approved"],["set","@entity.reviewer","@user.id"],["set","@entity.decidedAt",["time/now"]],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["emit","ApprovalGranted",{"payload":["json/parse","@payload.row.payload","p"],"requestId":"@payload.id"}]]},{"from":"reviewing","to":"denying","event":"DENY","eventId":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","guard":["or",["=",["array/len","@config.approverRoles"],0],["array/includes","@config.approverRoles","@user.role"]],"effects":[["set","@entity.id","@payload.id"],["set","@entity.subjectLabel",["str/default",["object/get","@payload.row","subjectLabel"],""]],["render-ui","@config.reviewSlot",{"children":[{"align":"center","children":["@trait.DenyReasonTitle","@trait.CloseButton"],"direction":"horizontal","gap":"sm","justify":"between","type":"stack"},"@trait.DenyReasonHint","@trait.ApprovalDivider",{"cancelEvent":"CANCEL_DENY","entity":{"id":"@entity.id"},"fields":["notes"],"mode":"edit","submitEvent":"CONFIRM_DENY","type":"form-section"}],"direction":"vertical","gap":"md","type":"stack"}]]},{"from":"reviewing","to":"reviewing","event":"OPEN_SUBJECT","eventId":"evt_T1J65W89XH4YRTYM57QM1W5ZZP"},{"from":"reviewing","to":"loading","event":"ApprovalRequestReviewed","eventId":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"reviewing","to":"reviewing","event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","effects":[["render-ui","@config.reviewSlot",{"children":["@trait.ErrorAlert"],"type":"stack"}]]},{"from":"reviewing","to":"reviewing","event":"APPROVAL_REPLAY_FAILED","eventId":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","effects":[["set","@entity.id","@payload.requestId"],["set","@entity.status","pending"],["set","@entity.reviewer",""],["set","@entity.decidedAt",0],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["render-ui","toast",{"type":"alert","variant":"error","message":"Approval could not be applied — the request was reopened.","dismissible":true}]]},{"from":"reviewing","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]},{"from":"denying","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"denying","to":"reviewing","event":"CONFIRM_DENY","eventId":"evt_175085C5M52T2SS2WHZRF8P52T","effects":[["set","@entity.id",["object/get","@payload.data","id"]],["set","@entity.status","denied"],["set","@entity.reviewer","@user.id"],["set","@entity.decidedAt",["time/now"]],["set","@entity.notes",["str/default",["object/get","@payload.data","notes"],""]],["persist","update","ApprovalRequest","@entity",{"emit":{"failure":"ApprovalRequestReviewFailed","success":"ApprovalRequestReviewed"}}],["emit","ApprovalDenied",{"requestId":["object/get","@payload.data","id"],"reason":["str/default",["object/get","@payload.data","notes"],""]}]]},{"from":"denying","to":"loading","event":"CANCEL_DENY","eventId":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"denying","to":"loading","event":"ApprovalRequestReviewed","eventId":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"denying","to":"denying","event":"ApprovalRequestReviewFailed","eventId":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","effects":[["render-ui","@config.reviewSlot",{"children":["@trait.ErrorAlert"],"type":"stack"}]]},{"from":"denying","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]},{"from":"error","to":"idle","event":"INIT","eventId":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","effects":[["render-ui","@config.reviewSlot",null],["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}]]},{"from":"error","to":"loading","event":"OPEN","eventId":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","effects":[["fetch","ApprovalRequest",{"filter":["=",["object/get","@entity","status"],"pending"],"emit":{"failure":"ApprovalRequestLoadFailed","success":"ApprovalRequestLoaded"}}],["render-ui","@config.reviewSlot",{"children":["@trait.ErrorSpinner"],"type":"stack"}]]},{"from":"error","to":"idle","event":"CLOSE","eventId":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","effects":[["render-ui","@config.reviewSlot",null]]}]},"config":{"enabled":{"type":"boolean","default":false,"label":"Require approval","description":"Require sign-off before a record is finalized. Off by default.","synonyms":"enable, turn on, enforce, require, activate, apply, switch on, approval, needs approval, sign-off, signed off, review before, gatekeeper, editor approval, publishing approval, draft approval, content review, requires approval, manager approval, supervisor approval, admin approval, before going live","tier":"policy"},"blockSelfApproval":{"type":"boolean","default":false,"label":"Block approving your own requests?","description":"When on, a reviewer cannot APPROVE a request they submitted themselves (requestedBy = the viewer's id) — enforced by the APPROVE transition guard, from the button or from the bus. Requires hosts to stamp requestedBy at request creation. DENY stays allowed on your own request (denying your own request withdraws it). Off by default.","synonyms":"self approval, self-approval, four eyes, four-eyes, separation of duties, cannot approve own, no self sign-off, dual control","tier":"policy"},"viewerRole":{"type":"string","default":"","label":"Viewer's role","description":"The signed-in viewer's role that each action's `roles` is checked against. Bind it explicitly at the call site (e.g. `viewerRole: @user.role`) in an app whose identity carries a role; left empty, only actions with no `roles` show.","tier":"policy"},"approverRoles":{"type":"[string]","default":[],"label":"Who can approve requests?","description":"Roles eligible to decide. ENFORCED by the APPROVE/DENY transition guards: a viewer whose @user.role is not listed cannot fire a decision, from the button or from the bus. Empty = every signed-in viewer may decide (ungated).","synonyms":"approver, reviewer, authorized roles, sign-off roles, who approves","tier":"policy","items":{"type":"string"}},"tableLook":{"type":"string","default":"dense","label":"Review queue table style","description":"Visual treatment for the approval-queue data table.","synonyms":"table style, grid look, compact, spacious, striped","tier":"presentation","values":["dense","spacious","striped","borderless","card-rows"]},"itemActions":{"type":"[ItemAction]","default":[{"event":"OPEN_SUBJECT","icon":"eye","label":"View","variant":"ghost"},{"event":"APPROVE","icon":"check","label":"Approve","variant":"primary"},{"event":"DENY","icon":"x","label":"Deny","variant":"danger"}],"label":"Row actions","description":"Actions offered on each row; give an item `roles` to show it only to those viewer roles.","tier":"presentation","items":{"type":"object","properties":{"icon":{"name":"icon","type":"string","required":false},"roles":{"name":"roles","type":"array","required":false,"items":{"type":"string"}},"event":{"name":"event","type":"event","required":false},"label":{"name":"label","type":"string","required":true},"variant":{"name":"variant","type":"string","required":false},"when":{"name":"when","type":"SExpr","required":false}}}},"reviewSlot":{"type":"slot","default":"modal","label":"Review slot","description":"UI slot the review queue renders into. Defaults to the modal overlay so the queue never seizes the host's main content; summoned via OPEN, cleared via CLOSE.","tier":"internal"},"itemClickEvent":{"type":"event","default":"OPEN_SUBJECT","label":"Row click","description":"Event emitted when a row is clicked; opens the subject under review. Empty disables the row click.","tier":"presentation","refId":"evt_T1J65W89XH4YRTYM57QM1W5ZZP"}},"scope":"collection","typeParams":[{"name":"p","kind":"Entity"}]}],"pages":[{"name":"ApprovalGateReviewPage","id":"pag_24Y2VMS43ZJ1ZR1XKCWJHMSER6","path":"/approvals/queue","traits":[{"ref":"ApprovalGateReview","refId":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"}]}],"types":{"DenyCommit":[{"name":"id","type":"string","required":true},{"name":"notes","type":"string"}],"ItemAction":[{"name":"label","type":"string","required":true},{"name":"event","type":"event"},{"name":"variant","type":"string"},{"name":"icon","type":"string"},{"name":"roles","type":"[string]"},{"name":"when","type":"SExpr"}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_RHD868NFTHQX8X1NVP40WHT37D":{"id":"ent_RHD868NFTHQX8X1NVP40WHT37D","kind":"entity","bakedName":"ApprovalRequest","curName":"ApprovalRequest","renames":[],"owner":"workspace"},"evt_0EP4VEQCCFP67ZEN3TVAN67T85":{"id":"evt_0EP4VEQCCFP67ZEN3TVAN67T85","kind":"event","bakedName":"ApprovalRequestReviewFailed","curName":"ApprovalRequestReviewFailed","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_175085C5M52T2SS2WHZRF8P52T":{"id":"evt_175085C5M52T2SS2WHZRF8P52T","kind":"event","bakedName":"CONFIRM_DENY","curName":"CONFIRM_DENY","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_4T4NEH25ND2TPR2KGREPNJPB1B":{"id":"evt_4T4NEH25ND2TPR2KGREPNJPB1B","kind":"event","bakedName":"APPROVE","curName":"APPROVE","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_5MNE8EC51V2GXH0F0QN1WRQMY0":{"id":"evt_5MNE8EC51V2GXH0F0QN1WRQMY0","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_CRE6YWV91FMGQW6XGDFSF4K17X":{"id":"evt_CRE6YWV91FMGQW6XGDFSF4K17X","kind":"event","bakedName":"ApprovalRequestLoadFailed","curName":"ApprovalRequestLoadFailed","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_HDQK9DN4WJJE90C3VEGJMWPSSK":{"id":"evt_HDQK9DN4WJJE90C3VEGJMWPSSK","kind":"event","bakedName":"CLOSE","curName":"CLOSE","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_HXXJW22J7K93SZJV6F963QC4Q8":{"id":"evt_HXXJW22J7K93SZJV6F963QC4Q8","kind":"event","bakedName":"ApprovalDenied","curName":"ApprovalDenied","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_JGR6YDM8BG45RB1CGAMBZB8JNP":{"id":"evt_JGR6YDM8BG45RB1CGAMBZB8JNP","kind":"event","bakedName":"DENY","curName":"DENY","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_KK89PCP4D526JHH5AKFWPHCHZ6":{"id":"evt_KK89PCP4D526JHH5AKFWPHCHZ6","kind":"event","bakedName":"CANCEL_DENY","curName":"CANCEL_DENY","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ":{"id":"evt_Q1FM2ANZ4YZJF0F90G9RR8NECQ","kind":"event","bakedName":"APPROVAL_REPLAY_FAILED","curName":"APPROVAL_REPLAY_FAILED","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_RC47PFV368HK4535PVWQWKS3MZ":{"id":"evt_RC47PFV368HK4535PVWQWKS3MZ","kind":"event","bakedName":"ApprovalRequestLoaded","curName":"ApprovalRequestLoaded","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_S9CE4D2DFF6QQGRQG5YPK2N76C":{"id":"evt_S9CE4D2DFF6QQGRQG5YPK2N76C","kind":"event","bakedName":"OPEN","curName":"OPEN","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_T1J65W89XH4YRTYM57QM1W5ZZP":{"id":"evt_T1J65W89XH4YRTYM57QM1W5ZZP","kind":"event","bakedName":"OPEN_SUBJECT","curName":"OPEN_SUBJECT","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_W7SA338X5MEJT9XWWK0ZRKR0E7":{"id":"evt_W7SA338X5MEJT9XWWK0ZRKR0E7","kind":"event","bakedName":"ApprovalRequestReviewed","curName":"ApprovalRequestReviewed","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"evt_ZNTAM4EABM55T7A9SD59550RFN":{"id":"evt_ZNTAM4EABM55T7A9SD59550RFN","kind":"event","bakedName":"ApprovalGranted","curName":"ApprovalGranted","renames":[],"owner":"workspace","parent":"trt_0380ZTKN4RTJC4JSD6H48CK9MY"},"orb_C47DR6W7883M466T0XHH12YMAQ":{"id":"orb_C47DR6W7883M466T0XHH12YMAQ","kind":"orbital","bakedName":"ApprovalGateOrbital","curName":"ApprovalGateOrbital","renames":[],"owner":"workspace"},"pag_24Y2VMS43ZJ1ZR1XKCWJHMSER6":{"id":"pag_24Y2VMS43ZJ1ZR1XKCWJHMSER6","kind":"page","bakedName":"ApprovalGateReviewPage","curName":"ApprovalGateReviewPage","renames":[],"owner":"workspace"},"trt_0380ZTKN4RTJC4JSD6H48CK9MY":{"id":"trt_0380ZTKN4RTJC4JSD6H48CK9MY","kind":"trait","bakedName":"ApprovalGateReview","curName":"ApprovalGateReview","renames":[],"owner":"workspace"},"trt_7ZRX4FHWYYYFF92MNANE0PZF9G":{"id":"trt_7ZRX4FHWYYYFF92MNANE0PZF9G","kind":"trait","bakedName":"ErrorSpinner","curName":"ErrorSpinner","renames":[],"owner":"workspace"},"trt_96ATJ2K01YG0ZA385FMHPBNGC5":{"id":"trt_96ATJ2K01YG0ZA385FMHPBNGC5","kind":"trait","bakedName":"ShieldCheckIcon","curName":"ShieldCheckIcon","renames":[],"owner":"workspace"},"trt_BAA9G5YBEM5QA1NDKA9Q1XC940":{"id":"trt_BAA9G5YBEM5QA1NDKA9Q1XC940","kind":"trait","bakedName":"CloseButton","curName":"CloseButton","renames":[],"owner":"workspace"},"trt_BEBDJHPFW07Y06D1VMN21FN0JJ":{"id":"trt_BEBDJHPFW07Y06D1VMN21FN0JJ","kind":"trait","bakedName":"LoadingText","curName":"LoadingText","renames":[],"owner":"workspace"},"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A":{"id":"trt_DR8Z4MA8YB4F5M7YNVTA5ZVN0A","kind":"trait","bakedName":"ErrorAlert","curName":"ErrorAlert","renames":[],"owner":"workspace"},"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V":{"id":"trt_H9BXNCBJZPSFV9EWZX6GQ65Y3V","kind":"trait","bakedName":"LoadingSpinner","curName":"LoadingSpinner","renames":[],"owner":"workspace"},"trt_MMHEPF3R0TW0DB4C0A82C1P6A4":{"id":"trt_MMHEPF3R0TW0DB4C0A82C1P6A4","kind":"trait","bakedName":"ApprovalDivider","curName":"ApprovalDivider","renames":[],"owner":"workspace"},"trt_RWMH37FBGHNR8Z65VXXBXQR9XH":{"id":"trt_RWMH37FBGHNR8Z65VXXBXQR9XH","kind":"trait","bakedName":"ApprovalQueueTitle","curName":"ApprovalQueueTitle","renames":[],"owner":"workspace"},"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9":{"id":"trt_TEWAFEG1NB0TNJ55E6MYRD7PM9","kind":"trait","bakedName":"DenyReasonHint","curName":"DenyReasonHint","renames":[],"owner":"workspace"},"trt_YA6J959W4TY2DEBPBGX4FGM2JK":{"id":"trt_YA6J959W4TY2DEBPBGX4FGM2JK","kind":"trait","bakedName":"DenyReasonTitle","curName":"DenyReasonTitle","renames":[],"owner":"workspace"}}}}
|