stagent 0.9.6 → 0.11.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/README.md +20 -44
- package/dist/cli.js +66 -18
- package/docs/.coverage-gaps.json +144 -56
- package/docs/.last-generated +1 -1
- package/docs/features/agent-intelligence.md +12 -2
- package/docs/features/chat.md +40 -5
- package/docs/features/cost-usage.md +1 -1
- package/docs/features/documents.md +5 -2
- package/docs/features/inbox-notifications.md +10 -2
- package/docs/features/keyboard-navigation.md +12 -3
- package/docs/features/provider-runtimes.md +20 -2
- package/docs/features/schedules.md +32 -4
- package/docs/features/settings.md +28 -5
- package/docs/features/shared-components.md +7 -3
- package/docs/features/tables.md +11 -2
- package/docs/features/tool-permissions.md +6 -2
- package/docs/features/workflows.md +14 -4
- package/docs/index.md +1 -1
- package/docs/journeys/developer.md +39 -2
- package/docs/journeys/personal-use.md +32 -8
- package/docs/journeys/power-user.md +45 -14
- package/docs/journeys/work-use.md +17 -8
- package/docs/manifest.json +15 -15
- package/docs/superpowers/plans/2026-04-07-instance-bootstrap.md +1691 -0
- package/docs/superpowers/plans/2026-04-08-schedule-orchestration.md +2983 -0
- package/docs/superpowers/plans/2026-04-11-schedule-maxturns-api-control.md +551 -0
- package/docs/superpowers/plans/2026-04-11-task-create-profile-validation.md +864 -0
- package/docs/superpowers/plans/2026-04-11-task-runtime-stagent-mcp-injection.md +739 -0
- package/docs/superpowers/plans/2026-04-14-chat-command-namespace-refactor.md +1390 -0
- package/docs/superpowers/plans/2026-04-14-chat-environment-integration.md +1561 -0
- package/docs/superpowers/plans/2026-04-14-chat-polish-bundle-v1.md +1219 -0
- package/docs/superpowers/plans/2026-04-14-chat-session-persistence-provider-closeout.md +399 -0
- package/docs/superpowers/specs/2026-04-08-chat-sse-resilience-hotfix-design.md +201 -0
- package/docs/superpowers/specs/2026-04-08-schedule-orchestration-design.md +371 -0
- package/docs/superpowers/specs/2026-04-08-swarm-visibility-design.md +213 -0
- package/next.config.mjs +1 -0
- package/package.json +3 -2
- package/src/__tests__/instrumentation-smoke.test.ts +15 -0
- package/src/app/analytics/page.tsx +1 -21
- package/src/app/api/chat/conversations/[id]/messages/route.ts +22 -1
- package/src/app/api/chat/conversations/[id]/skills/__tests__/activate.test.ts +141 -0
- package/src/app/api/chat/conversations/[id]/skills/activate/route.ts +74 -0
- package/src/app/api/chat/conversations/[id]/skills/deactivate/route.ts +33 -0
- package/src/app/api/chat/export/route.ts +52 -0
- package/src/app/api/chat/files/search/route.ts +50 -0
- package/src/app/api/diagnostics/chat-streams/route.ts +65 -0
- package/src/app/api/environment/rescan-if-stale/__tests__/route.test.ts +45 -0
- package/src/app/api/environment/rescan-if-stale/route.ts +23 -0
- package/src/app/api/environment/skills/route.ts +13 -0
- package/src/app/api/instance/config/route.ts +41 -0
- package/src/app/api/instance/init/route.ts +34 -0
- package/src/app/api/instance/upgrade/check/route.ts +26 -0
- package/src/app/api/instance/upgrade/route.ts +96 -0
- package/src/app/api/instance/upgrade/status/route.ts +35 -0
- package/src/app/api/memory/route.ts +0 -11
- package/src/app/api/notifications/route.ts +4 -2
- package/src/app/api/projects/[id]/route.ts +5 -155
- package/src/app/api/projects/__tests__/delete-project.test.ts +10 -19
- package/src/app/api/schedules/[id]/execute/route.ts +111 -0
- package/src/app/api/schedules/[id]/route.ts +9 -1
- package/src/app/api/schedules/__tests__/execute-route.test.ts +118 -0
- package/src/app/api/schedules/route.ts +3 -12
- package/src/app/api/settings/chat/pins/route.ts +94 -0
- package/src/app/api/settings/chat/saved-searches/__tests__/route.test.ts +119 -0
- package/src/app/api/settings/chat/saved-searches/route.ts +79 -0
- package/src/app/api/settings/environment/route.ts +26 -0
- package/src/app/api/settings/openai/login/route.ts +22 -0
- package/src/app/api/settings/openai/logout/route.ts +7 -0
- package/src/app/api/settings/openai/route.ts +21 -1
- package/src/app/api/settings/providers/route.ts +35 -8
- package/src/app/api/tables/[id]/enrich/__tests__/route.test.ts +153 -0
- package/src/app/api/tables/[id]/enrich/plan/route.ts +98 -0
- package/src/app/api/tables/[id]/enrich/route.ts +147 -0
- package/src/app/api/tables/[id]/enrich/runs/route.ts +25 -0
- package/src/app/api/tasks/[id]/execute/route.ts +52 -33
- package/src/app/api/tasks/[id]/respond/route.ts +31 -15
- package/src/app/api/tasks/[id]/resume/route.ts +24 -3
- package/src/app/api/workflows/[id]/resume/route.ts +59 -0
- package/src/app/api/workflows/[id]/status/route.ts +22 -8
- package/src/app/api/workspace/context/route.ts +2 -0
- package/src/app/api/workspace/fix-data-dir/route.ts +81 -0
- package/src/app/chat/page.tsx +11 -0
- package/src/app/documents/page.tsx +4 -1
- package/src/app/inbox/page.tsx +12 -5
- package/src/app/layout.tsx +42 -21
- package/src/app/page.tsx +0 -2
- package/src/app/settings/page.tsx +8 -9
- package/src/components/chat/__tests__/capability-banner.test.tsx +38 -0
- package/src/components/chat/__tests__/chat-session-provider.test.tsx +573 -0
- package/src/components/chat/__tests__/skill-row.test.tsx +91 -0
- package/src/components/chat/capability-banner.tsx +68 -0
- package/src/components/chat/chat-command-popover.tsx +670 -49
- package/src/components/chat/chat-input.tsx +104 -10
- package/src/components/chat/chat-message.tsx +12 -3
- package/src/components/chat/chat-session-provider.tsx +790 -0
- package/src/components/chat/chat-shell.tsx +151 -401
- package/src/components/chat/command-tab-bar.tsx +68 -0
- package/src/components/chat/conversation-template-picker.tsx +421 -0
- package/src/components/chat/help-dialog.tsx +39 -0
- package/src/components/chat/skill-composition-conflict-dialog.tsx +96 -0
- package/src/components/chat/skill-row.tsx +147 -0
- package/src/components/documents/document-browser.tsx +37 -19
- package/src/components/instance/__tests__/instance-section.test.tsx +125 -0
- package/src/components/instance/instance-section.tsx +382 -0
- package/src/components/instance/upgrade-badge.tsx +219 -0
- package/src/components/notifications/__tests__/batch-proposal-review.test.tsx +95 -0
- package/src/components/notifications/__tests__/notification-item.test.tsx +106 -0
- package/src/components/notifications/__tests__/permission-response-actions.test.tsx +70 -0
- package/src/components/notifications/batch-proposal-review.tsx +20 -5
- package/src/components/notifications/inbox-list.tsx +11 -2
- package/src/components/notifications/notification-item.tsx +56 -2
- package/src/components/notifications/pending-approval-host.tsx +56 -37
- package/src/components/notifications/permission-response-actions.tsx +155 -1
- package/src/components/schedules/schedule-create-sheet.tsx +19 -1
- package/src/components/schedules/schedule-edit-sheet.tsx +20 -1
- package/src/components/schedules/schedule-form.tsx +31 -0
- package/src/components/settings/__tests__/providers-runtimes-section.test.tsx +149 -0
- package/src/components/settings/auth-method-selector.tsx +19 -4
- package/src/components/settings/auth-status-badge.tsx +28 -3
- package/src/components/settings/environment-section.tsx +102 -0
- package/src/components/settings/openai-chatgpt-auth-control.tsx +278 -0
- package/src/components/settings/openai-runtime-section.tsx +7 -1
- package/src/components/settings/providers-runtimes-section.tsx +138 -19
- package/src/components/shared/__tests__/filter-hint.test.tsx +40 -0
- package/src/components/shared/__tests__/saved-searches-manager.test.tsx +147 -0
- package/src/components/shared/app-sidebar.tsx +4 -3
- package/src/components/shared/command-palette.tsx +266 -7
- package/src/components/shared/filter-hint.tsx +70 -0
- package/src/components/shared/filter-input.tsx +59 -0
- package/src/components/shared/saved-searches-manager.tsx +199 -0
- package/src/components/shared/theme-toggle.tsx +5 -24
- package/src/components/shared/workspace-indicator.tsx +61 -2
- package/src/components/tables/__tests__/table-enrichment-sheet.test.tsx +130 -0
- package/src/components/tables/table-create-sheet.tsx +4 -0
- package/src/components/tables/table-enrichment-runs.tsx +103 -0
- package/src/components/tables/table-enrichment-sheet.tsx +538 -0
- package/src/components/tables/table-spreadsheet.tsx +29 -5
- package/src/components/tables/table-toolbar.tsx +10 -1
- package/src/components/tasks/kanban-board.tsx +1 -0
- package/src/components/tasks/kanban-column.tsx +53 -14
- package/src/components/tasks/task-bento-grid.tsx +31 -2
- package/src/components/tasks/task-card.tsx +29 -3
- package/src/components/tasks/task-chip-bar.tsx +54 -1
- package/src/components/tasks/task-result-renderer.tsx +1 -1
- package/src/components/workflows/delay-step-body.tsx +109 -0
- package/src/components/workflows/hooks/use-workflow-status.ts +50 -0
- package/src/components/workflows/loop-status-view.tsx +1 -1
- package/src/components/workflows/shared/step-result.tsx +78 -0
- package/src/components/workflows/shared/workflow-header.tsx +141 -0
- package/src/components/workflows/shared/workflow-loading-skeleton.tsx +36 -0
- package/src/components/workflows/swarm-dashboard.tsx +2 -15
- package/src/components/workflows/views/loop-pattern-view.tsx +137 -0
- package/src/components/workflows/views/sequence-pattern-view.tsx +511 -0
- package/src/components/workflows/workflow-form-view.tsx +133 -16
- package/src/components/workflows/workflow-status-view.tsx +30 -740
- package/src/hooks/__tests__/use-chat-autocomplete-tabs.test.ts +47 -0
- package/src/hooks/__tests__/use-saved-searches.test.ts +70 -0
- package/src/hooks/use-active-skills.ts +110 -0
- package/src/hooks/use-chat-autocomplete.ts +120 -7
- package/src/hooks/use-enriched-skills.ts +19 -0
- package/src/hooks/use-pinned-entries.ts +104 -0
- package/src/hooks/use-recent-user-messages.ts +19 -0
- package/src/hooks/use-saved-searches.ts +142 -0
- package/src/instrumentation-node.ts +94 -0
- package/src/instrumentation.ts +4 -48
- package/src/lib/agents/__tests__/claude-agent-sdk-options.test.ts +56 -0
- package/src/lib/agents/__tests__/claude-agent.test.ts +212 -0
- package/src/lib/agents/__tests__/execution-manager.test.ts +1 -27
- package/src/lib/agents/__tests__/failure-reason.test.ts +68 -0
- package/src/lib/agents/__tests__/learned-context.test.ts +0 -11
- package/src/lib/agents/__tests__/learning-session.test.ts +158 -0
- package/src/lib/agents/__tests__/pattern-extractor.test.ts +48 -0
- package/src/lib/agents/__tests__/task-dispatch.test.ts +166 -0
- package/src/lib/agents/__tests__/tool-permissions.test.ts +60 -0
- package/src/lib/agents/claude-agent.ts +217 -21
- package/src/lib/agents/execution-manager.ts +0 -35
- package/src/lib/agents/handoff/bus.ts +2 -2
- package/src/lib/agents/learned-context.ts +0 -12
- package/src/lib/agents/learning-session.ts +18 -5
- package/src/lib/agents/profiles/__tests__/list-fused-profiles.test.ts +110 -0
- package/src/lib/agents/profiles/__tests__/registry.test.ts +53 -4
- package/src/lib/agents/profiles/builtins/upgrade-assistant/SKILL.md +97 -0
- package/src/lib/agents/profiles/builtins/upgrade-assistant/profile.yaml +36 -0
- package/src/lib/agents/profiles/list-fused-profiles.ts +104 -0
- package/src/lib/agents/profiles/registry.ts +18 -0
- package/src/lib/agents/profiles/types.ts +7 -1
- package/src/lib/agents/router.ts +3 -6
- package/src/lib/agents/runtime/__tests__/catalog.test.ts +130 -0
- package/src/lib/agents/runtime/__tests__/execution-target.test.ts +183 -0
- package/src/lib/agents/runtime/__tests__/openai-codex-auth.test.ts +118 -0
- package/src/lib/agents/runtime/anthropic-direct.ts +8 -0
- package/src/lib/agents/runtime/catalog.ts +121 -0
- package/src/lib/agents/runtime/claude-sdk.ts +32 -0
- package/src/lib/agents/runtime/codex-app-server-client.ts +11 -5
- package/src/lib/agents/runtime/execution-target.ts +456 -0
- package/src/lib/agents/runtime/index.ts +4 -0
- package/src/lib/agents/runtime/launch-failure.ts +101 -0
- package/src/lib/agents/runtime/openai-codex-auth.ts +389 -0
- package/src/lib/agents/runtime/openai-codex.ts +64 -60
- package/src/lib/agents/runtime/openai-direct.ts +8 -0
- package/src/lib/agents/runtime/types.ts +8 -0
- package/src/lib/agents/task-dispatch.ts +220 -0
- package/src/lib/agents/tool-permissions.ts +16 -1
- package/src/lib/book/chapter-mapping.ts +11 -0
- package/src/lib/book/content.ts +10 -0
- package/src/lib/chat/__tests__/active-skill-injection.test.ts +261 -0
- package/src/lib/chat/__tests__/active-streams.test.ts +49 -0
- package/src/lib/chat/__tests__/clean-filter-input.test.ts +68 -0
- package/src/lib/chat/__tests__/command-tabs.test.ts +68 -0
- package/src/lib/chat/__tests__/context-builder-files.test.ts +112 -0
- package/src/lib/chat/__tests__/dismissals.test.ts +65 -0
- package/src/lib/chat/__tests__/engine-sdk-options.test.ts +117 -0
- package/src/lib/chat/__tests__/finalize-safety-net.test.ts +139 -0
- package/src/lib/chat/__tests__/reconcile.test.ts +137 -0
- package/src/lib/chat/__tests__/skill-conflict.test.ts +35 -0
- package/src/lib/chat/__tests__/stream-telemetry.test.ts +151 -0
- package/src/lib/chat/__tests__/types.test.ts +28 -0
- package/src/lib/chat/active-skills.ts +31 -0
- package/src/lib/chat/active-streams.ts +27 -0
- package/src/lib/chat/clean-filter-input.ts +30 -0
- package/src/lib/chat/codex-engine.ts +46 -24
- package/src/lib/chat/command-tabs.ts +61 -0
- package/src/lib/chat/context-builder.ts +146 -4
- package/src/lib/chat/dismissals.ts +73 -0
- package/src/lib/chat/engine.ts +159 -18
- package/src/lib/chat/files/__tests__/search.test.ts +135 -0
- package/src/lib/chat/files/expand-mention.ts +76 -0
- package/src/lib/chat/files/search.ts +99 -0
- package/src/lib/chat/reconcile.ts +117 -0
- package/src/lib/chat/skill-composition.ts +210 -0
- package/src/lib/chat/skill-conflict.ts +105 -0
- package/src/lib/chat/stagent-tools.ts +7 -19
- package/src/lib/chat/stream-telemetry.ts +137 -0
- package/src/lib/chat/suggested-prompts.ts +28 -1
- package/src/lib/chat/system-prompt.ts +48 -1
- package/src/lib/chat/tool-catalog.ts +35 -4
- package/src/lib/chat/tools/__tests__/enrich-table-tool.test.ts +127 -0
- package/src/lib/chat/tools/__tests__/profile-tools.test.ts +51 -0
- package/src/lib/chat/tools/__tests__/schedule-tools.test.ts +261 -0
- package/src/lib/chat/tools/__tests__/settings-tools.test.ts +294 -0
- package/src/lib/chat/tools/__tests__/skill-tools.test.ts +474 -0
- package/src/lib/chat/tools/__tests__/task-tools.test.ts +399 -0
- package/src/lib/chat/tools/__tests__/workflow-tools-dedup.test.ts +351 -0
- package/src/lib/chat/tools/blueprint-tools.ts +190 -0
- package/src/lib/chat/tools/document-tools.ts +29 -13
- package/src/lib/chat/tools/helpers.ts +41 -0
- package/src/lib/chat/tools/notification-tools.ts +9 -5
- package/src/lib/chat/tools/profile-tools.ts +120 -23
- package/src/lib/chat/tools/project-tools.ts +33 -0
- package/src/lib/chat/tools/schedule-tools.ts +44 -11
- package/src/lib/chat/tools/skill-tools.ts +183 -0
- package/src/lib/chat/tools/table-tools.ts +71 -0
- package/src/lib/chat/tools/task-tools.ts +89 -21
- package/src/lib/chat/tools/workflow-tools.ts +275 -32
- package/src/lib/chat/types.ts +15 -0
- package/src/lib/constants/settings.ts +10 -18
- package/src/lib/data/__tests__/clear.test.ts +56 -2
- package/src/lib/data/clear.ts +17 -16
- package/src/lib/data/delete-project.ts +171 -0
- package/src/lib/db/__tests__/bootstrap.test.ts +1 -1
- package/src/lib/db/bootstrap.ts +62 -16
- package/src/lib/db/index.ts +5 -0
- package/src/lib/db/migrations/0009_add_app_instances.sql +25 -0
- package/src/lib/db/migrations/0024_add_workflow_resume_at.sql +10 -0
- package/src/lib/db/migrations/0025_drop_app_instances.sql +3 -0
- package/src/lib/db/migrations/0026_drop_license.sql +3 -0
- package/src/lib/db/migrations/meta/_journal.json +21 -0
- package/src/lib/db/schema.ts +94 -23
- package/src/lib/environment/__tests__/auto-promote.test.ts +132 -0
- package/src/lib/environment/__tests__/list-skills-enriched.test.ts +55 -0
- package/src/lib/environment/__tests__/skill-enrichment.test.ts +129 -0
- package/src/lib/environment/__tests__/skill-recommendations.test.ts +87 -0
- package/src/lib/environment/data.ts +9 -0
- package/src/lib/environment/list-skills.ts +176 -0
- package/src/lib/environment/parsers/__tests__/skill.test.ts +54 -0
- package/src/lib/environment/parsers/skill.ts +26 -5
- package/src/lib/environment/profile-generator.ts +54 -0
- package/src/lib/environment/skill-enrichment.ts +106 -0
- package/src/lib/environment/skill-recommendations.ts +66 -0
- package/src/lib/environment/workspace-context.ts +13 -1
- package/src/lib/filters/__tests__/parse.quoted.test.ts +40 -0
- package/src/lib/filters/__tests__/parse.test.ts +135 -0
- package/src/lib/filters/parse.ts +86 -0
- package/src/lib/import/dedup.ts +4 -54
- package/src/lib/instance/__tests__/bootstrap.test.ts +362 -0
- package/src/lib/instance/__tests__/detect.test.ts +115 -0
- package/src/lib/instance/__tests__/fingerprint.test.ts +48 -0
- package/src/lib/instance/__tests__/git-ops.test.ts +95 -0
- package/src/lib/instance/__tests__/settings.test.ts +83 -0
- package/src/lib/instance/__tests__/upgrade-poller.test.ts +181 -0
- package/src/lib/instance/bootstrap.ts +270 -0
- package/src/lib/instance/detect.ts +49 -0
- package/src/lib/instance/fingerprint.ts +76 -0
- package/src/lib/instance/git-ops.ts +95 -0
- package/src/lib/instance/settings.ts +61 -0
- package/src/lib/instance/types.ts +77 -0
- package/src/lib/instance/upgrade-poller.ts +205 -0
- package/src/lib/notifications/__tests__/visibility.test.ts +51 -0
- package/src/lib/notifications/visibility.ts +33 -0
- package/src/lib/schedules/__tests__/collision-check.test.ts +93 -0
- package/src/lib/schedules/__tests__/config.test.ts +62 -0
- package/src/lib/schedules/__tests__/firing-metrics.test.ts +99 -0
- package/src/lib/schedules/__tests__/integration.test.ts +82 -0
- package/src/lib/schedules/__tests__/slot-claim.test.ts +242 -0
- package/src/lib/schedules/__tests__/tick-scheduler.test.ts +102 -0
- package/src/lib/schedules/__tests__/turn-budget.test.ts +228 -0
- package/src/lib/schedules/collision-check.ts +105 -0
- package/src/lib/schedules/config.ts +53 -0
- package/src/lib/schedules/scheduler.ts +236 -17
- package/src/lib/schedules/slot-claim.ts +105 -0
- package/src/lib/settings/__tests__/openai-auth.test.ts +101 -0
- package/src/lib/settings/__tests__/openai-login-manager.test.ts +64 -0
- package/src/lib/settings/__tests__/runtime-setup.test.ts +33 -0
- package/src/lib/settings/openai-auth.ts +105 -10
- package/src/lib/settings/openai-login-manager.ts +260 -0
- package/src/lib/settings/runtime-setup.ts +14 -4
- package/src/lib/tables/__tests__/enrichment-planner.test.ts +124 -0
- package/src/lib/tables/__tests__/enrichment.test.ts +147 -0
- package/src/lib/tables/enrichment-planner.ts +454 -0
- package/src/lib/tables/enrichment.ts +328 -0
- package/src/lib/tables/query-builder.ts +5 -2
- package/src/lib/tables/trigger-evaluator.ts +3 -2
- package/src/lib/theme.ts +71 -0
- package/src/lib/usage/ledger.ts +2 -18
- package/src/lib/util/__tests__/similarity.test.ts +106 -0
- package/src/lib/util/similarity.ts +77 -0
- package/src/lib/utils/format-timestamp.ts +24 -0
- package/src/lib/utils/stagent-paths.ts +12 -0
- package/src/lib/validators/__tests__/blueprint.test.ts +172 -0
- package/src/lib/validators/__tests__/settings.test.ts +10 -0
- package/src/lib/validators/blueprint.ts +70 -9
- package/src/lib/validators/profile.ts +2 -2
- package/src/lib/validators/settings.ts +3 -1
- package/src/lib/workflows/__tests__/delay.test.ts +196 -0
- package/src/lib/workflows/__tests__/engine.test.ts +8 -0
- package/src/lib/workflows/__tests__/loop-executor.test.ts +54 -0
- package/src/lib/workflows/__tests__/post-action.test.ts +108 -0
- package/src/lib/workflows/blueprints/__tests__/render-prompt.test.ts +124 -0
- package/src/lib/workflows/blueprints/instantiator.ts +22 -1
- package/src/lib/workflows/blueprints/render-prompt.ts +71 -0
- package/src/lib/workflows/blueprints/types.ts +16 -2
- package/src/lib/workflows/delay.ts +106 -0
- package/src/lib/workflows/engine.ts +212 -7
- package/src/lib/workflows/loop-executor.ts +349 -24
- package/src/lib/workflows/post-action.ts +91 -0
- package/src/lib/workflows/types.ts +166 -1
- package/src/test/setup.ts +10 -0
- package/src/app/api/license/checkout/route.ts +0 -28
- package/src/app/api/license/portal/route.ts +0 -26
- package/src/app/api/license/route.ts +0 -89
- package/src/app/api/license/usage/route.ts +0 -63
- package/src/app/api/marketplace/browse/route.ts +0 -15
- package/src/app/api/marketplace/import/route.ts +0 -28
- package/src/app/api/marketplace/publish/route.ts +0 -40
- package/src/app/api/onboarding/email/route.ts +0 -53
- package/src/app/api/settings/telemetry/route.ts +0 -14
- package/src/app/api/sync/export/route.ts +0 -54
- package/src/app/api/sync/restore/route.ts +0 -37
- package/src/app/api/sync/sessions/route.ts +0 -24
- package/src/app/auth/callback/route.ts +0 -73
- package/src/app/marketplace/page.tsx +0 -19
- package/src/components/analytics/analytics-gate-card.tsx +0 -101
- package/src/components/marketplace/blueprint-card.tsx +0 -61
- package/src/components/marketplace/marketplace-browser.tsx +0 -131
- package/src/components/onboarding/email-capture-card.tsx +0 -104
- package/src/components/settings/activation-form.tsx +0 -95
- package/src/components/settings/cloud-account-section.tsx +0 -147
- package/src/components/settings/cloud-sync-section.tsx +0 -155
- package/src/components/settings/subscription-section.tsx +0 -410
- package/src/components/settings/telemetry-section.tsx +0 -80
- package/src/components/shared/premium-gate-overlay.tsx +0 -50
- package/src/components/shared/schedule-gate-dialog.tsx +0 -64
- package/src/components/shared/upgrade-banner.tsx +0 -112
- package/src/hooks/use-supabase-auth.ts +0 -79
- package/src/lib/billing/email.ts +0 -54
- package/src/lib/billing/products.ts +0 -80
- package/src/lib/billing/stripe.ts +0 -101
- package/src/lib/cloud/supabase-browser.ts +0 -32
- package/src/lib/cloud/supabase-client.ts +0 -56
- package/src/lib/license/__tests__/features.test.ts +0 -56
- package/src/lib/license/__tests__/key-format.test.ts +0 -88
- package/src/lib/license/__tests__/manager.test.ts +0 -64
- package/src/lib/license/__tests__/tier-limits.test.ts +0 -79
- package/src/lib/license/cloud-validation.ts +0 -60
- package/src/lib/license/features.ts +0 -44
- package/src/lib/license/key-format.ts +0 -101
- package/src/lib/license/limit-check.ts +0 -111
- package/src/lib/license/limit-queries.ts +0 -51
- package/src/lib/license/manager.ts +0 -345
- package/src/lib/license/notifications.ts +0 -59
- package/src/lib/license/tier-limits.ts +0 -71
- package/src/lib/marketplace/marketplace-client.ts +0 -107
- package/src/lib/sync/cloud-sync.ts +0 -235
- package/src/lib/telemetry/conversion-events.ts +0 -71
- package/src/lib/telemetry/queue.ts +0 -122
- package/src/lib/validators/license.ts +0 -33
|
@@ -4,9 +4,9 @@ category: "feature-reference"
|
|
|
4
4
|
section: "inbox-notifications"
|
|
5
5
|
route: "/inbox"
|
|
6
6
|
tags: [inbox, notifications, permissions, approval, human-in-the-loop, toast, handoffs, agent-messages]
|
|
7
|
-
features: ["inbox-notifications", "ambient-approval-toast", "content-handling", "agent-async-handoffs"]
|
|
7
|
+
features: ["inbox-notifications", "ambient-approval-toast", "content-handling", "agent-async-handoffs", "upgrade-detection", "upgrade-session"]
|
|
8
8
|
screengrabCount: 2
|
|
9
|
-
lastUpdated: "2026-
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Inbox & Notifications
|
|
@@ -41,6 +41,14 @@ When an agent requests permission to use a tool, a "Permission Required" notific
|
|
|
41
41
|
### Agent Handoff Approvals
|
|
42
42
|
When one agent hands off work to another via the async message bus, a handoff notification appears in the inbox. You can approve the handoff to let the receiving agent proceed, or deny it to stop the chain. Governance gates enforce chain depth limits and prevent self-handoffs.
|
|
43
43
|
|
|
44
|
+
### Agent Questions (AskUserQuestion)
|
|
45
|
+
|
|
46
|
+
When an agent needs a direct answer from you — for example, to disambiguate between two valid paths during an upgrade merge — it uses the **AskUserQuestion** tool. These surface in the inbox as question notifications with a typed reply box (rendered by the `QuestionReplyActions` branch of the permission-response view). Submit a short answer inline and the agent resumes from where it paused. Questions are distinct from permission requests: there is no "Approve / Deny," only the reply field.
|
|
47
|
+
|
|
48
|
+
### Upgrade Failure Notifications
|
|
49
|
+
|
|
50
|
+
If the hourly upgrade-detection poller fails three consecutive times (network error, unreachable remote, etc.), a persistent notification is posted to the inbox so the issue does not go silent. The three-strike dedup prevents a flood — only the first sustained failure raises a notification, and it clears automatically once the poller succeeds again.
|
|
51
|
+
|
|
44
52
|
### Ambient Approval Toasts
|
|
45
53
|
For quick permission grants, ambient toasts appear at the edge of the screen. You can approve or deny without navigating to the inbox, keeping your workflow uninterrupted.
|
|
46
54
|
|
|
@@ -3,10 +3,10 @@ title: "Keyboard Navigation"
|
|
|
3
3
|
category: "feature-reference"
|
|
4
4
|
section: "keyboard-navigation"
|
|
5
5
|
route: "cross-cutting"
|
|
6
|
-
tags: [keyboard, command-palette, accessibility, aria, a11y, navigation]
|
|
7
|
-
features: ["command-palette-enhancement", "accessibility", "keyboard-shortcut-system"]
|
|
6
|
+
tags: [keyboard, command-palette, accessibility, aria, a11y, navigation, templates, saved-searches, slash-commands]
|
|
7
|
+
features: ["command-palette-enhancement", "accessibility", "keyboard-shortcut-system", "chat-conversation-templates", "chat-pinned-saved-searches", "saved-search-polish-v1"]
|
|
8
8
|
screengrabCount: 2
|
|
9
|
-
lastUpdated: "2026-
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Keyboard Navigation
|
|
@@ -31,6 +31,15 @@ Activated with **Meta+K** (Cmd+K on macOS, Ctrl+K on other platforms), the comma
|
|
|
31
31
|
- **Cross-entity search** -- type to search across projects, tasks, workflows, documents, and schedules in a single unified list.
|
|
32
32
|
- **Keyboard navigation** -- arrow keys to browse results, Enter to select, Escape to dismiss.
|
|
33
33
|
- **Action shortcuts** -- create new tasks, projects, or workflows directly from the palette.
|
|
34
|
+
- **Templates group** -- browse conversation templates generated from workflow blueprints; pick one to open a pre-primed chat.
|
|
35
|
+
- **Saved group** -- recall pinned search + filter combinations across Chat, Documents, and Tables. Saved searches round-trip through a settings endpoint and refetch automatically when new ones are added.
|
|
36
|
+
|
|
37
|
+
### Slash Commands
|
|
38
|
+
|
|
39
|
+
In addition to the palette, the Chat composer recognizes slash commands for fast actions:
|
|
40
|
+
|
|
41
|
+
- `/new-from-template` -- open the conversation template picker inline without leaving the composer.
|
|
42
|
+
- Additional slash commands live alongside the `/` popover tabs (Actions, Skills, Tools, Entities).
|
|
34
43
|
|
|
35
44
|
### Focus-Visible Rings
|
|
36
45
|
|
|
@@ -4,9 +4,9 @@ category: "feature-reference"
|
|
|
4
4
|
section: "provider-runtimes"
|
|
5
5
|
route: "cross-cutting"
|
|
6
6
|
tags: [claude, codex, runtime, oauth, websocket, mcp, providers, ollama, anthropic-direct, openai-direct, smart-router]
|
|
7
|
-
features: ["provider-runtime-abstraction", "openai-codex-app-server", "cross-provider-profile-compatibility", "ollama-runtime-provider", "anthropic-direct-runtime", "openai-direct-runtime", "smart-runtime-router"]
|
|
7
|
+
features: ["provider-runtime-abstraction", "openai-codex-app-server", "cross-provider-profile-compatibility", "ollama-runtime-provider", "anthropic-direct-runtime", "openai-direct-runtime", "smart-runtime-router", "runtime-validation-hardening", "runtime-capability-matrix"]
|
|
8
8
|
screengrabCount: 2
|
|
9
|
-
lastUpdated: "2026-
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Provider Runtimes
|
|
@@ -51,6 +51,10 @@ The Codex runtime connects to the OpenAI Codex App Server over WebSocket using J
|
|
|
51
51
|
|
|
52
52
|
- Resumable threads with persistent state across reconnections.
|
|
53
53
|
- WebSocket transport for low-latency bidirectional communication.
|
|
54
|
+
- Two auth modes for Codex App Server:
|
|
55
|
+
- **ChatGPT** -- browser sign-in tied to your ChatGPT plan, with cached session reuse in Stagent's isolated Codex home
|
|
56
|
+
- **API Key** -- direct API-key auth using `OPENAI_API_KEY`
|
|
57
|
+
- OpenAI Direct remains a separate API-key-backed runtime even when Codex App Server uses ChatGPT auth.
|
|
54
58
|
|
|
55
59
|
### OpenAI Direct API Runtime
|
|
56
60
|
|
|
@@ -82,6 +86,20 @@ The smart router automatically selects the best runtime for each task based on m
|
|
|
82
86
|
|
|
83
87
|
The default selection is "Auto (recommended)" which lets the router decide. You can always override with a specific runtime in task, schedule, or workflow forms.
|
|
84
88
|
|
|
89
|
+
### Runtime Capability Matrix
|
|
90
|
+
|
|
91
|
+
Each runtime advertises its capabilities through a central matrix used by the rest of the app to decide whether to show a feature, gate it, or substitute a fallback. The most visible flags today:
|
|
92
|
+
|
|
93
|
+
- **`supportsSkillComposition`** — whether the runtime accepts multiple concurrent skills on a single conversation. Gates the Chat Skills tab multi-activation behavior.
|
|
94
|
+
- **`maxActiveSkills`** — hard cap on the active skill stack. The Chat composer shows "N of M active" against this value.
|
|
95
|
+
- **`hasNativeSkills`** / **`stagentInjectsSkills`** / **`autoLoadsInstructions`** — decide whether Stagent should inject SKILL.md or trust the runtime's native loader, preventing duplicated context on Codex and Claude.
|
|
96
|
+
|
|
97
|
+
Reading this matrix before wiring a feature is the canonical way to answer "should Stagent do X, or trust the runtime to do X."
|
|
98
|
+
|
|
99
|
+
### Runtime Validation Hardening
|
|
100
|
+
|
|
101
|
+
The MCP task-tools surface now validates every incoming `runtimeId` before dispatching work — unknown IDs are rejected at the boundary rather than crashing downstream. This protects the runtime registry from malformed chat-tool calls and surfaces bad configurations with a clean error message instead of a stack trace.
|
|
102
|
+
|
|
85
103
|
### Cross-Provider Profile Compatibility
|
|
86
104
|
|
|
87
105
|
Agent profiles are defined independently of the provider runtime. A profile specifies behavioral traits -- system prompt, tool preferences, stop conditions -- that translate cleanly to any of the five runtimes. Switching the runtime dropdown on a task preserves the selected profile and its configuration.
|
|
@@ -3,10 +3,10 @@ title: "Schedules"
|
|
|
3
3
|
category: "feature-reference"
|
|
4
4
|
section: "schedules"
|
|
5
5
|
route: "/schedules"
|
|
6
|
-
tags: ["schedules", "automation", "recurring", "prompts", "heartbeat", "natural-language", "proactive"]
|
|
7
|
-
features: ["scheduled-prompt-loops", "heartbeat-scheduler", "natural-language-scheduling"]
|
|
8
|
-
screengrabCount:
|
|
9
|
-
lastUpdated: "2026-
|
|
6
|
+
tags: ["schedules", "automation", "recurring", "prompts", "heartbeat", "natural-language", "proactive", "orchestration", "concurrency"]
|
|
7
|
+
features: ["scheduled-prompt-loops", "heartbeat-scheduler", "natural-language-scheduling", "schedule-orchestration-v2"]
|
|
8
|
+
screengrabCount: 4
|
|
9
|
+
lastUpdated: "2026-04-08"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Schedules
|
|
@@ -21,6 +21,12 @@ Automate recurring AI prompts on configurable intervals with two distinct schedu
|
|
|
21
21
|

