manigent-server 0.1.0__py3-none-any.whl
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.
- manigent/_catalog/mcps/chess/README.md +38 -0
- manigent/_catalog/mcps/chess/mcp.json +9 -0
- manigent/_catalog/mcps/registry.json +9 -0
- manigent/_catalog/skills/brief/SKILL.md +339 -0
- manigent/_catalog/skills/broaden-options/SKILL.md +133 -0
- manigent/_catalog/skills/calendar/SKILL.md +44 -0
- manigent/_catalog/skills/calendar/starter_config.jsonc +25 -0
- manigent/_catalog/skills/gmail/SKILL.md +73 -0
- manigent/_catalog/skills/google-calendar/SKILL.md +44 -0
- manigent/_catalog/skills/google-drive/SKILL.md +42 -0
- manigent/_catalog/skills/google-drive-write/SKILL.md +45 -0
- manigent/_catalog/skills/google-drive-write/starter_config.jsonc +45 -0
- manigent/_catalog/skills/grill-me/SKILL.md +173 -0
- manigent/_catalog/skills/homekit/SKILL.md +37 -0
- manigent/_catalog/skills/http-api/SKILL.md +117 -0
- manigent/_catalog/skills/ib/SKILL.md +89 -0
- manigent/_catalog/skills/ib/starter_config.jsonc +35 -0
- manigent/_catalog/skills/mailbox/SKILL.md +47 -0
- manigent/_catalog/skills/mailbox/starter_config.jsonc +38 -0
- manigent/_catalog/skills/media/SKILL.md +93 -0
- manigent/_catalog/skills/media/starter_config.jsonc +63 -0
- manigent/_catalog/skills/osxphotos/SKILL.md +41 -0
- manigent/_catalog/skills/photo-story/SKILL.md +285 -0
- manigent/_catalog/skills/playwright-browser/SKILL.md +291 -0
- manigent/_catalog/skills/playwright-browser/starter_config.jsonc +44 -0
- manigent/_catalog/skills/playwright-save-skill/SKILL.md +149 -0
- manigent/_catalog/skills/registry.json +166 -0
- manigent/_catalog/skills/web-artifacts/SKILL.md +194 -0
- manigent/api/action_executor.py +404 -0
- manigent/api/action_validator.py +531 -0
- manigent/api/actions.py +221 -0
- manigent/api/client.py +558 -0
- manigent/api/control.py +806 -0
- manigent/api/edge_protocol.py +123 -0
- manigent/api/fs_protocol.py +450 -0
- manigent/api/host_protocol.py +298 -0
- manigent/api/managed_job_client.py +124 -0
- manigent/api/responses.py +342 -0
- manigent/api/retry_transport.py +178 -0
- manigent/api/turn_protocol.py +78 -0
- manigent/cli_lifecycle.py +467 -0
- manigent/cli_server.py +978 -0
- manigent/doctor.py +1167 -0
- manigent/hub_protocol/canonical.py +375 -0
- manigent/hub_protocol/codes.py +171 -0
- manigent/hub_protocol/constants.py +71 -0
- manigent/hub_protocol/envelope.py +218 -0
- manigent/hub_protocol/frames.py +788 -0
- manigent/hub_protocol/http.py +260 -0
- manigent/hub_protocol/ids.py +170 -0
- manigent/hub_protocol/keys.py +195 -0
- manigent/hub_protocol/text.py +75 -0
- manigent/llm/base.py +1072 -0
- manigent/llm/prompt_builder.py +2450 -0
- manigent/llm/triggers.py +68 -0
- manigent/models/agent.py +2905 -0
- manigent/models/agent_bundle.py +298 -0
- manigent/models/brief_tab.py +311 -0
- manigent/models/chat_message.py +231 -0
- manigent/models/chatroom.py +1108 -0
- manigent/models/context.py +1159 -0
- manigent/models/desk_label.py +836 -0
- manigent/models/desk_read_state.py +220 -0
- manigent/models/desk_sign_off.py +267 -0
- manigent/models/desk_sop.py +965 -0
- manigent/models/desk_todo.py +1603 -0
- manigent/models/desk_todo_link.py +404 -0
- manigent/models/file_cache.py +75 -0
- manigent/models/host.py +732 -0
- manigent/models/install_token.py +401 -0
- manigent/models/invitation_code.py +162 -0
- manigent/models/knowledge_pack.py +552 -0
- manigent/models/managed_job.py +295 -0
- manigent/models/model_config.py +564 -0
- manigent/models/model_defaults.py +238 -0
- manigent/models/onboarding_plan.py +161 -0
- manigent/models/participant.py +449 -0
- manigent/models/persistable.py +892 -0
- manigent/models/plan_markdown.py +1774 -0
- manigent/models/project.py +1343 -0
- manigent/models/project_plan.py +8104 -0
- manigent/models/project_report.py +145 -0
- manigent/models/provenance.py +261 -0
- manigent/models/provider_agents.py +101 -0
- manigent/models/public_request.py +108 -0
- manigent/models/reflection_schedule.py +191 -0
- manigent/models/scheduled_message.py +285 -0
- manigent/models/share_token.py +190 -0
- manigent/models/skill_version.py +31 -0
- manigent/models/sop_template.py +187 -0
- manigent/models/thinking_partner_plan.py +187 -0
- manigent/models/tunnel_binding.py +129 -0
- manigent/models/user.py +1276 -0
- manigent/models/work_tracker.py +510 -0
- manigent/runner/invocation_registry.py +187 -0
- manigent/server/agent_capabilities.py +119 -0
- manigent/server/agent_visibility.py +119 -0
- manigent/server/announcements.py +119 -0
- manigent/server/app.py +807 -0
- manigent/server/auth.py +355 -0
- manigent/server/batch_timeout.py +94 -0
- manigent/server/channels/access.py +194 -0
- manigent/server/channels/adapter.py +295 -0
- manigent/server/channels/config.py +693 -0
- manigent/server/channels/contacts.py +39 -0
- manigent/server/channels/email_adapter.py +436 -0
- manigent/server/channels/email_address.py +145 -0
- manigent/server/channels/email_form.py +242 -0
- manigent/server/channels/email_format.py +285 -0
- manigent/server/channels/email_mail.py +427 -0
- manigent/server/channels/email_mailgun.py +164 -0
- manigent/server/channels/email_text.py +280 -0
- manigent/server/channels/file_links.py +127 -0
- manigent/server/channels/gateway.py +2998 -0
- manigent/server/channels/hub_delivery.py +211 -0
- manigent/server/channels/hub_store.py +1730 -0
- manigent/server/channels/line.py +645 -0
- manigent/server/channels/line_format.py +589 -0
- manigent/server/channels/log_redaction.py +145 -0
- manigent/server/channels/store.py +3316 -0
- manigent/server/channels/telegram.py +422 -0
- manigent/server/channels/telegram_format.py +312 -0
- manigent/server/channels/webchat.py +261 -0
- manigent/server/channels/webchat_widget.js +1310 -0
- manigent/server/channels/whatsapp.py +707 -0
- manigent/server/channels/whatsapp_format.py +511 -0
- manigent/server/chat_search_index.py +1203 -0
- manigent/server/config.py +61 -0
- manigent/server/context.py +121 -0
- manigent/server/coordinator_rule.py +115 -0
- manigent/server/desk_todo_notify.py +300 -0
- manigent/server/edge_hub.py +577 -0
- manigent/server/email.py +354 -0
- manigent/server/errors.py +83 -0
- manigent/server/home_fs_relay.py +392 -0
- manigent/server/hub/adapter.py +1395 -0
- manigent/server/hub/agent_send_guard.py +196 -0
- manigent/server/hub/avatar.py +342 -0
- manigent/server/hub/browser.py +778 -0
- manigent/server/hub/client.py +859 -0
- manigent/server/hub/demand.py +49 -0
- manigent/server/hub/directory.py +385 -0
- manigent/server/hub/enroll.py +400 -0
- manigent/server/hub/http.py +134 -0
- manigent/server/hub/identity.py +61 -0
- manigent/server/hub/keys.py +588 -0
- manigent/server/hub/mirror.py +802 -0
- manigent/server/hub/operator.py +817 -0
- manigent/server/hub/retain.py +361 -0
- manigent/server/hub/room_bridge.py +741 -0
- manigent/server/hub/runtime.py +691 -0
- manigent/server/hub/trust.py +182 -0
- manigent/server/hub/views.py +316 -0
- manigent/server/idempotency.py +205 -0
- manigent/server/in_flight_restore.py +181 -0
- manigent/server/inspection.py +816 -0
- manigent/server/isolation_gate.py +516 -0
- manigent/server/isolation_notice.py +310 -0
- manigent/server/managed_job_events.py +242 -0
- manigent/server/mcp_registry.py +118 -0
- manigent/server/message_forward.py +78 -0
- manigent/server/message_scheduler.py +176 -0
- manigent/server/notification_assets.py +164 -0
- manigent/server/oauth_login/cli_state.py +120 -0
- manigent/server/oauth_login/config.py +90 -0
- manigent/server/oauth_login/errors.py +78 -0
- manigent/server/oauth_login/flow.py +223 -0
- manigent/server/oauth_login/handoff.py +63 -0
- manigent/server/oauth_login/providers.py +45 -0
- manigent/server/oauth_state.py +81 -0
- manigent/server/owner_isolation.py +466 -0
- manigent/server/participant_liveness.py +82 -0
- manigent/server/public_profile.py +149 -0
- manigent/server/public_requests/candidates.py +116 -0
- manigent/server/public_requests/dispatch.py +121 -0
- manigent/server/public_requests/ranking.py +153 -0
- manigent/server/recent_activity.py +250 -0
- manigent/server/reflection_completion_subscriber.py +151 -0
- manigent/server/reflection_scheduler.py +239 -0
- manigent/server/requester_key_migration.py +261 -0
- manigent/server/room_flow.py +139 -0
- manigent/server/routes/_batch.py +218 -0
- manigent/server/routes/_fd_routing.py +155 -0
- manigent/server/routes/_mentions.py +70 -0
- manigent/server/routes/agent_env.py +188 -0
- manigent/server/routes/agent_fs.py +450 -0
- manigent/server/routes/agents.py +1206 -0
- manigent/server/routes/announcements.py +79 -0
- manigent/server/routes/auth.py +387 -0
- manigent/server/routes/brief_tabs.py +404 -0
- manigent/server/routes/changelog.py +237 -0
- manigent/server/routes/channels.py +993 -0
- manigent/server/routes/chatrooms.py +871 -0
- manigent/server/routes/desk_labels.py +298 -0
- manigent/server/routes/desk_latest_messages.py +116 -0
- manigent/server/routes/desk_read_state.py +110 -0
- manigent/server/routes/desk_sign_off.py +88 -0
- manigent/server/routes/desk_sops.py +216 -0
- manigent/server/routes/desk_todos.py +692 -0
- manigent/server/routes/desk_tour.py +44 -0
- manigent/server/routes/files.py +572 -0
- manigent/server/routes/hosts.py +484 -0
- manigent/server/routes/hub.py +534 -0
- manigent/server/routes/hub_channels.py +234 -0
- manigent/server/routes/inbox.py +581 -0
- manigent/server/routes/install.ps1 +436 -0
- manigent/server/routes/install.py +324 -0
- manigent/server/routes/install.sh +566 -0
- manigent/server/routes/isolation_check.py +145 -0
- manigent/server/routes/knowledge_packs.py +477 -0
- manigent/server/routes/managed_jobs.py +196 -0
- manigent/server/routes/mcps.py +271 -0
- manigent/server/routes/messages.py +1972 -0
- manigent/server/routes/model_defaults.py +279 -0
- manigent/server/routes/oauth.py +237 -0
- manigent/server/routes/oauth_login.py +351 -0
- manigent/server/routes/owner_isolation.py +91 -0
- manigent/server/routes/project_plans.py +1521 -0
- manigent/server/routes/project_reports.py +235 -0
- manigent/server/routes/projects.py +2047 -0
- manigent/server/routes/public_agents.py +151 -0
- manigent/server/routes/public_requests.py +181 -0
- manigent/server/routes/reflection.py +93 -0
- manigent/server/routes/scheduled_messages.py +263 -0
- manigent/server/routes/search.py +94 -0
- manigent/server/routes/sharing.py +156 -0
- manigent/server/routes/skills.py +406 -0
- manigent/server/routes/templates.py +219 -0
- manigent/server/routes/turn_tokens.py +119 -0
- manigent/server/routes/webchat.py +406 -0
- manigent/server/routes/websocket.py +431 -0
- manigent/server/serving_only.py +200 -0
- manigent/server/signup_policy.py +120 -0
- manigent/server/skill_registry.py +164 -0
- manigent/server/socket_events.py +858 -0
- manigent/server/timeout_checker.py +446 -0
- manigent/server/tunnel_subscriber.py +1000 -0
- manigent/server/turn_tokens.py +285 -0
- manigent/server/ws_hub.py +556 -0
- manigent/server_cli.py +31 -0
- manigent/sync/changelog.py +885 -0
- manigent/sync/console_subscriber.py +222 -0
- manigent/sync/runloop.py +619 -0
- manigent/sync/runloop_manager.py +197 -0
- manigent/sync/subscriber.py +98 -0
- manigent/utils/agent_processes.py +276 -0
- manigent/utils/agent_storage.py +125 -0
- manigent/utils/email.py +563 -0
- manigent/utils/env_store.py +174 -0
- manigent/utils/extra_dirs.py +85 -0
- manigent/utils/file_io.py +485 -0
- manigent/utils/invoke_timeout.py +87 -0
- manigent/utils/jsonc.py +78 -0
- manigent/utils/knowledge_index.py +148 -0
- manigent/utils/nofollow_fs.py +279 -0
- manigent/utils/notification_center.py +67 -0
- manigent/utils/version.py +57 -0
- manigent/web/frontend/.design-sync-entry.tsx +74 -0
- manigent/web/frontend/.design-sync-provider.tsx +46 -0
- manigent/web/frontend/.eslintrc.cjs +183 -0
- manigent/web/frontend/.gitignore +6 -0
- manigent/web/frontend/app/page.tsx +39 -0
- manigent/web/frontend/hub-terms.html +192 -0
- manigent/web/frontend/index.html +15 -0
- manigent/web/frontend/landing.html +15 -0
- manigent/web/frontend/package-lock.json +8028 -0
- manigent/web/frontend/package.json +55 -0
- manigent/web/frontend/postcss.config.js +6 -0
- manigent/web/frontend/privacy.html +217 -0
- manigent/web/frontend/private-beta-announcement.html +19 -0
- manigent/web/frontend/public/apple-touch-icon.png +0 -0
- manigent/web/frontend/public/brand-hero-banner.png +0 -0
- manigent/web/frontend/public/brand-hero.png +0 -0
- manigent/web/frontend/public/favicon.png +0 -0
- manigent/web/frontend/public/favicon.svg +8 -0
- manigent/web/frontend/public/icon-transparent-sm.png +0 -0
- manigent/web/frontend/public/icon.png +0 -0
- manigent/web/frontend/public/manigent-mark.svg +7 -0
- manigent/web/frontend/public/vite.svg +5 -0
- manigent/web/frontend/public.html +15 -0
- manigent/web/frontend/src/App.activeAccountRedirect.test.tsx +236 -0
- manigent/web/frontend/src/App.hubHostDm.test.tsx +119 -0
- manigent/web/frontend/src/App.hubHostProject.test.tsx +142 -0
- manigent/web/frontend/src/App.hubRoutes.test.tsx +187 -0
- manigent/web/frontend/src/App.oauthAddCallback.test.tsx +263 -0
- manigent/web/frontend/src/App.tsx +246 -0
- manigent/web/frontend/src/api/attachments.ts +32 -0
- manigent/web/frontend/src/api/batchLoader.test.ts +212 -0
- manigent/web/frontend/src/api/batchLoader.ts +124 -0
- manigent/web/frontend/src/api/chatroomsBatch.test.tsx +392 -0
- manigent/web/frontend/src/api/client.ts +321 -0
- manigent/web/frontend/src/api/crossAccountAuth.test.ts +388 -0
- manigent/web/frontend/src/api/endpoints/agentEnv.ts +24 -0
- manigent/web/frontend/src/api/endpoints/agentFs.ts +125 -0
- manigent/web/frontend/src/api/endpoints/agentSearch.ts +19 -0
- manigent/web/frontend/src/api/endpoints/agents.ts +66 -0
- manigent/web/frontend/src/api/endpoints/announcements.ts +26 -0
- manigent/web/frontend/src/api/endpoints/auth.ts +361 -0
- manigent/web/frontend/src/api/endpoints/authLogin.test.ts +236 -0
- manigent/web/frontend/src/api/endpoints/batch.ts +64 -0
- manigent/web/frontend/src/api/endpoints/briefTabs.ts +81 -0
- manigent/web/frontend/src/api/endpoints/channels.ts +285 -0
- manigent/web/frontend/src/api/endpoints/computers.ts +212 -0
- manigent/web/frontend/src/api/endpoints/deskLabels.ts +151 -0
- manigent/web/frontend/src/api/endpoints/deskLatestMessages.ts +23 -0
- manigent/web/frontend/src/api/endpoints/deskReadState.ts +41 -0
- manigent/web/frontend/src/api/endpoints/deskSignOffs.ts +74 -0
- manigent/web/frontend/src/api/endpoints/deskSops.ts +53 -0
- manigent/web/frontend/src/api/endpoints/deskTodoAttachments.ts +69 -0
- manigent/web/frontend/src/api/endpoints/deskTodoProjects.test.ts +99 -0
- manigent/web/frontend/src/api/endpoints/deskTodoProjects.ts +114 -0
- manigent/web/frontend/src/api/endpoints/deskTodos.ts +164 -0
- manigent/web/frontend/src/api/endpoints/deskTour.ts +16 -0
- manigent/web/frontend/src/api/endpoints/dm.ts +137 -0
- manigent/web/frontend/src/api/endpoints/files.ts +55 -0
- manigent/web/frontend/src/api/endpoints/hub.contract.test.ts +94 -0
- manigent/web/frontend/src/api/endpoints/hub.keys.ts +260 -0
- manigent/web/frontend/src/api/endpoints/hub.test.ts +203 -0
- manigent/web/frontend/src/api/endpoints/hub.ts +654 -0
- manigent/web/frontend/src/api/endpoints/index.ts +15 -0
- manigent/web/frontend/src/api/endpoints/install.ts +74 -0
- manigent/web/frontend/src/api/endpoints/isolationCheck.ts +36 -0
- manigent/web/frontend/src/api/endpoints/knowledgePacks.ts +179 -0
- manigent/web/frontend/src/api/endpoints/mcps.ts +36 -0
- manigent/web/frontend/src/api/endpoints/messages.held.test.ts +43 -0
- manigent/web/frontend/src/api/endpoints/messages.ts +95 -0
- manigent/web/frontend/src/api/endpoints/modelConfigs.ts +232 -0
- manigent/web/frontend/src/api/endpoints/oauthApi.test.ts +110 -0
- manigent/web/frontend/src/api/endpoints/projectPlans.ts +608 -0
- manigent/web/frontend/src/api/endpoints/projectReports.ts +36 -0
- manigent/web/frontend/src/api/endpoints/projects.ts +124 -0
- manigent/web/frontend/src/api/endpoints/publicRequests.ts +75 -0
- manigent/web/frontend/src/api/endpoints/reflection.ts +32 -0
- manigent/web/frontend/src/api/endpoints/roomFlow.ts +14 -0
- manigent/web/frontend/src/api/endpoints/scheduledMessages.ts +60 -0
- manigent/web/frontend/src/api/endpoints/search.ts +27 -0
- manigent/web/frontend/src/api/endpoints/sharing.ts +42 -0
- manigent/web/frontend/src/api/endpoints/skills.ts +67 -0
- manigent/web/frontend/src/api/endpoints/templates.ts +72 -0
- manigent/web/frontend/src/api/loaders.ts +22 -0
- manigent/web/frontend/src/api/singleIssuer.test.ts +148 -0
- manigent/web/frontend/src/api/transientRetry.test.ts +176 -0
- manigent/web/frontend/src/api/transientRetry.ts +140 -0
- manigent/web/frontend/src/api/websocket.resync.test.ts +111 -0
- manigent/web/frontend/src/api/websocket.ts +335 -0
- manigent/web/frontend/src/components/agent/AgentNameLink.tsx +24 -0
- manigent/web/frontend/src/components/agent/AgentViewActions.test.tsx +41 -0
- manigent/web/frontend/src/components/agent/AgentViewActions.tsx +89 -0
- manigent/web/frontend/src/components/agent/CreateAgentPage.tsx +535 -0
- manigent/web/frontend/src/components/agent/JsonConfigEditor.tsx +33 -0
- manigent/web/frontend/src/components/agent/KnowledgePackList.tsx +103 -0
- manigent/web/frontend/src/components/agent/McpCatalog.tsx +261 -0
- manigent/web/frontend/src/components/agent/McpConfigModal.tsx +224 -0
- manigent/web/frontend/src/components/agent/PreConsentModal.tsx +172 -0
- manigent/web/frontend/src/components/agent/SkillCatalog.tsx +364 -0
- manigent/web/frontend/src/components/agent/SkillConfigModal.tsx +221 -0
- manigent/web/frontend/src/components/auth/AddAccountPage.test.tsx +181 -0
- manigent/web/frontend/src/components/auth/AddAccountPage.tsx +201 -0
- manigent/web/frontend/src/components/auth/AuthShell.tsx +462 -0
- manigent/web/frontend/src/components/auth/LoginPage.test.tsx +384 -0
- manigent/web/frontend/src/components/auth/LoginPage.tsx +129 -0
- manigent/web/frontend/src/components/auth/OAuthCallbackPage.test.tsx +185 -0
- manigent/web/frontend/src/components/auth/OAuthCallbackPage.tsx +154 -0
- manigent/web/frontend/src/components/auth/OAuthLinkedBanner.tsx +44 -0
- manigent/web/frontend/src/components/auth/ProviderButtons.tsx +94 -0
- manigent/web/frontend/src/components/auth/SignupPage.tsx +437 -0
- manigent/web/frontend/src/components/auth/StepProgress.tsx +60 -0
- manigent/web/frontend/src/components/auth/VerifyEmailPage.test.tsx +155 -0
- manigent/web/frontend/src/components/auth/VerifyEmailPage.tsx +211 -0
- manigent/web/frontend/src/components/auth/index.ts +3 -0
- manigent/web/frontend/src/components/auth/oauthErrors.test.ts +107 -0
- manigent/web/frontend/src/components/auth/oauthErrors.ts +82 -0
- manigent/web/frontend/src/components/auth/useUsernameCheck.test.tsx +68 -0
- manigent/web/frontend/src/components/auth/useUsernameCheck.ts +86 -0
- manigent/web/frontend/src/components/beta/BetaPage.tsx +21 -0
- manigent/web/frontend/src/components/beta/DayAtMyDesk.tsx +120 -0
- manigent/web/frontend/src/components/beta/Footer.tsx +82 -0
- manigent/web/frontend/src/components/beta/Hero.tsx +224 -0
- manigent/web/frontend/src/components/beta/Nav.tsx +51 -0
- manigent/web/frontend/src/components/beta/Pillars.tsx +172 -0
- manigent/web/frontend/src/components/beta/TwoModels.tsx +146 -0
- manigent/web/frontend/src/components/beta/constants.ts +3 -0
- manigent/web/frontend/src/components/briefing/BriefingFrame.test.tsx +208 -0
- manigent/web/frontend/src/components/briefing/BriefingFrame.tsx +151 -0
- manigent/web/frontend/src/components/briefing/BriefingPage.test.tsx +176 -0
- manigent/web/frontend/src/components/briefing/BriefingPage.tsx +157 -0
- manigent/web/frontend/src/components/briefing/BriefingPage.wsDelete.test.tsx +177 -0
- manigent/web/frontend/src/components/briefing/briefing.css +147 -0
- manigent/web/frontend/src/components/briefing/heightBootstrap.test.ts +121 -0
- manigent/web/frontend/src/components/briefing/heightBootstrap.ts +224 -0
- manigent/web/frontend/src/components/briefing/parseBriefMessage.test.ts +90 -0
- manigent/web/frontend/src/components/briefing/sampleBriefing.ts +148 -0
- manigent/web/frontend/src/components/channels/ChannelBadge.tsx +35 -0
- manigent/web/frontend/src/components/chatroom/ChannelThreadControls.tsx +127 -0
- manigent/web/frontend/src/components/chatroom/ChannelThreadNotice.test.tsx +207 -0
- manigent/web/frontend/src/components/chatroom/ChannelThreadNotice.tsx +80 -0
- manigent/web/frontend/src/components/chatroom/ChatroomView.channel.test.tsx +550 -0
- manigent/web/frontend/src/components/chatroom/ChatroomView.flow.test.tsx +186 -0
- manigent/web/frontend/src/components/chatroom/ChatroomView.isolation.test.tsx +70 -0
- manigent/web/frontend/src/components/chatroom/ChatroomView.tsx +450 -0
- manigent/web/frontend/src/components/chatroom/DelegationRow.test.tsx +170 -0
- manigent/web/frontend/src/components/chatroom/DelegationRow.tsx +217 -0
- manigent/web/frontend/src/components/chatroom/DeliveryStatusLine.test.tsx +33 -0
- manigent/web/frontend/src/components/chatroom/DeliveryStatusLine.tsx +46 -0
- manigent/web/frontend/src/components/chatroom/ForwardModal.test.tsx +109 -0
- manigent/web/frontend/src/components/chatroom/ForwardModal.tsx +304 -0
- manigent/web/frontend/src/components/chatroom/HeldNotice.tsx +77 -0
- manigent/web/frontend/src/components/chatroom/MentionDropdown.tsx +97 -0
- manigent/web/frontend/src/components/chatroom/MessageInput.tsx +408 -0
- manigent/web/frontend/src/components/chatroom/MessageItem.tsx +425 -0
- manigent/web/frontend/src/components/chatroom/MessageList.outside.test.tsx +98 -0
- manigent/web/frontend/src/components/chatroom/MessageList.test.tsx +245 -0
- manigent/web/frontend/src/components/chatroom/MessageList.tsx +406 -0
- manigent/web/frontend/src/components/chatroom/OfflineRemedyNote.test.tsx +211 -0
- manigent/web/frontend/src/components/chatroom/OfflineRemedyNote.tsx +182 -0
- manigent/web/frontend/src/components/chatroom/OutsideBadge.tsx +18 -0
- manigent/web/frontend/src/components/chatroom/RoomFlowControl.tsx +49 -0
- manigent/web/frontend/src/components/chatroom/RoomFlowStrip.test.tsx +47 -0
- manigent/web/frontend/src/components/chatroom/RoomFlowStrip.tsx +25 -0
- manigent/web/frontend/src/components/chatroom/SaveToPackModal.tsx +350 -0
- manigent/web/frontend/src/components/chatroom/StagedAttachments.test.tsx +56 -0
- manigent/web/frontend/src/components/chatroom/StagedAttachments.tsx +160 -0
- manigent/web/frontend/src/components/chatroom/SystemNote.tsx +18 -0
- manigent/web/frontend/src/components/chatroom/contactSender.test.tsx +130 -0
- manigent/web/frontend/src/components/chatroom/index.ts +3 -0
- manigent/web/frontend/src/components/chatroom/recipientStatus.test.ts +344 -0
- manigent/web/frontend/src/components/chatroom/recipientStatus.ts +197 -0
- manigent/web/frontend/src/components/common/AnnouncementBanners.test.tsx +221 -0
- manigent/web/frontend/src/components/common/AnnouncementBanners.tsx +180 -0
- manigent/web/frontend/src/components/common/Avatar.test.tsx +50 -0
- manigent/web/frontend/src/components/common/Avatar.tsx +102 -0
- manigent/web/frontend/src/components/common/Badge.tsx +30 -0
- manigent/web/frontend/src/components/common/BrandName.tsx +16 -0
- manigent/web/frontend/src/components/common/ClearHistoryButton.tsx +74 -0
- manigent/web/frontend/src/components/common/CollapsibleHeader.tsx +64 -0
- manigent/web/frontend/src/components/common/ConnectionStatus.test.tsx +56 -0
- manigent/web/frontend/src/components/common/ConnectionStatus.tsx +28 -0
- manigent/web/frontend/src/components/common/DropOverlay.tsx +27 -0
- manigent/web/frontend/src/components/common/InlineEditableTitle.test.tsx +369 -0
- manigent/web/frontend/src/components/common/InlineEditableTitle.tsx +287 -0
- manigent/web/frontend/src/components/common/IsolationUnavailablePanel.tsx +19 -0
- manigent/web/frontend/src/components/common/Loading.tsx +22 -0
- manigent/web/frontend/src/components/common/ModelSelector.tsx +248 -0
- manigent/web/frontend/src/components/common/Overlay.tsx +15 -0
- manigent/web/frontend/src/components/common/ResizeHandle.tsx +52 -0
- manigent/web/frontend/src/components/common/TagAutocompleteInput.test.tsx +92 -0
- manigent/web/frontend/src/components/common/TagAutocompleteInput.tsx +246 -0
- manigent/web/frontend/src/components/common/TagPillInput.tsx +181 -0
- manigent/web/frontend/src/components/common/TeamAndAgentPicker.tsx +83 -0
- manigent/web/frontend/src/components/common/Timestamp.tsx +61 -0
- manigent/web/frontend/src/components/common/VerifiedBadge.tsx +20 -0
- manigent/web/frontend/src/components/common/index.ts +8 -0
- manigent/web/frontend/src/components/composer/PhPopover.tsx +239 -0
- manigent/web/frontend/src/components/composer/PromptEditor.test.tsx +472 -0
- manigent/web/frontend/src/components/composer/PromptEditor.tsx +540 -0
- manigent/web/frontend/src/components/composer/caret.ts +159 -0
- manigent/web/frontend/src/components/composer/placeholders.test.ts +352 -0
- manigent/web/frontend/src/components/composer/placeholders.ts +354 -0
- manigent/web/frontend/src/components/composer/promptEditor.css +161 -0
- manigent/web/frontend/src/components/computer/ComputerPage.test.tsx +452 -0
- manigent/web/frontend/src/components/computer/ComputerPage.tsx +811 -0
- manigent/web/frontend/src/components/computer/ConnectComputerModal.tsx +135 -0
- manigent/web/frontend/src/components/computer/CopyCommand.tsx +77 -0
- manigent/web/frontend/src/components/computer/DisconnectComputerModal.tsx +121 -0
- manigent/web/frontend/src/components/computer/SoftwareCard.tsx +145 -0
- manigent/web/frontend/src/components/computer/TerminalCard.test.tsx +114 -0
- manigent/web/frontend/src/components/computer/TerminalCard.tsx +131 -0
- manigent/web/frontend/src/components/computer/TerminalPanel.tsx +226 -0
- manigent/web/frontend/src/components/computer/TrustPanel.test.tsx +58 -0
- manigent/web/frontend/src/components/computer/TrustPanel.tsx +143 -0
- manigent/web/frontend/src/components/computer/computerCopy.test.ts +322 -0
- manigent/web/frontend/src/components/computer/computerCopy.ts +413 -0
- manigent/web/frontend/src/components/computer/sections.ts +21 -0
- manigent/web/frontend/src/components/computer/terminalProtocol.test.ts +135 -0
- manigent/web/frontend/src/components/computer/terminalProtocol.ts +170 -0
- manigent/web/frontend/src/components/context/ContextGuide.test.tsx +26 -0
- manigent/web/frontend/src/components/context/ContextGuide.tsx +144 -0
- manigent/web/frontend/src/components/context/ContextLanding.tsx +46 -0
- manigent/web/frontend/src/components/desk/CardBand.a11y.test.tsx +138 -0
- manigent/web/frontend/src/components/desk/CardBand.tsx +132 -0
- manigent/web/frontend/src/components/desk/DashTile.tsx +81 -0
- manigent/web/frontend/src/components/desk/DeskAgentPicker.retained.test.tsx +79 -0
- manigent/web/frontend/src/components/desk/DeskAgentPicker.tsx +151 -0
- manigent/web/frontend/src/components/desk/DeskComposer.detachTodo.test.tsx +233 -0
- manigent/web/frontend/src/components/desk/DeskComposer.dispatch.test.tsx +208 -0
- manigent/web/frontend/src/components/desk/DeskComposer.loadTodoDraft.test.tsx +242 -0
- manigent/web/frontend/src/components/desk/DeskComposer.restage.test.tsx +258 -0
- manigent/web/frontend/src/components/desk/DeskComposer.saveTodo.test.tsx +265 -0
- manigent/web/frontend/src/components/desk/DeskComposer.tsx +828 -0
- manigent/web/frontend/src/components/desk/DeskPage.crossHighlight.test.tsx +427 -0
- manigent/web/frontend/src/components/desk/DeskPage.link.test.tsx +271 -0
- manigent/web/frontend/src/components/desk/DeskPage.tsx +1066 -0
- manigent/web/frontend/src/components/desk/DeskPage.welcomeTour.test.tsx +262 -0
- manigent/web/frontend/src/components/desk/DeskSideRail.tsx +100 -0
- manigent/web/frontend/src/components/desk/DeskWelcomeTour.tsx +513 -0
- manigent/web/frontend/src/components/desk/DeskZeroState.tsx +45 -0
- manigent/web/frontend/src/components/desk/LabelChip.tsx +147 -0
- manigent/web/frontend/src/components/desk/LabelFilter.tsx +474 -0
- manigent/web/frontend/src/components/desk/LabelInput.test.tsx +439 -0
- manigent/web/frontend/src/components/desk/LabelInput.tsx +477 -0
- manigent/web/frontend/src/components/desk/LabelManageSheet.test.tsx +384 -0
- manigent/web/frontend/src/components/desk/LabelManageSheet.tsx +498 -0
- manigent/web/frontend/src/components/desk/PhaseRail.test.tsx +170 -0
- manigent/web/frontend/src/components/desk/PhaseRail.tsx +120 -0
- manigent/web/frontend/src/components/desk/PlanBand.test.tsx +655 -0
- manigent/web/frontend/src/components/desk/PlanBand.tsx +216 -0
- manigent/web/frontend/src/components/desk/SaveTodoModal.tsx +126 -0
- manigent/web/frontend/src/components/desk/SopEditor.tsx +280 -0
- manigent/web/frontend/src/components/desk/SopItem.tsx +171 -0
- manigent/web/frontend/src/components/desk/SopRail.test.tsx +517 -0
- manigent/web/frontend/src/components/desk/SopRail.tsx +250 -0
- manigent/web/frontend/src/components/desk/TicketChip.tsx +51 -0
- manigent/web/frontend/src/components/desk/TodoItem.attachments.test.tsx +96 -0
- manigent/web/frontend/src/components/desk/TodoItem.menu.test.tsx +142 -0
- manigent/web/frontend/src/components/desk/TodoItem.tsx +573 -0
- manigent/web/frontend/src/components/desk/TodoRail.longpress.test.tsx +396 -0
- manigent/web/frontend/src/components/desk/TodoRail.test.tsx +1155 -0
- manigent/web/frontend/src/components/desk/TodoRail.tsx +918 -0
- manigent/web/frontend/src/components/desk/TodoRowMenu.tsx +147 -0
- manigent/web/frontend/src/components/desk/UpdateCard.bands.test.tsx +308 -0
- manigent/web/frontend/src/components/desk/UpdateCard.sendBack.test.tsx +444 -0
- manigent/web/frontend/src/components/desk/UpdateCard.tsx +943 -0
- manigent/web/frontend/src/components/desk/UpdateCard.untrusted.test.tsx +161 -0
- manigent/web/frontend/src/components/desk/desk.css +1921 -0
- manigent/web/frontend/src/components/desk/desk.css.test.ts +582 -0
- manigent/web/frontend/src/components/desk/deskBands.test.ts +389 -0
- manigent/web/frontend/src/components/desk/deskBands.ts +226 -0
- manigent/web/frontend/src/components/desk/m16Surfaces.test.ts +134 -0
- manigent/web/frontend/src/components/desk/sopSyntax.ts +73 -0
- manigent/web/frontend/src/components/discovery/AgentDirectory.tsx +71 -0
- manigent/web/frontend/src/components/discovery/AgentFilterBar.tsx +46 -0
- manigent/web/frontend/src/components/discovery/AgentSearchBar.tsx +56 -0
- manigent/web/frontend/src/components/dm/AgentSummaryCard.tsx +154 -0
- manigent/web/frontend/src/components/dm/ComposeFields.tsx +145 -0
- manigent/web/frontend/src/components/dm/DMChatView.flow.test.tsx +374 -0
- manigent/web/frontend/src/components/dm/DMChatView.tsx +841 -0
- manigent/web/frontend/src/components/dm/DMZeroState.tsx +204 -0
- manigent/web/frontend/src/components/dm/DmComposeModal.tsx +301 -0
- manigent/web/frontend/src/components/dm/PersonalizeModal.tsx +366 -0
- manigent/web/frontend/src/components/dm/index.ts +1 -0
- manigent/web/frontend/src/components/files/FileItem.tsx +138 -0
- manigent/web/frontend/src/components/files/FileList.outside.test.tsx +29 -0
- manigent/web/frontend/src/components/files/FileList.tsx +48 -0
- manigent/web/frontend/src/components/files/FilePreview.test.tsx +75 -0
- manigent/web/frontend/src/components/files/FilePreview.tsx +325 -0
- manigent/web/frontend/src/components/files/FileViewerModal.test.tsx +157 -0
- manigent/web/frontend/src/components/files/FileViewerModal.tsx +261 -0
- manigent/web/frontend/src/components/files/HighlightedCode.tsx +39 -0
- manigent/web/frontend/src/components/files/SaveToAgentPanel.test.tsx +156 -0
- manigent/web/frontend/src/components/files/SaveToAgentPanel.tsx +545 -0
- manigent/web/frontend/src/components/files/index.ts +3 -0
- manigent/web/frontend/src/components/hero/AgentAvatar.tsx +66 -0
- manigent/web/frontend/src/components/hero/Button.tsx +66 -0
- manigent/web/frontend/src/components/hero/Hero.tsx +133 -0
- manigent/web/frontend/src/components/homefs/HomeFolderBrowser.test.tsx +393 -0
- manigent/web/frontend/src/components/homefs/HomeFolderBrowser.tsx +792 -0
- manigent/web/frontend/src/components/hub/BridgeDeliveryLine.test.tsx +40 -0
- manigent/web/frontend/src/components/hub/BridgeDeliveryLine.tsx +36 -0
- manigent/web/frontend/src/components/hub/HubAvatar.test.tsx +93 -0
- manigent/web/frontend/src/components/hub/HubAvatar.tsx +33 -0
- manigent/web/frontend/src/components/hub/HubChatView.test.tsx +695 -0
- manigent/web/frontend/src/components/hub/HubChatView.tsx +504 -0
- manigent/web/frontend/src/components/hub/HubContactLabel.test.tsx +92 -0
- manigent/web/frontend/src/components/hub/HubContactLabel.tsx +47 -0
- manigent/web/frontend/src/components/hub/HubDeliveryLine.tsx +49 -0
- manigent/web/frontend/src/components/hub/HubDisclosure.tsx +49 -0
- manigent/web/frontend/src/components/hub/HubEnrollmentDialog.test.tsx +144 -0
- manigent/web/frontend/src/components/hub/HubEnrollmentDialog.tsx +244 -0
- manigent/web/frontend/src/components/hub/HubMessageBody.test.tsx +26 -0
- manigent/web/frontend/src/components/hub/HubMessageBody.tsx +14 -0
- manigent/web/frontend/src/components/hub/HubOfflineConfirm.tsx +45 -0
- manigent/web/frontend/src/components/hub/HubThreadBanner.tsx +33 -0
- manigent/web/frontend/src/components/hub/HubThreadGuard.tsx +59 -0
- manigent/web/frontend/src/components/hub/RemoteAgentCard.test.tsx +50 -0
- manigent/web/frontend/src/components/hub/RemoteAgentCard.tsx +174 -0
- manigent/web/frontend/src/components/hub/RemoteAgentSection.test.tsx +446 -0
- manigent/web/frontend/src/components/hub/RemoteAgentSection.tsx +219 -0
- manigent/web/frontend/src/components/hub/ReportDialog.test.tsx +96 -0
- manigent/web/frontend/src/components/hub/ReportDialog.tsx +162 -0
- manigent/web/frontend/src/components/hub/RetainButton.test.tsx +103 -0
- manigent/web/frontend/src/components/hub/RetainButton.tsx +114 -0
- manigent/web/frontend/src/components/hub/RetainDialog.test.tsx +68 -0
- manigent/web/frontend/src/components/hub/RetainDialog.tsx +115 -0
- manigent/web/frontend/src/components/hub/RetainedList.test.tsx +94 -0
- manigent/web/frontend/src/components/hub/RetainedList.tsx +32 -0
- manigent/web/frontend/src/components/hub/RetainedRow.tsx +129 -0
- manigent/web/frontend/src/components/hub/StandInChip.test.tsx +37 -0
- manigent/web/frontend/src/components/hub/StandInChip.tsx +43 -0
- manigent/web/frontend/src/components/hub/UnusualNameChip.test.tsx +81 -0
- manigent/web/frontend/src/components/hub/UnusualNameChip.tsx +22 -0
- manigent/web/frontend/src/components/hub/hubLint.test.ts +265 -0
- manigent/web/frontend/src/components/landing/ComparisonSection.tsx +92 -0
- manigent/web/frontend/src/components/landing/ConsoleSection.tsx +402 -0
- manigent/web/frontend/src/components/landing/CrewSection.tsx +224 -0
- manigent/web/frontend/src/components/landing/FAQ.tsx +68 -0
- manigent/web/frontend/src/components/landing/Footer.tsx +58 -0
- manigent/web/frontend/src/components/landing/HowItWorks.tsx +117 -0
- manigent/web/frontend/src/components/landing/KnowledgeSection.tsx +91 -0
- manigent/web/frontend/src/components/landing/LandingPage.test.tsx +134 -0
- manigent/web/frontend/src/components/landing/LearningSection.tsx +486 -0
- manigent/web/frontend/src/components/landing/Nav.tsx +68 -0
- manigent/web/frontend/src/components/landing/Pricing.tsx +263 -0
- manigent/web/frontend/src/components/landing/Section.tsx +98 -0
- manigent/web/frontend/src/components/landing/StaffingSection.tsx +122 -0
- manigent/web/frontend/src/components/landing/WhyNowSection.tsx +92 -0
- manigent/web/frontend/src/components/landing/WhyTeamSection.tsx +73 -0
- manigent/web/frontend/src/components/landing/earlyAccess.ts +23 -0
- manigent/web/frontend/src/components/layout/AppLayout.tsx +77 -0
- manigent/web/frontend/src/components/layout/Sidebar.tsx +172 -0
- manigent/web/frontend/src/components/layout/index.ts +2 -0
- manigent/web/frontend/src/components/project/ActivityFeed.tsx +247 -0
- manigent/web/frontend/src/components/project/CreateProjectPage.tsx +543 -0
- manigent/web/frontend/src/components/project/DeleteProjectButton.tsx +39 -0
- manigent/web/frontend/src/components/project/ProjectPlanTab.phase.test.tsx +107 -0
- manigent/web/frontend/src/components/project/ProjectPlanTab.test.tsx +994 -0
- manigent/web/frontend/src/components/project/ProjectPlanTab.tsx +166 -0
- manigent/web/frontend/src/components/project/ProjectReportTab.tsx +139 -0
- manigent/web/frontend/src/components/project/ProjectView.tsx +390 -0
- manigent/web/frontend/src/components/project/index.ts +2 -0
- manigent/web/frontend/src/components/project/plan/PlanAcceptance.test.tsx +460 -0
- manigent/web/frontend/src/components/project/plan/PlanAcceptance.tsx +111 -0
- manigent/web/frontend/src/components/project/plan/PlanBlockEdit.tsx +111 -0
- manigent/web/frontend/src/components/project/plan/PlanBlockEditing.test.tsx +1132 -0
- manigent/web/frontend/src/components/project/plan/PlanBody.test.tsx +495 -0
- manigent/web/frontend/src/components/project/plan/PlanBody.tsx +992 -0
- manigent/web/frontend/src/components/project/plan/PlanCollide.tsx +254 -0
- manigent/web/frontend/src/components/project/plan/PlanCommentList.test.tsx +420 -0
- manigent/web/frontend/src/components/project/plan/PlanCommentList.tsx +391 -0
- manigent/web/frontend/src/components/project/plan/PlanDecisionNudge.test.tsx +226 -0
- manigent/web/frontend/src/components/project/plan/PlanDecisionNudge.tsx +128 -0
- manigent/web/frontend/src/components/project/plan/PlanDestructiveAccept.test.tsx +209 -0
- manigent/web/frontend/src/components/project/plan/PlanDiff.test.tsx +126 -0
- manigent/web/frontend/src/components/project/plan/PlanDiff.tsx +131 -0
- manigent/web/frontend/src/components/project/plan/PlanDiffSeries.test.tsx +500 -0
- manigent/web/frontend/src/components/project/plan/PlanDiffSeries.tsx +125 -0
- manigent/web/frontend/src/components/project/plan/PlanEditor.mounts.test.tsx +504 -0
- manigent/web/frontend/src/components/project/plan/PlanEditor.tsx +2159 -0
- manigent/web/frontend/src/components/project/plan/PlanHistory.tsx +69 -0
- manigent/web/frontend/src/components/project/plan/PlanInlineNotes.test.tsx +2398 -0
- manigent/web/frontend/src/components/project/plan/PlanNoteBase.test.tsx +215 -0
- manigent/web/frontend/src/components/project/plan/PlanNoteRow.test.tsx +562 -0
- manigent/web/frontend/src/components/project/plan/PlanNoteRow.tsx +908 -0
- manigent/web/frontend/src/components/project/plan/PlanQuotePop.tsx +254 -0
- manigent/web/frontend/src/components/project/plan/PlanStaleReconcile.test.tsx +244 -0
- manigent/web/frontend/src/components/project/plan/PlanSubmitWindow.test.tsx +281 -0
- manigent/web/frontend/src/components/project/plan/PlanTray.tsx +184 -0
- manigent/web/frontend/src/components/project/plan/PlanTrayMirror.test.tsx +242 -0
- manigent/web/frontend/src/components/project/plan/plan.css +1151 -0
- manigent/web/frontend/src/components/project/plan/planAnchor.test.tsx +459 -0
- manigent/web/frontend/src/components/project/plan/planAnchor.tsx +277 -0
- manigent/web/frontend/src/components/project/plan/planBlocks.test.tsx +470 -0
- manigent/web/frontend/src/components/project/plan/planBlocks.ts +242 -0
- manigent/web/frontend/src/components/project/plan/planContrast.test.ts +229 -0
- manigent/web/frontend/src/components/project/plan/planDiffs.test.ts +455 -0
- manigent/web/frontend/src/components/project/plan/planDiffs.ts +358 -0
- manigent/web/frontend/src/components/project/plan/planTestServer.ts +741 -0
- manigent/web/frontend/src/components/project/plan/planTransport.test.ts +160 -0
- manigent/web/frontend/src/components/project/plan/planTrayLogic.test.ts +1201 -0
- manigent/web/frontend/src/components/project/plan/planTrayLogic.ts +1164 -0
- manigent/web/frontend/src/components/publicAgents/PublicAgentsAccount.tsx +162 -0
- manigent/web/frontend/src/components/publicAgents/api.ts +55 -0
- manigent/web/frontend/src/components/publicAgents/parts.tsx +54 -0
- manigent/web/frontend/src/components/publicAgents/publicAgents.css +53 -0
- manigent/web/frontend/src/components/publicAgents/publicAgents.test.tsx +86 -0
- manigent/web/frontend/src/components/publicAgents/widget.test.ts +148 -0
- manigent/web/frontend/src/components/publicAgents/widget.ts +40 -0
- manigent/web/frontend/src/components/publicRequests/AgentDrawer.tsx +101 -0
- manigent/web/frontend/src/components/publicRequests/AgentPanel.tsx +173 -0
- manigent/web/frontend/src/components/publicRequests/AgentRankList.tsx +61 -0
- manigent/web/frontend/src/components/publicRequests/MatchRetainButton.tsx +67 -0
- manigent/web/frontend/src/components/publicRequests/ProgressBoard.tsx +74 -0
- manigent/web/frontend/src/components/publicRequests/PublicRequestsPage.tsx +57 -0
- manigent/web/frontend/src/components/publicRequests/RequestHome.tsx +99 -0
- manigent/web/frontend/src/components/publicRequests/RequestRoom.tsx +126 -0
- manigent/web/frontend/src/components/publicRequests/agentView.ts +65 -0
- manigent/web/frontend/src/components/publicRequests/publicRequests.css +209 -0
- manigent/web/frontend/src/components/publicRequests/publicRequests.test.tsx +172 -0
- manigent/web/frontend/src/components/publicRequests/requestCopy.ts +121 -0
- manigent/web/frontend/src/components/sample-request/SampleIdeaList.test.tsx +190 -0
- manigent/web/frontend/src/components/sample-request/SampleIdeaList.tsx +180 -0
- manigent/web/frontend/src/components/sample-request/SampleRequestBody.tsx +276 -0
- manigent/web/frontend/src/components/sample-request/assistantStarterSamples.ts +62 -0
- manigent/web/frontend/src/components/sample-request/sampleIdeaList.css +106 -0
- manigent/web/frontend/src/components/scheduled/CronPicker.tsx +80 -0
- manigent/web/frontend/src/components/scheduled/ScheduleMessageModal.tsx +341 -0
- manigent/web/frontend/src/components/scheduled/ScheduledMessagesList.tsx +157 -0
- manigent/web/frontend/src/components/settings/AgentSettingsPage.tsx +366 -0
- manigent/web/frontend/src/components/settings/ConnectedAccounts.tsx +277 -0
- manigent/web/frontend/src/components/settings/DefaultModelSection.test.tsx +96 -0
- manigent/web/frontend/src/components/settings/DefaultModelSection.tsx +212 -0
- manigent/web/frontend/src/components/settings/DisconnectConfirmModal.tsx +93 -0
- manigent/web/frontend/src/components/settings/FrontDeskSettingsPage.isolation.test.tsx +66 -0
- manigent/web/frontend/src/components/settings/FrontDeskSettingsPage.tsx +134 -0
- manigent/web/frontend/src/components/settings/InvitableAgentsPicker.tsx +182 -0
- manigent/web/frontend/src/components/settings/KnowledgePacksSection.tsx +867 -0
- manigent/web/frontend/src/components/settings/ModelConfigDialog.catalogDriven.test.tsx +79 -0
- manigent/web/frontend/src/components/settings/ModelConfigDialog.tsx +343 -0
- manigent/web/frontend/src/components/settings/ModelConfigSection.smartRouting.test.tsx +109 -0
- manigent/web/frontend/src/components/settings/ModelConfigSection.tsx +599 -0
- manigent/web/frontend/src/components/settings/ReflectionScheduleSection.tsx +170 -0
- manigent/web/frontend/src/components/settings/UserSettingsPage.tsx +168 -0
- manigent/web/frontend/src/components/settings/agent/AgentStatusStrip.tsx +71 -0
- manigent/web/frontend/src/components/settings/agent/BlockedDeploymentsCard.test.tsx +81 -0
- manigent/web/frontend/src/components/settings/agent/BlockedDeploymentsCard.tsx +62 -0
- manigent/web/frontend/src/components/settings/agent/ChannelIsolationLine.tsx +21 -0
- manigent/web/frontend/src/components/settings/agent/ChannelsSection.test.tsx +879 -0
- manigent/web/frontend/src/components/settings/agent/ChannelsSection.tsx +1124 -0
- manigent/web/frontend/src/components/settings/agent/EnvVarsCard.test.ts +15 -0
- manigent/web/frontend/src/components/settings/agent/EnvVarsCard.tsx +301 -0
- manigent/web/frontend/src/components/settings/agent/ExtraDirsList.tsx +85 -0
- manigent/web/frontend/src/components/settings/agent/GeneralSection.tsx +88 -0
- manigent/web/frontend/src/components/settings/agent/HostDisclaimerSlot.test.tsx +32 -0
- manigent/web/frontend/src/components/settings/agent/HostDisclaimerSlot.tsx +30 -0
- manigent/web/frontend/src/components/settings/agent/HubChannelCard.test.tsx +449 -0
- manigent/web/frontend/src/components/settings/agent/HubChannelCard.tsx +312 -0
- manigent/web/frontend/src/components/settings/agent/HubInvitableAgentsCard.test.tsx +83 -0
- manigent/web/frontend/src/components/settings/agent/HubInvitableAgentsCard.tsx +64 -0
- manigent/web/frontend/src/components/settings/agent/HubSendUsageCard.test.tsx +69 -0
- manigent/web/frontend/src/components/settings/agent/HubSendUsageCard.tsx +42 -0
- manigent/web/frontend/src/components/settings/agent/HubTurnOffDialog.tsx +88 -0
- manigent/web/frontend/src/components/settings/agent/IsolationRecheckButton.test.tsx +26 -0
- manigent/web/frontend/src/components/settings/agent/IsolationRecheckButton.tsx +68 -0
- manigent/web/frontend/src/components/settings/agent/KnowledgeSection.tsx +68 -0
- manigent/web/frontend/src/components/settings/agent/LineChannelCard.test.tsx +428 -0
- manigent/web/frontend/src/components/settings/agent/LineChannelCard.tsx +343 -0
- manigent/web/frontend/src/components/settings/agent/RuntimeSection.test.tsx +164 -0
- manigent/web/frontend/src/components/settings/agent/RuntimeSection.tsx +118 -0
- manigent/web/frontend/src/components/settings/agent/StorageSection.tsx +78 -0
- manigent/web/frontend/src/components/settings/agent/WebChatChannelCard.test.tsx +253 -0
- manigent/web/frontend/src/components/settings/agent/WebChatChannelCard.tsx +401 -0
- manigent/web/frontend/src/components/settings/agent/WhatsAppChannelCard.test.tsx +462 -0
- manigent/web/frontend/src/components/settings/agent/WhatsAppChannelCard.tsx +289 -0
- manigent/web/frontend/src/components/settings/agent/agentSettings.test.tsx +109 -0
- manigent/web/frontend/src/components/settings/agent/channelSetupGuides.test.tsx +162 -0
- manigent/web/frontend/src/components/settings/agent/channelSetupGuides.tsx +119 -0
- manigent/web/frontend/src/components/settings/agent/channelsShared.ts +83 -0
- manigent/web/frontend/src/components/settings/agent/fields.tsx +67 -0
- manigent/web/frontend/src/components/settings/agent/sections.ts +36 -0
- manigent/web/frontend/src/components/settings/agent/useAgentSettingsDraft.ts +129 -0
- manigent/web/frontend/src/components/settings/agent/useInstallSelection.ts +38 -0
- manigent/web/frontend/src/components/settings/primitives.tsx +98 -0
- manigent/web/frontend/src/components/shared/ExpandToggle.tsx +45 -0
- manigent/web/frontend/src/components/shared/MarkdownBody.tsx +218 -0
- manigent/web/frontend/src/components/shared/MarkdownBody.untrusted.test.tsx +97 -0
- manigent/web/frontend/src/components/shared/RenderBody.tsx +90 -0
- manigent/web/frontend/src/components/shared/rehypeHideComments.test.tsx +115 -0
- manigent/web/frontend/src/components/shared/rehypeHideComments.ts +124 -0
- manigent/web/frontend/src/components/sharing/AcceptSharePage.tsx +141 -0
- manigent/web/frontend/src/components/sharing/ShareLandingPage.tsx +89 -0
- manigent/web/frontend/src/components/sidebar/AccountChip.test.tsx +337 -0
- manigent/web/frontend/src/components/sidebar/AccountChip.tsx +407 -0
- manigent/web/frontend/src/components/sidebar/ActiveWorkDot.tsx +9 -0
- manigent/web/frontend/src/components/sidebar/AgentProfile.tsx +44 -0
- manigent/web/frontend/src/components/sidebar/AgentRow.tsx +71 -0
- manigent/web/frontend/src/components/sidebar/AgentsPanel.retained.test.tsx +105 -0
- manigent/web/frontend/src/components/sidebar/AgentsPanel.tsx +231 -0
- manigent/web/frontend/src/components/sidebar/AssistantHero.tsx +48 -0
- manigent/web/frontend/src/components/sidebar/ChatroomItem.tsx +48 -0
- manigent/web/frontend/src/components/sidebar/CommandPalette.channelThreads.test.tsx +76 -0
- manigent/web/frontend/src/components/sidebar/CommandPalette.reopen.test.tsx +206 -0
- manigent/web/frontend/src/components/sidebar/CommandPalette.test.tsx +725 -0
- manigent/web/frontend/src/components/sidebar/CommandPalette.tsx +774 -0
- manigent/web/frontend/src/components/sidebar/ComputersPanel.tsx +144 -0
- manigent/web/frontend/src/components/sidebar/DmIcon.tsx +46 -0
- manigent/web/frontend/src/components/sidebar/DmsPanel.tsx +226 -0
- manigent/web/frontend/src/components/sidebar/FrontDeskPanel.channels.test.tsx +582 -0
- manigent/web/frontend/src/components/sidebar/FrontDeskPanel.test.tsx +151 -0
- manigent/web/frontend/src/components/sidebar/FrontDeskPanel.tsx +454 -0
- manigent/web/frontend/src/components/sidebar/HotkeysHelp.tsx +101 -0
- manigent/web/frontend/src/components/sidebar/MessageHitRow.test.tsx +84 -0
- manigent/web/frontend/src/components/sidebar/MessageHitRow.tsx +57 -0
- manigent/web/frontend/src/components/sidebar/MyDeskRailPanel.crossHighlight.test.tsx +247 -0
- manigent/web/frontend/src/components/sidebar/MyDeskRailPanel.delete.test.tsx +273 -0
- manigent/web/frontend/src/components/sidebar/MyDeskRailPanel.tsx +351 -0
- manigent/web/frontend/src/components/sidebar/PanelShell.tsx +48 -0
- manigent/web/frontend/src/components/sidebar/ProjectItem.tsx +161 -0
- manigent/web/frontend/src/components/sidebar/ProjectRow.tsx +151 -0
- manigent/web/frontend/src/components/sidebar/ProjectsPanel.tsx +80 -0
- manigent/web/frontend/src/components/sidebar/PublicPanel.counterpart.test.tsx +85 -0
- manigent/web/frontend/src/components/sidebar/PublicPanel.hub.test.tsx +147 -0
- manigent/web/frontend/src/components/sidebar/PublicPanel.tsx +271 -0
- manigent/web/frontend/src/components/sidebar/RecencyHeader.tsx +17 -0
- manigent/web/frontend/src/components/sidebar/ScheduledPanel.tsx +58 -0
- manigent/web/frontend/src/components/sidebar/SidebarAvatar.tsx +128 -0
- manigent/web/frontend/src/components/sidebar/SidebarRail.tsx +163 -0
- manigent/web/frontend/src/components/sidebar/TeamGroup.tsx +67 -0
- manigent/web/frontend/src/components/sidebar/dmPrefill.test.ts +69 -0
- manigent/web/frontend/src/components/sidebar/dmPrefill.ts +80 -0
- manigent/web/frontend/src/components/sidebar/index.ts +18 -0
- manigent/web/frontend/src/components/sidebar/railShortcuts.ts +18 -0
- manigent/web/frontend/src/components/today/lib.test.ts +70 -0
- manigent/web/frontend/src/components/today/lib.ts +296 -0
- manigent/web/frontend/src/components/today/today.css +113 -0
- manigent/web/frontend/src/components/welcome/RunnerSetup.css +253 -0
- manigent/web/frontend/src/components/welcome/RunnerSetup.tsx +148 -0
- manigent/web/frontend/src/components/welcome/WelcomePage.css +383 -0
- manigent/web/frontend/src/components/welcome/WelcomePage.tsx +329 -0
- manigent/web/frontend/src/components/welcome/welcomeCopy.test.ts +382 -0
- manigent/web/frontend/src/components/welcome/welcomeCopy.ts +313 -0
- manigent/web/frontend/src/config/llmProviders.test.ts +161 -0
- manigent/web/frontend/src/config/llmProviders.ts +109 -0
- manigent/web/frontend/src/config/providerIds.fixture.json +13 -0
- manigent/web/frontend/src/hooks/accountNavigation.test.tsx +138 -0
- manigent/web/frontend/src/hooks/index.ts +10 -0
- manigent/web/frontend/src/hooks/useActiveWorkBootstrap.ts +86 -0
- manigent/web/frontend/src/hooks/useAgentAccess.test.tsx +30 -0
- manigent/web/frontend/src/hooks/useAgentAccess.ts +204 -0
- manigent/web/frontend/src/hooks/useAgentSampleRequests.ts +27 -0
- manigent/web/frontend/src/hooks/useAgentSearch.ts +10 -0
- manigent/web/frontend/src/hooks/useAgents.ts +46 -0
- manigent/web/frontend/src/hooks/useAnnouncements.test.ts +112 -0
- manigent/web/frontend/src/hooks/useAnnouncements.ts +100 -0
- manigent/web/frontend/src/hooks/useAssistantAgent.ts +24 -0
- manigent/web/frontend/src/hooks/useAutoResizeTextarea.ts +18 -0
- manigent/web/frontend/src/hooks/useBridgeDeliveries.test.tsx +79 -0
- manigent/web/frontend/src/hooks/useBriefTabs.ts +122 -0
- manigent/web/frontend/src/hooks/useChannelThreads.ts +69 -0
- manigent/web/frontend/src/hooks/useComposeForm.ts +80 -0
- manigent/web/frontend/src/hooks/useComputers.ts +123 -0
- manigent/web/frontend/src/hooks/useContextFirstItem.ts +118 -0
- manigent/web/frontend/src/hooks/useCreateProject.ts +78 -0
- manigent/web/frontend/src/hooks/useDebouncedValue.ts +16 -0
- manigent/web/frontend/src/hooks/useDeleteProject.ts +27 -0
- manigent/web/frontend/src/hooks/useDeskDispatch.test.tsx +170 -0
- manigent/web/frontend/src/hooks/useDeskDispatch.ts +135 -0
- manigent/web/frontend/src/hooks/useDeskReadState.test.tsx +85 -0
- manigent/web/frontend/src/hooks/useDeskReadState.ts +150 -0
- manigent/web/frontend/src/hooks/useDeskRecentlyDone.test.tsx +222 -0
- manigent/web/frontend/src/hooks/useDeskRecentlyDone.ts +225 -0
- manigent/web/frontend/src/hooks/useDeskTour.ts +37 -0
- manigent/web/frontend/src/hooks/useDeskUpdates.channelThreads.test.tsx +91 -0
- manigent/web/frontend/src/hooks/useDeskUpdates.hubThreads.test.tsx +93 -0
- manigent/web/frontend/src/hooks/useDeskUpdates.ts +353 -0
- manigent/web/frontend/src/hooks/useDisconnectIntegration.ts +23 -0
- manigent/web/frontend/src/hooks/useDmThreads.ts +99 -0
- manigent/web/frontend/src/hooks/useFileDropzone.ts +93 -0
- manigent/web/frontend/src/hooks/useFileUpload.ts +38 -0
- manigent/web/frontend/src/hooks/useFiles.ts +98 -0
- manigent/web/frontend/src/hooks/useHub.test.tsx +237 -0
- manigent/web/frontend/src/hooks/useHub.ts +502 -0
- manigent/web/frontend/src/hooks/useInstall.ts +82 -0
- manigent/web/frontend/src/hooks/useLabels.test.tsx +294 -0
- manigent/web/frontend/src/hooks/useLabels.ts +287 -0
- manigent/web/frontend/src/hooks/useLogout.ts +49 -0
- manigent/web/frontend/src/hooks/useMentionDetection.ts +90 -0
- manigent/web/frontend/src/hooks/useMessageAttachments.deskLimit.test.ts +264 -0
- manigent/web/frontend/src/hooks/useMessageAttachments.ts +283 -0
- manigent/web/frontend/src/hooks/useMessageDeepLink.test.tsx +70 -0
- manigent/web/frontend/src/hooks/useMessageDeepLink.ts +32 -0
- manigent/web/frontend/src/hooks/useMessageSearch.ts +78 -0
- manigent/web/frontend/src/hooks/useModelConfigs.ts +178 -0
- manigent/web/frontend/src/hooks/useMyAgents.ts +18 -0
- manigent/web/frontend/src/hooks/usePointerReorder.ts +270 -0
- manigent/web/frontend/src/hooks/usePrefersReducedMotion.ts +18 -0
- manigent/web/frontend/src/hooks/useProjectPlan.ts +36 -0
- manigent/web/frontend/src/hooks/useProjectReport.ts +19 -0
- manigent/web/frontend/src/hooks/useProjects.ts +104 -0
- manigent/web/frontend/src/hooks/useProjectsWithChatrooms.ts +97 -0
- manigent/web/frontend/src/hooks/usePublicRequests.ts +89 -0
- manigent/web/frontend/src/hooks/useRecentAgents.ts +38 -0
- manigent/web/frontend/src/hooks/useRenameProject.test.tsx +185 -0
- manigent/web/frontend/src/hooks/useRenameProject.ts +192 -0
- manigent/web/frontend/src/hooks/useRoomTrust.ts +56 -0
- manigent/web/frontend/src/hooks/useSharing.ts +46 -0
- manigent/web/frontend/src/hooks/useSopRecents.ts +55 -0
- manigent/web/frontend/src/hooks/useSopSchedules.ts +25 -0
- manigent/web/frontend/src/hooks/useSops.ts +99 -0
- manigent/web/frontend/src/hooks/useSwitchAccount.ts +41 -0
- manigent/web/frontend/src/hooks/useTeamGroups.ts +48 -0
- manigent/web/frontend/src/hooks/useThreadOutbox.ts +68 -0
- manigent/web/frontend/src/hooks/useTodos.add.test.tsx +89 -0
- manigent/web/frontend/src/hooks/useTodos.linkProject.test.tsx +115 -0
- manigent/web/frontend/src/hooks/useTodos.saveDraft.test.tsx +188 -0
- manigent/web/frontend/src/hooks/useTodos.ts +396 -0
- manigent/web/frontend/src/hooks/useUntrustedBodies.test.tsx +87 -0
- manigent/web/frontend/src/hooks/useUntrustedBodies.ts +51 -0
- manigent/web/frontend/src/hooks/useWebSocket.briefTab.test.tsx +148 -0
- manigent/web/frontend/src/hooks/useWebSocket.channelThreads.test.tsx +82 -0
- manigent/web/frontend/src/hooks/useWebSocket.hostSync.test.tsx +92 -0
- manigent/web/frontend/src/hooks/useWebSocket.hub.test.tsx +114 -0
- manigent/web/frontend/src/hooks/useWebSocket.labelSync.test.tsx +168 -0
- manigent/web/frontend/src/hooks/useWebSocket.plan.test.tsx +168 -0
- manigent/web/frontend/src/hooks/useWebSocket.reconnect.test.tsx +166 -0
- manigent/web/frontend/src/hooks/useWebSocket.runnerVersions.test.tsx +167 -0
- manigent/web/frontend/src/hooks/useWebSocket.ts +495 -0
- manigent/web/frontend/src/hooks/useWindowFileDropGuard.ts +33 -0
- manigent/web/frontend/src/landing.tsx +11 -0
- manigent/web/frontend/src/main.tsx +17 -0
- manigent/web/frontend/src/private-beta.tsx +10 -0
- manigent/web/frontend/src/public.tsx +42 -0
- manigent/web/frontend/src/queryClient.ts +16 -0
- manigent/web/frontend/src/stores/activeWorkStore.ts +88 -0
- manigent/web/frontend/src/stores/announcementStore.test.ts +217 -0
- manigent/web/frontend/src/stores/announcementStore.ts +169 -0
- manigent/web/frontend/src/stores/authStore.multiSession.test.ts +304 -0
- manigent/web/frontend/src/stores/authStore.test.ts +235 -0
- manigent/web/frontend/src/stores/authStore.ts +693 -0
- manigent/web/frontend/src/stores/deskLabelViewStore.test.ts +162 -0
- manigent/web/frontend/src/stores/deskLabelViewStore.ts +234 -0
- manigent/web/frontend/src/stores/deskLinkStore.ts +54 -0
- manigent/web/frontend/src/stores/deskStore.test.ts +53 -0
- manigent/web/frontend/src/stores/deskStore.ts +93 -0
- manigent/web/frontend/src/stores/heldPostsStore.ts +78 -0
- manigent/web/frontend/src/stores/mcpAuthStore.ts +52 -0
- manigent/web/frontend/src/stores/modelSelectionStore.ts +33 -0
- manigent/web/frontend/src/stores/perUserStores.ts +79 -0
- manigent/web/frontend/src/stores/runnerVersionStore.test.ts +81 -0
- manigent/web/frontend/src/stores/runnerVersionStore.ts +60 -0
- manigent/web/frontend/src/stores/skillAuthStore.ts +54 -0
- manigent/web/frontend/src/stores/switchReset.test.ts +236 -0
- manigent/web/frontend/src/stores/tokenExp.ts +32 -0
- manigent/web/frontend/src/stores/uiStore.ts +186 -0
- manigent/web/frontend/src/stores/unreadStore.ts +204 -0
- manigent/web/frontend/src/stores/unsavedGuard.ts +22 -0
- manigent/web/frontend/src/styles/design/fonts/JetBrainsMono-Latin.woff2 +0 -0
- manigent/web/frontend/src/styles/design/fonts/Nunito-Latin.woff2 +0 -0
- manigent/web/frontend/src/styles/design/fonts/Nunito-LatinExt.woff2 +0 -0
- manigent/web/frontend/src/styles/design/tokens.css +160 -0
- manigent/web/frontend/src/styles/homepage.css +242 -0
- manigent/web/frontend/src/styles/index.css +126 -0
- manigent/web/frontend/src/styles/landing.css +52 -0
- manigent/web/frontend/src/test/authFixtures.ts +154 -0
- manigent/web/frontend/src/test/fetchHarness.ts +203 -0
- manigent/web/frontend/src/test/fixtures/channelThreads.smoke.json +42 -0
- manigent/web/frontend/src/test/hubFixtures.ts +212 -0
- manigent/web/frontend/src/test/queryWrapper.tsx +9 -0
- manigent/web/frontend/src/test/suiteHygiene.test.ts +212 -0
- manigent/web/frontend/src/types/channelThreadName.test.ts +16 -0
- manigent/web/frontend/src/types/index.ts +903 -0
- manigent/web/frontend/src/utils/agentAccessCopy.test.ts +53 -0
- manigent/web/frontend/src/utils/agentAccessCopy.ts +231 -0
- manigent/web/frontend/src/utils/agentDisplay.ts +81 -0
- manigent/web/frontend/src/utils/briefSchedule.ts +25 -0
- manigent/web/frontend/src/utils/channelThreads.test.ts +109 -0
- manigent/web/frontend/src/utils/channelThreads.ts +179 -0
- manigent/web/frontend/src/utils/chatroomDisplay.ts +11 -0
- manigent/web/frontend/src/utils/deskLinks.test.ts +155 -0
- manigent/web/frontend/src/utils/deskLinks.ts +115 -0
- manigent/web/frontend/src/utils/deskRecipient.ts +29 -0
- manigent/web/frontend/src/utils/formatDate.ts +102 -0
- manigent/web/frontend/src/utils/frontDesk.ts +65 -0
- manigent/web/frontend/src/utils/hubChannelView.test.ts +178 -0
- manigent/web/frontend/src/utils/hubChannelView.ts +307 -0
- manigent/web/frontend/src/utils/hubDelivery.test.ts +105 -0
- manigent/web/frontend/src/utils/hubDelivery.ts +137 -0
- manigent/web/frontend/src/utils/hubDisplay.test.ts +157 -0
- manigent/web/frontend/src/utils/hubDisplay.ts +221 -0
- manigent/web/frontend/src/utils/hubThread.test.ts +184 -0
- manigent/web/frontend/src/utils/hubThread.ts +247 -0
- manigent/web/frontend/src/utils/labelErrors.test.ts +127 -0
- manigent/web/frontend/src/utils/labelErrors.ts +123 -0
- manigent/web/frontend/src/utils/labelView.test.ts +846 -0
- manigent/web/frontend/src/utils/labelView.ts +760 -0
- manigent/web/frontend/src/utils/legalUrls.ts +11 -0
- manigent/web/frontend/src/utils/messageSender.test.ts +32 -0
- manigent/web/frontend/src/utils/messageSender.ts +29 -0
- manigent/web/frontend/src/utils/oauthScopeCopy.ts +73 -0
- manigent/web/frontend/src/utils/personalize.ts +49 -0
- manigent/web/frontend/src/utils/reachableAgents.test.ts +36 -0
- manigent/web/frontend/src/utils/reachableAgents.ts +24 -0
- manigent/web/frontend/src/utils/recencyBuckets.ts +61 -0
- manigent/web/frontend/src/utils/roomTrust.test.ts +94 -0
- manigent/web/frontend/src/utils/roomTrust.ts +111 -0
- manigent/web/frontend/src/utils/snippetHighlight.test.ts +63 -0
- manigent/web/frontend/src/utils/snippetHighlight.ts +42 -0
- manigent/web/frontend/src/utils/sopRecipient.ts +37 -0
- manigent/web/frontend/src/utils/sopRequest.test.ts +91 -0
- manigent/web/frontend/src/utils/sopRequest.ts +68 -0
- manigent/web/frontend/src/utils/sopSchedule.ts +26 -0
- manigent/web/frontend/src/utils/sopSection.test.ts +148 -0
- manigent/web/frontend/src/utils/sopSection.ts +143 -0
- manigent/web/frontend/src/utils/textSearch.test.ts +60 -0
- manigent/web/frontend/src/utils/textSearch.ts +43 -0
- manigent/web/frontend/src/utils/thoughtPartner.ts +26 -0
- manigent/web/frontend/src/utils/threadName.test.ts +131 -0
- manigent/web/frontend/src/utils/threadName.ts +122 -0
- manigent/web/frontend/src/utils/ticketView.test.ts +296 -0
- manigent/web/frontend/src/utils/ticketView.ts +175 -0
- manigent/web/frontend/src/utils/todoAttachments.desiredState.test.ts +180 -0
- manigent/web/frontend/src/utils/todoAttachments.ts +126 -0
- manigent/web/frontend/src/utils/todoDraft.test.ts +84 -0
- manigent/web/frontend/src/utils/todoDraft.ts +46 -0
- manigent/web/frontend/src/utils/todoSearch.test.ts +82 -0
- manigent/web/frontend/src/utils/todoSearch.ts +43 -0
- manigent/web/frontend/src/utils/versionMatch.test.ts +295 -0
- manigent/web/frontend/src/utils/versionMatch.ts +245 -0
- manigent/web/frontend/src/vite-env.d.ts +1 -0
- manigent/web/frontend/tailwind.config.js +86 -0
- manigent/web/frontend/tos.html +188 -0
- manigent/web/frontend/tsconfig.dts.json +25 -0
- manigent/web/frontend/tsconfig.json +26 -0
- manigent/web/frontend/tsconfig.node.json +11 -0
- manigent/web/frontend/vite.config.ts +41 -0
- manigent/web/frontend/vitest.config.ts +16 -0
- manigent/ws_edge/app.py +514 -0
- manigent/ws_edge/auth.py +104 -0
- manigent/ws_edge/link.py +282 -0
- manigent/ws_edge/registry.py +206 -0
- manigent/ws_edge/terminal_relay.py +269 -0
- manigent_server-0.1.0.dist-info/METADATA +138 -0
- manigent_server-0.1.0.dist-info/RECORD +1004 -0
- manigent_server-0.1.0.dist-info/WHEEL +4 -0
- manigent_server-0.1.0.dist-info/entry_points.txt +2 -0
- manigent_server-0.1.0.dist-info/licenses/LICENSE +68 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-save-skill
|
|
3
|
+
description: Crystallize a successful playwright-browser explore (prior turn drove `manigent browser` CLI subcommands via Bash) into a single SKILL.md workflow document that's replayable as `/personal:<name>`. The saved file mixes natural-language steps (where judgment lives) with concrete `manigent browser` invocations (where deterministic mechanism lives). Use ONLY when (a) the user just asked to save what just happened, AND (b) the prior turn drove the `playwright-browser` skill (you shelled `manigent browser navigate`, `manigent browser snapshot`, `manigent browser click`, etc.) AND `$MANIGENT_AGENT_DIR/personal-skill-hub/_explore/<task-id>/recording.md` exists on disk. For non-Playwright work — including saving a WebFetch-based procedure as a generic personal skill — let `/manigent:reflect`'s Promote mode handle it; do not invoke this skill.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Save a Playwright explore as a workflow SKILL.md
|
|
7
|
+
|
|
8
|
+
Owns one job: take the recording from the explore (`$MANIGENT_AGENT_DIR/personal-skill-hub/_explore/<task-id>/recording.md`) and crystallize it as `personal-skill-hub/skills/<name>/SKILL.md` — a single markdown file that other turns of you can read top-to-bottom and re-execute against new inputs.
|
|
9
|
+
|
|
10
|
+
The saved file is the **only** thing that runs at replay time. There's no separate test script, no `.feature` file, no sidecar. Correctness comes from two layers:
|
|
11
|
+
- **User review** — you show the candidate markdown before saving so the user can catch design issues (wrong parameterization, missing branch, drifted intent).
|
|
12
|
+
- **Verify-replay** — you re-run the candidate against the seed input and confirm it reproduces the explore output, catching mechanical drift (a step got dropped, a value didn't get parameterized).
|
|
13
|
+
|
|
14
|
+
## Carve-out check (run before doing anything)
|
|
15
|
+
|
|
16
|
+
Two conditions must both hold. If either fails, **stop** and explain:
|
|
17
|
+
|
|
18
|
+
1. **A Playwright recording exists for the current task.** The prior turn drove the `playwright-browser` skill via Bash (visible `manigent browser navigate` / `manigent browser snapshot` / `manigent browser click` / etc. invocations) AND `$MANIGENT_AGENT_DIR/personal-skill-hub/_explore/<task-id>/recording.md` exists on disk.
|
|
19
|
+
|
|
20
|
+
If not, reply: "I don't see a recent Playwright recording to save. If you want to save a non-Playwright procedure as a personal skill, that's `/manigent:reflect`'s Promote mode — try asking again after a regular reply." Stop.
|
|
21
|
+
|
|
22
|
+
2. **The user actually asked to save the *Playwright* run.** If the prior turn used `WebFetch` (or any tool other than `manigent browser`), this is the wrong skill — even if a stale `_explore/` dir exists. Reply with the same message as (1). Stop.
|
|
23
|
+
|
|
24
|
+
If both hold, proceed.
|
|
25
|
+
|
|
26
|
+
## Save procedure
|
|
27
|
+
|
|
28
|
+
### Step 1 — Read the recording
|
|
29
|
+
|
|
30
|
+
Read `$MANIGENT_AGENT_DIR/personal-skill-hub/_explore/<task-id>/recording.md`. It contains the verbatim sequence of `manigent browser <subcmd>` invocations you ran during the explore, interleaved with notes about what each step accomplished and what judgments you made.
|
|
31
|
+
|
|
32
|
+
### Step 2 — Ask for the user's description / SOP (if not already supplied)
|
|
33
|
+
|
|
34
|
+
The recording captures *what* happened; the user's description captures *why* — the intent that should generalize to new inputs. Examples: "find the best price for any wine query", "scrape the most contrarian view article on a topic", "log my hours for a given client and date range".
|
|
35
|
+
|
|
36
|
+
If the user's save request already included this ("save this as a skill for finding best wine prices"), use it as-is. Otherwise, reply with one focused question:
|
|
37
|
+
|
|
38
|
+
> What's this skill for? A one-line description plus any rules for how it should generalize (e.g. "find best price for wine X; prefer in-stock distributors; skip non-US sellers"). I'll show you the candidate markdown before saving.
|
|
39
|
+
|
|
40
|
+
Wait for the answer.
|
|
41
|
+
|
|
42
|
+
### Step 3 — One-pass translation
|
|
43
|
+
|
|
44
|
+
Generate a candidate SKILL.md combining the recording + description into one document:
|
|
45
|
+
|
|
46
|
+
- **Frontmatter**: `name`, `description` (from user input), `inputs` declaring parameters with type + comment.
|
|
47
|
+
- **Deterministic steps**: one numbered step per CLI invocation sequence, with a fenced `bash` block holding the verbatim `manigent browser` call(s). Use the real positional CLI — `navigate <url>`, `fill '<selector>' '<value>'`, `click '<selector>'`, `press-key <key>` (selectors are Playwright's, not `--ref`). Replace seed-specific literals with `{{input.<name>}}` placeholders. Always pass `--storage <name>` (agent-level identity) and `--session <dir>` (project-level working state, default `$PWD/.playwright-session`) so the saved skill replays against the same browser state model the explore used. See `skills/playwright-browser/SKILL.md` for the two-tier state contract. These calls auto-route to a running browser daemon (fast path) when present and fall back to one-shot otherwise — same commands either way, so nothing extra to record; replay is just faster when a daemon is up.
|
|
48
|
+
- **Judgment steps**: one numbered step per decision, in natural language, encoding the rule (not the seed-specific outcome). The user's description shapes how you phrase these — if they said "prefer in-stock distributors", that becomes the rule under the "pick a result" step.
|
|
49
|
+
- **Branches**: preserve conditional paths the explore actually took (e.g. "no match → try alternative query, at most twice").
|
|
50
|
+
|
|
51
|
+
Worked shape:
|
|
52
|
+
|
|
53
|
+
````markdown
|
|
54
|
+
---
|
|
55
|
+
name: search-provi-skill
|
|
56
|
+
description: Look up wine pricing on Provi by fuzzy query
|
|
57
|
+
inputs:
|
|
58
|
+
query: string # e.g. "Pacalet Gevrey-Chambertin 2022"
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
# search-provi-skill
|
|
62
|
+
|
|
63
|
+
Look up the buy-box pricing for a wine on app.provi.com. Handles fuzzy queries by letting the caller pick the best result and retrying with an alternative if no match is found.
|
|
64
|
+
|
|
65
|
+
## Workflow
|
|
66
|
+
|
|
67
|
+
### Step 1 — Visit the Provi homepage
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
manigent browser navigate https://app.provi.com \
|
|
71
|
+
--storage provi --session "$PWD/.playwright-session"
|
|
72
|
+
manigent browser snapshot \
|
|
73
|
+
--storage provi --session "$PWD/.playwright-session"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Step 2 — Check if the session is signed in
|
|
77
|
+
|
|
78
|
+
Read the snapshot from Step 1. If you see a sign-in form, "Log in to continue" message, or any indication the session is logged out, the login has expired — reply with the auth handoff (`manigent browser start --storage provi`, or `auth` for the one-shot fallback) and stop.
|
|
79
|
+
|
|
80
|
+
### Step 3 — Submit the search query
|
|
81
|
+
|
|
82
|
+
Selectors are Playwright's (CSS / `text=` / `role=`), derived from the current snapshot — positional, not flags:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
manigent browser navigate https://app.provi.com/product_listing \
|
|
86
|
+
--storage provi --session "$PWD/.playwright-session"
|
|
87
|
+
manigent browser snapshot \
|
|
88
|
+
--storage provi --session "$PWD/.playwright-session"
|
|
89
|
+
manigent browser fill 'input[name="search"]' "{{input.query}}" \
|
|
90
|
+
--storage provi --session "$PWD/.playwright-session"
|
|
91
|
+
manigent browser press-key Enter \
|
|
92
|
+
--storage provi --session "$PWD/.playwright-session"
|
|
93
|
+
manigent browser snapshot \
|
|
94
|
+
--storage provi --session "$PWD/.playwright-session"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 4 — Find the best matching result
|
|
98
|
+
|
|
99
|
+
Read the result list from Step 3's snapshot. Pick the wine that best matches `{{input.query}}` — consider producer, wine name, vintage, region, appellation. Match by semantic intent, not literal substring.
|
|
100
|
+
|
|
101
|
+
- **Clear match** → click it: `manigent browser click 'text=<result title>' --storage provi --session "$PWD/.playwright-session"`, then snapshot, continue to Step 5.
|
|
102
|
+
- **No clear match** → derive an alternative query (drop vintage, broaden producer to last name only); set `{{input.query}}` to the alternative and re-run from Step 3. Give up after 2 alternatives.
|
|
103
|
+
|
|
104
|
+
### Step 5 — Extract pricing
|
|
105
|
+
|
|
106
|
+
Read the product page snapshot from Step 4. Extract `case_price`, `bottle_price`, `vintage`, `format`, `distributor`. Return as a markdown table.
|
|
107
|
+
````
|
|
108
|
+
|
|
109
|
+
That's the entire saved skill. ~100 lines.
|
|
110
|
+
|
|
111
|
+
### Step 4 — Show the candidate to the user
|
|
112
|
+
|
|
113
|
+
Reply with the candidate SKILL.md inline (or write it to `/tmp/_save_candidate.md` and reference the path if it's long). Ask:
|
|
114
|
+
|
|
115
|
+
> Here's the candidate skill. Review and reply 'looks good' to save, or tell me what to change.
|
|
116
|
+
|
|
117
|
+
Loop on edits. Don't proceed to verify-replay until the user has confirmed.
|
|
118
|
+
|
|
119
|
+
### Step 5 — Verify replay against the seed input
|
|
120
|
+
|
|
121
|
+
Once the user approves, write the candidate to `/tmp/_save_candidate.md`. Then read it back as if you were a fresh turn invoked via `/personal:<name>` with the same input the explore used. Walk it top-to-bottom: execute each `bash` block (shelling `manigent browser <subcmd>` for each call), apply judgment to each natural-language step, see if the final output matches what the explore returned.
|
|
122
|
+
|
|
123
|
+
- **Match** → proceed to atomic move.
|
|
124
|
+
- **Drift** → the transcription doesn't reproduce what was actually done. Common causes: a step got dropped during translation, a parameterization leaked (some seed value wasn't replaced), the wrong branch was preserved. Reply with the diff between explore output and replay output; offer to re-translate.
|
|
125
|
+
|
|
126
|
+
This is the mechanical safety net. User review catches design issues; verify-replay catches mechanical bugs.
|
|
127
|
+
|
|
128
|
+
### Step 6 — Atomic move
|
|
129
|
+
|
|
130
|
+
Create the target dir and write the verified SKILL.md:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
mkdir -p "$MANIGENT_AGENT_DIR/personal-skill-hub/skills/<name>"
|
|
134
|
+
mv /tmp/_save_candidate.md "$MANIGENT_AGENT_DIR/personal-skill-hub/skills/<name>/SKILL.md"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Clean up `_explore/<task-id>/` — it's just the recording at this point and the SKILL.md supersedes it.
|
|
138
|
+
|
|
139
|
+
The skill is now invokable as `/personal:<name>` on the next Claude subprocess spawn. Tell the user.
|
|
140
|
+
|
|
141
|
+
## Things to NOT do
|
|
142
|
+
|
|
143
|
+
- Do not invoke this skill if no Playwright recording exists for the current task. Re-read the carve-out check.
|
|
144
|
+
- Do not skip the user-review step. The verify-replay step catches mechanical drift but won't catch design issues (wrong scope, missing branch, intent mismatch) — only the user can.
|
|
145
|
+
- Do not skip the verify-replay step. User review catches design issues but won't catch transcription bugs (a step dropped, a literal value not parameterized) — only re-running can.
|
|
146
|
+
- Do not "fix bugs" in the recording during translation. If the explore had a wart, the saved skill inherits it (you can re-explore later to clean up). The recording is the source of truth.
|
|
147
|
+
- Do not save anything outside `personal-skill-hub/skills/<name>/SKILL.md`. No sidecar files. No script. No MANIFEST. The single-file rule is what makes the saved skill auditable.
|
|
148
|
+
- Do not embed scoring functions, picking heuristics, or "is this right?" regex in any `bash` block. Those decisions belong in natural-language steps where the replay-time LLM applies judgment with full context.
|
|
149
|
+
- Do not delete `_explore/<task-id>/` until Step 6 has succeeded. If verify-replay fails, the user can ask you to retry and the recording is still on disk.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "web-artifacts",
|
|
4
|
+
"summary": "Build interactive single-file HTML dashboards and charts.",
|
|
5
|
+
"description": "Create interactive single-file HTML artifacts with React, Tailwind, and Chart.js",
|
|
6
|
+
"tags": ["frontend", "react", "ui", "dashboard"],
|
|
7
|
+
"version": "1.0.0",
|
|
8
|
+
"attribution": null
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "playwright-browser",
|
|
12
|
+
"summary": "Drive a real Chrome browser to do what WebFetch can't — logins, JS-rendered pages, and multi-step flows.",
|
|
13
|
+
"description": "Drive Chrome via Python playwright through `manigent browser` CLI subcommands (navigate/snapshot/click/fill/press-key/screenshot/wait-for, plus start/stop/auth) when WebFetch can't do the job — login required, JavaScript-rendered UI, or multi-step interaction. Optional fast path: `manigent browser start` runs one long-lived browser per agent (a tab per project) so actions auto-route to it with no cold start and login stays live; the agent may start it but never stops it (user-managed). Two-tier state: agent-level `--storage <name>` identity (signed in via `manigent browser start` or `auth`) + project-level `--session <dir>` working state (default `$PWD/.playwright-session`). Setup: `manigent bootstrap browser` once per runner; sign in per agent identity via `manigent browser start --storage <name>`. Pairs with `playwright-save-skill`.",
|
|
14
|
+
"tags": ["browser", "automation", "playwright", "web"],
|
|
15
|
+
"version": "1.0.0",
|
|
16
|
+
"attribution": null
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "playwright-save-skill",
|
|
20
|
+
"summary": "Turn a successful browser session into a replayable saved skill.",
|
|
21
|
+
"description": "Crystallize a successful `playwright-browser` explore (prior turn drove `manigent browser` CLI subcommands via Bash; recording lives at `$MANIGENT_AGENT_DIR/personal-skill-hub/_explore/<task-id>/recording.md`) into a single SKILL.md replayable as `/personal:<name>`. Translates the recorded steps into a mix of natural-language judgment (where intent generalizes) and concrete `manigent browser` CLI invocations (where mechanism is deterministic). Shows the candidate markdown to the user for review before saving; verify-replay confirms it reproduces the explore output. Skip for non-Playwright work — let `/manigent:reflect`'s Promote handle that.",
|
|
22
|
+
"tags": ["browser", "playwright", "skill-authoring"],
|
|
23
|
+
"version": "1.0.0",
|
|
24
|
+
"attribution": null
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "photo-story",
|
|
28
|
+
"summary": "Build Spotify-Wrapped-style photo story pages and curate big libraries down to the best shots.",
|
|
29
|
+
"description": "Build animated single-file HTML 'year story' / 'trip story' artifacts (Spotify-Wrapped style) and run the curator funnel that gets a 1k–10k photo library down to ~50 keepers without melting context. Two halves in one skill.",
|
|
30
|
+
"tags": ["photos", "memories", "html", "animation", "scrollytelling"],
|
|
31
|
+
"version": "1.0.0",
|
|
32
|
+
"attribution": null
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "brief",
|
|
36
|
+
"summary": "Publish and refresh briefing tiles in My Desk's Scheduled briefings.",
|
|
37
|
+
"description": "Tab publishing protocol for My Desk's Scheduled briefings. Any agent can populate a briefing on its own cadence — gather data, write a short render JS body (function(mount, data, lib)), and shell `manigent brief upsert-tab <slug>` to upload. My Desk composes all uploaded tabs into a tile strip; each tab tracks its own last_refreshed_at. Invoked on two conditions: a '<!-- manigent:brief-tab-trigger:<slug> -->' marker (per-tab cron path), or a direct request to publish/refresh/update a briefing. No central config — briefings are discovered by presence.",
|
|
38
|
+
"tags": ["briefing", "daily", "html", "publishing"],
|
|
39
|
+
"version": "1.0.0",
|
|
40
|
+
"attribution": null
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "gmail",
|
|
44
|
+
"summary": "Read, search, send, and archive Gmail messages.",
|
|
45
|
+
"description": "Read, search, send, and archive Gmail messages via `manigent gmail {search,get,labels,attachment,send,archive,auth,revoke}` Bash subcommands. Archive removes the INBOX label (reversible with `archive --undo`; nothing is deleted). These commands only fetch and act — where fetched mail is stored, how it is deduplicated, and how incremental fetches are tracked is up to the agent's SOP. Requires Google OAuth — Authenticate via Agent Settings → Skills → gmail before first use. Token resolves from `$MANIGENT_AGENT_DIR/skill-hub/state/gmail/`.",
|
|
46
|
+
"tags": ["google", "email", "communication"],
|
|
47
|
+
"version": "1.0.0",
|
|
48
|
+
"attribution": "Built on google-api-python-client",
|
|
49
|
+
"auth": {
|
|
50
|
+
"method": "google_oauth_installed",
|
|
51
|
+
"scopes": ["https://www.googleapis.com/auth/gmail.modify"],
|
|
52
|
+
"token_file": "token.json"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "homekit",
|
|
57
|
+
"summary": "Control Apple HomeKit devices through macOS Shortcuts.",
|
|
58
|
+
"description": "Apple HomeKit via the macOS `shortcuts` CLI. Two subcommands: `manigent homekit list-shortcuts` to enumerate the user's Shortcuts and `manigent homekit run-shortcut \"<name>\"` to invoke one. macOS 12+ only. No OAuth, no config — the Shortcuts app is the contract.",
|
|
59
|
+
"tags": ["apple", "smart-home", "macos", "household"],
|
|
60
|
+
"version": "1.0.0",
|
|
61
|
+
"attribution": null
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "media",
|
|
65
|
+
"summary": "Generate image / audio / video from a text prompt.",
|
|
66
|
+
"description": "Generate media via `manigent media image|audio|video --prompt \"...\"`. Backend is chosen by `--provider` or the per-agent config (image: openai/gemini/nano-banana; audio: openai/elevenlabs/gemini TTS; video: replicate/fal gateways → Veo, Kling, ...). Settings resolve flag > config > env > default; keys + output_dir live in `$MANIGENT_AGENT_DIR/skill-hub/configs/media.json`. Returns `{media_path, media_type, provider, model, ...}` — the file lands on disk; share it with `update_file`. No OAuth.",
|
|
67
|
+
"tags": ["image", "audio", "video", "generation", "tts", "openai", "gemini", "elevenlabs", "replicate"],
|
|
68
|
+
"version": "1.0.0",
|
|
69
|
+
"attribution": null
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "google-calendar",
|
|
73
|
+
"summary": "List and manage Google Calendar events.",
|
|
74
|
+
"description": "Google Calendar (list / get / create / update / delete) via `manigent gcal {calendars,list-events,get,create,update,delete,auth,revoke}` Bash subcommands. These commands only fetch and act — where fetched events are stored, how they are deduplicated, and how incremental fetches are tracked is up to the agent's SOP. Requires Google OAuth — Authenticate via Agent Settings → Skills → google-calendar. Token resolves from `$MANIGENT_AGENT_DIR/skill-hub/state/google-calendar/`.",
|
|
75
|
+
"tags": ["google", "calendar", "scheduling"],
|
|
76
|
+
"version": "1.0.0",
|
|
77
|
+
"attribution": "Built on google-api-python-client",
|
|
78
|
+
"auth": {
|
|
79
|
+
"method": "google_oauth_installed",
|
|
80
|
+
"scopes": ["https://www.googleapis.com/auth/calendar"],
|
|
81
|
+
"token_file": "token.json"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "google-drive",
|
|
86
|
+
"summary": "Search and read Google Drive files and Sheets (read-only).",
|
|
87
|
+
"description": "Google Drive read-only (search / read) via `manigent gdrive {search,get,auth,revoke}` Bash subcommands. Google Docs / Slides export as text, Sheets as first-tab TSV. These commands only fetch — where fetched files are stored, how they are deduplicated, and how incremental fetches are tracked is up to the agent's SOP. Requires Google OAuth (drive.readonly).",
|
|
88
|
+
"tags": ["google", "drive", "documents", "data"],
|
|
89
|
+
"version": "1.0.0",
|
|
90
|
+
"attribution": "Built on google-api-python-client",
|
|
91
|
+
"auth": {
|
|
92
|
+
"method": "google_oauth_installed",
|
|
93
|
+
"scopes": ["https://www.googleapis.com/auth/drive.readonly"],
|
|
94
|
+
"token_file": "token.json"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"name": "google-drive-write",
|
|
99
|
+
"summary": "Read and write rows in specific Google Sheets.",
|
|
100
|
+
"description": "Google Sheets read+write (per-target) via `manigent gdrive-write {read-rows,append-rows,update-cell,auth}`. Each named target binds one spreadsheet's tab + id-column. Separate from `google-drive` so the sheets-write OAuth scope is opt-in. No sync trigger — used inline by content-engine pipelines (e.g. marketing template's instagram agent: read brief → generate image → write back).",
|
|
101
|
+
"tags": ["google", "sheets", "marketing", "write"],
|
|
102
|
+
"version": "1.0.0",
|
|
103
|
+
"attribution": "Built on google-api-python-client",
|
|
104
|
+
"auth": {
|
|
105
|
+
"method": "google_oauth_installed",
|
|
106
|
+
"scopes": ["https://www.googleapis.com/auth/spreadsheets"],
|
|
107
|
+
"token_file": "token.json"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "mailbox",
|
|
112
|
+
"summary": "Read and send email over any IMAP/SMTP mailbox (no OAuth).",
|
|
113
|
+
"description": "IMAP+SMTP mailbox (search / read / attachment / send) via `manigent mailbox {list-folders,search,get,attachment,send}`. Provider-agnostic (Gmail app-password / iCloud / Fastmail / Outlook / ProtonMail Bridge / self-hosted). These commands only fetch and send — where fetched mail is stored, how it is deduplicated, and how incremental fetches are tracked is up to the agent's SOP. No OAuth — credentials via `${VAR}` env vars referenced from `$MANIGENT_AGENT_DIR/skill-hub/configs/mailbox.json`.",
|
|
114
|
+
"tags": ["email", "imap", "smtp"],
|
|
115
|
+
"version": "1.0.0",
|
|
116
|
+
"attribution": null
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "calendar",
|
|
120
|
+
"summary": "List and manage calendar events over any CalDAV server (no OAuth).",
|
|
121
|
+
"description": "CalDAV calendar (list / events / create / update / delete) via `manigent caldav {list,list-events,get,create,update,delete}`. Provider-agnostic (iCloud / Fastmail / Nextcloud / Radicale / SOGo / mailcow). These commands only fetch and act — where fetched events are stored, how they are deduplicated, and how incremental fetches are tracked is up to the agent's SOP. No OAuth — credentials via `${VAR}` env vars.",
|
|
122
|
+
"tags": ["calendar", "caldav", "scheduling"],
|
|
123
|
+
"version": "1.0.0",
|
|
124
|
+
"attribution": null
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "http-api",
|
|
128
|
+
"summary": "Call any HTTP/REST API, with cookie sessions and declared success checks.",
|
|
129
|
+
"description": "Generic HTTP client via `manigent http-api {get,post,put,patch,delete} <url>` with `-H` (env-expanded `$VAR`), `--query`, `--data` / `--json`, a curl-style cookie session jar (`--save-session` / `--session`), and `--expect-location` / `--expect-status` to declare what success looks like. These commands only fetch and act — where fetched data is stored, how it is deduplicated, and how incremental fetches are tracked is up to the agent's SOP. No config.",
|
|
130
|
+
"tags": ["http", "rest", "api"],
|
|
131
|
+
"version": "1.0.0",
|
|
132
|
+
"attribution": null
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"name": "osxphotos",
|
|
136
|
+
"summary": "Read macOS Photos metadata and export photos as JPEG.",
|
|
137
|
+
"description": "macOS Photos library (read-only metadata + paths, plus ≤256KB JPEG export for vision Read) via `manigent osxphotos {list-albums,list-photos,export,export-jpeg}`. These commands only fetch — where fetched metadata is stored, how it is deduplicated, and how incremental fetches are tracked is up to the agent's SOP. macOS only; requires `osxphotos` + Full Disk Access on the Python interpreter.",
|
|
138
|
+
"tags": ["apple", "photos", "macos", "memories"],
|
|
139
|
+
"version": "1.0.0",
|
|
140
|
+
"attribution": "Built on osxphotos"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "ib",
|
|
144
|
+
"summary": "Read-only Interactive Brokers: positions, cost basis, PnL, prices, and news for US equities and bonds.",
|
|
145
|
+
"description": "STRICTLY READ-ONLY Interactive Brokers integration. Fetches positions, cost basis, PnL, current prices, historic prices, and news for US equities and bonds via `manigent ib {positions,cost-basis,pnl,price,history,news-providers,news,news-article,doctor}`, talking to a human-operated TWS / IB Gateway over the ib_async socket API. No order/buy/sell/cancel path exists (CI-enforced by tests/test_ib_readonly_guard.py). Market data is LIVE by default; delayed data only under --allow-delayed and always tagged data_type=delayed. Missing paid subscriptions surface as a typed not_subscribed error, never empty data. Bonds resolve by CUSIP->conId and quote clean price with accrued interest reported as a separate field. IB pacing/rate limits are persisted on disk across the per-call processes. Connection coordinates (host/port/clientId/account, no credentials) resolve from $MANIGENT_AGENT_DIR/skill-hub/configs/ib.json.",
|
|
146
|
+
"tags": ["finance", "interactive-brokers", "read-only", "market-data"],
|
|
147
|
+
"version": "1.0.0",
|
|
148
|
+
"attribution": null
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "grill-me",
|
|
152
|
+
"summary": "Find the real question behind a decision before you spend a project on the wrong one.",
|
|
153
|
+
"description": "Narrows a fuzzy decision to the real question. In a DM: one question per turn, each building on the last answer, stopping at about 8 turns or once the brief stops changing, and ending in a five-part brief (decision, real question, current bet, evidence that would change my mind, out of scope) closed by the fixed line 'Real question changed from your first message: yes|no (self-graded)'. Inside a project: never interviews the user; reviews PLAN.md against the brief once before acceptance and the final report against 'evidence that would change my mind' once, with every objection naming the brief part a milestone fails to serve.",
|
|
154
|
+
"tags": ["thinking", "decision", "coaching"],
|
|
155
|
+
"version": "1.0.0",
|
|
156
|
+
"attribution": null
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"name": "broaden-options",
|
|
160
|
+
"summary": "Widen your options when you're stuck, then narrow to the 2-3 worth testing.",
|
|
161
|
+
"description": "Asks for the user's ideas first and labels every idea [yours] or [mine]. Diagnoses why the user is stuck (too few ideas, options all alike, afraid of risk, too close to it) and generates with one matching technique at a time, without judging. Always adds the baselines do nothing / do both / one then the other, and stops generating when ideas repeat. Then narrows to 2-3 options screened on impact, effort and reversibility, each with the cheapest test that would show whether it works. Switches to grill-me first when the decision the options serve is unclear.",
|
|
162
|
+
"tags": ["thinking", "decision", "brainstorming"],
|
|
163
|
+
"version": "1.0.0",
|
|
164
|
+
"attribution": null
|
|
165
|
+
}
|
|
166
|
+
]
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-artifacts
|
|
3
|
+
description: >
|
|
4
|
+
Create interactive single-file HTML artifacts with React, Tailwind CSS, and Chart.js.
|
|
5
|
+
Use when users ask for dashboards, interactive UIs, data visualizations,
|
|
6
|
+
landing pages, forms, or any rich web-based deliverable.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Web Artifacts Builder
|
|
10
|
+
|
|
11
|
+
Create self-contained, interactive HTML files that work by opening directly in a browser. Each artifact is a single `.html` file with inline CSS and JavaScript — no build step, no server required.
|
|
12
|
+
|
|
13
|
+
**Not for explanations.** If the user needs an answer explained — a diagram, an option comparison, a long write-up — use the built-in `explain-as-page` skill instead: a Markdown reply plus one static page. Use this skill only when the deliverable is something the user interacts with (a dashboard, a form, a calculator).
|
|
14
|
+
|
|
15
|
+
## Architecture
|
|
16
|
+
|
|
17
|
+
Every artifact follows this template structure:
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<!DOCTYPE html>
|
|
21
|
+
<html lang="en">
|
|
22
|
+
<head>
|
|
23
|
+
<meta charset="UTF-8">
|
|
24
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
25
|
+
<title>ARTIFACT_TITLE</title>
|
|
26
|
+
<!-- Tailwind CSS via CDN -->
|
|
27
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
28
|
+
<!-- React via CDN -->
|
|
29
|
+
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
30
|
+
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
31
|
+
<!-- Babel for JSX -->
|
|
32
|
+
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
33
|
+
<!-- Chart.js (if data viz needed) -->
|
|
34
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
35
|
+
</head>
|
|
36
|
+
<body class="bg-gray-50 min-h-screen">
|
|
37
|
+
<div id="root"></div>
|
|
38
|
+
<script type="text/babel">
|
|
39
|
+
// React components here
|
|
40
|
+
function App() {
|
|
41
|
+
return (
|
|
42
|
+
<div className="container mx-auto px-4 py-8">
|
|
43
|
+
<h1 className="text-3xl font-bold text-gray-900">Title</h1>
|
|
44
|
+
</div>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
ReactDOM.createRoot(document.getElementById('root')).render(<App />);
|
|
48
|
+
</script>
|
|
49
|
+
</body>
|
|
50
|
+
</html>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## CDN Libraries Available
|
|
54
|
+
|
|
55
|
+
| Library | CDN URL | Use Case |
|
|
56
|
+
|---------|---------|----------|
|
|
57
|
+
| React 18 | `unpkg.com/react@18` | UI components |
|
|
58
|
+
| Tailwind CSS | `cdn.tailwindcss.com` | Styling |
|
|
59
|
+
| Chart.js | `cdn.jsdelivr.net/npm/chart.js` | Charts and graphs |
|
|
60
|
+
| Lucide Icons | `unpkg.com/lucide-react` | Icons |
|
|
61
|
+
| D3.js | `cdn.jsdelivr.net/npm/d3@7` | Advanced data viz |
|
|
62
|
+
| Marked | `cdn.jsdelivr.net/npm/marked` | Markdown rendering |
|
|
63
|
+
|
|
64
|
+
## Patterns
|
|
65
|
+
|
|
66
|
+
### Interactive Dashboard with Filters
|
|
67
|
+
|
|
68
|
+
```jsx
|
|
69
|
+
function Dashboard() {
|
|
70
|
+
const [filter, setFilter] = React.useState('all');
|
|
71
|
+
const [data] = React.useState([
|
|
72
|
+
{ category: 'A', value: 42 },
|
|
73
|
+
{ category: 'B', value: 28 },
|
|
74
|
+
]);
|
|
75
|
+
|
|
76
|
+
const filtered = filter === 'all'
|
|
77
|
+
? data
|
|
78
|
+
: data.filter(d => d.category === filter);
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<div className="space-y-6">
|
|
82
|
+
<select
|
|
83
|
+
value={filter}
|
|
84
|
+
onChange={e => setFilter(e.target.value)}
|
|
85
|
+
className="px-3 py-2 border rounded-lg"
|
|
86
|
+
>
|
|
87
|
+
<option value="all">All</option>
|
|
88
|
+
<option value="A">Category A</option>
|
|
89
|
+
<option value="B">Category B</option>
|
|
90
|
+
</select>
|
|
91
|
+
|
|
92
|
+
<div className="grid grid-cols-3 gap-4">
|
|
93
|
+
{filtered.map(d => (
|
|
94
|
+
<div key={d.category} className="bg-white p-4 rounded-lg shadow">
|
|
95
|
+
<p className="text-sm text-gray-500">{d.category}</p>
|
|
96
|
+
<p className="text-2xl font-bold">{d.value}</p>
|
|
97
|
+
</div>
|
|
98
|
+
))}
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Chart.js Integration
|
|
106
|
+
|
|
107
|
+
```jsx
|
|
108
|
+
function ChartComponent({ data, labels }) {
|
|
109
|
+
const canvasRef = React.useRef(null);
|
|
110
|
+
|
|
111
|
+
React.useEffect(() => {
|
|
112
|
+
const ctx = canvasRef.current.getContext('2d');
|
|
113
|
+
const chart = new Chart(ctx, {
|
|
114
|
+
type: 'bar',
|
|
115
|
+
data: {
|
|
116
|
+
labels,
|
|
117
|
+
datasets: [{
|
|
118
|
+
label: 'Values',
|
|
119
|
+
data,
|
|
120
|
+
backgroundColor: 'rgba(99, 102, 241, 0.5)',
|
|
121
|
+
borderColor: 'rgb(99, 102, 241)',
|
|
122
|
+
borderWidth: 1,
|
|
123
|
+
}],
|
|
124
|
+
},
|
|
125
|
+
options: { responsive: true, plugins: { legend: { display: false } } },
|
|
126
|
+
});
|
|
127
|
+
return () => chart.destroy();
|
|
128
|
+
}, [data, labels]);
|
|
129
|
+
|
|
130
|
+
return <canvas ref={canvasRef} />;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Responsive Data Table
|
|
135
|
+
|
|
136
|
+
```jsx
|
|
137
|
+
function DataTable({ rows, columns }) {
|
|
138
|
+
const [sortCol, setSortCol] = React.useState(null);
|
|
139
|
+
const [sortAsc, setSortAsc] = React.useState(true);
|
|
140
|
+
|
|
141
|
+
const sorted = React.useMemo(() => {
|
|
142
|
+
if (!sortCol) return rows;
|
|
143
|
+
return [...rows].sort((a, b) => {
|
|
144
|
+
const cmp = a[sortCol] < b[sortCol] ? -1 : a[sortCol] > b[sortCol] ? 1 : 0;
|
|
145
|
+
return sortAsc ? cmp : -cmp;
|
|
146
|
+
});
|
|
147
|
+
}, [rows, sortCol, sortAsc]);
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<div className="overflow-x-auto">
|
|
151
|
+
<table className="min-w-full divide-y divide-gray-200">
|
|
152
|
+
<thead className="bg-gray-50">
|
|
153
|
+
<tr>
|
|
154
|
+
{columns.map(col => (
|
|
155
|
+
<th
|
|
156
|
+
key={col}
|
|
157
|
+
onClick={() => {
|
|
158
|
+
setSortAsc(sortCol === col ? !sortAsc : true);
|
|
159
|
+
setSortCol(col);
|
|
160
|
+
}}
|
|
161
|
+
className="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase cursor-pointer hover:bg-gray-100"
|
|
162
|
+
>
|
|
163
|
+
{col} {sortCol === col ? (sortAsc ? '↑' : '↓') : ''}
|
|
164
|
+
</th>
|
|
165
|
+
))}
|
|
166
|
+
</tr>
|
|
167
|
+
</thead>
|
|
168
|
+
<tbody className="bg-white divide-y divide-gray-200">
|
|
169
|
+
{sorted.map((row, i) => (
|
|
170
|
+
<tr key={i} className="hover:bg-gray-50">
|
|
171
|
+
{columns.map(col => (
|
|
172
|
+
<td key={col} className="px-4 py-3 text-sm text-gray-900">
|
|
173
|
+
{row[col]}
|
|
174
|
+
</td>
|
|
175
|
+
))}
|
|
176
|
+
</tr>
|
|
177
|
+
))}
|
|
178
|
+
</tbody>
|
|
179
|
+
</table>
|
|
180
|
+
</div>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Guidelines
|
|
186
|
+
|
|
187
|
+
- **Single file**: Everything in one `.html` file — no external files, no build step
|
|
188
|
+
- **CDN only**: Load libraries from CDNs, never reference local files
|
|
189
|
+
- **Responsive**: Use Tailwind responsive utilities (`sm:`, `md:`, `lg:`)
|
|
190
|
+
- **Accessible**: Include `aria-label`, semantic HTML, keyboard navigation
|
|
191
|
+
- **Performance**: For large datasets (>1000 rows), use virtualization or pagination
|
|
192
|
+
- **State management**: Use `React.useState` and `React.useReducer` — no external state libraries
|
|
193
|
+
- **Naming**: Save as descriptive kebab-case filenames: `sales-dashboard.html`, `project-tracker.html`
|
|
194
|
+
- **Dark mode**: Support via `dark:` Tailwind classes when appropriate
|