@xopcai/xopc 0.0.111 → 0.0.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-ext/icons/icon-128.png +0 -0
- package/dist/browser-ext/icons/icon-16.png +0 -0
- package/dist/browser-ext/icons/icon-32.png +0 -0
- package/dist/browser-ext/icons/icon-48.png +0 -0
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
- package/dist/extensions/telegram/src/inbound-processor.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/update-offset-store.js +1 -1
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +2 -2
- package/dist/extensions/weixin/src/auth/accounts.js +1 -1
- package/dist/extensions/weixin/src/cdn/upload.js +1 -1
- package/dist/extensions/weixin/src/delivery-to.d.ts +3 -3
- package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
- package/dist/extensions/weixin/src/media/data-url.js +1 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
- package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
- package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/apple-touch-icon.png +0 -0
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-zlx9l5Yp.js → agent-avatar-dicebear-CBlklyNr.js} +1 -1
- package/dist/gateway/static/root/assets/agent-browser-settings-page-rGbKc2Hh.js +6 -0
- package/dist/gateway/static/root/assets/{agent-defaults-tabbed-page-Bz7JWjRM.js → agent-defaults-tabbed-page-CtwVbjOA.js} +1 -1
- package/dist/gateway/static/root/assets/agents-CCBmGcwc.js +71 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DaQwdeCq.js → app-management-settings-panel-28E_WfMe.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-D2zv6r3P.js → appearance-settings-Do1z0XgJ.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BIppe_jj.js → apps-page-xwCsJS15.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DEmu8eH7.js → archive-plugin-BAFlsov_.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B98lJoN5.js → attachment-load-V3qGPC3x.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-CL9QKmyo.js → binary-plugins-DT8NvA6W.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BOAhMAhT.js → block-editor-CdLMEcHd.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-Br8iRnXp.js → channels-settings-C044DcYk.js} +1 -1
- package/dist/gateway/static/root/assets/{config-api-0o1WYdz2.js → config-api-Bf5mjpu7.js} +1 -1
- package/dist/gateway/static/root/assets/config-reload-event-Bjh2zoKp.js +1 -0
- package/dist/gateway/static/root/assets/connectors-settings-8VEWUOTj.js +2 -0
- package/dist/gateway/static/root/assets/cron-api--pAB_rps.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-DqmNGNOy.js +3 -0
- package/dist/gateway/static/root/assets/dreaming-settings-6UZE1FSK.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Cjx6pZVz.js → extension-debug-page-BGhE7msg.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BSPNL90V.js → extension-page-CvpI45WG.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-DAmR5FUe.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-Bs7in_4F.js → fetch-NZmjSXLl.js} +1 -1
- package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +2 -0
- package/dist/gateway/static/root/assets/{format-interval-label-CftJ5uXu.js → format-interval-label-qhth3BMV.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-Clfck-hW.js → gateway-config-api-CaXBt-9R.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DphpbLBc.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BkjVJc38.js → gateway-startup-retry-Be1omjh3.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-detail-page-kqJue0sE.js → goal-detail-page-bv0VRDaf.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-1Ywnt4Cb.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-CJnzNSDo.js → goals-settings-ceEBjnfc.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-Cp7CPuIn.js → heartbeat-config-api-BzO6G4fD.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-ifSI1Wbh.js → heartbeat-settings-DCST9-du.js} +1 -1
- package/dist/gateway/static/root/assets/index-Cxm6xsps.js +122 -0
- package/dist/gateway/static/root/assets/index-b_R4tKqt.css +1 -0
- package/dist/gateway/static/root/assets/interval-presets-DJmshV8n.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings--MI1rYl7.js → keyboard-shortcuts-settings-9AUUlQ5Q.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-BwrVNlyW.js → logs-page-B_wrxhee.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-B_oc9lJe.js → markdown-split-CYYELqAr.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DLPvB5H3.js → media-plugins-BEcMR2M8.js} +1 -1
- package/dist/gateway/static/root/assets/messages-CkT-lcgP.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-D0JDSbNu.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-DpFV-EO6.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-rSqAgOi9.js → note-image-lightbox-DNAoPcmm.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-C9ACGEty.js → notes-page-CdkjTch8.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Bw_N2oZi.js → preview-open-alternatives-BPLz0AIv.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BhcWIKuM.js → remote-access-hub-DSYVAi96.js} +1 -1
- package/dist/gateway/static/root/assets/{save-bar-controls-CNP2jmw0.js → save-bar-controls-CrWwWRVK.js} +1 -1
- package/dist/gateway/static/root/assets/schedule-field-CF2sadvN.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-CDPzua9q.js → schema-form-Di5cKjYE.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-DzkpSDZr.js → sessions-page-CenkcVjF.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-D9sva86V.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-C9bff85B.js → settings-collapsible-section-Chh282jW.js} +1 -1
- package/dist/gateway/static/root/assets/settings-form-section-Dq-83cQd.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-DWK4Zo7s.js → settings-page-DL35U0x0.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Ctwbp9Er.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DnutoY_S.js → share-preview-page-0FXYnSUA.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-6oRgJMpn.js → shares-settings-DIM3JNsr.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DAlNaNzL.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CLrHVzAt.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-qP1JDtDd.js → system-settings-panel-W1pTcojB.js} +1 -1
- package/dist/gateway/static/root/assets/use-agent-defaults-form-BVRvkK7m.js +1 -0
- package/dist/gateway/static/root/assets/{use-channel-catalog-C4mg1hjD.js → use-channel-catalog-CgJibfMM.js} +1 -1
- package/dist/gateway/static/root/assets/{use-settings-tab-guard-F6C0mpJt.js → use-settings-tab-guard-Bw_qkRQE.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-BnDDb6qO.js → voice-api-key-field-vYAO71Gn.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-player-store-B2EwIhtY.js → voice-player-store-C7lziaAx.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-page.utils-CRB7WX9l.js → workflow-page.utils-sgHjOXOm.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-2Fptr0je.js → workflows-page-DYyOTmFx.js} +1 -1
- package/dist/gateway/static/root/favicon-16x16.png +0 -0
- package/dist/gateway/static/root/favicon-32x32.png +0 -0
- package/dist/gateway/static/root/favicon-icon.svg +1 -0
- package/dist/gateway/static/root/favicon.ico +0 -0
- package/dist/gateway/static/root/favicon.png +0 -0
- package/dist/gateway/static/root/favicon.svg +24 -15
- package/dist/gateway/static/root/index.html +11 -10
- package/dist/gateway/static/root/logo-dark.svg +23 -15
- package/dist/gateway/static/root/logo.svg +23 -16
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +28 -2
- package/dist/src/agent/agent-manager.js +82 -11
- package/dist/src/agent/agent-manager.js.map +1 -1
- package/dist/src/agent/agent-scope.js +1 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/context/workspace-state.js +1 -1
- package/dist/src/agent/context/workspace.js +1 -1
- package/dist/src/agent/goals/goal-locale.js +2 -2
- package/dist/src/agent/goals/persistent-goal-service.js +1 -1
- package/dist/src/agent/goals/post-turn.js +3 -3
- package/dist/src/agent/image/load-image-media.js +2 -2
- package/dist/src/agent/ipc/inbox.js +3 -3
- package/dist/src/agent/ipc/socket.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/memory/builtin-memory-store.js +1 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
- package/dist/src/agent/memory/dreaming/events.js +1 -1
- package/dist/src/agent/memory/dreaming/last-run.js +1 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
- package/dist/src/agent/memory/dreaming/preview.js +1 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
- package/dist/src/agent/memory/dreaming/utils.js +1 -1
- package/dist/src/agent/memory/memory-flush.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/messaging/command-handler.d.ts +3 -0
- package/dist/src/agent/messaging/command-handler.js +5 -0
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/prompt/memory/index.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
- package/dist/src/agent/reply/post-compaction-context.js +1 -1
- package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
- package/dist/src/agent/sandbox/path-policy.js +2 -2
- package/dist/src/agent/service/process-direct-streaming.js +9 -4
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service/reconcile-dreaming-cron.js +8 -5
- package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -1
- package/dist/src/agent/service.d.ts +2 -1
- package/dist/src/agent/service.js +10 -5
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +4 -0
- package/dist/src/agent/session/session-config-service.d.ts +8 -0
- package/dist/src/agent/session/session-config-service.js +20 -0
- package/dist/src/agent/session/session-config-service.js.map +1 -1
- package/dist/src/agent/session/session-inspector.js +1 -1
- package/dist/src/agent/skills/config.js +2 -2
- package/dist/src/agent/skills/filesystem-watcher.d.ts +19 -0
- package/dist/src/agent/skills/filesystem-watcher.js +182 -0
- package/dist/src/agent/skills/filesystem-watcher.js.map +1 -0
- package/dist/src/agent/skills/hub-hash.js +2 -2
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +30 -36
- package/dist/src/agent/skills/hub-pull.js.map +1 -1
- package/dist/src/agent/skills/index.js +82 -38
- package/dist/src/agent/skills/index.js.map +1 -1
- package/dist/src/agent/skills/installer.js +2 -2
- package/dist/src/agent/skills/managed-store.d.ts +19 -0
- package/dist/src/agent/skills/managed-store.js +97 -38
- package/dist/src/agent/skills/managed-store.js.map +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/skill-manager.d.ts +16 -6
- package/dist/src/agent/skills/skill-manager.js +79 -24
- package/dist/src/agent/skills/skill-manager.js.map +1 -1
- package/dist/src/agent/skills/skill-view-path.js +1 -1
- package/dist/src/agent/skills/test-framework.js +1 -1
- package/dist/src/agent/skills/types.d.ts +11 -0
- package/dist/src/agent/skills/watcher.js +1 -1
- package/dist/src/agent/starter-agents.js +1 -1
- package/dist/src/agent/tools/cronjob-tool.d.ts +6 -3
- package/dist/src/agent/tools/cronjob-tool.js +58 -23
- package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
- package/dist/src/agent/tools/dreaming-tool.js +1 -1
- package/dist/src/agent/tools/factory.js +1 -1
- package/dist/src/agent/tools/find.js +1 -1
- package/dist/src/agent/tools/grep.js +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +1 -1
- package/dist/src/agent/tools/skill-manage-tool.js +1 -1
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/workflow/catalog.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.d.ts +5 -0
- package/dist/src/agent/workspace-runtime/registry.js +7 -0
- package/dist/src/agent/workspace-runtime/registry.js.map +1 -1
- package/dist/src/ai-assist/text-assist.d.ts +42 -0
- package/dist/src/ai-assist/text-assist.js +252 -0
- package/dist/src/ai-assist/text-assist.js.map +1 -0
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/profiles/store.js +2 -2
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/browser/cache-dir-policy.js +1 -1
- package/dist/src/browser/cdp-local-launcher.js +2 -2
- package/dist/src/browser/providers/browser-ext-install.js +4 -4
- package/dist/src/browser/providers/cloakbrowser.js +5 -5
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/channels/outbound/persist-store.js +1 -1
- package/dist/src/channels/pairing/allow-from-file.js +1 -1
- package/dist/src/channels/pairing/pairing-store.js +2 -2
- package/dist/src/channels/plugins/types.adapters.d.ts +2 -2
- package/dist/src/chat-commands/agent-edit.js +2 -2
- package/dist/src/chat-commands/builtins/config.js +3 -3
- package/dist/src/chat-commands/builtins/system.js +11 -4
- package/dist/src/chat-commands/builtins/system.js.map +1 -1
- package/dist/src/chat-commands/context.d.ts +3 -0
- package/dist/src/chat-commands/context.js +7 -0
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/chat-commands/types.d.ts +2 -0
- package/dist/src/cli/commands/config.js +1 -1
- package/dist/src/cli/commands/cron.js +55 -16
- package/dist/src/cli/commands/cron.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
- package/dist/src/cli/commands/doctor/checks/cron-health.js +2 -83
- package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
- package/dist/src/cli/commands/extension-create.js +1 -1
- package/dist/src/cli/commands/extension-dev.js +2 -2
- package/dist/src/cli/commands/extension-marketplace.js +2 -2
- package/dist/src/cli/commands/extension-pack.js +2 -2
- package/dist/src/cli/commands/extension.js +3 -3
- package/dist/src/cli/commands/gateway/logs.js +1 -1
- package/dist/src/cli/commands/image.js +1 -1
- package/dist/src/cli/commands/init.js +2 -2
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/skills-test.js +1 -1
- package/dist/src/cli/templates.js +1 -1
- package/dist/src/cli/utils/gateway-client.js +1 -1
- package/dist/src/cli/utils/init-workspace-core.js +2 -2
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/agent-typed-models.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +7 -7
- package/dist/src/config/loader.js +4 -4
- package/dist/src/config/models-json.js +2 -2
- package/dist/src/config/paths-state.js +1 -1
- package/dist/src/config/paths.js +1 -1
- package/dist/src/config/profile.js +1 -1
- package/dist/src/config/reload.js +1 -1
- package/dist/src/config/schema.d.ts +0 -2
- package/dist/src/config/schema.js +0 -3
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +0 -1
- package/dist/src/config/web-patch.js +0 -2
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/config/workspace-path.js +1 -1
- package/dist/src/cron/executor.js +102 -71
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/index.d.ts +1 -1
- package/dist/src/cron/index.js +3 -3
- package/dist/src/cron/run-log-store.d.ts +1 -0
- package/dist/src/cron/run-log-store.js +4 -2
- package/dist/src/cron/run-log-store.js.map +1 -1
- package/dist/src/cron/schedule.d.ts +10 -0
- package/dist/src/cron/schedule.js +85 -0
- package/dist/src/cron/schedule.js.map +1 -0
- package/dist/src/cron/service.d.ts +34 -77
- package/dist/src/cron/service.js +327 -264
- package/dist/src/cron/service.js.map +1 -1
- package/dist/src/cron/types.d.ts +80 -50
- package/dist/src/cron/validation.d.ts +358 -90
- package/dist/src/cron/validation.js +152 -132
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/cron/workflow-run-completion.js +1 -1
- package/dist/src/daemon/constants.js +1 -1
- package/dist/src/daemon/install-plan.js +2 -2
- package/dist/src/daemon/launchd.js +2 -2
- package/dist/src/daemon/schtasks.js +2 -2
- package/dist/src/daemon/systemd.js +2 -2
- package/dist/src/extensions/bundle-mcp.js +1 -1
- package/dist/src/extensions/discover-extensions.js +2 -2
- package/dist/src/extensions/health.js +1 -1
- package/dist/src/extensions/install.js +2 -2
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/extensions/lockfile.js +3 -3
- package/dist/src/extensions/security.js +1 -1
- package/dist/src/extensions/update.js +2 -2
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/chat-stream/mapper.d.ts +1 -0
- package/dist/src/gateway/chat-stream/mapper.js +6 -2
- package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
- package/dist/src/gateway/chat-stream/protocol.d.ts +2 -0
- package/dist/src/gateway/file-path-classifier.js +2 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +0 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/lib/extension-store.js +2 -2
- package/dist/src/gateway/hono/lib/static-ui.js +2 -2
- package/dist/src/gateway/hono/oauth-async.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +1 -1
- package/dist/src/gateway/hono/routes/ai-assist.d.ts +3 -0
- package/dist/src/gateway/hono/routes/ai-assist.js +66 -0
- package/dist/src/gateway/hono/routes/ai-assist.js.map +1 -0
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/commands-skills.js +7 -0
- package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
- package/dist/src/gateway/hono/routes/cron.js +24 -5
- package/dist/src/gateway/hono/routes/cron.js.map +1 -1
- package/dist/src/gateway/hono/routes/dreaming.js +1 -1
- package/dist/src/gateway/hono/routes/home.js +5 -3
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/host-fs.js +2 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/shares.js +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +2 -2
- package/dist/src/gateway/hono/routes/workspace.js +2 -2
- package/dist/src/gateway/lock.js +3 -3
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service/agent-runner.js +2 -2
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/marketplace-service.d.ts +22 -10
- package/dist/src/gateway/service/marketplace-service.js +46 -5
- package/dist/src/gateway/service/marketplace-service.js.map +1 -1
- package/dist/src/gateway/service.js +11 -5
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/gateway/workspace-fs-file-list.js +1 -1
- package/dist/src/goals/goal-notifications.js +1 -1
- package/dist/src/goals/goal-workflow-judge.js +3 -3
- package/dist/src/i18n/goals-bundle.js +1 -1
- package/dist/src/i18n/index.js +1 -1
- package/dist/src/i18n/share-tool-bundle.js +2 -2
- package/dist/src/infra/brew.js +1 -1
- package/dist/src/infra/package-json.js +1 -1
- package/dist/src/infra/package-update-steps.js +1 -1
- package/dist/src/infra/path-env.js +2 -2
- package/dist/src/infra/restart.js +1 -1
- package/dist/src/infra/stable-node-path.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/infra/update-global.js +1 -1
- package/dist/src/infra/update-lock.js +2 -2
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/infra/update-startup.js +1 -1
- package/dist/src/infra/write-file-atomic.js +2 -2
- package/dist/src/media/store.js +1 -1
- package/dist/src/notes/agent-context.js +1 -1
- package/dist/src/notes/service.js +1 -1
- package/dist/src/notes/store.js +2 -2
- package/dist/src/project-trust/trust-store.js +2 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
- package/dist/src/providers/index.js +1 -1
- package/dist/src/providers/model-registry.js +4 -4
- package/dist/src/session/init-session-turn.js +2 -2
- package/dist/src/session/resolve-session.js +3 -3
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store-reader.d.ts +5 -0
- package/dist/src/session/store-reader.js +1 -0
- package/dist/src/session/store.js +1 -1
- package/dist/src/share/share-auto.js +2 -2
- package/dist/src/share/share-store.js +3 -3
- package/dist/src/share/share-thumbnail.js +2 -2
- package/dist/src/share/share-zip.js +1 -1
- package/dist/src/share/site-share-store.js +3 -3
- package/dist/src/share/site-static-serve.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/cron-job-repository.d.ts +6 -0
- package/dist/src/storage/sqlite/cron-job-repository.js +70 -0
- package/dist/src/storage/sqlite/cron-job-repository.js.map +1 -0
- package/dist/src/storage/sqlite/cron-run-repository.js +0 -1
- package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -0
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
- package/dist/src/storage/sqlite/migrations/009_cron_jobs.sql +24 -0
- package/dist/src/storage/sqlite/migrations/discover.js +1 -1
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +4 -4
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +2 -2
- package/dist/src/storage/sqlite/schema.sql +25 -0
- package/dist/src/tui/clipboard-image.js +3 -3
- package/dist/src/tui/extension-host/load-extensions.js +1 -1
- package/dist/src/tui/theme-manager.js +1 -1
- package/dist/src/tui/tui-command-formatters.js +4 -4
- package/dist/src/tui/tui-commands.js +2 -2
- package/dist/src/tui/tui-keybindings-file.js +1 -1
- package/dist/src/tui/tui-scoped-models.js +2 -2
- package/dist/src/tui/tui-settings.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +6 -6
- package/dist/src/tunnel/frpc-binary.js +4 -4
- package/dist/src/tunnel/frpc-config.js +1 -1
- package/dist/src/tunnel/frpc-extract.js +1 -1
- package/dist/src/tunnel/tunnel-state.js +1 -1
- package/dist/src/utils/logger/audit.js +1 -1
- package/dist/src/utils/logger/log-store.js +1 -1
- package/dist/src/utils/logger/rotation.js +1 -1
- package/dist/src/utils/logger/streams.js +1 -1
- package/dist/src/voice/tts/audio.js +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/engine/projector.js +23 -14
- package/dist/src/workflows/engine/projector.js.map +1 -1
- package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
- package/dist/src/workflows/engine/workflow-engine.js +36 -0
- package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
- package/dist/src/workflows/index.js +1 -1
- package/dist/src/workflows/service/workflow-run-service.js +2 -2
- package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
- package/dist/src/workflows/store/event-store.js +1 -1
- package/dist/src/workflows/store/run-store.js +1 -1
- package/package.json +2 -3
- package/dist/gateway/static/root/assets/agent-browser-settings-page-B-0zGjt8.js +0 -6
- package/dist/gateway/static/root/assets/agents-DwDnJlXT.js +0 -71
- package/dist/gateway/static/root/assets/connectors-settings-DDvHo9in.js +0 -2
- package/dist/gateway/static/root/assets/cron-api-Dj_UZKST.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-Dv7GII9G.js +0 -1
- package/dist/gateway/static/root/assets/cron-schedule-picker-DH10KgD6.js +0 -1
- package/dist/gateway/static/root/assets/dreaming-settings-L2rgZDQl.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-m_UQYkVc.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-CS177xni.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-C0FujUB5.js +0 -2
- package/dist/gateway/static/root/assets/index-COkF54xv.js +0 -121
- package/dist/gateway/static/root/assets/index-DIaSNGEO.css +0 -1
- package/dist/gateway/static/root/assets/interval-presets-B29Ss_2y.js +0 -2
- package/dist/gateway/static/root/assets/messages-Csef1aW7.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-DHGiTIvf.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-BM7zlDiT.js +0 -2
- package/dist/gateway/static/root/assets/schedule-field-BPAWui3P.js +0 -1
- package/dist/gateway/static/root/assets/schedule-summary-B-hdSRdR.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BYS-rpzn.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-BsrK7TBF.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DJiksNu4.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CU9i0nJV.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-ERbdWENm.js +0 -2
- package/dist/gateway/static/root/assets/use-agent-defaults-form-D3FGVLZb.js +0 -1
- package/dist/gateway/static/root/favicon-16.png +0 -0
- package/dist/gateway/static/root/favicon-32.png +0 -0
- package/dist/src/cron/persistence.d.ts +0 -62
- package/dist/src/cron/persistence.js +0 -188
- package/dist/src/cron/persistence.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/jszip.min-DT31yWkU.js","assets/rolldown-runtime-aKtaBQYM.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./preload-helper-zJ_50EbN.js";import{t as a}from"./cn-JdwAhgNB.js";import{t as o}from"./messages-Csef1aW7.js";import{t as s}from"./locale-store-DjbfSsfA.js";import{c,i as l,t as u}from"./fetch-Bs7in_4F.js";import{$i as d,$r as f,Do as p,Ds as m,Ea as h,Hi as g,Jr as _,Jt as v,Kr as y,Ln as b,Qr as x,So as S,Ts as C,Vi as w,Xr as T,Yt as E,Zr as D,ba as O,ii as k,ji as A,ki as j,ko as M,ns as N,pa as P,qa as F,qr as I,rs as L,ts as R,uo as z,ws as ee,xi as B,zn as te}from"./index-COkF54xv.js";import{t as V}from"./skill-reload-api-CU9i0nJV.js";import{i as ne,n as H,o as re,r as ie,t as ae}from"./dist-By6Rh2ee.js";var oe=n(),U=e(t(),1),W=r(),se=(0,U.memo)(function(e){let t=(0,oe.c)(30),{loading:n,onReloadClick:r,searchQuery:i,setSearchQuery:o,mainTab:s,sk:c,setPendingFile:l,setInstallOpen:u}=e,d=c.reloadRuntime,f=c.reloadDiskAria,p;t[0]===r?p=t[1]:(p=()=>void r(),t[0]=r,t[1]=p);let m=n&&`animate-spin`,g;t[2]===m?g=t[3]:(g=a(`size-4`,m),t[2]=m,t[3]=g);let _;t[4]===g?_=t[5]:(_=(0,W.jsx)(O,{className:g,strokeWidth:1.75}),t[4]=g,t[5]=_);let v;t[6]!==n||t[7]!==c.reloadDiskAria||t[8]!==c.reloadRuntime||t[9]!==p||t[10]!==_?(v=(0,W.jsx)(j,{type:`button`,variant:`ghost`,className:`size-9 shrink-0 p-0`,disabled:n,title:d,"aria-label":f,onClick:p,children:_}),t[6]=n,t[7]=c.reloadDiskAria,t[8]=c.reloadRuntime,t[9]=p,t[10]=_,t[11]=v):v=t[11];let y;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(y=(0,W.jsx)(P,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-disabled`,strokeWidth:1.75,"aria-hidden":!0}),t[12]=y):y=t[12];let b;t[13]===o?b=t[14]:(b=e=>o(e.target.value),t[13]=o,t[14]=b);let x=s===`marketplace`?c.marketplaceSearchPackages:c.searchPlaceholder,S;t[15]!==i||t[16]!==x||t[17]!==b?(S=(0,W.jsxs)(`label`,{className:`relative flex min-h-9 min-w-0 max-w-sm cursor-text items-center rounded-pill border border-edge bg-surface-base py-1.5 pl-9 pr-3 shadow-surface dark:bg-surface-hover/40 sm:max-w-md`,children:[y,(0,W.jsx)(`input`,{type:`search`,enterKeyHint:`search`,value:i,onChange:b,placeholder:x,autoComplete:`off`,spellCheck:!1,className:`min-w-0 flex-1 appearance-none border-0 bg-transparent py-0.5 text-sm leading-normal text-fg caret-current placeholder:text-fg-disabled focus:border-0 focus:shadow-none focus:outline-none focus:ring-0 focus-visible:outline-none`})]}),t[15]=i,t[16]=x,t[17]=b,t[18]=S):S=t[18];let C;t[19]!==u||t[20]!==l?(C=()=>{l(null),u(!0)},t[19]=u,t[20]=l,t[21]=C):C=t[21];let w;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(w=(0,W.jsx)(h,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),t[22]=w):w=t[22];let T;t[23]!==c.installCta||t[24]!==C?(T=(0,W.jsxs)(j,{type:`button`,variant:`primary`,className:`shrink-0 gap-2`,onClick:C,children:[w,c.installCta]}),t[23]=c.installCta,t[24]=C,t[25]=T):T=t[25];let E;return t[26]!==S||t[27]!==T||t[28]!==v?(E=(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2`,children:[v,S,T]}),t[26]=S,t[27]=T,t[28]=v,t[29]=E):E=t[29],E}),G=[{light:`bg-sky-100 text-sky-800`,dark:`dark:bg-sky-950/55 dark:text-sky-200`},{light:`bg-violet-100 text-violet-800`,dark:`dark:bg-violet-950/55 dark:text-violet-200`},{light:`bg-emerald-100 text-emerald-800`,dark:`dark:bg-emerald-950/55 dark:text-emerald-200`},{light:`bg-orange-100 text-orange-800`,dark:`dark:bg-orange-950/55 dark:text-orange-200`},{light:`bg-rose-100 text-rose-800`,dark:`dark:bg-rose-950/55 dark:text-rose-200`},{light:`bg-amber-100 text-amber-900`,dark:`dark:bg-amber-950/55 dark:text-amber-200`},{light:`bg-cyan-100 text-cyan-800`,dark:`dark:bg-cyan-950/55 dark:text-cyan-200`},{light:`bg-indigo-100 text-indigo-800`,dark:`dark:bg-indigo-950/55 dark:text-indigo-200`},{light:`bg-fuchsia-100 text-fuchsia-800`,dark:`dark:bg-fuchsia-950/55 dark:text-fuchsia-200`},{light:`bg-teal-100 text-teal-800`,dark:`dark:bg-teal-950/55 dark:text-teal-200`}];function K(e){let t=0;for(let n=0;n<e.length;n+=1)t=Math.imul(31,t)+e.charCodeAt(n)|0;return Math.abs(t)}function q(e){let t=e.trim();if(!t)return`?`;let n=t.match(/[\p{L}\p{N}]/u);return n?n[0].toLocaleUpperCase(`en-US`):t[0]}function J(e){let t=(0,oe.c)(9),{name:n,className:r}=e,i;t[0]===n?i=t[1]:(i=q(n),t[0]=n,t[1]=i);let o=i,s=G[K(n)%G.length],c;t[2]!==r||t[3]!==s.dark||t[4]!==s.light?(c=a(`flex size-11 shrink-0 items-center justify-center rounded-xl font-semibold tracking-tight shadow-surface`,`text-[1.05rem] ring-1 ring-inset ring-black/[0.06] dark:ring-white/[0.1]`,`transition-[transform,box-shadow] duration-200 ease-out group-hover:ring-black/[0.1] dark:group-hover:ring-white/[0.14]`,`group-hover:-translate-y-px`,s.light,s.dark,r),t[2]=r,t[3]=s.dark,t[4]=s.light,t[5]=c):c=t[5];let l;return t[6]!==o||t[7]!==c?(l=(0,W.jsx)(`div`,{className:c,"aria-hidden":!0,children:o}),t[6]=o,t[7]=c,t[8]=l):l=t[8],l}var Y=`animate-pulse motion-reduce:animate-none rounded-md bg-surface-hover dark:bg-surface-active/50`;function ce(){let e=(0,oe.c)(6),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,W.jsx)(`div`,{className:a(`size-11 shrink-0 rounded-xl`,Y)}),e[0]=t):t=e[0];let n;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,W.jsx)(`div`,{className:a(`h-4 min-w-0 flex-1`,Y)}),e[1]=n):n=e[1];let r,i,o;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,W.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[n,(0,W.jsxs)(`div`,{className:`flex shrink-0 gap-1`,children:[(0,W.jsx)(`div`,{className:a(`size-8 shrink-0 rounded-lg`,Y)}),(0,W.jsx)(`div`,{className:a(`h-8 w-[4.5rem] shrink-0 rounded-lg`,Y)})]})]}),i=(0,W.jsx)(`div`,{className:a(`h-3 w-full`,Y)}),o=(0,W.jsx)(`div`,{className:a(`h-3 w-[92%]`,Y)}),e[2]=r,e[3]=i,e[4]=o):(r=e[2],i=e[3],o=e[4]);let s;return e[5]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,W.jsx)(`div`,{className:`flex h-full min-h-[10.5rem] flex-col rounded-xl border border-edge-subtle bg-surface-base p-4 dark:border-edge-subtle`,"aria-hidden":!0,children:(0,W.jsxs)(`div`,{className:`flex min-h-0 flex-1 items-start gap-3`,children:[t,(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[r,i,o,(0,W.jsxs)(`div`,{className:`mt-auto space-y-1 pt-0.5`,children:[(0,W.jsx)(`div`,{className:a(`h-3 w-full`,Y)}),(0,W.jsx)(`div`,{className:a(`h-2.5 w-4/5`,Y)})]})]})]})}),e[5]=s):s=e[5],s}function X(){let e=(0,oe.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,W.jsx)(ce,{}),e[0]=t):t=e[0],t}var le=new Set([`builtin`,`user`,`marketplace`]),ue=new Set([`all`,`global`,`workspace`,`extra`]),de=`mprov`,Z=[`s0`,`s1`,`s2`,`s3`,`s4`,`s5`],fe=[`business`,`creative`,`documents`,`engineering`,`tools`];function pe(e){let t=(0,oe.c)(28),{sk:n,mainTab:r,loading:i,catalog:o,filteredCatalog:s,builtinCategories:c,builtinCategoryFilter:l,setBuiltinCategoryFilter:u,catalogDisplayRows:d,catalogStatusFilter:f,resolveSkillEnabled:p,categoryLabel:m,sourceLabel:h,openSkillDetail:g,onSkillToggle:_,onUseSkillInChat:v,usingSkillInChatName:y,togglingSkillName:b}=e;if(i){let e=n.loading,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=Z.map(he),t[0]=r):r=t[0];let i;return t[1]===n.loading?i=t[2]:(i=(0,W.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3`,"aria-busy":`true`,"aria-label":e,children:r}),t[1]=n.loading,t[2]=i),i}if(o.length===0){let e;return t[3]===n.empty?e=t[4]:(e=(0,W.jsx)(`div`,{className:`rounded-2xl border border-dashed border-edge py-16 text-center text-sm text-fg-muted`,children:n.empty}),t[3]=n.empty,t[4]=e),e}if(s.length===0){let e;return t[5]===n.noSearchResults?e=t[6]:(e=(0,W.jsx)(`div`,{className:`rounded-2xl border border-dashed border-edge py-16 text-center text-sm text-fg-muted`,children:n.noSearchResults}),t[5]=n.noSearchResults,t[6]=e),e}let x;t[7]!==c||t[8]!==l||t[9]!==m||t[10]!==u||t[11]!==n?(x=c.length>1?(0,W.jsxs)(`div`,{role:`tablist`,"aria-label":n.marketplaceCategoriesAria,className:`-mx-1 flex gap-2 overflow-x-auto px-1 pb-1 pt-0.5 [scrollbar-width:thin]`,children:[(0,W.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":l===``,className:a(`shrink-0 rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,B.focusRingPanel,l===``?`border-fg bg-fg text-surface-panel dark:border-fg dark:bg-fg dark:text-surface-base`:`border-edge bg-surface-panel text-fg-muted hover:border-edge-strong hover:text-fg dark:border-edge dark:bg-surface-hover/40`),onClick:()=>u(``),children:n.marketplaceCategoryAll}),c.map(e=>{let t=l===e;return(0,W.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t,className:a(`max-w-[14rem] shrink-0 truncate rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,B.focusRingPanel,t?`border-fg bg-fg text-surface-panel dark:border-fg dark:bg-fg dark:text-surface-base`:`border-edge bg-surface-panel text-fg-muted hover:border-edge-strong hover:text-fg dark:border-edge dark:bg-surface-hover/40`),title:m(e),onClick:()=>u(e),children:m(e)},e)})]}):null,t[7]=c,t[8]=l,t[9]=m,t[10]=u,t[11]=n,t[12]=x):x=t[12];let S;t[13]!==d||t[14]!==f||t[15]!==r||t[16]!==_||t[17]!==v||t[18]!==g||t[19]!==p||t[20]!==n||t[21]!==h||t[22]!==b||t[23]!==y?(S=d.length===0?(0,W.jsx)(`div`,{className:`rounded-2xl border border-dashed border-edge py-16 text-center text-sm text-fg-muted`,children:f===`disabled`?n.noDisabledSkills:n.noSearchResults}):(0,W.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:d.map(e=>{let t=p(e);return(0,W.jsx)(`article`,{className:a(`group flex h-full flex-col rounded-xl border bg-surface-base p-4 transition-colors`,t?`border-edge-subtle hover:border-accent/40 hover:bg-surface-hover dark:border-edge-subtle`:`border-amber-300/70 bg-amber-50/30 hover:border-amber-400/80 hover:bg-amber-50/50 dark:border-amber-700/50 dark:bg-amber-950/20 dark:hover:border-amber-600/60`),children:(0,W.jsx)(`div`,{role:`button`,tabIndex:0,className:a(`flex min-h-0 flex-1 cursor-pointer flex-col rounded-lg text-left outline-none`,B.focusRingPanel),"aria-labelledby":`catalog-skill-title-${e.directoryId}`,onClick:t=>{t.target.closest(`button`)||g(e)},onKeyDown:t=>{t.target.closest(`button`)||(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),g(e))},children:(0,W.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,W.jsx)(J,{name:e.name}),(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,W.jsx)(`h3`,{id:`catalog-skill-title-${e.directoryId}`,className:`min-w-0 flex-1 truncate text-[15px] font-semibold leading-snug tracking-tight text-fg`,children:e.name}),(0,W.jsxs)(`div`,{role:`group`,className:`flex shrink-0 items-center gap-1`,onClick:me,onKeyDown:Q,children:[t?null:(0,W.jsx)(j,{type:`button`,variant:`primary`,className:`h-8 shrink-0 whitespace-nowrap px-2.5 text-xs font-medium`,disabled:b===e.name,onClick:()=>void _(e.name,!0),children:b===e.name?n.uploading:n.detailModalEnable}),(0,W.jsx)(j,{type:`button`,variant:`secondary`,className:`h-8 shrink-0 whitespace-nowrap px-2.5 text-xs font-medium`,disabled:!t||y===e.name||b===e.name,title:t?void 0:n.useRequiresEnabled,onClick:()=>void v({name:e.name,source:`catalog`}),children:y===e.name?n.previewUseInChatBusy:n.previewUseInChat})]})]}),(0,W.jsx)(`p`,{className:`line-clamp-2 text-sm leading-relaxed text-fg-muted`,title:e.description?e.description:void 0,children:e.description||`—`}),(0,W.jsx)(`div`,{className:`flex flex-wrap gap-1.5 text-[11px] text-fg-subtle`,children:r!==`builtin`||e.managed?(0,W.jsxs)(W.Fragment,{children:[r===`builtin`?null:(0,W.jsx)(`span`,{className:`rounded-md bg-surface-hover/60 px-2 py-0.5 dark:bg-surface-active/50`,children:h(e.source)}),e.managed?(0,W.jsxs)(`span`,{className:`rounded-md bg-surface-hover/60 px-2 py-0.5 dark:bg-surface-active/50`,children:[n.col.managed,`: `,n.yes]}):null,e.hub?(0,W.jsxs)(`span`,{className:`max-w-full break-all rounded-md bg-surface-hover/60 px-2 py-0.5 font-mono text-[10px] leading-snug dark:bg-surface-active/50 line-clamp-2`,title:`${e.hub.source}${e.hub.ref?`\nref: ${e.hub.ref}`:``}\nupdated: ${e.hub.updatedAt}`,children:[n.hubRemote,` ·`,` `,e.hub.kind===`git`?n.hubKindGit:n.hubKindArchive,` ·`,` `,e.hub.source.length>48?`${e.hub.source.slice(0,48)}…`:e.hub.source]}):null]}):null})]})]})})},`${e.directoryId}-${e.path}`)})}),t[13]=d,t[14]=f,t[15]=r,t[16]=_,t[17]=v,t[18]=g,t[19]=p,t[20]=n,t[21]=h,t[22]=b,t[23]=y,t[24]=S):S=t[24];let C;return t[25]!==x||t[26]!==S?(C=(0,W.jsxs)(W.Fragment,{children:[x,S]}),t[25]=x,t[26]=S,t[27]=C):C=t[27],C}function Q(e){return e.stopPropagation()}function me(e){return e.stopPropagation()}function he(e){return(0,W.jsx)(X,{},e)}var ge=`https://skillhub.cn`,_e=`https://clawhub.ai`;function ve(e){let t=e.trim();return t?`${ge}/skills/${encodeURIComponent(t)}`:null}function ye(e){let t=e.trim();return t?`${_e}/${encodeURIComponent(t)}`:null}function be(e,t){return e===`skillhub`?ve(t):e===`clawhub`?ye(t):null}function xe(e,t){return t===`store`?e.name.trim()||e.id:e.id.trim()||e.name}function Se(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}function Ce(e){let t=[e.kind];return e.label?.trim()&&t.push(e.label.trim()),e.package?.trim()&&t.push(e.package.trim()),e.formula?.trim()&&t.push(e.formula.trim()),e.module?.trim()&&t.push(e.module.trim()),e.url?.trim()&&t.push(e.url.trim()),t.join(` · `)}function we(e){return{...e,enabled:e.enabled??!0,disableModelInvocation:e.disableModelInvocation??!1}}function Te(e){let t=(0,oe.c)(32),{sk:n,confirmOpen:r,setConfirmOpen:i,confirmId:a,setConfirmId:o,runDelete:s}=e,c;t[0]!==o||t[1]!==i?(c=e=>{i(e),e||o(null)},t[0]=o,t[1]=i,t[2]=c):c=t[2];let l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,W.jsx)(T,{className:`xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim`}),t[3]=l):l=t[3];let u;t[4]===n.deleteTitle?u=t[5]:(u=(0,W.jsx)(f,{className:`text-base font-semibold text-fg`,children:n.deleteTitle}),t[4]=n.deleteTitle,t[5]=u);let d;t[6]!==a||t[7]!==n.deleteMessage?(d=a?Se(n.deleteMessage,{id:a}):``,t[6]=a,t[7]=n.deleteMessage,t[8]=d):d=t[8];let p;t[9]===d?p=t[10]:(p=(0,W.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:d}),t[9]=d,t[10]=p);let m;t[11]===i?m=t[12]:(m=()=>i(!1),t[11]=i,t[12]=m);let h;t[13]!==n.cancel||t[14]!==m?(h=(0,W.jsx)(j,{type:`button`,variant:`secondary`,onClick:m,children:n.cancel}),t[13]=n.cancel,t[14]=m,t[15]=h):h=t[15];let g;t[16]===s?g=t[17]:(g=()=>void s(),t[16]=s,t[17]=g);let v;t[18]!==n.deleteConfirm||t[19]!==g?(v=(0,W.jsx)(j,{type:`button`,variant:`primary`,className:`bg-red-600 hover:bg-red-700`,onClick:g,children:n.deleteConfirm}),t[18]=n.deleteConfirm,t[19]=g,t[20]=v):v=t[20];let y;t[21]!==h||t[22]!==v?(y=(0,W.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[h,v]}),t[21]=h,t[22]=v,t[23]=y):y=t[23];let b;t[24]!==y||t[25]!==u||t[26]!==p?(b=(0,W.jsxs)(D,{children:[l,(0,W.jsxs)(_,{className:`xopc-dialog-content fixed left-1/2 top-1/2 z-[60] w-[min(100%-2rem,24rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`,children:[u,p,y]})]}),t[24]=y,t[25]=u,t[26]=p,t[27]=b):b=t[27];let S;return t[28]!==r||t[29]!==c||t[30]!==b?(S=(0,W.jsx)(x,{open:r,onOpenChange:c,children:b}),t[28]=r,t[29]=c,t[30]=b,t[31]=S):S=t[31],S}function Ee(e){let t=(0,oe.c)(7),{label:n,children:r}=e;if(r==null||r===!1)return null;let i;t[0]===n?i=t[1]:(i=(0,W.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-muted`,children:n}),t[0]=n,t[1]=i);let a;t[2]===r?a=t[3]:(a=(0,W.jsx)(`div`,{className:`mt-1.5 min-w-0 text-sm text-fg`,children:r}),t[2]=r,t[3]=a);let o;return t[4]!==i||t[5]!==a?(o=(0,W.jsxs)(`div`,{className:`mt-3 border-t border-edge-subtle pt-3 dark:border-edge/60`,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6],o}function De(e){let t=(0,oe.c)(118),{preview:n,sk:r}=e,i=n.metadata,o=n.toolConditions,s=!!o&&(o.requiresTools.length>0||o.requiresToolsets.length>0||o.fallbackForTools.length>0||o.fallbackForToolsets.length>0),c=i.requires,l=c&&((c.bins?.length??0)>0||(c.env?.length??0)>0||(c.anyBins?.length??0)>0),u,d,f,p,m,h,g,_,v,y,b,x,S,C,w;if(t[0]!==o||t[1]!==l||t[2]!==s||t[3]!==i.emoji||t[4]!==i.homepage||t[5]!==i.install||t[6]!==i.os||t[7]!==n.description||t[8]!==n.disableModelInvocation||t[9]!==n.requiredEnvVarNames||t[10]!==c||t[11]!==r.detailEnvVarsLabel||t[12]!==r.detailHomepageLabel||t[13]!==r.detailInstallLabel||t[14]!==r.detailNotInjectedNote||t[15]!==r.detailPlatformsLabel||t[16]!==r.detailRequiresAnyBins||t[17]!==r.detailRequiresBins||t[18]!==r.detailRequiresEnv||t[19]!==r.detailRequiresLabel||t[20]!==r.detailSummaryHeading||t[21]!==r.detailToolGatingLabel||t[22]!==r.detailToolsFallbackList||t[23]!==r.detailToolsRequiresList||t[24]!==r.detailToolsetsFallbackList||t[25]!==r.detailToolsetsRequiresList){let e=i.install?.filter(Ae)??[],T=n.requiredEnvVarNames?.filter(ke)??[];g=`space-y-6`,m=`skill-detail-summary-heading`,t[41]===r.detailSummaryHeading?h=t[42]:(h=(0,W.jsx)(`h3`,{id:`skill-detail-summary-heading`,className:`mb-2 text-xs font-semibold uppercase tracking-wide text-fg-muted`,children:r.detailSummaryHeading}),t[41]=r.detailSummaryHeading,t[42]=h),v=`rounded-xl border border-edge bg-surface-base px-4 py-3 dark:bg-surface-hover/25`,t[43]===i.emoji?y=t[44]:(y=i.emoji?.trim()?(0,W.jsx)(`p`,{className:`text-2xl leading-none`,"aria-hidden":!0,children:i.emoji.trim()}):null,t[43]=i.emoji,t[44]=y);let E;t[45]===i.emoji?E=t[46]:(E=i.emoji?.trim()?`mt-2`:``,t[45]=i.emoji,t[46]=E);let D;t[47]===E?D=t[48]:(D=a(`text-sm leading-relaxed text-fg`,E),t[47]=E,t[48]=D),t[49]!==n.description||t[50]!==D?(b=(0,W.jsx)(`p`,{className:D,children:n.description}),t[49]=n.description,t[50]=D,t[51]=b):b=t[51],t[52]!==n.disableModelInvocation||t[53]!==r.detailNotInjectedNote?(x=n.disableModelInvocation?(0,W.jsx)(`p`,{className:`mt-3 rounded-lg border border-amber-200/80 bg-amber-50/90 px-3 py-2 text-xs leading-snug text-amber-950 dark:border-amber-900/50 dark:bg-amber-950/40 dark:text-amber-100`,children:r.detailNotInjectedNote}):null,t[52]=n.disableModelInvocation,t[53]=r.detailNotInjectedNote,t[54]=x):x=t[54];let O;t[55]===i.homepage?O=t[56]:(O=i.homepage?.trim()?(0,W.jsx)(`a`,{href:i.homepage.trim(),target:`_blank`,rel:`noopener noreferrer`,className:`break-all text-accent underline-offset-2 hover:underline`,children:i.homepage.trim()}):null,t[55]=i.homepage,t[56]=O),t[57]!==r.detailHomepageLabel||t[58]!==O?(S=(0,W.jsx)(Ee,{label:r.detailHomepageLabel,children:O}),t[57]=r.detailHomepageLabel,t[58]=O,t[59]=S):S=t[59];let k;t[60]===i.os?k=t[61]:(k=i.os&&i.os.length>0?(0,W.jsx)(`span`,{className:`font-mono text-xs text-fg-muted`,children:i.os.join(`, `)}):null,t[60]=i.os,t[61]=k),t[62]!==r.detailPlatformsLabel||t[63]!==k?(C=(0,W.jsx)(Ee,{label:r.detailPlatformsLabel,children:k}),t[62]=r.detailPlatformsLabel,t[63]=k,t[64]=C):C=t[64];let A;t[65]!==l||t[66]!==c||t[67]!==r.detailRequiresAnyBins||t[68]!==r.detailRequiresBins||t[69]!==r.detailRequiresEnv?(A=l&&c?(0,W.jsxs)(`ul`,{className:`list-inside list-disc space-y-1 text-sm text-fg-muted`,children:[c.bins&&c.bins.length>0?(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`span`,{className:`text-fg`,children:[r.detailRequiresBins,`: `]}),c.bins.join(`, `)]}):null,c.env&&c.env.length>0?(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`span`,{className:`text-fg`,children:[r.detailRequiresEnv,`: `]}),(0,W.jsx)(`span`,{className:`font-mono text-xs`,children:c.env.join(`, `)})]}):null,c.anyBins&&c.anyBins.length>0?(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`span`,{className:`text-fg`,children:[r.detailRequiresAnyBins,`: `]}),c.anyBins.join(`, `)]}):null]}):null,t[65]=l,t[66]=c,t[67]=r.detailRequiresAnyBins,t[68]=r.detailRequiresBins,t[69]=r.detailRequiresEnv,t[70]=A):A=t[70],t[71]!==r.detailRequiresLabel||t[72]!==A?(w=(0,W.jsx)(Ee,{label:r.detailRequiresLabel,children:A}),t[71]=r.detailRequiresLabel,t[72]=A,t[73]=w):w=t[73];let j=e.length>0?(0,W.jsx)(`ul`,{className:`list-inside list-decimal space-y-1.5 text-sm text-fg-muted`,children:e.map(Oe)}):null;t[74]!==r.detailInstallLabel||t[75]!==j?(f=(0,W.jsx)(Ee,{label:r.detailInstallLabel,children:j}),t[74]=r.detailInstallLabel,t[75]=j,t[76]=f):f=t[76];let M;t[77]!==o||t[78]!==s||t[79]!==r.detailToolsFallbackList||t[80]!==r.detailToolsRequiresList||t[81]!==r.detailToolsetsFallbackList||t[82]!==r.detailToolsetsRequiresList?(M=s&&o?(0,W.jsxs)(`ul`,{className:`mt-1 space-y-2 text-sm text-fg-muted`,children:[o.requiresTools.length>0?(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`span`,{className:`font-medium text-fg`,children:[r.detailToolsRequiresList,`: `]}),o.requiresTools.join(`, `)]}):null,o.requiresToolsets.length>0?(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`span`,{className:`font-medium text-fg`,children:[r.detailToolsetsRequiresList,`: `]}),o.requiresToolsets.join(`, `)]}):null,o.fallbackForTools.length>0?(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`span`,{className:`font-medium text-fg`,children:[r.detailToolsFallbackList,`: `]}),o.fallbackForTools.join(`, `)]}):null,o.fallbackForToolsets.length>0?(0,W.jsxs)(`li`,{children:[(0,W.jsxs)(`span`,{className:`font-medium text-fg`,children:[r.detailToolsetsFallbackList,`: `]}),o.fallbackForToolsets.join(`, `)]}):null]}):null,t[77]=o,t[78]=s,t[79]=r.detailToolsFallbackList,t[80]=r.detailToolsRequiresList,t[81]=r.detailToolsetsFallbackList,t[82]=r.detailToolsetsRequiresList,t[83]=M):M=t[83],t[84]!==r.detailToolGatingLabel||t[85]!==M?(p=(0,W.jsx)(Ee,{label:r.detailToolGatingLabel,children:M}),t[84]=r.detailToolGatingLabel,t[85]=M,t[86]=p):p=t[86],u=Ee,d=r.detailEnvVarsLabel,_=T.length>0?(0,W.jsx)(`span`,{className:`font-mono text-xs text-fg-muted`,children:T.join(`, `)}):null,t[0]=o,t[1]=l,t[2]=s,t[3]=i.emoji,t[4]=i.homepage,t[5]=i.install,t[6]=i.os,t[7]=n.description,t[8]=n.disableModelInvocation,t[9]=n.requiredEnvVarNames,t[10]=c,t[11]=r.detailEnvVarsLabel,t[12]=r.detailHomepageLabel,t[13]=r.detailInstallLabel,t[14]=r.detailNotInjectedNote,t[15]=r.detailPlatformsLabel,t[16]=r.detailRequiresAnyBins,t[17]=r.detailRequiresBins,t[18]=r.detailRequiresEnv,t[19]=r.detailRequiresLabel,t[20]=r.detailSummaryHeading,t[21]=r.detailToolGatingLabel,t[22]=r.detailToolsFallbackList,t[23]=r.detailToolsRequiresList,t[24]=r.detailToolsetsFallbackList,t[25]=r.detailToolsetsRequiresList,t[26]=u,t[27]=d,t[28]=f,t[29]=p,t[30]=m,t[31]=h,t[32]=g,t[33]=_,t[34]=v,t[35]=y,t[36]=b,t[37]=x,t[38]=S,t[39]=C,t[40]=w}else u=t[26],d=t[27],f=t[28],p=t[29],m=t[30],h=t[31],g=t[32],_=t[33],v=t[34],y=t[35],b=t[36],x=t[37],S=t[38],C=t[39],w=t[40];let T;t[87]!==u||t[88]!==d||t[89]!==_?(T=(0,W.jsx)(u,{label:d,children:_}),t[87]=u,t[88]=d,t[89]=_,t[90]=T):T=t[90];let E;t[91]!==f||t[92]!==p||t[93]!==T||t[94]!==v||t[95]!==y||t[96]!==b||t[97]!==x||t[98]!==S||t[99]!==C||t[100]!==w?(E=(0,W.jsxs)(`div`,{className:v,children:[y,b,x,S,C,w,f,p,T]}),t[91]=f,t[92]=p,t[93]=T,t[94]=v,t[95]=y,t[96]=b,t[97]=x,t[98]=S,t[99]=C,t[100]=w,t[101]=E):E=t[101];let D;t[102]!==m||t[103]!==h||t[104]!==E?(D=(0,W.jsxs)(`section`,{"aria-labelledby":m,children:[h,E]}),t[102]=m,t[103]=h,t[104]=E,t[105]=D):D=t[105];let O;t[106]===r.detailInstructionsHeading?O=t[107]:(O=(0,W.jsx)(`h3`,{id:`skill-detail-instructions-heading`,className:`mb-2 text-xs font-semibold uppercase tracking-wide text-fg-muted`,children:r.detailInstructionsHeading}),t[106]=r.detailInstructionsHeading,t[107]=O);let k;t[108]!==n.bodyMarkdown||t[109]!==r.detailNoInstructionsBody?(k=n.bodyMarkdown.trim()?(0,W.jsx)(`div`,{className:`markdown-content min-w-0 break-words`,children:(0,W.jsx)(te,{content:n.bodyMarkdown})}):(0,W.jsx)(`p`,{className:`text-sm italic text-fg-muted`,children:r.detailNoInstructionsBody}),t[108]=n.bodyMarkdown,t[109]=r.detailNoInstructionsBody,t[110]=k):k=t[110];let A;t[111]!==O||t[112]!==k?(A=(0,W.jsxs)(`section`,{"aria-labelledby":`skill-detail-instructions-heading`,children:[O,k]}),t[111]=O,t[112]=k,t[113]=A):A=t[113];let j;return t[114]!==g||t[115]!==D||t[116]!==A?(j=(0,W.jsxs)(`div`,{className:g,children:[D,A]}),t[114]=g,t[115]=D,t[116]=A,t[117]=j):j=t[117],j}function Oe(e,t){return(0,W.jsx)(`li`,{className:`[overflow-wrap:anywhere]`,children:(0,W.jsx)(`span`,{className:`text-fg`,children:Ce(e)})},e.id||`${e.kind}-${t}`)}function ke(e){return e.trim()}function Ae(e){return e&&typeof e.kind==`string`}var je=[{id:`s0`,width:`w-[92%]`},{id:`s1`,width:`w-full`},{id:`s2`,width:`w-4/5`},{id:`s3`,width:`w-[92%]`},{id:`s4`,width:`w-full`},{id:`s5`,width:`w-4/5`},{id:`s6`,width:`w-[92%]`},{id:`s7`,width:`w-full`},{id:`s8`,width:`w-4/5`},{id:`s9`,width:`w-[92%]`}];function Me(e){let t=(0,oe.c)(81),{sk:n,detailOpen:r,setDetailOpen:i,detailSource:o,setDetailSource:s,detailTitle:c,setDetailTitle:l,detailCatalogPreview:u,setDetailCatalogPreview:d,detailMarketplacePreview:p,setDetailMarketplacePreview:m,detailLoading:h,detailError:v,setDetailError:y,detailEnabled:b,detailDirectoryId:S,detailManaged:C,detailExternalUrl:E,usingSkillInChatName:O,installingMarketName:k,togglingSkillName:N,isSkillInstalledByName:P,onUseSkillInChat:F,onMarketInstall:L,onSkillToggle:R,setConfirmId:ee,setConfirmOpen:te}=e,V;t[0]!==d||t[1]!==y||t[2]!==m||t[3]!==i||t[4]!==s||t[5]!==l?(V=e=>{i(e),e||(s(`catalog`),d(null),m(null),y(null),l(``))},t[0]=d,t[1]=y,t[2]=m,t[3]=i,t[4]=s,t[5]=l,t[6]=V):V=t[6];let ne;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(ne=(0,W.jsx)(T,{className:`xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim`}),t[7]=ne):ne=t[7];let H;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(H=a(`xopc-dialog-content fixed left-1/2 top-1/2 z-[60] flex h-[min(88vh,44rem)] max-h-[min(92vh,56rem)] w-[min(100%-2rem,min(92vw,56rem))]`,`-translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-float dark:border-edge`),t[8]=H):H=t[8];let re=c||`?`,ie;t[9]===re?ie=t[10]:(ie=(0,W.jsx)(J,{name:re}),t[9]=re,t[10]=ie);let ae=c||`—`,U;t[11]===ae?U=t[12]:(U=(0,W.jsx)(f,{className:`min-w-0 flex-1 truncate text-base font-semibold text-fg`,children:ae}),t[11]=ae,t[12]=U);let se;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(se=a(`rounded-lg p-1.5 text-fg-muted hover:bg-surface-hover hover:text-fg`,B.focusRingPanel),t[13]=se):se=t[13];let G;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(G=(0,W.jsx)(A,{className:`size-5`,strokeWidth:1.75,"aria-hidden":!0}),t[14]=G):G=t[14];let K;t[15]===n.detailCloseAria?K=t[16]:(K=(0,W.jsx)(I,{asChild:!0,children:(0,W.jsx)(`button`,{type:`button`,className:se,"aria-label":n.detailCloseAria,children:G})}),t[15]=n.detailCloseAria,t[16]=K);let q;t[17]!==ie||t[18]!==U||t[19]!==K?(q=(0,W.jsxs)(`div`,{className:`group flex min-h-[3.25rem] shrink-0 items-center gap-3 border-b border-edge px-4 py-3`,children:[ie,U,K]}),t[17]=ie,t[18]=U,t[19]=K,t[20]=q):q=t[20];let Y;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(Y=(0,W.jsx)(z,{className:`mt-0.5 size-4 shrink-0 text-blue-600 dark:text-blue-400`,strokeWidth:1.75,"aria-hidden":!0}),t[21]=Y):Y=t[21];let ce=o===`store`&&p?n.detailModalBanner:o===`store`?n.detailModalBannerStore:n.detailModalBanner,X;t[22]===ce?X=t[23]:(X=(0,W.jsxs)(`div`,{className:`flex min-h-[3.25rem] shrink-0 items-start gap-2 border-b border-blue-200/80 bg-blue-50/95 px-4 py-2.5 text-sm text-fg dark:border-blue-900/50 dark:bg-blue-950/45`,children:[Y,(0,W.jsx)(`p`,{className:`min-w-0 leading-relaxed`,children:ce})]}),t[22]=ce,t[23]=X);let le;t[24]!==u||t[25]!==b||t[26]!==v||t[27]!==h||t[28]!==p||t[29]!==o||t[30]!==n?(le=(0,W.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 overflow-auto p-4`,children:h?(0,W.jsx)(`div`,{className:`flex h-full min-h-[14rem] flex-col gap-2.5 py-1`,"aria-busy":`true`,"aria-label":n.loading,children:je.map(Ne)}):v?(0,W.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:v}):o===`catalog`&&u?(0,W.jsxs)(W.Fragment,{children:[b?null:(0,W.jsxs)(`div`,{className:`mb-4 flex items-start gap-2 rounded-xl border border-amber-200 bg-amber-50 px-3 py-2.5 text-sm text-amber-900 dark:border-amber-900/50 dark:bg-amber-950/30 dark:text-amber-100`,children:[(0,W.jsx)(w,{className:`mt-0.5 size-4 shrink-0 text-amber-600 dark:text-amber-300`,strokeWidth:1.75,"aria-hidden":!0}),(0,W.jsx)(`p`,{className:`leading-relaxed`,children:n.detailDisabledNotice})]}),(0,W.jsx)(De,{preview:u,sk:n})]}):o===`store`&&p?(0,W.jsx)(De,{preview:p,sk:n}):(0,W.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:n.detailLoadFailed})}),t[24]=u,t[25]=b,t[26]=v,t[27]=h,t[28]=p,t[29]=o,t[30]=n,t[31]=le):le=t[31];let ue;t[32]!==E||t[33]!==o||t[34]!==n.marketplaceOpenExternal||t[35]!==n.marketplaceOpenExternalAria?(ue=o===`store`&&E?(0,W.jsxs)(`a`,{href:E,target:`_blank`,rel:`noopener noreferrer`,className:a(`inline-flex h-9 items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-3 text-sm font-medium text-fg-muted`,`hover:bg-surface-hover hover:text-fg dark:border-edge`,B.focusRingPanel),"aria-label":n.marketplaceOpenExternalAria,title:n.marketplaceOpenExternal,children:[(0,W.jsx)(M,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),(0,W.jsx)(`span`,{children:n.marketplaceOpenExternal})]}):null,t[32]=E,t[33]=o,t[34]=n.marketplaceOpenExternal,t[35]=n.marketplaceOpenExternalAria,t[36]=ue):ue=t[36];let de;t[37]!==S||t[38]!==C||t[39]!==o||t[40]!==ee||t[41]!==te||t[42]!==n.delete?(de=o===`catalog`&&C&&S?(0,W.jsxs)(j,{type:`button`,variant:`ghost`,className:`gap-1.5 text-red-600 hover:bg-red-50 hover:text-red-700 dark:text-red-400 dark:hover:bg-red-950/40 dark:hover:text-red-300`,onClick:()=>{ee(S),te(!0)},children:[(0,W.jsx)(g,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),n.delete]}):null,t[37]=S,t[38]=C,t[39]=o,t[40]=ee,t[41]=te,t[42]=n.delete,t[43]=de):de=t[43];let Z;t[44]!==ue||t[45]!==de?(Z=(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[ue,de]}),t[44]=ue,t[45]=de,t[46]=Z):Z=t[46];let fe;t[47]!==b||t[48]!==h||t[49]!==o||t[50]!==c||t[51]!==k||t[52]!==P||t[53]!==L||t[54]!==R||t[55]!==F||t[56]!==i||t[57]!==n.cancel||t[58]!==n.detailModalDisable||t[59]!==n.detailModalEnable||t[60]!==n.marketplaceInstall||t[61]!==n.marketplaceReinstall||t[62]!==n.previewUseInChat||t[63]!==n.previewUseInChatBusy||t[64]!==n.uploading||t[65]!==n.useRequiresEnabled||t[66]!==N||t[67]!==O?(fe=(0,W.jsx)(`div`,{className:`flex items-center gap-2`,children:o===`store`?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(j,{type:`button`,variant:`ghost`,onClick:()=>i(!1),children:n.cancel}),(0,W.jsx)(j,{type:`button`,variant:`secondary`,disabled:!c||h||O===c||k===c,onClick:()=>void F(),children:O===c?n.previewUseInChatBusy:n.previewUseInChat}),(0,W.jsx)(j,{type:`button`,variant:P(c)?`secondary`:`primary`,disabled:!c||k===c,onClick:()=>{c&&L(c,{useDetailProvider:!0})},children:k===c?n.uploading:P(c)?n.marketplaceReinstall:n.marketplaceInstall})]}):(0,W.jsxs)(W.Fragment,{children:[b?(0,W.jsx)(j,{type:`button`,variant:`secondary`,disabled:!c||N===c,onClick:()=>{c&&R(c,!1)},children:N===c?n.uploading:n.detailModalDisable}):(0,W.jsx)(j,{type:`button`,variant:`primary`,disabled:!c||N===c,onClick:()=>{c&&R(c,!0)},children:N===c?n.uploading:n.detailModalEnable}),(0,W.jsx)(j,{type:`button`,variant:`secondary`,disabled:!c||!b||h||O===c||N===c,title:b?void 0:n.useRequiresEnabled,onClick:()=>void F(),children:O===c?n.previewUseInChatBusy:n.previewUseInChat})]})}),t[47]=b,t[48]=h,t[49]=o,t[50]=c,t[51]=k,t[52]=P,t[53]=L,t[54]=R,t[55]=F,t[56]=i,t[57]=n.cancel,t[58]=n.detailModalDisable,t[59]=n.detailModalEnable,t[60]=n.marketplaceInstall,t[61]=n.marketplaceReinstall,t[62]=n.previewUseInChat,t[63]=n.previewUseInChatBusy,t[64]=n.uploading,t[65]=n.useRequiresEnabled,t[66]=N,t[67]=O,t[68]=fe):fe=t[68];let pe;t[69]!==Z||t[70]!==fe?(pe=(0,W.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-t border-edge px-4 py-3`,children:[Z,fe]}),t[69]=Z,t[70]=fe,t[71]=pe):pe=t[71];let Q;t[72]!==q||t[73]!==X||t[74]!==le||t[75]!==pe?(Q=(0,W.jsxs)(D,{children:[ne,(0,W.jsxs)(_,{className:H,children:[q,X,le,pe]})]}),t[72]=q,t[73]=X,t[74]=le,t[75]=pe,t[76]=Q):Q=t[76];let me;return t[77]!==r||t[78]!==V||t[79]!==Q?(me=(0,W.jsx)(x,{open:r,onOpenChange:V,children:Q}),t[77]=r,t[78]=V,t[79]=Q,t[80]=me):me=t[80],me}function Ne(e){return(0,W.jsx)(`div`,{className:a(`h-4 animate-pulse rounded-md bg-surface-hover dark:bg-surface-active/50`,e.width)},e.id)}function Pe(e){let t=(0,oe.c)(67),{sk:n,installOpen:r,setInstallOpen:i,pendingFile:o,setPendingFile:s,dropActive:c,setDropActive:l,uploading:u,onModalDragOver:d,onModalDragLeave:m,onModalDrop:h,onFileInputChange:g,onInstallSubmit:v}=e,y;t[0]!==l||t[1]!==i||t[2]!==s?(y=e=>{i(e),e||(s(null),l(!1))},t[0]=l,t[1]=i,t[2]=s,t[3]=y):y=t[3];let b;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,W.jsx)(T,{className:`xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim`}),t[4]=b):b=t[4];let S;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(S=a(`xopc-dialog-content fixed left-1/2 top-1/2 z-[60] max-h-[min(100vh-2rem,44rem)] w-[min(100%-2rem,min(92vw,48rem))] -translate-x-1/2 -translate-y-1/2 overflow-y-auto`,`rounded-2xl border border-edge bg-surface-panel p-6 shadow-float dark:border-edge`),t[5]=S):S=t[5];let C;t[6]===n.installModalTitle?C=t[7]:(C=(0,W.jsx)(f,{className:`text-base font-semibold text-fg`,children:n.installModalTitle}),t[6]=n.installModalTitle,t[7]=C);let w;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(w=a(`rounded-lg p-1.5 text-fg-muted hover:bg-surface-hover hover:text-fg`,B.focusRingPanel),t[8]=w):w=t[8];let E;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,W.jsx)(A,{className:`size-5`,strokeWidth:1.75,"aria-hidden":!0}),t[9]=E):E=t[9];let O;t[10]===n.installClose?O=t[11]:(O=(0,W.jsx)(`span`,{className:`sr-only`,children:n.installClose}),t[10]=n.installClose,t[11]=O);let k;t[12]!==n.installClose||t[13]!==O?(k=(0,W.jsx)(I,{asChild:!0,children:(0,W.jsxs)(`button`,{type:`button`,className:w,"aria-label":n.installClose,children:[E,O]})}),t[12]=n.installClose,t[13]=O,t[14]=k):k=t[14];let j;t[15]!==C||t[16]!==k?(j=(0,W.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[C,k]}),t[15]=C,t[16]=k,t[17]=j):j=t[17];let M=c?`border-accent bg-accent-soft/60 dark:bg-blue-950/40`:`border-edge bg-surface-base dark:bg-surface-hover/30`,N;t[18]===M?N=t[19]:(N=a(`mt-4 flex min-h-[11rem] cursor-pointer flex-col items-center justify-center gap-3 rounded-xl border-2 border-dashed px-6 py-12 text-center transition-colors`,M),t[18]=M,t[19]=N);let P;t[20]!==g||t[21]!==n.installModalDropHint||t[22]!==u?(P=(0,W.jsx)(`input`,{type:`file`,accept:`.zip,.md,application/zip,text/markdown`,className:`sr-only`,"aria-label":n.installModalDropHint,disabled:u,onChange:g}),t[20]=g,t[21]=n.installModalDropHint,t[22]=u,t[23]=P):P=t[23];let F;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(F=(0,W.jsx)(p,{className:`size-12 text-fg-subtle`,strokeWidth:1.25,"aria-hidden":!0}),t[24]=F):F=t[24];let L;t[25]===n.installModalDropHint?L=t[26]:(L=(0,W.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.installModalDropHint}),t[25]=n.installModalDropHint,t[26]=L);let R;t[27]===o?R=t[28]:(R=o?(0,W.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:o.name}):null,t[27]=o,t[28]=R);let z;t[29]!==m||t[30]!==d||t[31]!==h||t[32]!==N||t[33]!==P||t[34]!==L||t[35]!==R?(z=(0,W.jsxs)(`label`,{className:N,onDragLeave:m,onDragOver:d,onDrop:h,children:[P,F,L,R]}),t[29]=m,t[30]=d,t[31]=h,t[32]=N,t[33]=P,t[34]=L,t[35]=R,t[36]=z):z=t[36];let ee;t[37]===n.installModalReqTitle?ee=t[38]:(ee=(0,W.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.installModalReqTitle}),t[37]=n.installModalReqTitle,t[38]=ee);let te;t[39]===n.installModalReq1?te=t[40]:(te=(0,W.jsx)(`li`,{children:n.installModalReq1}),t[39]=n.installModalReq1,t[40]=te);let V;t[41]===n.installModalReq2?V=t[42]:(V=(0,W.jsx)(`li`,{children:n.installModalReq2}),t[41]=n.installModalReq2,t[42]=V);let ne;t[43]!==te||t[44]!==V?(ne=(0,W.jsxs)(`ul`,{className:`list-inside list-disc space-y-1 text-sm text-fg-muted`,children:[te,V]}),t[43]=te,t[44]=V,t[45]=ne):ne=t[45];let H;t[46]!==ee||t[47]!==ne?(H=(0,W.jsxs)(`div`,{className:`mt-5 space-y-2`,children:[ee,ne]}),t[46]=ee,t[47]=ne,t[48]=H):H=t[48];let re=!o||u,ie=!o||u?`cursor-not-allowed bg-surface-active text-fg-disabled`:`bg-accent text-white hover:bg-accent-hover`,ae;t[49]===ie?ae=t[50]:(ae=a(`mt-6 flex w-full items-center justify-center rounded-xl py-3 text-sm font-semibold`,`transition-colors`,ie,B.focusRingPanel),t[49]=ie,t[50]=ae);let U;t[51]===v?U=t[52]:(U=()=>void v(),t[51]=v,t[52]=U);let se=u?n.uploading:n.installAction,G;t[53]!==re||t[54]!==ae||t[55]!==U||t[56]!==se?(G=(0,W.jsx)(`button`,{type:`button`,disabled:re,className:ae,onClick:U,children:se}),t[53]=re,t[54]=ae,t[55]=U,t[56]=se,t[57]=G):G=t[57];let K;t[58]!==z||t[59]!==H||t[60]!==G||t[61]!==j?(K=(0,W.jsxs)(D,{children:[b,(0,W.jsxs)(_,{className:S,children:[j,z,H,G]})]}),t[58]=z,t[59]=H,t[60]=G,t[61]=j,t[62]=K):K=t[62];let q;return t[63]!==r||t[64]!==y||t[65]!==K?(q=(0,W.jsx)(x,{open:r,onOpenChange:y,children:K}),t[63]=r,t[64]=y,t[65]=K,t[66]=q):q=t[66],q}function $(e){let t=(0,oe.c)(42),{sk:n,mpCategories:r,mpCategoriesLoading:i,mpCategoriesError:o,mpPayload:s,mpLoading:c,mpError:l,marketCategoryId:u,setMarketCategoryId:f,marketPage:p,setMarketPage:m,isSkillInstalledByName:h,openMarketplaceDetail:g,onUseSkillInChat:_,usingSkillInChatName:v,searchInputActive:y,searchQuery:b,setSearchQuery:x,registeredProviders:S,marketBrowseProvider:C,setMarketBrowseProvider:w}=e,T=!y,E;if(t[0]!==h||t[1]!==C||t[2]!==u||t[3]!==p||t[4]!==r||t[5]!==o||t[6]!==i||t[7]!==l||t[8]!==c||t[9]!==s||t[10]!==_||t[11]!==g||t[12]!==S||t[13]!==y||t[14]!==b||t[15]!==w||t[16]!==f||t[17]!==m||t[18]!==x||t[19]!==T||t[20]!==n||t[21]!==v){let e;t[23]===C?e=t[24]:(e=e=>e.id!==C,t[23]=C,t[24]=e);let D=S.filter(e),O=b.trim(),k=(!T||!i&&r.length===0)&&`min-h-0 pb-0 pt-0`,A;t[25]===k?A=t[26]:(A=a(`-mx-1 flex min-h-[2.75rem] items-center gap-2 overflow-x-auto px-1 pb-1 pt-0.5 [scrollbar-width:thin]`,k),t[25]=k,t[26]=A);let M=T&&(r.length>0||i)?`tablist`:void 0,P=T&&(r.length>0||i)?n.marketplaceCategoriesAria:void 0,I;t[27]!==u||t[28]!==r||t[29]!==i||t[30]!==f||t[31]!==T||t[32]!==n?(I=T?r.length>0?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":u===``,className:a(`shrink-0 rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,B.focusRingPanel,u===``?`border-fg bg-fg text-surface-panel dark:border-fg dark:bg-fg dark:text-surface-base`:`border-edge bg-surface-panel text-fg-muted hover:border-edge-strong hover:text-fg dark:border-edge dark:bg-surface-hover/40`),onClick:()=>f(``),children:n.marketplaceCategoryAll}),r.map(e=>{let t=u===e.id;return(0,W.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t,className:a(`max-w-[14rem] shrink-0 truncate rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,B.focusRingPanel,t?`border-fg bg-fg text-surface-panel dark:border-fg dark:bg-fg dark:text-surface-base`:`border-edge bg-surface-panel text-fg-muted hover:border-edge-strong hover:text-fg dark:border-edge dark:bg-surface-hover/40`),title:e.label,onClick:()=>f(e.id),children:e.label},e.id)})]}):i?(0,W.jsx)(`div`,{className:`flex gap-2 px-1`,"aria-hidden":!0,children:[`p0`,`p1`,`p2`,`p3`,`p4`].map(Be)}):null:null,t[27]=u,t[28]=r,t[29]=i,t[30]=f,t[31]=T,t[32]=n,t[33]=I):I=t[33];let L;t[34]!==A||t[35]!==M||t[36]!==P||t[37]!==I?(L=(0,W.jsx)(`div`,{className:A,role:M,"aria-label":P,children:I}),t[34]=A,t[35]=M,t[36]=P,t[37]=I,t[38]=L):L=t[38];let z;t[39]!==o||t[40]!==T?(z=T&&o?(0,W.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,role:`alert`,children:o}):null,t[39]=o,t[40]=T,t[41]=z):z=t[41],E=(0,W.jsxs)(W.Fragment,{children:[L,z,!s&&!l?(0,W.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3`,"aria-busy":`true`,"aria-label":n.loading,children:Z.map(ze)}):l&&!s?(0,W.jsx)(`div`,{className:`rounded-xl border border-edge bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-edge dark:bg-red-950/40 dark:text-red-300`,role:`alert`,children:l}):s?(0,W.jsxs)(`div`,{className:`relative`,children:[c?(0,W.jsx)(`div`,{className:`pointer-events-none absolute inset-0 z-[1] flex justify-center bg-surface-panel/40 pt-[min(28vh,7.5rem)] backdrop-blur-[1px] motion-reduce:backdrop-blur-none dark:bg-surface-base/35`,"aria-busy":`true`,"aria-label":n.loading,children:(0,W.jsx)(F,{className:`size-8 shrink-0 animate-spin text-accent motion-reduce:animate-none`,strokeWidth:2,"aria-hidden":!0})}):null,s.items.length===0?(0,W.jsxs)(`div`,{className:`flex flex-col items-center gap-3 rounded-2xl border border-dashed border-edge py-12 text-center text-sm text-fg-muted`,children:[(0,W.jsx)(`p`,{className:`px-4`,children:y&&O?Se(n.marketplaceEmptySearch,{query:O}):n.marketplaceEmpty}),y?(0,W.jsxs)(`div`,{className:`flex flex-wrap items-center justify-center gap-2`,children:[D.map(e=>(0,W.jsx)(j,{type:`button`,variant:`secondary`,className:`h-8 px-3 text-xs`,onClick:()=>w(e.id),children:Se(n.marketplaceEmptySearchTryProvider,{provider:e.displayName})},e.id)),(0,W.jsx)(j,{type:`button`,variant:`ghost`,className:`h-8 px-3 text-xs`,onClick:()=>x(``),children:n.marketplaceEmptySearchClear})]}):null]}):(0,W.jsx)(`div`,{className:a(`grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3`,c&&`pointer-events-none opacity-[0.52] motion-reduce:opacity-100`),children:s.items.map(e=>{let t=xe(e,e.providerId??C),r=h(t);return(0,W.jsx)(`article`,{className:a(`group flex h-full flex-col rounded-xl border border-edge-subtle bg-surface-base p-4`,`transition-colors hover:border-accent/40 hover:bg-surface-hover`,`dark:border-edge-subtle`),children:(0,W.jsx)(`div`,{role:`button`,tabIndex:0,className:a(`flex min-h-0 flex-1 cursor-pointer flex-col rounded-lg text-left outline-none`,B.focusRingPanel),"aria-labelledby":`mp-skill-title-${e.id}`,onClick:n=>{n.target.closest(`button`)||g(t,e.name,e.providerId??void 0)},onKeyDown:n=>{n.target.closest(`button`)||(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),g(t,e.name,e.providerId??void 0))},children:(0,W.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,W.jsx)(J,{name:e.id}),(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,W.jsx)(`h3`,{id:`mp-skill-title-${e.id}`,className:`min-w-0 flex-1 text-[15px] font-semibold leading-snug tracking-tight text-fg`,children:(0,W.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:`truncate`,children:e.name}),r?null:(0,W.jsx)(`span`,{className:`shrink-0 text-[10px] font-normal leading-none text-fg-subtle`,children:n.marketplaceNotInstalled})]})}),(0,W.jsx)(`div`,{role:`group`,className:`flex shrink-0 items-center gap-1`,onClick:Re,onKeyDown:Le,children:(0,W.jsx)(j,{type:`button`,variant:`secondary`,className:`h-8 shrink-0 whitespace-nowrap px-2.5 text-xs font-medium`,disabled:c||v===t,onClick:()=>void _({name:t,source:`store`,providerOverride:e.providerId??null}),children:v===t?n.previewUseInChatBusy:n.previewUseInChat})})]}),(()=>{let t=[],n=(e,n)=>{if(!e||t.some(t=>t.id===e))return;let r=S.find(t=>t.id===e)?.displayName??n??e;t.push({id:e,label:r})};n(e.providerId,e.sourceLabel);for(let t of e.additionalSources??[])n(t.providerId,t.sourceLabel);return t.length===0&&e.sourceLabel&&t.push({id:e.sourceLabel,label:e.sourceLabel}),t.length===0?null:(0,W.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:t.map(Ie)})})(),(0,W.jsx)(`p`,{className:`line-clamp-2 text-sm leading-relaxed text-fg-muted`,title:e.description?e.description:void 0,children:e.description||`—`}),(0,W.jsxs)(`div`,{className:`mt-auto min-h-[2.625rem] space-y-1 text-[11px] leading-snug text-fg-muted`,children:[(0,W.jsxs)(`p`,{className:`line-clamp-1`,title:`${n.marketplaceAuthor}: ${e.author.username} · ${n.marketplaceDownloads}: ${e.downloads}${e.stars!=null&&e.stars>0?` · ★${e.stars}`:``}${r?` · ${n.marketplaceInstalled}`:``}`,children:[(0,W.jsx)(`span`,{className:`text-fg-subtle`,children:n.marketplaceAuthor}),` `,(0,W.jsx)(`span`,{className:`text-fg`,children:e.author.username}),(0,W.jsx)(`span`,{className:`text-fg-subtle`,children:` · `}),(0,W.jsxs)(`span`,{children:[n.marketplaceDownloads,`: `,e.downloads]}),e.stars!=null&&e.stars>0?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{className:`text-fg-subtle`,children:` · `}),(0,W.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 text-fg-muted`,children:[(0,W.jsx)(d,{className:`size-3 shrink-0 text-amber-600 dark:text-amber-400`,strokeWidth:2,"aria-hidden":!0}),e.stars]})]}):null,r?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{className:`text-fg-subtle`,children:` · `}),(0,W.jsx)(`span`,{className:`text-emerald-700 dark:text-emerald-400`,children:n.marketplaceInstalled})]}):null]}),e.latestVersion?(0,W.jsxs)(`p`,{className:`line-clamp-1 min-h-[1.125rem] font-mono text-[10px] text-fg-subtle`,title:`${n.marketplaceVersion}: ${e.latestVersion}`,children:[n.marketplaceVersion,`: `,e.latestVersion]}):null]})]})]})})},e.id)})}),s.items.length>0?(0,W.jsxs)(`div`,{className:`mt-3 flex flex-col items-center justify-between gap-3 sm:flex-row`,children:[(0,W.jsx)(`p`,{className:`text-center text-xs text-fg-muted sm:text-left`,children:Se(n.marketplacePageStatus,{page:s.meta.page,totalPages:s.meta.totalPages,total:s.meta.total})}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsxs)(j,{type:`button`,variant:`ghost`,className:`h-9 gap-1 px-2`,disabled:c||p<=1,"aria-label":n.marketplacePagePrev,onClick:()=>m(Fe),children:[(0,W.jsx)(N,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),(0,W.jsx)(`span`,{className:`sr-only sm:not-sr-only`,children:n.marketplacePagePrev})]}),(0,W.jsxs)(j,{type:`button`,variant:`ghost`,className:`h-9 gap-1 px-2`,disabled:c||p>=s.meta.totalPages,"aria-label":n.marketplacePageNext,onClick:()=>m(e=>Math.min(s.meta.totalPages,e+1)),children:[(0,W.jsx)(`span`,{className:`sr-only sm:not-sr-only`,children:n.marketplacePageNext}),(0,W.jsx)(R,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0})]})]})]}):null]}):null]}),t[0]=h,t[1]=C,t[2]=u,t[3]=p,t[4]=r,t[5]=o,t[6]=i,t[7]=l,t[8]=c,t[9]=s,t[10]=_,t[11]=g,t[12]=S,t[13]=y,t[14]=b,t[15]=w,t[16]=f,t[17]=m,t[18]=x,t[19]=T,t[20]=n,t[21]=v,t[22]=E}else E=t[22];return E}function Fe(e){return Math.max(1,e-1)}function Ie(e){return(0,W.jsx)(`span`,{className:`inline-flex items-center rounded-full border border-edge-subtle bg-surface-panel px-2 py-0.5 text-[10px] font-medium leading-none text-fg-muted dark:bg-surface-hover/40`,children:e.label},e.id)}function Le(e){return e.stopPropagation()}function Re(e){return e.stopPropagation()}function ze(e){return(0,W.jsx)(ce,{},e)}function Be(e){return(0,W.jsx)(`div`,{className:`h-8 w-[4.5rem] shrink-0 animate-pulse rounded-full bg-surface-hover motion-reduce:animate-none dark:bg-surface-active/50`},e)}function Ve(e){let t=(0,oe.c)(131),{vm:n}=e,{sk:r,hasToken:i,error:o,actionFeedback:s,mainTab:c,setMainTab:l,setSourceFilter:u,builtinTabStats:d,userTabStats:f,catalogDisabledCount:p,catalogStatusFilter:m,setCatalogStatusFilter:h,marketSort:g,setMarketSort:_,marketBrowseProvider:v,setMarketBrowseProvider:y,registeredProviders:b,filterLabel:x,inSettingsShell:C,searchInputActive:w,resultTab:T,setResultTab:E,aggregatedTabCounts:D,aggregatedProviderStatus:O}=n;if(!i){let e;t[0]===n?e=t[1]:(e=(0,W.jsx)(We,{vm:n}),t[0]=n,t[1]=e);let i;t[2]===r.needToken?i=t[3]:(i=(0,W.jsx)(`div`,{className:`mx-auto w-full max-w-app-main px-4 py-16 text-center text-sm text-fg-muted sm:px-8`,children:r.needToken}),t[2]=r.needToken,t[3]=i);let a;return t[4]!==e||t[5]!==i?(a=(0,W.jsxs)(W.Fragment,{children:[e,i]}),t[4]=e,t[5]=i,t[6]=a):a=t[6],a}let k;t[7]===n?k=t[8]:(k=(0,W.jsx)(We,{vm:n}),t[7]=n,t[8]=k);let A;t[9]!==s||t[10]!==o?(A=s?(0,W.jsx)(`div`,{role:`status`,"aria-live":`polite`,className:a(`rounded-xl border px-3 py-2 text-sm`,s.kind===`success`?`border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900/40 dark:bg-emerald-950/40 dark:text-emerald-200`:`border-red-200 bg-red-50 text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200`),children:s.message}):o?(0,W.jsx)(`div`,{className:`rounded-xl border border-edge bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-edge dark:bg-red-950/40 dark:text-red-300`,role:`alert`,children:o}):null,t[9]=s,t[10]=o,t[11]=A):A=t[11];let j;t[12]!==C||t[13]!==n.loading||t[14]!==n.mainTab||t[15]!==n.onReloadClick||t[16]!==n.searchQuery||t[17]!==n.setInstallOpen||t[18]!==n.setPendingFile||t[19]!==n.setSearchQuery||t[20]!==n.sk?(j=C?(0,W.jsx)(`div`,{className:`flex flex-col gap-3 border-b border-edge-subtle pb-4 dark:border-edge-subtle sm:flex-row sm:flex-wrap sm:items-center sm:justify-end`,children:(0,W.jsx)(se,{loading:n.loading,onReloadClick:n.onReloadClick,searchQuery:n.searchQuery,setSearchQuery:n.setSearchQuery,mainTab:n.mainTab,sk:n.sk,setPendingFile:n.setPendingFile,setInstallOpen:n.setInstallOpen})}):null,t[12]=C,t[13]=n.loading,t[14]=n.mainTab,t[15]=n.onReloadClick,t[16]=n.searchQuery,t[17]=n.setInstallOpen,t[18]=n.setPendingFile,t[19]=n.setSearchQuery,t[20]=n.sk,t[21]=j):j=t[21];let M=r.skillsNavAria,N=c===`marketplace`,P=c===`marketplace`?`text-fg`:`text-fg-muted hover:text-fg`,F=c===`marketplace`&&`after:absolute after:bottom-0 after:left-1/2 after:h-0.5 after:w-9 after:-translate-x-1/2 after:rounded-full after:bg-accent`,I;t[22]!==P||t[23]!==F?(I=a(`relative max-w-full rounded-md px-3 py-2 text-left text-sm font-medium transition-colors sm:text-center`,P,F),t[22]=P,t[23]=F,t[24]=I):I=t[24];let R;t[25]===l?R=t[26]:(R=()=>l(`marketplace`),t[25]=l,t[26]=R);let z;t[27]!==r.tabMarketplace||t[28]!==N||t[29]!==I||t[30]!==R?(z=(0,W.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":N,className:I,onClick:R,children:r.tabMarketplace}),t[27]=r.tabMarketplace,t[28]=N,t[29]=I,t[30]=R,t[31]=z):z=t[31];let ee=c===`builtin`,te=c===`builtin`?`text-fg`:`text-fg-muted hover:text-fg`,V=c===`builtin`&&`after:absolute after:bottom-0 after:left-1/2 after:h-0.5 after:w-9 after:-translate-x-1/2 after:rounded-full after:bg-accent`,U;t[32]!==te||t[33]!==V?(U=a(`relative rounded-md px-3 py-2 text-sm font-medium transition-colors`,te,V),t[32]=te,t[33]=V,t[34]=U):U=t[34];let G;t[35]===l?G=t[36]:(G=()=>l(`builtin`),t[35]=l,t[36]=G);let K;t[37]!==d.enabled||t[38]!==d.total?(K=(0,W.jsxs)(`span`,{className:`ml-1 tabular-nums text-fg-muted`,children:[`(`,d.enabled,`/`,d.total,`)`]}),t[37]=d.enabled,t[38]=d.total,t[39]=K):K=t[39];let q;t[40]!==r.tabBuiltin||t[41]!==ee||t[42]!==U||t[43]!==G||t[44]!==K?(q=(0,W.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":ee,className:U,onClick:G,children:[r.tabBuiltin,K]}),t[40]=r.tabBuiltin,t[41]=ee,t[42]=U,t[43]=G,t[44]=K,t[45]=q):q=t[45];let J=c===`user`,Y=c===`user`?`text-fg`:`text-fg-muted hover:text-fg`,ce=c===`user`&&`after:absolute after:bottom-0 after:left-1/2 after:h-0.5 after:w-9 after:-translate-x-1/2 after:rounded-full after:bg-accent`,X;t[46]!==Y||t[47]!==ce?(X=a(`relative rounded-md px-3 py-2 text-sm font-medium transition-colors`,Y,ce),t[46]=Y,t[47]=ce,t[48]=X):X=t[48];let le;t[49]===l?le=t[50]:(le=()=>l(`user`),t[49]=l,t[50]=le);let ue;t[51]!==f.enabled||t[52]!==f.total?(ue=(0,W.jsxs)(`span`,{className:`ml-1 tabular-nums text-fg-muted`,children:[`(`,f.enabled,`/`,f.total,`)`]}),t[51]=f.enabled,t[52]=f.total,t[53]=ue):ue=t[53];let de;t[54]!==r.tabUser||t[55]!==J||t[56]!==X||t[57]!==le||t[58]!==ue?(de=(0,W.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":J,className:X,onClick:le,children:[r.tabUser,ue]}),t[54]=r.tabUser,t[55]=J,t[56]=X,t[57]=le,t[58]=ue,t[59]=de):de=t[59];let Z;t[60]!==r.skillsNavAria||t[61]!==z||t[62]!==q||t[63]!==de?(Z=(0,W.jsxs)(`div`,{className:`flex flex-wrap gap-x-1 gap-y-1`,role:`tablist`,"aria-label":M,children:[z,q,de]}),t[60]=r.skillsNavAria,t[61]=z,t[62]=q,t[63]=de,t[64]=Z):Z=t[64];let fe=c===`user`?`flex-nowrap overflow-x-auto pb-0.5 sm:justify-end`:`flex-wrap sm:justify-end`,Q;t[65]===fe?Q=t[66]:(Q=a(`flex min-h-9 min-w-0 items-center gap-2`,fe),t[65]=fe,t[66]=Q);let me;t[67]!==x||t[68]!==c||t[69]!==u||t[70]!==r.filterAll||t[71]!==r.filterExtra||t[72]!==r.filterGlobal||t[73]!==r.filterWorkspace?(me=c===`user`?(0,W.jsxs)(ne,{children:[(0,W.jsx)(re,{asChild:!0,children:(0,W.jsxs)(`button`,{type:`button`,className:a(`inline-flex h-9 min-h-9 min-w-[9rem] shrink-0 items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 text-xs font-medium text-fg shadow-surface`,B.transition,B.focusRingPanel),children:[(0,W.jsx)(S,{className:`size-3.5 text-fg-muted`,strokeWidth:1.75,"aria-hidden":!0}),(0,W.jsx)(`span`,{children:x}),(0,W.jsx)(L,{className:`size-3.5 text-fg-subtle`,strokeWidth:1.75,"aria-hidden":!0})]})}),(0,W.jsx)(ie,{children:(0,W.jsx)(ae,{className:`z-50 min-w-[10rem] rounded-xl border border-edge bg-surface-panel p-1 shadow-popover dark:border-edge`,sideOffset:6,align:`end`,children:[`all`,`global`,`workspace`,`extra`].map(e=>(0,W.jsx)(H,{className:a(`cursor-pointer rounded-lg px-3 py-2 text-sm text-fg outline-none`,`hover:bg-surface-hover data-[highlighted]:bg-surface-hover`),onSelect:()=>u(e),children:e===`all`?r.filterAll:e===`global`?r.filterGlobal:e===`workspace`?r.filterWorkspace:r.filterExtra},e))})})]}):null,t[67]=x,t[68]=c,t[69]=u,t[70]=r.filterAll,t[71]=r.filterExtra,t[72]=r.filterGlobal,t[73]=r.filterWorkspace,t[74]=me):me=t[74];let he;t[75]!==O||t[76]!==D||t[77]!==c||t[78]!==v||t[79]!==g||t[80]!==b||t[81]!==T||t[82]!==w||t[83]!==y||t[84]!==_||t[85]!==E||t[86]!==r.marketplaceBrowseSwitchAria||t[87]!==r.marketplaceLoadFailed||t[88]!==r.marketplaceResultsTabAll||t[89]!==r.marketplaceResultsTabsAria||t[90]!==r.marketplaceSortDownloads||t[91]!==r.marketplaceSortNewest?(he=c===`marketplace`?w?(0,W.jsx)(`div`,{className:`inline-flex h-9 shrink-0 rounded-lg border border-edge bg-surface-panel p-0.5 shadow-surface`,role:`tablist`,"aria-label":r.marketplaceResultsTabsAria,children:[`all`,...b.map(Ue)].map(e=>{let t=T===e,n=e===`all`?r.marketplaceResultsTabAll:b.find(t=>t.id===e)?.displayName??e,i=D[e]??0,o=e===`all`?null:O[e];return(0,W.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":t,className:a(`inline-flex items-center gap-1 rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors`,B.focusRingPanel,t?`bg-fg text-surface-panel dark:bg-fg dark:text-surface-base`:`text-fg-muted hover:text-fg`),onClick:()=>E(e),title:o===`error`?`${n} · ${r.marketplaceLoadFailed}`:void 0,children:[(0,W.jsx)(`span`,{children:n}),o===`loading`?(0,W.jsx)(`span`,{className:a(`inline-block size-1.5 animate-pulse rounded-full motion-reduce:animate-none`,t?`bg-surface-panel/70`:`bg-fg-muted/60`),"aria-hidden":!0}):o===`error`?(0,W.jsx)(`span`,{className:`inline-block size-1.5 rounded-full bg-red-500`,"aria-hidden":!0}):(0,W.jsx)(`span`,{className:`tabular-nums opacity-70`,children:i})]},e)})}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`inline-flex h-9 shrink-0 rounded-lg border border-edge bg-surface-panel p-0.5 shadow-surface`,role:`group`,"aria-label":r.marketplaceBrowseSwitchAria,children:b.map(e=>{let t=v===e.id;return(0,W.jsx)(`button`,{type:`button`,className:a(`rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors`,B.focusRingPanel,t?`bg-fg text-surface-panel dark:bg-fg dark:text-surface-base`:`text-fg-muted hover:text-fg`),"aria-pressed":t,onClick:()=>y(e.id),children:e.displayName},e.id)})}),(0,W.jsxs)(ne,{children:[(0,W.jsx)(re,{asChild:!0,children:(0,W.jsxs)(`button`,{type:`button`,className:a(`inline-flex h-9 min-h-9 min-w-[9rem] shrink-0 items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 text-xs font-medium text-fg shadow-surface`,B.transition,B.focusRingPanel),children:[(0,W.jsx)(S,{className:`size-3.5 text-fg-muted`,strokeWidth:1.75,"aria-hidden":!0}),(0,W.jsx)(`span`,{children:g===`newest`?r.marketplaceSortNewest:r.marketplaceSortDownloads}),(0,W.jsx)(L,{className:`size-3.5 text-fg-subtle`,strokeWidth:1.75,"aria-hidden":!0})]})}),(0,W.jsx)(ie,{children:(0,W.jsxs)(ae,{className:`z-50 min-w-[10rem] rounded-xl border border-edge bg-surface-panel p-1 shadow-popover dark:border-edge`,sideOffset:6,align:`end`,children:[(0,W.jsx)(H,{className:a(`cursor-pointer rounded-lg px-3 py-2 text-sm text-fg outline-none`,`hover:bg-surface-hover data-[highlighted]:bg-surface-hover`),onSelect:()=>_(`downloads`),children:r.marketplaceSortDownloads}),(0,W.jsx)(H,{className:a(`cursor-pointer rounded-lg px-3 py-2 text-sm text-fg outline-none`,`hover:bg-surface-hover data-[highlighted]:bg-surface-hover`),onSelect:()=>_(`newest`),children:r.marketplaceSortNewest})]})})]})]}):null,t[75]=O,t[76]=D,t[77]=c,t[78]=v,t[79]=g,t[80]=b,t[81]=T,t[82]=w,t[83]=y,t[84]=_,t[85]=E,t[86]=r.marketplaceBrowseSwitchAria,t[87]=r.marketplaceLoadFailed,t[88]=r.marketplaceResultsTabAll,t[89]=r.marketplaceResultsTabsAria,t[90]=r.marketplaceSortDownloads,t[91]=r.marketplaceSortNewest,t[92]=he):he=t[92];let ge;t[93]!==p||t[94]!==m||t[95]!==c||t[96]!==h||t[97]!==r.filterAll||t[98]!==r.filterDisabledOnly||t[99]!==r.filterDisabledOnlyAria?(ge=c!==`marketplace`&&p>0?(0,W.jsx)(`button`,{type:`button`,className:a(`inline-flex h-9 shrink-0 items-center rounded-lg border px-2.5 text-xs font-medium transition-colors`,B.focusRingPanel,m===`disabled`?`border-fg bg-fg text-surface-panel dark:border-fg dark:bg-fg dark:text-surface-base`:`border-amber-300/80 bg-amber-50/90 text-amber-950 hover:border-amber-400 dark:border-amber-700/60 dark:bg-amber-950/40 dark:text-amber-100`),"aria-pressed":m===`disabled`,"aria-label":r.filterDisabledOnlyAria,onClick:()=>h(He),children:m===`disabled`?r.filterAll:Se(r.filterDisabledOnly,{count:p})}):c===`builtin`?(0,W.jsx)(`div`,{className:`h-9 min-w-[9rem] shrink-0`,"aria-hidden":!0}):null,t[93]=p,t[94]=m,t[95]=c,t[96]=h,t[97]=r.filterAll,t[98]=r.filterDisabledOnly,t[99]=r.filterDisabledOnlyAria,t[100]=ge):ge=t[100];let _e;t[101]!==Q||t[102]!==me||t[103]!==he||t[104]!==ge?(_e=(0,W.jsxs)(`div`,{className:Q,children:[me,he,ge]}),t[101]=Q,t[102]=me,t[103]=he,t[104]=ge,t[105]=_e):_e=t[105];let ve;t[106]!==Z||t[107]!==_e?(ve=(0,W.jsxs)(`div`,{className:`flex flex-col gap-3 border-b border-edge-subtle pb-3 sm:flex-row sm:items-center sm:justify-between dark:border-edge-subtle`,children:[Z,_e]}),t[106]=Z,t[107]=_e,t[108]=ve):ve=t[108];let ye;t[109]!==c||t[110]!==n?(ye=c===`marketplace`?(0,W.jsx)($,{...n}):(0,W.jsx)(pe,{...n}),t[109]=c,t[110]=n,t[111]=ye):ye=t[111];let be;t[112]!==ve||t[113]!==ye?(be=(0,W.jsxs)(`section`,{className:`flex flex-col gap-4`,children:[ve,ye]}),t[112]=ve,t[113]=ye,t[114]=be):be=t[114];let xe;t[115]!==A||t[116]!==j||t[117]!==be?(xe=(0,W.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6 sm:px-8`,children:[A,j,be]}),t[115]=A,t[116]=j,t[117]=be,t[118]=xe):xe=t[118];let Ce,we,Ee;t[119]===n?(Ce=t[120],we=t[121],Ee=t[122]):(Ce=(0,W.jsx)(Me,{...n}),we=(0,W.jsx)(Pe,{...n}),Ee=(0,W.jsx)(Te,{...n}),t[119]=n,t[120]=Ce,t[121]=we,t[122]=Ee);let De;t[123]!==xe||t[124]!==Ce||t[125]!==we||t[126]!==Ee?(De=(0,W.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col bg-surface-panel`,children:[xe,Ce,we,Ee]}),t[123]=xe,t[124]=Ce,t[125]=we,t[126]=Ee,t[127]=De):De=t[127];let Oe;return t[128]!==k||t[129]!==De?(Oe=(0,W.jsxs)(W.Fragment,{children:[k,De]}),t[128]=k,t[129]=De,t[130]=Oe):Oe=t[130],Oe}function He(e){return e===`disabled`?`all`:`disabled`}function Ue(e){return e.id}function We(e){let t=(0,oe.c)(17),{vm:n}=e,{sk:r,hasToken:i,loading:a,onReloadClick:o,searchQuery:s,setSearchQuery:c,mainTab:l,setPendingFile:u,setInstallOpen:d,inSettingsShell:f}=n,p=k(Ke),m=k(Ge),h;t[0]!==a||t[1]!==l||t[2]!==o||t[3]!==s||t[4]!==d||t[5]!==u||t[6]!==c||t[7]!==r?(h=(0,W.jsx)(se,{loading:a,onReloadClick:o,searchQuery:s,setSearchQuery:c,mainTab:l,sk:r,setPendingFile:u,setInstallOpen:d}),t[0]=a,t[1]=l,t[2]=o,t[3]=s,t[4]=d,t[5]=u,t[6]=c,t[7]=r,t[8]=h):h=t[8];let g=h,_,v;return t[9]!==m||t[10]!==i||t[11]!==f||t[12]!==p||t[13]!==r.title||t[14]!==g?(_=()=>!i||f?(m(),()=>m()):(p({startExtra:null,main:(0,W.jsx)(`div`,{className:`min-w-0`,children:(0,W.jsx)(`h1`,{className:`truncate text-base font-semibold tracking-tight text-fg`,children:r.title})}),end:g}),()=>m()),v=[m,i,f,p,g,r.title],t[9]=m,t[10]=i,t[11]=f,t[12]=p,t[13]=r.title,t[14]=g,t[15]=_,t[16]=v):(_=t[15],v=t[16]),(0,U.useLayoutEffect)(_,v),null}function Ge(e){return e.clearPageHeader}function Ke(e){return e.setPageHeader}async function qe(e,t){let n=new FormData;n.append(`file`,e),t.skillId&&n.append(`skillId`,t.skillId),t.overwrite&&n.append(`overwrite`,`true`);let r=c.getState().token,i=new Headers;r&&i.set(`Authorization`,`Bearer ${r}`);let a=await fetch(l(`/api/skills/upload`),{method:`POST`,headers:i,body:n});a.status===401&&c.getState().onUnauthorized();let o=await a.json().catch(()=>({}));if(!a.ok)throw Error(o.error||`HTTP ${a.status}`);if(!o.payload?.skillId)throw Error(`Invalid response`);return o.payload}async function Je(e){let t=await u(l(`/api/skills/${encodeURIComponent(e)}`),{method:`DELETE`});if(!t.ok)throw Error(await E(t))}async function Ye(e,t){let n=await u(l(`/api/skills/enabled`),{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({skillName:e,enabled:t})});if(!n.ok)throw Error(await E(n))}function Xe(e,t){t?.trim()&&e.set(`provider`,t.trim())}async function Ze(e){let t=new URLSearchParams;Xe(t,e?.provider);let n=t.toString(),r=await u(l(`/api/skills/marketplace/categories${n?`?${n}`:``}`),{cache:`no-store`});if(!r.ok)throw Error(await E(r));let i=await r.json();if(!i.payload||!Array.isArray(i.payload.items))throw Error(`Invalid response`);return{items:i.payload.items}}async function Qe(e){let t=new URLSearchParams;e.q?.trim()&&t.set(`q`,e.q.trim()),e.page!=null&&t.set(`page`,String(e.page)),e.pageSize!=null&&t.set(`pageSize`,String(e.pageSize)),e.sort&&t.set(`sort`,e.sort),e.category?.trim()&&t.set(`category`,e.category.trim()),Xe(t,e.provider);let n=t.toString(),r=await u(l(`/api/skills/marketplace${n?`?${n}`:``}`),{cache:`no-store`,signal:e.signal});if(!r.ok)throw Error(await E(r));let i=await r.json();if(!i.payload?.items||!i.payload.meta)throw Error(`Invalid response`);return i.payload}async function $e(e,t){let n=encodeURIComponent(e),r=new URLSearchParams;Xe(r,t?.provider);let i=r.toString(),a=await u(l(`/api/skills/marketplace/packages/${n}${i?`?${i}`:``}`),{cache:`no-store`});if(!a.ok)throw Error(await E(a));let o=(await a.json()).payload;if(!o?.name||!o.skillDocPreview||typeof o.skillDocPreview.name!=`string`||typeof o.skillDocPreview.description!=`string`||typeof o.skillDocPreview.bodyMarkdown!=`string`||typeof o.skillDocPreview.disableModelInvocation!=`boolean`||!o.skillDocPreview.metadata||typeof o.skillDocPreview.metadata!=`object`||typeof o.skillDocPreview.metadata.name!=`string`||typeof o.skillDocPreview.metadata.description!=`string`)throw Error(`Invalid response`);return o}async function et(e){let t=await u(l(`/api/skills/marketplace/install`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok)throw Error(await E(t));let n=await t.json();if(!n.payload?.skillId)throw Error(n.error||`Invalid response`);return n.payload}async function tt(e){let t=await u(l(`/api/skills/${encodeURIComponent(e)}/content`),{cache:`no-store`});if(!t.ok)throw Error(await E(t));let n=(await t.json()).payload;if(!n||typeof n.name!=`string`||typeof n.description!=`string`||typeof n.bodyMarkdown!=`string`||typeof n.disableModelInvocation!=`boolean`||!n.metadata||typeof n.metadata!=`object`||typeof n.metadata.name!=`string`||typeof n.metadata.description!=`string`)throw Error(`Invalid response`);return n}async function nt(){let e=await u(l(`/api/skills/marketplace/provider`),{cache:`no-store`});if(!e.ok)throw Error(await E(e));let t=await e.json();if(!t.payload?.provider)throw Error(`Invalid response`);return t.payload}async function rt(){let e=await u(l(`/api/skills/marketplace/providers`),{cache:`no-store`});if(!e.ok)throw Error(await E(e));let t=await e.json();if(!t.payload?.providers)throw Error(`Invalid response`);return t.payload}async function it(t){let n=t.name.toLowerCase();if(n.endsWith(`.zip`))return t;if(n.endsWith(`skill.md`)){let n=(await i(async()=>{let{default:t}=await import(`./jszip.min-DT31yWkU.js`).then(t=>e(t.default,1));return{default:t}},__vite__mapDeps([0,1]))).default,r=new n;r.file(`SKILL.md`,await t.arrayBuffer());let a=await r.generateAsync({type:`blob`,compression:`DEFLATE`}),o=t.name.replace(/\.md$/i,``).replace(/\s+/g,`-`)||`skill`;return new File([a],`${o}.zip`,{type:`application/zip`})}throw Error(`invalid`)}function at(){let e=o(s(e=>e.language)).skills,t=!!c(e=>e.token),n=C(),[r,i]=m(),a=r.get(`mprov`)?.trim()||null,[l,u]=(0,U.useState)(!1),[d,f]=(0,U.useState)(null),[p,h]=(0,U.useState)(!1),g=r.get(`q`)??``,_=r.get(`tab`),x=r.get(`source`),S=le.has(_)?_:`marketplace`,w=ue.has(x)?x:`all`,[T,E]=(0,U.useState)(g),[D]=b(T,250),O=D.trim(),k=T.trim().length>0,A=O.length>0,[j,M]=(0,U.useState)(null),[N,P]=(0,U.useState)(S),[F,I]=(0,U.useState)(w),[L,R]=(0,U.useState)(``),[z,B]=(0,U.useState)(`all`),[te,ne]=(0,U.useState)(!1),[H,re]=(0,U.useState)(null),[ie,ae]=(0,U.useState)(!1),[oe,W]=(0,U.useState)(!1),[se,G]=(0,U.useState)(null),[K,q]=(0,U.useState)(null),[J,Y]=(0,U.useState)({}),[ce,X]=(0,U.useState)(!1),[Z,pe]=(0,U.useState)(`catalog`),[Q,me]=(0,U.useState)(``),[he,ge]=(0,U.useState)(null),[_e,ve]=(0,U.useState)(null),[ye,xe]=(0,U.useState)(!1),[Se,Ce]=(0,U.useState)(null),[Te,Ee]=(0,U.useState)(`downloads`),[De,Oe]=(0,U.useState)(1),[ke,Ae]=(0,U.useState)(null),[je,Me]=(0,U.useState)(null),[Ne,Pe]=(0,U.useState)(``),[$,Fe]=(0,U.useState)(()=>a),[Ie,Le]=(0,U.useState)(0),Re=(0,U.useRef)(null),ze=(0,U.useRef)(a),Be=(0,U.useRef)(null),Ve=(0,U.useRef)(``),He=(0,U.useRef)(null),[Ue,We]=(0,U.useState)({query:``,byProvider:{}}),[Ge,Ke]=(0,U.useState)(`all`),Xe=(0,U.useRef)(0),at=(0,U.useRef)(O);at.current!==O&&(at.current=O,Ke(e=>e===`all`?e:`all`));let ot=y(()=>v().then(e=>e.catalog.map(we)),[t],{enabled:t,initial:[],errorData:[]}),{data:st,loading:ct,setData:lt}=ot,ut=y(async()=>{try{let{providers:e,current:t}=await rt();return{providers:e.map(e=>({id:e.id,displayName:e.displayName})),current:t}}catch{try{return{providers:[],current:(await nt()).provider}}catch{return{providers:[],current:`skillhub`}}}},[t,Ie],{enabled:t,initial:{providers:[],current:null}}),dt=l||ct,ft=ut.data.providers;(0,U.useEffect)(()=>{let e=()=>Le(e=>e+1);return window.addEventListener(`config-reload`,e),()=>window.removeEventListener(`config-reload`,e)},[]);let pt=r.toString(),mt=(0,U.useRef)(pt);if(mt.current!==pt){mt.current=pt;let e=r.get(`q`)??``,t=r.get(`tab`),n=r.get(`source`),i=le.has(t)?t:`marketplace`,a=ue.has(n)?n:`all`;E(t=>t===e?t:e),P(e=>e===i?e:i),I(e=>e===a?e:a);let o=r.get(`mcat`)??``;Pe(i===`marketplace`?e=>e===o?e:o:``)}let ht=(0,U.useRef)(t);!t&&ht.current&&(Fe(null),Re.current=null),ht.current=t,t&&a&&ze.current!==a&&(ze.current=a,Fe(a)),t&&a==null&&ut.data.current&&ut.data.current!==Be.current&&(Be.current=ut.data.current,Fe(e=>e??ut.data.current));let gt=`${O}|${Te}|${N}|${Ne}|${$??``}|${Ge}`;Ve.current!==gt&&(Ve.current=gt,Oe(1)),N===`marketplace`&&$&&He.current!=null&&He.current!==$&&Pe(``),He.current=$;let _t=y(()=>Qe({page:De,pageSize:20,sort:Te,category:Ne.trim()||void 0,provider:$}),[t,N,Ne,De,Te,A,$],{enabled:t&&N===`marketplace`&&!!$&&!A,initial:null,errorData:null});(0,U.useLayoutEffect)(()=>{!t||!k||P(e=>e===`marketplace`?e:`marketplace`)},[t,k]),(0,U.useEffect)(()=>{if(!t||!A||N!==`marketplace`||ft.length===0)return;let n=++Xe.current,r={};for(let e of ft)r[e.id]={status:`loading`,rows:[]};We({query:O,byProvider:r});let i=[],a=[];for(let t of ft){let r=new AbortController;i.push(r);let o=window.setTimeout(()=>{r.abort(new DOMException(`Adapter timed out`,`TimeoutError`))},8e3);a.push(o),Qe({provider:t.id,q:O,page:1,pageSize:40,sort:Te,signal:r.signal}).then(e=>{if(window.clearTimeout(o),n!==Xe.current)return;let r=e.items.map(e=>({...e,providerId:t.id}));We(e=>({...e,byProvider:{...e.byProvider,[t.id]:{status:`ok`,rows:r}}}))}).catch(r=>{if(window.clearTimeout(o),n!==Xe.current)return;let i=r instanceof DOMException&&(r.name===`TimeoutError`||r.name===`AbortError`)?e.marketplaceLoadFailed:r instanceof Error?r.message:e.marketplaceLoadFailed;We(e=>({...e,byProvider:{...e.byProvider,[t.id]:{status:`error`,rows:[],error:i}}}))})}return()=>{for(let e of a)window.clearTimeout(e);for(let e of i)e.abort()}},[t,N,A,O,ft,Te,e.marketplaceLoadFailed]);let vt=y(()=>Ze({provider:$}).then(e=>e.items),[t,N,$],{enabled:t&&N===`marketplace`&&!!$,initial:[],errorData:[]}),yt=(0,U.useMemo)(()=>{if(!A||Ue.query!==O)return[];let e=ft.map(e=>({id:e.id,rows:[...Ue.byProvider[e.id]?.rows??[]]})),t=[];for(;e.some(e=>e.rows.length>0);)for(let n of e)n.rows.length>0&&t.push(n.rows.shift());let n=new Map;for(let e of t){let t=[(e.id??``).toLowerCase().trim(),(e.name??``).toLowerCase().trim(),(e.author?.username??``).toLowerCase().trim()].join(`|`),r=n.get(t);if(!r){n.set(t,{...e,additionalSources:[]});continue}if(e.providerId&&e.providerId!==r.providerId){let t=r.additionalSources??[];t.some(t=>t.providerId===e.providerId)||(t.push({providerId:e.providerId,sourceLabel:e.sourceLabel}),r.additionalSources=t)}}return Array.from(n.values())},[A,O,Ue,ft]),bt=(0,U.useMemo)(()=>{if(!A)return{};let e={all:yt.length};for(let t of ft)e[t.id]=yt.filter(e=>e.providerId===t.id||(e.additionalSources??[]).some(e=>e.providerId===t.id)).length;return e},[A,yt,ft]),xt=(0,U.useMemo)(()=>A?Ge===`all`?yt:yt.filter(e=>e.providerId===Ge||(e.additionalSources??[]).some(e=>e.providerId===Ge)):[],[A,yt,Ge]),St=(0,U.useMemo)(()=>{if(!A)return{};let e={};for(let t of ft)e[t.id]=Ue.byProvider[t.id]?.status??`loading`;return e},[A,Ue,ft]),Ct=(0,U.useMemo)(()=>Object.values(St).some(e=>e===`loading`),[St]),wt=(0,U.useMemo)(()=>{if(!A)return!1;let e=Object.values(St);return e.length>0&&e.every(e=>e===`error`)},[A,St]),Tt=(0,U.useMemo)(()=>{if(!A||yt.length===0&&Ct)return null;let e=xt.length,t=(De-1)*20;return{items:xt.slice(t,t+20),meta:{page:De,pageSize:20,total:e,totalPages:Math.max(1,Math.ceil(e/20))},provider:Ge}},[A,yt,Ct,xt,De,Ge]),Et=N===`marketplace`?k?A?Tt:null:_t.data:null,Dt=N===`marketplace`?k?A?Ct:!0:_t.loading:!1,Ot=A?wt?e.marketplaceLoadFailed:null:_t.error instanceof Error?_t.error.message:_t.error?e.marketplaceLoadFailed:null,kt=N===`marketplace`?vt.data:[],At=N===`marketplace`?vt.loading:!1,jt=vt.error instanceof Error?vt.error.message:vt.error?e.marketplaceCategoriesFailed:null;Ne.trim()&&kt.length>0&&!kt.some(e=>e.id===Ne)&&Pe(``);let Mt=(0,U.useCallback)(async t=>{let n=t?.silent===!0;n||u(!0),f(null);try{return lt((await v()).catalog.map(we)),{ok:!0}}catch(t){let n=t instanceof Error?t.message:e.loadFailed;return f(n),{ok:!1,message:n}}finally{n||u(!1)}},[lt,e.loadFailed]),Nt=!l&&ot.error?ot.error instanceof Error?ot.error.message:e.loadFailed:null,Pt=d??Nt;(0,U.useEffect)(()=>{i(e=>{let t=new URLSearchParams(e);return O?t.set(`q`,O):t.delete(`q`),N===`marketplace`?t.delete(`tab`):t.set(`tab`,N),F===`all`?t.delete(`source`):t.set(`source`,F),N===`marketplace`&&Ne.trim()?t.set(`mcat`,Ne.trim()):t.delete(`mcat`),N===`marketplace`&&$?t.set(de,$):t.delete(de),t.toString()===e.toString()?e:t},{replace:!0})},[N,Ne,$,O,i,F]);let Ft=(0,U.useCallback)((e,t,n=5e3)=>{M({kind:e,message:t}),window.setTimeout(()=>M(null),n)},[]),It=(0,U.useCallback)(async t=>{pe(`catalog`),X(!0),me(t.name),ge(null),ve(null),Ce(null),xe(!0);try{let e=await tt(t.name);ge(e),me(e.name)}catch(t){ge(null),Ce(t instanceof Error?t.message:e.detailLoadFailed)}finally{xe(!1)}},[e.detailLoadFailed]),Lt=(0,U.useCallback)(async(t,n,r)=>{let i=r?.trim()||$;if(i){Re.current=i,pe(`store`),X(!0),me(n?.trim()||t),ge(null),ve(null),Ce(null),xe(!0);try{let e=await $e(t,{provider:i});me(e.name),ve(e.skillDocPreview)}catch(t){ve(null),Ce(t instanceof Error?t.message:e.detailLoadFailed)}finally{xe(!1)}}},[$,e.detailLoadFailed]),Rt=(0,U.useCallback)(async(t,n)=>{q(t),Y(e=>({...e,[t]:n})),M(null);try{return await Ye(t,n),await Mt({silent:!0}),!0}catch(n){return Y(e=>{let{[t]:n,...r}=e;return r}),Ft(`error`,n instanceof Error?n.message:e.skillToggleFailed),!1}finally{q(null),Y(e=>{let{[t]:n,...r}=e;return r})}},[Mt,Ft,e.skillToggleFailed]),zt=(0,U.useCallback)(async()=>{M(null),u(!0),f(null);try{await V()}catch(t){f(t instanceof Error?t.message:e.reloadFailed),u(!1);return}await Mt()},[Mt,e.reloadFailed]),Bt=(0,U.useMemo)(()=>{let e=T.trim().toLowerCase();return e?st.filter(t=>[t.name,t.description,t.directoryId,t.path,t.source,t.hub?.source,t.hub?.ref].filter(Boolean).join(` `).toLowerCase().includes(e)):st},[st,T]),Vt=(0,U.useMemo)(()=>{let e=Bt.filter(e=>e.source===`builtin`);return{total:e.length,enabled:e.filter(e=>J[e.name]??e.enabled).length}},[Bt,J]),Ht=(0,U.useMemo)(()=>{let e=Bt.filter(e=>e.source!==`builtin`);return{total:e.length,enabled:e.filter(e=>J[e.name]??e.enabled).length}},[Bt,J]),Ut=(0,U.useMemo)(()=>Q?st.find(e=>e.name===Q):void 0,[st,Q]),Wt=Ut==null?!0:J[Q]??Ut.enabled,Gt=Ut?.directoryId??null,Kt=Ut?.managed??!1,qt=(0,U.useMemo)(()=>Z!==`store`||!Q?null:be(Re.current??$,Q),[Z,Q,$]),Jt=(0,U.useMemo)(()=>{let e=Bt;return N===`builtin`?e=e.filter(e=>e.source===`builtin`):N===`user`&&(e=e.filter(e=>e.source!==`builtin`),F!==`all`&&(e=e.filter(e=>e.source===F))),e},[Bt,N,F]),Yt=(0,U.useMemo)(()=>{let e=new Set,t=[];for(let n of Jt){let r=n.category;!r||e.has(r)||(e.add(r),t.push(r))}return t.sort((e,t)=>{let n=fe.indexOf(e),r=fe.indexOf(t);return n>=0&&r>=0?n-r:n>=0?-1:r>=0?1:e.localeCompare(t)})},[Jt]),Xt=(0,U.useCallback)(t=>e.categoryLabel?.[t]||t,[e.categoryLabel]),Zt=(0,U.useMemo)(()=>L?Jt.filter(e=>e.category===L):Jt,[Jt,L]);(0,U.useEffect)(()=>{B(`all`)},[N]);let Qt=(0,U.useCallback)(e=>J[e.name]??e.enabled,[J]),$t=(0,U.useMemo)(()=>Zt.filter(e=>!Qt(e)).length,[Zt,Qt]),en=(0,U.useMemo)(()=>{let e=Zt;return z===`disabled`&&(e=e.filter(e=>!Qt(e))),[...e].toSorted((e,t)=>{let n=Qt(e);return n===Qt(t)?e.name.localeCompare(t.name,void 0,{sensitivity:`base`}):n?-1:1})},[Zt,z,Qt]),tn=async t=>{M(null),h(!0),f(null);try{let n;try{n=await it(t)}catch{f(e.invalidFile),Ft(`error`,e.invalidFile);return}await qe(n,{overwrite:!0}),await Mt(),Ft(`success`,e.installSuccess),ne(!1),re(null),P(`user`)}catch(t){f(t instanceof Error?t.message:e.uploadFailed),Ft(`error`,t instanceof Error?t.message:e.uploadFailed)}finally{h(!1)}},nn=()=>{H&&tn(H)},rn=e=>{let t=e.target.files?.[0];e.target.value=``,t&&re(t)},an=e=>{e.preventDefault(),e.stopPropagation(),e.dataTransfer.types.includes(`Files`)&&(ae(!0),e.dataTransfer.dropEffect=`copy`)},on=e=>{let t=e.currentTarget,n=e.relatedTarget;n&&t.contains(n)||ae(!1)},sn=e=>{e.preventDefault(),e.stopPropagation(),ae(!1);let t=e.dataTransfer?.files?.[0];t&&re(t)},cn=t=>{switch(t){case`builtin`:return e.source.builtin;case`workspace`:return e.source.workspace;case`global`:return e.source.global;case`extra`:return e.source.extra;default:return t}},ln=async()=>{let t=se;if(W(!1),G(null),t){M(null);try{await Je(t),await Mt()}catch(t){f(t instanceof Error?t.message:e.deleteFailed)}}},un=(0,U.useCallback)(e=>st.some(t=>t.name===e),[st]),dn=(0,U.useCallback)(async t=>{let r=(t?.name??Q).trim();if(!r)return;let i=t?.source??Z;if(i===`catalog`){let e=st.find(e=>e.name===r);if(e&&!(J[e.name]??e.enabled))return}M(null);let a=i===`store`&&!un(r);Me(r);try{if(a){let e=t?.providerOverride?.trim()||Re.current||$;await et({name:r,overwrite:!1,...e?{provider:e}:{}}),await Mt({silent:!0})}X(!1),n(`/chat/new?skill=${encodeURIComponent(r)}`)}catch(t){Ft(`error`,t instanceof Error?t.message:e.uploadFailed)}finally{Me(null)}},[st,Q,Z,J,un,Mt,n,Ft,e.uploadFailed,$]),fn=(0,U.useCallback)(async(t,n)=>{let r=un(t);if(!(r&&!window.confirm(e.marketplaceReinstallConfirm))){M(null),Ae(t);try{let i=n?.providerOverride?.trim()||(n?.useDetailProvider?Re.current??$:$);await et({name:t,overwrite:r,...i?{provider:i}:{}}),await Mt({silent:!0}),Ft(`success`,e.installSuccess),X(!1),P(`user`)}catch(t){Ft(`error`,t instanceof Error?t.message:e.uploadFailed)}finally{Ae(null)}}},[un,Mt,$,Ft,e.installSuccess,e.marketplaceReinstallConfirm,e.uploadFailed]),pn=F===`all`?e.filterAll:F===`global`?e.filterGlobal:F===`workspace`?e.filterWorkspace:e.filterExtra,{pathname:mn}=ee();return{sk:e,hasToken:t,catalog:st,loading:dt,error:Pt,uploading:p,searchQuery:T,setSearchQuery:E,actionFeedback:j,mainTab:N,setMainTab:P,sourceFilter:F,setSourceFilter:I,builtinCategoryFilter:L,setBuiltinCategoryFilter:R,installOpen:te,setInstallOpen:ne,pendingFile:H,setPendingFile:re,dropActive:ie,setDropActive:ae,confirmOpen:oe,setConfirmOpen:W,confirmId:se,setConfirmId:G,togglingSkillName:K,enabledOverride:J,detailOpen:ce,setDetailOpen:X,detailSource:Z,setDetailSource:pe,detailTitle:Q,setDetailTitle:me,detailCatalogPreview:he,setDetailCatalogPreview:ge,detailMarketplacePreview:_e,setDetailMarketplacePreview:ve,detailLoading:ye,detailError:Se,setDetailError:Ce,marketSort:Te,setMarketSort:Ee,marketPage:De,setMarketPage:Oe,mpLoading:Dt,mpError:Ot,mpPayload:Et,searchActive:A,searchInputActive:k,resultTab:Ge,setResultTab:Ke,aggregatedTabCounts:bt,aggregatedProviderStatus:St,aggregatedAllFailed:wt,installingMarketName:ke,usingSkillInChatName:je,onUseSkillInChat:dn,marketCategoryId:Ne,setMarketCategoryId:Pe,mpCategories:kt,mpCategoriesError:jt,mpCategoriesLoading:At,marketBrowseProvider:$,setMarketBrowseProvider:Fe,registeredProviders:ft,builtinTabStats:Vt,userTabStats:Ht,detailEnabled:Wt,detailDirectoryId:Gt,detailManaged:Kt,detailExternalUrl:qt,filteredCatalog:Jt,builtinCategories:Yt,categoryFilteredCatalog:Zt,catalogDisplayRows:en,catalogDisabledCount:$t,catalogStatusFilter:z,setCatalogStatusFilter:B,resolveSkillEnabled:Qt,filterLabel:pn,inSettingsShell:mn.startsWith(`/settings/`),categoryLabel:Xt,onReloadClick:zt,openSkillDetail:It,openMarketplaceDetail:Lt,onSkillToggle:Rt,onInstallSubmit:nn,onFileInputChange:rn,onModalDragOver:an,onModalDragLeave:on,onModalDrop:sn,sourceLabel:cn,runDelete:ln,onMarketInstall:fn,isSkillInstalledByName:un}}function ot(){let e=(0,oe.c)(2),t=at(),n;return e[0]===t?n=e[1]:(n=(0,W.jsx)(Ve,{vm:t}),e[0]=t,e[1]=n),n}export{ot as SkillsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./cn-JdwAhgNB.js";import{t as a}from"./messages-Csef1aW7.js";import{t as o}from"./locale-store-DjbfSsfA.js";import{c as s}from"./fetch-Bs7in_4F.js";import{Di as c,Oi as l,Po as u,R as d,Ti as f,br as p,ki as m,z as h}from"./index-COkF54xv.js";import{c as g,i as _,n as v,r as y}from"./config-api-0o1WYdz2.js";function b(){return i(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,l,`dark:border-edge`)}function x(){return i(c,f)}var S=`h-auto shrink-0 px-2.5 py-1.5 text-xs font-medium`,C=n(),w=r();function T(e){let t=(0,C.c)(61),{sectionId:n,intro:r,vm:i,children:s,tabbed:c}=e,l=c===void 0?!1:c,d=o(E),f;t[0]===d?f=t[1]:(f=a(d),t[0]=d,t[1]=f);let p=f,h=p.agentSettings,g=p.settingsSections[n]??n;if(!i.hasToken){let e;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,w.jsx)(u,{className:`mt-0.5 size-5 shrink-0 text-fg-subtle`,strokeWidth:1.75}),t[2]=e):e=t[2];let n;t[3]===g?n=t[4]:(n=(0,w.jsx)(`h1`,{className:`text-base font-semibold text-fg`,children:g}),t[3]=g,t[4]=n);let r;t[5]===h.needToken?r=t[6]:(r=(0,w.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:h.needToken}),t[5]=h.needToken,t[6]=r);let i;return t[7]!==n||t[8]!==r?(i=(0,w.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:(0,w.jsxs)(`div`,{className:`flex items-start gap-3 rounded-2xl bg-surface-base p-6`,children:[e,(0,w.jsxs)(`div`,{children:[n,r]})]})}),t[7]=n,t[8]=r,t[9]=i):i=t[9],i}if(i.loading){let e,n;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,w.jsx)(`div`,{className:`h-8 w-48 animate-pulse rounded bg-surface-hover`}),n=(0,w.jsx)(`div`,{className:`mt-6 h-32 animate-pulse rounded-xl bg-surface-hover`}),t[10]=e,t[11]=n):(e=t[10],n=t[11]);let r;return t[12]===p.logs.loading?r=t[13]:(r=(0,w.jsxs)(`div`,{className:`mx-auto w-full max-w-app-main px-4 py-8`,children:[e,n,(0,w.jsx)(`p`,{className:`mt-4 text-sm text-fg-muted`,children:p.logs.loading})]}),t[12]=p.logs.loading,t[13]=r),r}if(!i.form){let e=i.error??i.fetchError??h.loadError,n;t[14]===e?n=t[15]:(n=(0,w.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e}),t[14]=e,t[15]=n);let r;t[16]===i?r=t[17]:(r=()=>void i.mutate(),t[16]=i,t[17]=r);let a;t[18]!==p.logs.refresh||t[19]!==r?(a=(0,w.jsx)(m,{type:`button`,variant:`secondary`,onClick:r,children:p.logs.refresh}),t[18]=p.logs.refresh,t[19]=r,t[20]=a):a=t[20];let o;return t[21]!==n||t[22]!==a?(o=(0,w.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:[n,a]}),t[21]=n,t[22]=a,t[23]=o):o=t[23],o}let _;t[24]===g?_=t[25]:(_=(0,w.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:g}),t[24]=g,t[25]=_);let v;t[26]!==h.sectionDesc||t[27]!==r||t[28]!==l?(v=l?(0,w.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:h.sectionDesc}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`p`,{className:`mt-1 text-sm leading-relaxed text-fg-muted`,children:r}),(0,w.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:h.sectionDesc})]}),t[26]=h.sectionDesc,t[27]=r,t[28]=l,t[29]=v):v=t[29];let y;t[30]!==_||t[31]!==v?(y=(0,w.jsxs)(`div`,{children:[_,v]}),t[30]=_,t[31]=v,t[32]=y):y=t[32];let b;t[33]!==h.saved||t[34]!==i.saveOk?(b=i.saveOk?(0,w.jsx)(`span`,{className:`text-sm text-fg-muted`,children:h.saved}):null,t[33]=h.saved,t[34]=i.saveOk,t[35]=b):b=t[35];let x=!i.dirty||i.saving,S;t[36]!==h.discard||t[37]!==x||t[38]!==i.discard?(S=(0,w.jsx)(m,{type:`button`,variant:`secondary`,disabled:x,onClick:i.discard,children:h.discard}),t[36]=h.discard,t[37]=x,t[38]=i.discard,t[39]=S):S=t[39];let T=!i.dirty||i.saving,D;t[40]===i?D=t[41]:(D=()=>void i.save(),t[40]=i,t[41]=D);let O=i.saving?h.saving:h.save,k;t[42]!==O||t[43]!==T||t[44]!==D?(k=(0,w.jsx)(m,{type:`button`,variant:`primary`,disabled:T,onClick:D,children:O}),t[42]=O,t[43]=T,t[44]=D,t[45]=k):k=t[45];let A;t[46]!==k||t[47]!==b||t[48]!==S?(A=(0,w.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-end gap-2`,children:[b,S,k]}),t[46]=k,t[47]=b,t[48]=S,t[49]=A):A=t[49];let j;t[50]!==A||t[51]!==y?(j=(0,w.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[y,A]}),t[50]=A,t[51]=y,t[52]=j):j=t[52];let M;t[53]===i.error?M=t[54]:(M=i.error?(0,w.jsx)(`div`,{className:`rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`,role:`alert`,children:i.error}):null,t[53]=i.error,t[54]=M);let N;t[55]===s?N=t[56]:(N=(0,w.jsx)(`div`,{className:`flex min-w-0 flex-col gap-5 pb-8`,children:s}),t[55]=s,t[56]=N);let P;return t[57]!==j||t[58]!==M||t[59]!==N?(P=(0,w.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[j,M,N]}),t[57]=j,t[58]=M,t[59]=N,t[60]=P):P=t[60],P}function E(e){return e.language}var D=e(t(),1),O=d();function k(e){let t=!!s(e=>e.token),[n,r]=(0,D.useReducer)(O,{form:null,baseline:null}),i=n.form,a=n.baseline,[o,c]=(0,D.useState)(!1),[l,u]=(0,D.useState)(null),[d,f]=(0,D.useState)(!1),m=(0,D.useRef)(!1),b=(0,D.useRef)(null),{data:x,error:S,isLoading:C,mutate:w}=p(t);h({enabled:t,parsed:(0,D.useMemo)(()=>x?.payload?.config===void 0?null:v(x.payload.config),[x]),dirty:m.current,trackedParsedRef:b,dispatch:r,onResetDirty:()=>{m.current=!1}});let T=!!(t&&C&&x===void 0&&!S),E=S instanceof Error?S.message:S?String(S):null,k=(0,D.useMemo)(()=>!i||!a?!1:JSON.stringify(i)!==JSON.stringify(a),[i,a]);return{hasToken:t,loading:T,fetchError:E,form:i,update:(0,D.useCallback)(e=>{m.current=!0,r({type:`patch`,patch:e})},[]),dirty:k,saving:o,saveOk:d,error:l,setError:u,save:(0,D.useCallback)(async()=>{if(!i||o)return!1;c(!0),u(null),f(!1);try{try{y(i.paramsJson)}catch(t){return u(t instanceof SyntaxError?e.advanced.paramsInvalidJson:t instanceof Error?t.message:e.advanced.paramsInvalidJson),!1}let t=g(i.typedModels,{invalidId:e.typedModelsInvalidId,duplicateId:e.typedModelsDuplicateId,invalidModel:e.typedModelsInvalidModel});return t?(u(t),!1):(await _(i),m.current=!1,r({type:`saved`,value:i}),f(!0),w(),!0)}catch(t){return u(t instanceof Error?t.message:e.saveError),!1}finally{c(!1)}},[e.saveError,i,w,o]),discard:(0,D.useCallback)(()=>{m.current=!1,r({type:`discard`}),f(!1),u(null)},[]),mutate:w}}export{x as a,b as i,T as n,S as r,k as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { JobData } from './types.js';
|
|
2
|
-
export interface JobsFile {
|
|
3
|
-
jobs: JobData[];
|
|
4
|
-
version: number;
|
|
5
|
-
}
|
|
6
|
-
export declare class CronPersistence {
|
|
7
|
-
private filePath;
|
|
8
|
-
private cache;
|
|
9
|
-
private dirty;
|
|
10
|
-
private saveTimeout;
|
|
11
|
-
private readonly debounceMs;
|
|
12
|
-
constructor(filePath: string);
|
|
13
|
-
/**
|
|
14
|
-
* Initialize the storage file
|
|
15
|
-
*/
|
|
16
|
-
initialize(): Promise<void>;
|
|
17
|
-
/**
|
|
18
|
-
* Load jobs from disk (with caching)
|
|
19
|
-
*/
|
|
20
|
-
load(): Promise<JobsFile>;
|
|
21
|
-
/**
|
|
22
|
-
* Save jobs to disk (debounced)
|
|
23
|
-
*/
|
|
24
|
-
save(data: JobsFile): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Force immediate save (sync to disk)
|
|
27
|
-
*/
|
|
28
|
-
flush(): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Get all jobs
|
|
31
|
-
*/
|
|
32
|
-
getJobs(): Promise<JobData[]>;
|
|
33
|
-
/**
|
|
34
|
-
* Get a single job by ID
|
|
35
|
-
*/
|
|
36
|
-
getJob(id: string): Promise<JobData | null>;
|
|
37
|
-
/**
|
|
38
|
-
* Add a new job
|
|
39
|
-
*/
|
|
40
|
-
addJob(job: JobData): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Update an existing job
|
|
43
|
-
*/
|
|
44
|
-
updateJob(id: string, updates: Partial<JobData>, options?: {
|
|
45
|
-
clearAgentId?: boolean;
|
|
46
|
-
clearWorkingDirectory?: boolean;
|
|
47
|
-
}): Promise<boolean>;
|
|
48
|
-
/**
|
|
49
|
-
* Remove a job
|
|
50
|
-
*/
|
|
51
|
-
removeJob(id: string): Promise<boolean>;
|
|
52
|
-
/** Atomic write (fsync + rename) via shared helper. */
|
|
53
|
-
private writeToDisk;
|
|
54
|
-
/**
|
|
55
|
-
* Mark cache as dirty and schedule debounced save
|
|
56
|
-
*/
|
|
57
|
-
private markDirty;
|
|
58
|
-
/**
|
|
59
|
-
* Clear cache (useful for testing)
|
|
60
|
-
*/
|
|
61
|
-
clearCache(): void;
|
|
62
|
-
}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { createLogger } from "../utils/logger/index.js";
|
|
2
|
-
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
4
|
-
import { JobDataSchema } from "./validation.js";
|
|
5
|
-
import { access, readFile } from "fs/promises";
|
|
6
|
-
//#region src/cron/persistence.ts
|
|
7
|
-
init_write_file_atomic();
|
|
8
|
-
init_logger();
|
|
9
|
-
const log = createLogger("CronPersistence");
|
|
10
|
-
const DEFAULT_JOBS_FILE = {
|
|
11
|
-
jobs: [],
|
|
12
|
-
version: 1
|
|
13
|
-
};
|
|
14
|
-
var CronPersistence = class {
|
|
15
|
-
filePath;
|
|
16
|
-
cache = null;
|
|
17
|
-
dirty = false;
|
|
18
|
-
saveTimeout = null;
|
|
19
|
-
debounceMs = 500;
|
|
20
|
-
constructor(filePath) {
|
|
21
|
-
this.filePath = filePath;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Initialize the storage file
|
|
25
|
-
*/
|
|
26
|
-
async initialize() {
|
|
27
|
-
try {
|
|
28
|
-
await access(this.filePath);
|
|
29
|
-
await this.load();
|
|
30
|
-
} catch {
|
|
31
|
-
await this.save(DEFAULT_JOBS_FILE);
|
|
32
|
-
log.info({ path: this.filePath }, "Created new jobs file");
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Load jobs from disk (with caching)
|
|
37
|
-
*/
|
|
38
|
-
async load() {
|
|
39
|
-
if (this.cache) return this.cache;
|
|
40
|
-
try {
|
|
41
|
-
const content = await readFile(this.filePath, "utf-8");
|
|
42
|
-
const data = JSON.parse(content);
|
|
43
|
-
if (!data.jobs || !Array.isArray(data.jobs)) {
|
|
44
|
-
log.warn({ path: this.filePath }, "Cron jobs file invalid (missing jobs[]), resetting to empty");
|
|
45
|
-
this.cache = DEFAULT_JOBS_FILE;
|
|
46
|
-
return this.cache;
|
|
47
|
-
}
|
|
48
|
-
const valid = [];
|
|
49
|
-
for (const j of data.jobs) {
|
|
50
|
-
const r = JobDataSchema.safeParse(j);
|
|
51
|
-
if (r.success) valid.push(r.data);
|
|
52
|
-
else log.warn({
|
|
53
|
-
jobId: j.id,
|
|
54
|
-
issues: r.error.flatten()
|
|
55
|
-
}, "Dropped invalid cron job");
|
|
56
|
-
}
|
|
57
|
-
if (valid.length !== data.jobs.length) {
|
|
58
|
-
data.jobs = valid;
|
|
59
|
-
data.version = (data.version ?? 1) + 1;
|
|
60
|
-
this.cache = data;
|
|
61
|
-
await this.writeToDisk(data);
|
|
62
|
-
this.dirty = false;
|
|
63
|
-
log.info({ count: valid.length }, "Persisted cron jobs after validation");
|
|
64
|
-
return data;
|
|
65
|
-
}
|
|
66
|
-
this.cache = data;
|
|
67
|
-
log.debug({ jobCount: data.jobs.length }, "Loaded jobs from disk");
|
|
68
|
-
return data;
|
|
69
|
-
} catch (error) {
|
|
70
|
-
const em = error instanceof Error ? error.message : String(error);
|
|
71
|
-
log.error({
|
|
72
|
-
err: error,
|
|
73
|
-
path: this.filePath,
|
|
74
|
-
errorMessage: em
|
|
75
|
-
}, `Failed to load cron jobs file: ${em}`);
|
|
76
|
-
this.cache = DEFAULT_JOBS_FILE;
|
|
77
|
-
return this.cache;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Save jobs to disk (debounced)
|
|
82
|
-
*/
|
|
83
|
-
async save(data) {
|
|
84
|
-
this.cache = data;
|
|
85
|
-
this.markDirty();
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Force immediate save (sync to disk)
|
|
89
|
-
*/
|
|
90
|
-
async flush() {
|
|
91
|
-
if (!this.dirty || !this.cache) return;
|
|
92
|
-
if (this.saveTimeout) {
|
|
93
|
-
clearTimeout(this.saveTimeout);
|
|
94
|
-
this.saveTimeout = null;
|
|
95
|
-
}
|
|
96
|
-
await this.writeToDisk(this.cache);
|
|
97
|
-
this.dirty = false;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Get all jobs
|
|
101
|
-
*/
|
|
102
|
-
async getJobs() {
|
|
103
|
-
return (await this.load()).jobs;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get a single job by ID
|
|
107
|
-
*/
|
|
108
|
-
async getJob(id) {
|
|
109
|
-
return (await this.getJobs()).find((j) => j.id === id) || null;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Add a new job
|
|
113
|
-
*/
|
|
114
|
-
async addJob(job) {
|
|
115
|
-
const data = await this.load();
|
|
116
|
-
data.jobs.push(job);
|
|
117
|
-
data.version++;
|
|
118
|
-
await this.save(data);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Update an existing job
|
|
122
|
-
*/
|
|
123
|
-
async updateJob(id, updates, options) {
|
|
124
|
-
const data = await this.load();
|
|
125
|
-
const index = data.jobs.findIndex((j) => j.id === id);
|
|
126
|
-
if (index === -1) return false;
|
|
127
|
-
const merged = {
|
|
128
|
-
...data.jobs[index],
|
|
129
|
-
...updates,
|
|
130
|
-
updated_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
131
|
-
};
|
|
132
|
-
if (options?.clearAgentId) delete merged.agentId;
|
|
133
|
-
if (options?.clearWorkingDirectory) delete merged.workingDirectory;
|
|
134
|
-
data.jobs[index] = merged;
|
|
135
|
-
data.version++;
|
|
136
|
-
await this.save(data);
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Remove a job
|
|
141
|
-
*/
|
|
142
|
-
async removeJob(id) {
|
|
143
|
-
const data = await this.load();
|
|
144
|
-
const initialLength = data.jobs.length;
|
|
145
|
-
data.jobs = data.jobs.filter((j) => j.id !== id);
|
|
146
|
-
if (data.jobs.length === initialLength) return false;
|
|
147
|
-
data.version++;
|
|
148
|
-
await this.save(data);
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
/** Atomic write (fsync + rename) via shared helper. */
|
|
152
|
-
async writeToDisk(data) {
|
|
153
|
-
await writeTextAtomic(this.filePath, JSON.stringify(data, null, 2));
|
|
154
|
-
log.debug({ jobCount: data.jobs.length }, "Jobs saved to disk");
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Mark cache as dirty and schedule debounced save
|
|
158
|
-
*/
|
|
159
|
-
markDirty() {
|
|
160
|
-
this.dirty = true;
|
|
161
|
-
if (this.saveTimeout) clearTimeout(this.saveTimeout);
|
|
162
|
-
this.saveTimeout = setTimeout(() => {
|
|
163
|
-
this.flush().catch((err) => {
|
|
164
|
-
const em = err instanceof Error ? err.message : String(err);
|
|
165
|
-
log.error({
|
|
166
|
-
err,
|
|
167
|
-
path: this.filePath,
|
|
168
|
-
errorMessage: em
|
|
169
|
-
}, `Failed to save cron jobs file: ${em}`);
|
|
170
|
-
});
|
|
171
|
-
}, this.debounceMs);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Clear cache (useful for testing)
|
|
175
|
-
*/
|
|
176
|
-
clearCache() {
|
|
177
|
-
this.cache = null;
|
|
178
|
-
this.dirty = false;
|
|
179
|
-
if (this.saveTimeout) {
|
|
180
|
-
clearTimeout(this.saveTimeout);
|
|
181
|
-
this.saveTimeout = null;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
//#endregion
|
|
186
|
-
export { CronPersistence };
|
|
187
|
-
|
|
188
|
-
//# sourceMappingURL=persistence.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","names":[],"sources":["../../../src/cron/persistence.ts"],"sourcesContent":["// Cron persistence layer with atomic writes and caching\nimport { readFile, access } from 'fs/promises';\nimport { writeTextAtomic } from '../infra/write-file-atomic.js';\nimport { createLogger } from '../utils/logger.js';\nimport type { JobData } from './types.js';\nimport { JobDataSchema } from './validation.js';\n\nconst log = createLogger('CronPersistence');\n\nexport interface JobsFile {\n jobs: JobData[];\n version: number;\n}\n\nconst DEFAULT_JOBS_FILE: JobsFile = {\n jobs: [],\n version: 1,\n};\n\nexport class CronPersistence {\n private filePath: string;\n private cache: JobsFile | null = null;\n private dirty = false;\n private saveTimeout: ReturnType<typeof setTimeout> | null = null;\n private readonly debounceMs = 500; // Debounce saves\n\n constructor(filePath: string) {\n this.filePath = filePath;\n }\n\n /**\n * Initialize the storage file\n */\n async initialize(): Promise<void> {\n try {\n await access(this.filePath);\n // File exists, load it\n await this.load();\n } catch {\n // File doesn't exist, create it\n await this.save(DEFAULT_JOBS_FILE);\n log.info({ path: this.filePath }, 'Created new jobs file');\n }\n }\n\n /**\n * Load jobs from disk (with caching)\n */\n async load(): Promise<JobsFile> {\n // Return cache if available\n if (this.cache) {\n return this.cache;\n }\n\n try {\n const content = await readFile(this.filePath, 'utf-8');\n const data = JSON.parse(content) as JobsFile;\n \n // Validate basic structure\n if (!data.jobs || !Array.isArray(data.jobs)) {\n log.warn({ path: this.filePath }, 'Cron jobs file invalid (missing jobs[]), resetting to empty');\n this.cache = DEFAULT_JOBS_FILE;\n return this.cache;\n }\n\n const valid: JobData[] = [];\n for (const j of data.jobs) {\n const r = JobDataSchema.safeParse(j);\n if (r.success) {\n valid.push(r.data as JobData);\n } else {\n log.warn(\n { jobId: (j as { id?: string }).id, issues: r.error.flatten() },\n 'Dropped invalid cron job'\n );\n }\n }\n\n if (valid.length !== data.jobs.length) {\n data.jobs = valid;\n data.version = (data.version ?? 1) + 1;\n this.cache = data;\n await this.writeToDisk(data);\n this.dirty = false;\n log.info({ count: valid.length }, 'Persisted cron jobs after validation');\n return data;\n }\n\n this.cache = data;\n log.debug({ jobCount: data.jobs.length }, 'Loaded jobs from disk');\n return data;\n } catch (error) {\n const em = error instanceof Error ? error.message : String(error);\n log.error({ err: error, path: this.filePath, errorMessage: em }, `Failed to load cron jobs file: ${em}`);\n this.cache = DEFAULT_JOBS_FILE;\n return this.cache;\n }\n }\n\n /**\n * Save jobs to disk (debounced)\n */\n async save(data: JobsFile): Promise<void> {\n this.cache = data;\n this.markDirty();\n }\n\n /**\n * Force immediate save (sync to disk)\n */\n async flush(): Promise<void> {\n if (!this.dirty || !this.cache) {\n return;\n }\n\n // Clear any pending debounced save\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n this.saveTimeout = null;\n }\n\n await this.writeToDisk(this.cache);\n this.dirty = false;\n }\n\n /**\n * Get all jobs\n */\n async getJobs(): Promise<JobData[]> {\n const data = await this.load();\n return data.jobs;\n }\n\n /**\n * Get a single job by ID\n */\n async getJob(id: string): Promise<JobData | null> {\n const jobs = await this.getJobs();\n return jobs.find((j) => j.id === id) || null;\n }\n\n /**\n * Add a new job\n */\n async addJob(job: JobData): Promise<void> {\n const data = await this.load();\n data.jobs.push(job);\n data.version++;\n await this.save(data);\n }\n\n /**\n * Update an existing job\n */\n async updateJob(\n id: string,\n updates: Partial<JobData>,\n options?: { clearAgentId?: boolean; clearWorkingDirectory?: boolean },\n ): Promise<boolean> {\n const data = await this.load();\n const index = data.jobs.findIndex((j) => j.id === id);\n \n if (index === -1) return false;\n\n const merged: JobData = {\n ...data.jobs[index],\n ...updates,\n updated_at: new Date().toISOString(),\n };\n if (options?.clearAgentId) {\n delete merged.agentId;\n }\n if (options?.clearWorkingDirectory) {\n delete merged.workingDirectory;\n }\n data.jobs[index] = merged;\n data.version++;\n await this.save(data);\n return true;\n }\n\n /**\n * Remove a job\n */\n async removeJob(id: string): Promise<boolean> {\n const data = await this.load();\n const initialLength = data.jobs.length;\n data.jobs = data.jobs.filter((j) => j.id !== id);\n \n if (data.jobs.length === initialLength) return false;\n\n data.version++;\n await this.save(data);\n return true;\n }\n\n /** Atomic write (fsync + rename) via shared helper. */\n private async writeToDisk(data: JobsFile): Promise<void> {\n await writeTextAtomic(this.filePath, JSON.stringify(data, null, 2));\n log.debug({ jobCount: data.jobs.length }, 'Jobs saved to disk');\n }\n\n /**\n * Mark cache as dirty and schedule debounced save\n */\n private markDirty(): void {\n this.dirty = true;\n\n // Debounce saves\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n }\n\n this.saveTimeout = setTimeout(() => {\n this.flush().catch((err) => {\n const em = err instanceof Error ? err.message : String(err);\n log.error({ err, path: this.filePath, errorMessage: em }, `Failed to save cron jobs file: ${em}`);\n });\n }, this.debounceMs);\n }\n\n /**\n * Clear cache (useful for testing)\n */\n clearCache(): void {\n this.cache = null;\n this.dirty = false;\n if (this.saveTimeout) {\n clearTimeout(this.saveTimeout);\n this.saveTimeout = null;\n }\n }\n}\n"],"mappings":";;;;;;wBAEgE;aACd;AAIlD,MAAM,MAAM,aAAa,kBAAkB;AAO3C,MAAM,oBAA8B;CAClC,MAAM,EAAE;CACR,SAAS;CACV;AAED,IAAa,kBAAb,MAA6B;CAC3B;CACA,QAAiC;CACjC,QAAgB;CAChB,cAA4D;CAC5D,aAA8B;CAE9B,YAAY,UAAkB;AAC5B,OAAK,WAAW;;;;;CAMlB,MAAM,aAA4B;AAChC,MAAI;AACF,SAAM,OAAO,KAAK,SAAS;AAE3B,SAAM,KAAK,MAAM;UACX;AAEN,SAAM,KAAK,KAAK,kBAAkB;AAClC,OAAI,KAAK,EAAE,MAAM,KAAK,UAAU,EAAE,wBAAwB;;;;;;CAO9D,MAAM,OAA0B;AAE9B,MAAI,KAAK,MACP,QAAO,KAAK;AAGd,MAAI;GACF,MAAM,UAAU,MAAM,SAAS,KAAK,UAAU,QAAQ;GACtD,MAAM,OAAO,KAAK,MAAM,QAAQ;AAGhC,OAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,QAAQ,KAAK,KAAK,EAAE;AAC3C,QAAI,KAAK,EAAE,MAAM,KAAK,UAAU,EAAE,8DAA8D;AAChG,SAAK,QAAQ;AACb,WAAO,KAAK;;GAGd,MAAM,QAAmB,EAAE;AAC3B,QAAK,MAAM,KAAK,KAAK,MAAM;IACzB,MAAM,IAAI,cAAc,UAAU,EAAE;AACpC,QAAI,EAAE,QACJ,OAAM,KAAK,EAAE,KAAgB;QAE7B,KAAI,KACF;KAAE,OAAQ,EAAsB;KAAI,QAAQ,EAAE,MAAM,SAAS;KAAE,EAC/D,2BACD;;AAIL,OAAI,MAAM,WAAW,KAAK,KAAK,QAAQ;AACrC,SAAK,OAAO;AACZ,SAAK,WAAW,KAAK,WAAW,KAAK;AACrC,SAAK,QAAQ;AACb,UAAM,KAAK,YAAY,KAAK;AAC5B,SAAK,QAAQ;AACb,QAAI,KAAK,EAAE,OAAO,MAAM,QAAQ,EAAE,uCAAuC;AACzE,WAAO;;AAGT,QAAK,QAAQ;AACb,OAAI,MAAM,EAAE,UAAU,KAAK,KAAK,QAAQ,EAAE,wBAAwB;AAClE,UAAO;WACA,OAAO;GACd,MAAM,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACjE,OAAI,MAAM;IAAE,KAAK;IAAO,MAAM,KAAK;IAAU,cAAc;IAAI,EAAE,kCAAkC,KAAK;AACxG,QAAK,QAAQ;AACb,UAAO,KAAK;;;;;;CAOhB,MAAM,KAAK,MAA+B;AACxC,OAAK,QAAQ;AACb,OAAK,WAAW;;;;;CAMlB,MAAM,QAAuB;AAC3B,MAAI,CAAC,KAAK,SAAS,CAAC,KAAK,MACvB;AAIF,MAAI,KAAK,aAAa;AACpB,gBAAa,KAAK,YAAY;AAC9B,QAAK,cAAc;;AAGrB,QAAM,KAAK,YAAY,KAAK,MAAM;AAClC,OAAK,QAAQ;;;;;CAMf,MAAM,UAA8B;AAElC,UAAO,MADY,KAAK,MAAM,EAClB;;;;;CAMd,MAAM,OAAO,IAAqC;AAEhD,UAAO,MADY,KAAK,SAAS,EACrB,MAAM,MAAM,EAAE,OAAO,GAAG,IAAI;;;;;CAM1C,MAAM,OAAO,KAA6B;EACxC,MAAM,OAAO,MAAM,KAAK,MAAM;AAC9B,OAAK,KAAK,KAAK,IAAI;AACnB,OAAK;AACL,QAAM,KAAK,KAAK,KAAK;;;;;CAMvB,MAAM,UACJ,IACA,SACA,SACkB;EAClB,MAAM,OAAO,MAAM,KAAK,MAAM;EAC9B,MAAM,QAAQ,KAAK,KAAK,WAAW,MAAM,EAAE,OAAO,GAAG;AAErD,MAAI,UAAU,GAAI,QAAO;EAEzB,MAAM,SAAkB;GACtB,GAAG,KAAK,KAAK;GACb,GAAG;GACH,6BAAY,IAAI,MAAM,EAAC,aAAa;GACrC;AACD,MAAI,SAAS,aACX,QAAO,OAAO;AAEhB,MAAI,SAAS,sBACX,QAAO,OAAO;AAEhB,OAAK,KAAK,SAAS;AACnB,OAAK;AACL,QAAM,KAAK,KAAK,KAAK;AACrB,SAAO;;;;;CAMT,MAAM,UAAU,IAA8B;EAC5C,MAAM,OAAO,MAAM,KAAK,MAAM;EAC9B,MAAM,gBAAgB,KAAK,KAAK;AAChC,OAAK,OAAO,KAAK,KAAK,QAAQ,MAAM,EAAE,OAAO,GAAG;AAEhD,MAAI,KAAK,KAAK,WAAW,cAAe,QAAO;AAE/C,OAAK;AACL,QAAM,KAAK,KAAK,KAAK;AACrB,SAAO;;;CAIT,MAAc,YAAY,MAA+B;AACvD,QAAM,gBAAgB,KAAK,UAAU,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;AACnE,MAAI,MAAM,EAAE,UAAU,KAAK,KAAK,QAAQ,EAAE,qBAAqB;;;;;CAMjE,YAA0B;AACxB,OAAK,QAAQ;AAGb,MAAI,KAAK,YACP,cAAa,KAAK,YAAY;AAGhC,OAAK,cAAc,iBAAiB;AAClC,QAAK,OAAO,CAAC,OAAO,QAAQ;IAC1B,MAAM,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAC3D,QAAI,MAAM;KAAE;KAAK,MAAM,KAAK;KAAU,cAAc;KAAI,EAAE,kCAAkC,KAAK;KACjG;KACD,KAAK,WAAW;;;;;CAMrB,aAAmB;AACjB,OAAK,QAAQ;AACb,OAAK,QAAQ;AACb,MAAI,KAAK,aAAa;AACpB,gBAAa,KAAK,YAAY;AAC9B,QAAK,cAAc"}
|