|
|
22
22
|
*The schedule detail sheet shows full configuration, checklist items (for heartbeats), execution statistics, and chronological firing history.*
|
|
23
23
|
|
|
24
|
+

|
|
25
|
+
*The Create Schedule sheet exposes the new per-schedule turn-budget field. Max agent steps per run caps how many actions the agent takes in a single firing before the runtime aborts.*
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
*Filled schedule form showing a weekday 9am security audit with a 250-step budget. Writing "MAX N turns" in your prompt is a hint to the model — the Max agent steps field is the enforced runtime limit.*
|
|
29
|
+
|
|
24
30
|
## Key Features
|
|
25
31
|
|
|
26
32
|
### Two Schedule Types
|
|
@@ -66,6 +72,28 @@ Every schedule firing creates a tracked child task. The detail view shows a chro
|
|
|
66
72
|
### Pause and Resume
|
|
67
73
|
Suspend a schedule without losing its configuration or execution history. Pausing stops future runs while preserving the next-run calculation, so resuming picks up right where it left off.
|
|
68
74
|
|
|
75
|
+
## Orchestration & Safety
|
|
76
|
+
|
|
77
|
+
Schedule orchestration v2 adds four orchestration primitives that keep concurrent schedules, long-running firings, and noisy prompts from destabilising the workspace.
|
|
78
|
+
|
|
79
|
+
### Global Concurrency Cap
|
|
80
|
+
A configurable ceiling on how many scheduled runs can execute simultaneously. When the cap is reached, new firings are queued rather than launched in parallel. The atomic slot-claim primitive ensures that two schedules firing at the exact same tick cannot both slip past the limit — at most one claims each available slot. The cap adapts to chat pressure: active streaming chat sessions count against the ceiling so scheduled runs do not contend with interactive work.
|
|
81
|
+
|
|
82
|
+
### Lease Reaper
|
|
83
|
+
Each running firing holds a lease recorded in the slot registry. A background reaper periodically checks for stale leases — firings whose host process died or whose runtime never responded — and reclaims their slots via `AbortController`. This is the safety net that prevents hung runs from permanently occupying capacity.
|
|
84
|
+
|
|
85
|
+
### Pre-Flight Cron Collision Warning
|
|
86
|
+
When you save a schedule whose cron expression overlaps with an existing schedule (both would fire in the same minute on the same day), the form shows a warning banner at save time listing the conflicting schedules. You can still save — collisions are not blocked — but you see the conflict before committing so you can spread the load if desired.
|
|
87
|
+
|
|
88
|
+
### Per-Schedule Turn Budget
|
|
89
|
+
The **Max agent steps per run** field caps the number of agent actions (messages, tool calls, sub-responses) allowed in a single firing. The runtime enforces this as a hard limit — not a prompt hint — and emits an explicit `failure_reason` if the budget is exceeded. Most schedules run comfortably in the 50–500 step range; heavy research runs sometimes need 2,000+. A separate streak counter grants one grace breach before the schedule is auto-paused, so a single over-budget run does not kill a stable schedule.
|
|
90
|
+
|
|
91
|
+
### Manual Execute with Force-Bypass
|
|
92
|
+
The schedule detail view exposes a manual execute action that runs the schedule once, immediately, without waiting for the next scheduled tick. Manual runs still honour the concurrency cap by default; power users can force-bypass the cap for urgent one-off runs, with the bypass recorded in the audit ledger as a `manual_force_bypass` usage event.
|
|
93
|
+
|
|
94
|
+
### Firing Metrics for Tuning
|
|
95
|
+
Every firing writes a row into `schedule_firing_metrics` capturing start time, end time, steps consumed, tool calls made, and terminal reason. This is the forensic trail you use to tune `Max agent steps`, detect runaway prompts, and spot schedules that routinely run close to their budget.
|
|
96
|
+
|
|
69
97
|
## How To
|
|
70
98
|
|
|
71
99
|
### Create a Clock-Driven Schedule
|
|
@@ -3,10 +3,10 @@ title: "Settings"
|
|
|
3
3
|
category: "feature-reference"
|
|
4
4
|
section: "settings"
|
|
5
5
|
route: "/settings"
|
|
6
|
-
tags: ["settings", "configuration", "auth", "runtime", "browser-tools", "permissions", "budget", "ollama", "channels"]
|
|
7
|
-
features: ["session-management", "tool-permission-persistence", "tool-permission-presets", "browser-use", "spend-budget-guardrails", "settings-interactive-controls", "ollama-runtime-provider", "multi-channel-delivery", "bidirectional-channel-chat", "database-snapshot-backup"]
|
|
8
|
-
screengrabCount:
|
|
9
|
-
lastUpdated: "2026-04-
|
|
6
|
+
tags: ["settings", "configuration", "auth", "runtime", "browser-tools", "permissions", "budget", "ollama", "channels", "instance", "upgrade"]
|
|
7
|
+
features: ["session-management", "tool-permission-persistence", "tool-permission-presets", "browser-use", "spend-budget-guardrails", "settings-interactive-controls", "ollama-runtime-provider", "multi-channel-delivery", "bidirectional-channel-chat", "database-snapshot-backup", "instance-bootstrap", "upgrade-detection", "upgrade-session", "instance-license-metering"]
|
|
8
|
+
screengrabCount: 11
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Settings
|
|
@@ -49,7 +49,7 @@ The Settings page is the central configuration hub for Stagent. From a single sc
|
|
|
49
49
|
|
|
50
50
|
### Authentication
|
|
51
51
|
|
|
52
|
-
Choose how Stagent connects to
|
|
52
|
+
Choose how Stagent connects to each provider runtime. For **Anthropic**, **OAuth** uses your existing Max subscription at no additional API cost, while **API Key** uses the Anthropic key stored in your environment. For **OpenAI**, Codex App Server can use either an **OpenAI API key** or **ChatGPT** browser sign-in, while OpenAI Direct continues to use an API key. Connection tests validate the currently selected runtime mode and the OpenAI section shows active ChatGPT account and Codex rate-limit state when available.
|
|
53
53
|
|
|
54
54
|
### Ollama Runtime (Local Models)
|
|
55
55
|
|
|
@@ -172,6 +172,29 @@ Protect your workspace with automatic and manual database backups:
|
|
|
172
172
|
2. Toggle on the preset that matches your comfort level.
|
|
173
173
|
3. The preset's tools are added to your approved list immediately.
|
|
174
174
|
|
|
175
|
+
## Instance & Upgrades
|
|
176
|
+
|
|
177
|
+

|
|
178
|
+
*The Instance section shows the installation metadata and the upgrade flow entry point.*
|
|
179
|
+
|
|
180
|
+
### Instance Section
|
|
181
|
+
The **Instance** card surfaces metadata about this installation: the stable `instanceId`, the current instance branch (e.g., `local` for single-clone users, `wealth-mgr` for private instances), the upstream remote it tracks, and whether the first-boot bootstrap has completed. Power users also see the guardrail state — whether a pre-push hook is installed and whether `pushRemote=no_push` is set on the instance branch.
|
|
182
|
+
|
|
183
|
+
### Dev Mode Gate
|
|
184
|
+
When `STAGENT_DEV_MODE=true` is set in `.env.local` or the `.git/stagent-dev-mode` sentinel file is present, the Instance section displays a "Dev mode" banner and the upgrade machinery is intentionally bypassed. This is the gate that protects the main dev repo from having a pre-push hook installed by the instance-bootstrap flow — contributors working on Stagent itself must not have their own push workflow broken.
|
|
185
|
+
|
|
186
|
+
### Upgrade Detection
|
|
187
|
+
An hourly scheduled poll runs `git fetch` against the upstream remote and compares `HEAD` to `origin/main`. When upstream is ahead, the sidebar shows a small **Upgrade available** badge next to Settings and the Instance card surfaces a "New version available" card with the number of commits behind. Detection is `git`-based rather than GitHub REST to avoid rate limits. Three consecutive poll failures escalate to a persistent notification.
|
|
188
|
+
|
|
189
|
+
### Upgrade Session
|
|
190
|
+
Clicking **Start upgrade** opens the upgrade session as a right-side sheet — not a full-page navigation, so you can glance back at your workspace while the upgrade runs. The session is backed by a task row with the `upgrade-assistant` profile, so it reuses all the existing execution infrastructure: fire-and-forget launch, canUseTool approval caching, SSE log streaming, and conflict resolution via the pending-approval host. If merge conflicts occur, a 3-card cluster (Keep mine / Take theirs / Show diff) appears inline and you resolve them without leaving the sheet. When the assistant needs a direct answer (e.g., to disambiguate a conflict), it now calls **AskUserQuestion**, which renders a typed reply field via the inbox's `QuestionReplyActions` branch — you answer in-place and the assistant resumes. The `upgrade-assistant` profile explicitly allowlists AskUserQuestion so it is not gated behind a generic permission prompt.
|
|
191
|
+
|
|
192
|
+
### Footer Upgrade Button
|
|
193
|
+
A subtle **Upgrade** button appears in the sidebar footer once an upgrade is available — the same surface that shows trust tier and the command palette shortcut. Clicking it opens the same upgrade session sheet from any page without navigating to Settings first.
|
|
194
|
+
|
|
195
|
+
### Hybrid Licensing
|
|
196
|
+
Local-only features (task execution, workflows, schedules, tables) remain unlimited regardless of license state. Cloud features (sync, marketplace, team sharing) are metered via a `(email, machineFingerprint, instanceId)` tuple so the same user on the same machine counts as one seat across multiple instance branches. Seat state is refreshed on each boot via the LicenseManager.
|
|
197
|
+
|
|
175
198
|
## Related
|
|
176
199
|
|
|
177
200
|
- [Cost & Usage](./cost-usage.md)
|
|
@@ -3,10 +3,10 @@ title: "Shared Components"
|
|
|
3
3
|
category: "feature-reference"
|
|
4
4
|
section: "shared-components"
|
|
5
5
|
route: "cross-cutting"
|
|
6
|
-
tags: [components, page-shell, detail-pane, status-chip, filter-bar, data-table, reusable]
|
|
7
|
-
features: ["shared-component-library", "page-shell", "detail-pane", "status-chip", "filter-bar", "view-switcher"]
|
|
6
|
+
tags: [components, page-shell, detail-pane, status-chip, filter-bar, filter-input, data-table, reusable]
|
|
7
|
+
features: ["shared-component-library", "page-shell", "detail-pane", "status-chip", "filter-bar", "view-switcher", "chat-filter-namespace"]
|
|
8
8
|
screengrabCount: 0
|
|
9
|
-
lastUpdated: "2026-
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Shared Components
|
|
@@ -31,6 +31,10 @@ Five status chip families that map to entity lifecycle states. Each chip renders
|
|
|
31
31
|
|
|
32
32
|
Horizontal filter strip placed below page headers. Supports multiple filter types (select, search, date range) and displays an active filter count badge. Filters persist in URL search params for shareable filtered views.
|
|
33
33
|
|
|
34
|
+
### FilterInput
|
|
35
|
+
|
|
36
|
+
Typed input used for namespace-aware filtering (`#scope:`, `#type:`, and similar qualifiers). Supports double-quoted values so phrases with spaces parse correctly — e.g. `#scope:"customer support"`. Used by Chat search, the `@` / `/` popovers, the `/documents` list page, and the `⌘K` palette, giving every surface the same filter syntax. Paired with the `cleanFilterInput()` helper, which strips mention-trigger residue (`@`, `#`, `/`) when a pinned saved search is reapplied.
|
|
37
|
+
|
|
34
38
|
### ViewSwitcher
|
|
35
39
|
|
|
36
40
|
Toggle between saved view modes on a per-surface basis. Common modes include table view and grid/card view. The active view preference persists in local storage.
|
package/docs/features/tables.md
CHANGED
|
@@ -4,9 +4,9 @@ category: "feature-reference"
|
|
|
4
4
|
section: "tables"
|
|
5
5
|
route: "/tables"
|
|
6
6
|
tags: [tables, structured-data, spreadsheet, charts, triggers, templates, import, export, formulas]
|
|
7
|
-
features: ["tables-data-layer", "tables-list-page", "tables-spreadsheet-editor", "tables-document-import", "tables-template-gallery", "tables-agent-integration", "tables-chat-queries", "tables-computed-columns", "tables-cross-joins", "tables-agent-charts", "tables-workflow-triggers", "tables-nl-creation", "tables-export", "tables-versioning"]
|
|
7
|
+
features: ["tables-data-layer", "tables-list-page", "tables-spreadsheet-editor", "tables-document-import", "tables-template-gallery", "tables-agent-integration", "tables-chat-queries", "tables-computed-columns", "tables-cross-joins", "tables-agent-charts", "tables-workflow-triggers", "tables-nl-creation", "tables-export", "tables-versioning", "bulk-row-enrichment"]
|
|
8
8
|
screengrabCount: 8
|
|
9
|
-
lastUpdated: "2026-04-
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Tables
|
|
@@ -38,6 +38,8 @@ Tables is Stagent's structured data system -- a built-in spreadsheet-meets-datab
|
|
|
38
38
|
### Table and Grid Views
|
|
39
39
|
Browse all your tables from the `/tables` list page. Toggle between a compact table view and a visual grid view. Use the filter bar to narrow by category or search by name. Click any table to open it.
|
|
40
40
|
|
|
41
|
+
The filter bar uses the shared **FilterInput** component and the `#namespace:value` syntax (double-quote values that contain spaces, e.g. `#type:"customer list"`). Saved filter + query combinations can be pinned as **saved searches** and recalled from the `⌘K` palette under the **Saved** group — useful for recurring table views like "open orders" or "stale leads." See the [Documents](./documents.md) page for a cross-surface reference implementation.
|
|
42
|
+
|
|
41
43
|
### Create Tables
|
|
42
44
|
Open the create dialog to define a new table with a name, description, and columns. The inline column builder lets you set each column's name, type, and whether it is required -- all before the table is saved. Supported column types include text, number, date, boolean, select (dropdown), URL, email, and computed.
|
|
43
45
|
|
|
@@ -114,6 +116,13 @@ Every row edit is tracked. The History tab shows a timeline of changes, and you
|
|
|
114
116
|
2. The agent will use its table tools to read, filter, aggregate, or update the data as needed.
|
|
115
117
|
3. Results appear in the task output, and any row changes are reflected in the table immediately.
|
|
116
118
|
|
|
119
|
+
### Bulk Row Enrichment
|
|
120
|
+
Enrich every matching row in a table by generating a loop workflow that iterates over the rows and writes results back via a `postAction`. Trigger it two ways:
|
|
121
|
+
- **From chat:** ask "enrich the Leads table with a one-line company summary for each row" — the `enrich_table` chat tool plans a loop workflow scoped to the matching rows.
|
|
122
|
+
- **From the Tables API:** `POST /api/tables/:id/enrich` with a prompt, target column, and optional row filter.
|
|
123
|
+
|
|
124
|
+
Each iteration binds the current row's fields as `{{row.field}}` in the prompt template, so the agent sees only that row's context. Execution is sequential (not parallel) to keep the spend budget predictable, and the loop is idempotent — already-populated cells are skipped on re-run so you can safely resume an interrupted enrichment. The generated workflow appears in the Workflows list so you can watch progress, pause, or inspect per-row results.
|
|
125
|
+
|
|
117
126
|
## Related
|
|
118
127
|
|
|
119
128
|
- [Documents](./documents.md) -- Upload files and attach them to tasks for agent context.
|
|
@@ -4,9 +4,9 @@ category: "feature-reference"
|
|
|
4
4
|
section: "tool-permissions"
|
|
5
5
|
route: "cross-cutting"
|
|
6
6
|
tags: [permissions, trust, safety, approval, human-in-the-loop, presets]
|
|
7
|
-
features: ["tool-permission-persistence", "tool-permission-presets", "ambient-approval-toast"]
|
|
7
|
+
features: ["tool-permission-persistence", "tool-permission-presets", "ambient-approval-toast", "upgrade-session"]
|
|
8
8
|
screengrabCount: 1
|
|
9
|
-
lastUpdated: "2026-
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Tool Permissions
|
|
@@ -46,6 +46,10 @@ Before executing a task, the runtime performs a permission pre-check against the
|
|
|
46
46
|
|
|
47
47
|
When a tool request exceeds the current trust tier and has not been persisted, a notification is created in the inbox. You can approve or deny from the Inbox or from the task detail view, keeping the agent paused until a decision is made.
|
|
48
48
|
|
|
49
|
+
### AskUserQuestion Tool
|
|
50
|
+
|
|
51
|
+
A special tool — `AskUserQuestion` — lets agents ask you for direct input rather than request permission. Instead of an Approve / Deny pair, the inbox notification renders a typed reply box (the `QuestionReplyActions` branch of the permission response view). This is the primitive behind the upgrade assistant's conflict resolution flow: when the merge hits an ambiguous decision, the upgrade profile asks a targeted question and waits for your reply before proceeding. `AskUserQuestion` is never auto-approved and is explicitly allowlisted on the `upgrade-assistant` profile.
|
|
52
|
+
|
|
49
53
|
### Ambient Approval Toast
|
|
50
54
|
|
|
51
55
|
For quick permission grants without navigating away from the current context, ambient toast notifications appear when an agent requests a tool. You can approve directly from the toast, maintaining workflow continuity.
|
|
@@ -3,10 +3,10 @@ title: "Workflows"
|
|
|
3
3
|
category: "feature-reference"
|
|
4
4
|
section: "workflows"
|
|
5
5
|
route: "/workflows"
|
|
6
|
-
tags: [workflows, patterns, sequence, parallel, swarm, autonomous, templates, multi-step, blueprints]
|
|
7
|
-
features: ["workflow-engine", "workflow-blueprints", "ai-assist-workflow-creation", "workflow-context-batching", "business-function-profiles"]
|
|
8
|
-
screengrabCount:
|
|
9
|
-
lastUpdated: "2026-
|
|
6
|
+
tags: [workflows, patterns, sequence, parallel, swarm, autonomous, templates, multi-step, blueprints, delays, drip]
|
|
7
|
+
features: ["workflow-engine", "workflow-blueprints", "ai-assist-workflow-creation", "workflow-context-batching", "business-function-profiles", "workflow-step-delays", "chat-conversation-templates", "workflow-run-history"]
|
|
8
|
+
screengrabCount: 4
|
|
9
|
+
lastUpdated: "2026-04-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Workflows
|
|
@@ -24,6 +24,9 @@ Workflows let you orchestrate multi-step agent operations using six built-in pat
|
|
|
24
24
|

|
|
25
25
|
*Workflow blueprints gallery with pre-built workflow templates*
|
|
26
26
|
|
|
27
|
+

|
|
28
|
+
*The workflow create form exposes an "Add Delay" button alongside "Add Step". Delay steps pause execution for a schedule-based duration (30m, 2h, 3d, 1w) before the next step runs — ideal for drip sequences and cooldown windows.*
|
|
29
|
+
|
|
27
30
|
## Key Features
|
|
28
31
|
|
|
29
32
|
### Six Pattern Types
|
|
@@ -35,6 +38,9 @@ Workflows support six orchestration patterns:
|
|
|
35
38
|
- **Parallel Research** -- Fans out multiple steps to run concurrently, then merges results.
|
|
36
39
|
- **Multi-Agent Swarm** -- Multiple agent profiles collaborate on a shared objective with dynamic handoffs.
|
|
37
40
|
|
|
41
|
+
### Step Delays (Drip Sequences & Cooldowns)
|
|
42
|
+
Insert pure time-delay steps between agent steps using the **Add Delay** button in the create form. Delays accept compact durations like `30m`, `2h`, `3d`, or `1w`. Execution model is schedule-based, not sleep-based: the delay is persisted in `workflows.resume_at` and the scheduler resumes the workflow when the time is up. This means delays survive process restarts — a 3-day cooldown will resume correctly even if the dev server is stopped and restarted in between. Resume is atomic and idempotent: the scheduler and a manual "Resume Now" click cannot double-fire the same delay. Delay steps are the primitive behind drip email campaigns, staggered onboarding sequences, and cooldown windows between automated actions.
|
|
43
|
+
|
|
38
44
|
### Workflow Blueprints
|
|
39
45
|
The blueprint gallery offers pre-built workflow templates for common patterns:
|
|
40
46
|
- **Technical blueprints** -- code review pipelines, deploy-and-verify, research synthesis, documentation generation
|
|
@@ -42,6 +48,10 @@ The blueprint gallery offers pre-built workflow templates for common patterns:
|
|
|
42
48
|
|
|
43
49
|
Click any blueprint to preview its steps, then create a workflow pre-populated with the template configuration. Customize steps, profiles, and runtimes to match your specific process.
|
|
44
50
|
|
|
51
|
+
### Blueprints as Chat Templates
|
|
52
|
+
|
|
53
|
+
Blueprints also double as **conversation templates** for the Chat surface. A blueprint can declare an optional `chatPrompt` field that provides a purpose-built opening prompt for chat use; if it is not set, the chat launcher falls back to `steps[0].promptTemplate`. This means the same blueprint asset powers three entry points — the Workflows gallery, the Chat empty-state picker, and the `/new-from-template` slash command — without requiring parallel definitions. See the [Chat](./chat.md) feature doc for the conversation-side flow.
|
|
54
|
+
|
|
45
55
|
### Tabs: All, Templates, Runs
|
|
46
56
|
The workflow page organizes content into three tabs. "All" shows every workflow. "Templates" shows reusable patterns you can instantiate. "Runs" shows active and historical executions with their current status.
|
|
47
57
|
|
package/docs/index.md
CHANGED
|
@@ -6,7 +6,7 @@ difficulty: "advanced"
|
|
|
6
6
|
estimatedTime: "30 minutes"
|
|
7
7
|
sections: ["settings", "environment", "chat", "monitoring", "profiles", "workflows", "tables", "schedules", "delivery-channels"]
|
|
8
8
|
tags: ["advanced", "developer", "settings", "environment", "cli", "api", "monitoring", "profiles", "ollama", "channels", "handoffs", "memory", "tables"]
|
|
9
|
-
lastUpdated: "2026-04-
|
|
9
|
+
lastUpdated: "2026-04-16"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Developer Guide
|
|
@@ -55,7 +55,7 @@ Riley sets up Ollama as the fifth runtime adapter for private, zero-cost executi
|
|
|
55
55
|
|
|
56
56
|
Riley sets up Slack and Telegram as delivery channels for schedule notifications and bidirectional chat.
|
|
57
57
|
|
|
58
|
-

|
|
59
59
|
|
|
60
60
|
1. Scroll to **Delivery Channels** in Settings
|
|
61
61
|
2. Click **+ Add Channel** and select **Slack**
|
|
@@ -98,6 +98,20 @@ Riley sets up Slack and Telegram as delivery channels for schedule notifications
|
|
|
98
98
|
3. Use **Clear Data** cautiously -- it removes all workspace content while preserving settings
|
|
99
99
|
4. Use **Populate Sample Data** for demos or testing
|
|
100
100
|
|
|
101
|
+
### Step 6a: Take a Database Snapshot Backup
|
|
102
|
+
|
|
103
|
+
Riley wants a point-in-time backup before running a risky migration or a destructive clear.
|
|
104
|
+
|
|
105
|
+

|
|
106
|
+
|
|
107
|
+
1. Scroll to the **Snapshots** card inside **Data Management**
|
|
108
|
+
2. Click **Create Snapshot** — Stagent copies the SQLite database (with WAL checkpoint) into a named, timestamped snapshot file stored alongside the live DB
|
|
109
|
+
3. Give the snapshot a descriptive label ("before-v2-migration", "post-sample-seed") so future-you can find it
|
|
110
|
+
4. To restore, pick a snapshot from the list and click **Restore** — the live DB is atomically swapped with the snapshot contents
|
|
111
|
+
5. To archive off-host, click **Download** to get a `.sqlite` file you can stash in your backup system
|
|
112
|
+
|
|
113
|
+
> **Tip:** Snapshots are the fastest safety net for experiments that touch tables, workflows, or schedules. Always take one before clearing data or trying an unfamiliar migration path.
|
|
114
|
+
|
|
101
115
|
### Step 7: Explore the Environment Dashboard
|
|
102
116
|
|
|
103
117
|
Riley switches to the Environment page to understand the control plane.
|
|
@@ -204,6 +218,29 @@ Riley builds the CLI for scripted operations and CI/CD integration.
|
|
|
204
218
|
3. Test CRUD operations: `node dist/cli.js projects list`, `node dist/cli.js tasks create --title "CLI test"`
|
|
205
219
|
4. Verify CLI-created entities appear in the web UI (shared SQLite database)
|
|
206
220
|
|
|
221
|
+
### Step 14a: Understand the Runtime Capability Matrix
|
|
222
|
+
|
|
223
|
+
Riley wants to know why some features show up on one runtime but not another. The answer lives in the runtime capability matrix.
|
|
224
|
+
|
|
225
|
+
1. Open `src/lib/agents/runtime/catalog.ts` — each runtime adapter declares flags like `supportsSkillComposition`, `maxActiveSkills`, `hasNativeSkills`, `stagentInjectsSkills`, and `autoLoadsInstructions`
|
|
226
|
+
2. The Chat Skills tab reads `supportsSkillComposition` to decide whether to enable multi-skill activation and "N of M active" reporting
|
|
227
|
+
3. The SKILL.md injector reads `stagentInjectsSkills` to avoid duplicating context on runtimes (like Codex App Server and Claude Agent SDK) that load instructions natively
|
|
228
|
+
4. When you wire a new feature that touches system prompts or skills, consult the matrix before deciding whether Stagent should inject something or trust the runtime to do so
|
|
229
|
+
|
|
230
|
+
> **Tip:** The MCP task-tools boundary also validates the runtime ID now (runtime-validation-hardening). Malformed `runtimeId` values are rejected at the boundary with a clean error, rather than crashing the dispatcher.
|
|
231
|
+
|
|
232
|
+
### Step 14b: Observe the Upgrade Detection Poller
|
|
233
|
+
|
|
234
|
+

|
|
235
|
+
|
|
236
|
+
1. Scroll to the **Instance** section in Settings to see the dev mode status and upgrade detection gate
|
|
237
|
+
2. The hourly scheduler runs `git fetch` against the upstream remote and compares `HEAD` to `origin/main`
|
|
238
|
+
3. When upstream is ahead, the sidebar shows an **Upgrade available** badge and the Instance card reports the commits-behind count
|
|
239
|
+
4. Three consecutive poll failures escalate to a persistent inbox notification (three-strike dedup prevents notification floods)
|
|
240
|
+
5. The upgrade session uses the `upgrade-assistant` profile, which allowlists **AskUserQuestion** — the assistant can ask direct questions mid-merge without hitting a generic permission prompt
|
|
241
|
+
|
|
242
|
+
> **Tip:** The Instance card also shows bootstrap status. In dev mode (indicated by `STAGENT_DEV_MODE=true` or the `.git/stagent-dev-mode` sentinel), auto-upgrade machinery is skipped to avoid interfering with contributor workflows.
|
|
243
|
+
|
|
207
244
|
### Step 15: Verify Platform Health
|
|
208
245
|
|
|
209
246
|
Riley performs a final platform health check.
|
|
@@ -4,9 +4,9 @@ category: "user-journey"
|
|
|
4
4
|
persona: "personal"
|
|
5
5
|
difficulty: "beginner"
|
|
6
6
|
estimatedTime: "30 minutes"
|
|
7
|
-
sections: ["home-workspace", "dashboard-kanban", "projects", "chat", "tables", "schedules", "user-guide"]
|
|
8
|
-
tags: ["beginner", "solo", "tasks", "kanban", "chat", "tables", "schedules", "delivery-channels"]
|
|
9
|
-
lastUpdated: "2026-04-
|
|
7
|
+
sections: ["home-workspace", "dashboard-kanban", "projects", "chat", "tables", "schedules", "user-guide", "book"]
|
|
8
|
+
tags: ["beginner", "solo", "tasks", "kanban", "chat", "tables", "schedules", "delivery-channels", "book"]
|
|
9
|
+
lastUpdated: "2026-04-16"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Personal Use Guide
|
|
@@ -69,9 +69,13 @@ Before setting up a formal project, Alex tries the Chat feature to brainstorm id
|
|
|
69
69
|
2. Notice the **Tool Catalog** with a welcoming hero heading and suggested prompt categories (Explore, Create, Debug, Automate)
|
|
70
70
|
3. Browse the **Smart Picks** row for personalized suggestions
|
|
71
71
|
4. Type a question like "What pages should a developer portfolio website include?" and press Enter
|
|
72
|
-
5. Review the AI response
|
|
72
|
+
5. Review the AI response -- notice how Chat keeps a clean conversation thread, deduplicating similar messages so the history stays readable
|
|
73
|
+
6. Try typing **@** in the composer to open the mentions popover -- you can reference tasks, projects, documents, profiles, and workflows inline to give the AI richer context
|
|
74
|
+
7. Next time, try **Start from template** on the empty-state hero (or type `/new-from-template` in the composer) to open a conversation pre-primed with a blueprint like "Research a topic" or "Draft a plan"
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+

|
|
77
|
+
|
|
78
|
+
> **Tip:** Chat is perfect for quick brainstorming sessions. You do not need to create a project first -- just ask a question. The conversation history stays in the sidebar so you can return to it later. Pin useful filter + search combinations as **saved searches** (available from the `⌘K` palette under the **Saved** group) so you can jump back to them later.
|
|
75
79
|
|
|
76
80
|
### Step 5: Create a New Project
|
|
77
81
|
|
|
@@ -122,7 +126,10 @@ Alex creates the first task for the portfolio project.
|
|
|
122
126
|
3. Write a **Description** with detail about requirements
|
|
123
127
|
4. Assign the task to the **Portfolio Website** project
|
|
124
128
|
5. Set **Priority** to High and leave **Status** as Planned
|
|
125
|
-
6.
|
|
129
|
+
6. Open the **/** popover in the composer to browse available tools (create_task, execute_task, read_file) and entities -- these are the same capabilities the AI uses when running tasks
|
|
130
|
+
7. Click **Create** to add the task to the board
|
|
131
|
+
|
|
132
|
+

|
|
126
133
|
|
|
127
134
|
> **Tip:** Write task descriptions as if you are briefing a colleague. The more specific you are, the better the AI agent results will be.
|
|
128
135
|
|
|
@@ -181,7 +188,7 @@ Alex wants Stagent to proactively check on the portfolio project every morning.
|
|
|
181
188
|
|
|
182
189
|
Alex wants to receive schedule results on the go. Setting up a Telegram delivery channel takes less than two minutes.
|
|
183
190
|
|
|
184
|
-

|
|
185
192
|
|
|
186
193
|
1. Open **Settings** from the sidebar under **Configure**
|
|
187
194
|
2. Scroll to the **Delivery Channels** section
|
|
@@ -205,7 +212,24 @@ Alex discovers the built-in documentation hub.
|
|
|
205
212
|
3. Check the **guided journeys** for your current skill level
|
|
206
213
|
4. Use the feature grid to discover areas you have not tried yet
|
|
207
214
|
|
|
208
|
-
### Step 15:
|
|
215
|
+
### Step 15: Read the AI Native Book
|
|
216
|
+
|
|
217
|
+
Alex wants deeper context on how Stagent fits into the broader shift to AI-native work. The Living Book is built into the sidebar under the **Learn** group.
|
|
218
|
+
|
|
219
|
+

|
|
220
|
+
|
|
221
|
+
1. Click **AI Native Book** in the sidebar under the **Learn** group to open the chapter list
|
|
222
|
+
2. Scan the table of contents — chapters are organised from foundational concepts (From Hierarchy to Intelligence) through advanced topics (Autonomous Organization, The Road Ahead)
|
|
223
|
+
3. Pick a reading path that matches your current focus:
|
|
224
|
+
- **Newcomer path** — start with the intro chapters on the AI-native blueprint and refinery
|
|
225
|
+
- **Practitioner path** — jump straight to the chapters on workflow orchestration, scheduled intelligence, and human-in-the-loop
|
|
226
|
+
- **Visionary path** — skip ahead to agent self-improvement, multi-agent swarms, and the governance layer
|
|
227
|
+
4. As you read, the book merges content updates on each upgrade — new chapters and revisions appear automatically when you pull the latest release, so the book stays in sync with the product
|
|
228
|
+
5. Reading progress persists per chapter, so you can dip in and out without losing your place
|
|
229
|
+
|
|
230
|
+
> **Tip:** The book treats every example project as a case study — when you see a workflow or schedule described in a chapter, try building the same thing in your own workspace to anchor the idea in muscle memory.
|
|
231
|
+
|
|
232
|
+
### Step 16: What's Next
|
|
209
233
|
|
|
210
234
|
Alex now has a solid foundation: a project, organized tasks on a kanban board, a heartbeat schedule for proactive monitoring, and Telegram notifications for staying connected on the go. Here is where to go from here:
|
|
211
235
|
|