@xopcai/xopc 0.0.149 → 0.0.151
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/README.zh-CN.md +10 -0
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/dashscope/src/image-generation-provider.js +0 -2
- package/dist/extensions/demo-memory/src/index.js +0 -2
- package/dist/extensions/fal/src/image-generation-provider.js +0 -2
- package/dist/extensions/feishu/src/actions/message-action-handler.js +0 -2
- package/dist/extensions/feishu/src/adapters/cli-login.js +0 -2
- package/dist/extensions/feishu/src/adapters/gateway-setup.js +0 -2
- package/dist/extensions/feishu/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/feishu/src/auth/app-registration.js +0 -2
- package/dist/extensions/feishu/src/auth/pairing.js +0 -2
- package/dist/extensions/feishu/src/auth/paths.js +0 -2
- package/dist/extensions/feishu/src/directory/directory-adapter.js +0 -2
- package/dist/extensions/feishu/src/format.js +0 -2
- package/dist/extensions/feishu/src/index.js +0 -2
- package/dist/extensions/feishu/src/outbound/actions.js +0 -2
- package/dist/extensions/feishu/src/outbound/media-load.js +0 -2
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js +0 -2
- package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js +0 -2
- package/dist/extensions/feishu/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/feishu/src/plugin.js +0 -2
- package/dist/extensions/feishu/src/schema/config-schema.js +0 -2
- package/dist/extensions/feishu/src/state/accounts.js +0 -2
- package/dist/extensions/feishu/src/state/message-bindings.js +0 -2
- package/dist/extensions/feishu/src/state/thread-bindings.js +0 -2
- package/dist/extensions/feishu/src/status/doctor.js +0 -2
- package/dist/extensions/feishu/src/status/status-adapter.js +0 -2
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js +0 -2
- package/dist/extensions/feishu/src/subagent-hooks.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.d.ts +6 -3386
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.js +0 -2
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.d.ts +16 -16927
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js +0 -2
- package/dist/extensions/feishu/src/tools/tools.js +0 -2
- package/dist/extensions/feishu/src/transport/client/client.js +2 -4
- package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js +0 -2
- package/dist/extensions/feishu/src/transport/client/lark-sdk.d.ts +3 -0
- package/dist/extensions/feishu/src/transport/client/lark-sdk.js +14 -0
- package/dist/extensions/feishu/src/transport/reliability/dedupe.js +0 -2
- package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js +0 -2
- package/dist/extensions/feishu/src/transport/socket-mode/monitor.js +0 -2
- package/dist/extensions/feishu/src/transport/socket-mode/retry.js +0 -2
- package/dist/extensions/feishu/src/transport/text/mentions.js +0 -2
- package/dist/extensions/feishu/src/transport/webhook/monitor.js +3 -5
- package/dist/extensions/feishu/src/ui/config-surface.js +0 -2
- package/dist/extensions/feishu/src/workflow-progress.js +0 -2
- package/dist/extensions/google/src/image-generation-provider.js +0 -2
- package/dist/extensions/minimax/src/image-generation-provider.js +0 -2
- package/dist/extensions/openai/src/image-generation-provider.js +0 -2
- package/dist/extensions/telegram/src/access-control.js +0 -2
- package/dist/extensions/telegram/src/account-manager.js +0 -2
- package/dist/extensions/telegram/src/actions/message-actions.js +0 -2
- package/dist/extensions/telegram/src/adapters/command-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/config-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/debounce-keys.js +0 -2
- package/dist/extensions/telegram/src/adapters/gateway-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/gateway-setup.js +0 -2
- package/dist/extensions/telegram/src/adapters/inbound-access.js +0 -2
- package/dist/extensions/telegram/src/adapters/index.js +0 -2
- package/dist/extensions/telegram/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/security-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/setup-wizard.js +0 -2
- package/dist/extensions/telegram/src/adapters/status-adapter.js +0 -2
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +0 -2
- package/dist/extensions/telegram/src/api-root.js +0 -2
- package/dist/extensions/telegram/src/approval-delivery.js +0 -2
- package/dist/extensions/telegram/src/approval-store.js +0 -2
- package/dist/extensions/telegram/src/caption.js +0 -2
- package/dist/extensions/telegram/src/command-handler.js +0 -2
- package/dist/extensions/telegram/src/config-schema.js +0 -2
- package/dist/extensions/telegram/src/conversation-id.js +0 -2
- package/dist/extensions/telegram/src/dedupe.js +0 -2
- package/dist/extensions/telegram/src/delivery-chat-id.js +0 -2
- package/dist/extensions/telegram/src/doctor.js +0 -2
- package/dist/extensions/telegram/src/draft-stream-lifecycle.js +0 -2
- package/dist/extensions/telegram/src/draft-stream-loop.js +0 -2
- package/dist/extensions/telegram/src/draft-stream.js +0 -2
- package/dist/extensions/telegram/src/errors.js +0 -2
- package/dist/extensions/telegram/src/exec-approval-handler.js +0 -2
- package/dist/extensions/telegram/src/exec-approvals.js +0 -2
- package/dist/extensions/telegram/src/focus-handler.js +0 -2
- package/dist/extensions/telegram/src/format.js +0 -2
- package/dist/extensions/telegram/src/group-config-resolver.js +0 -2
- package/dist/extensions/telegram/src/inbound-coalescer.js +0 -2
- package/dist/extensions/telegram/src/inbound-processor.js +0 -2
- package/dist/extensions/telegram/src/index.js +0 -2
- package/dist/extensions/telegram/src/inline-keyboards.js +0 -2
- package/dist/extensions/telegram/src/network-errors.js +0 -2
- package/dist/extensions/telegram/src/outbound-sender.js +0 -2
- package/dist/extensions/telegram/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/telegram/src/plugin-defaults.js +0 -2
- package/dist/extensions/telegram/src/plugin.js +0 -2
- package/dist/extensions/telegram/src/polling-session.js +0 -2
- package/dist/extensions/telegram/src/proxy-fetch.js +0 -2
- package/dist/extensions/telegram/src/reactions.js +0 -2
- package/dist/extensions/telegram/src/reply-params.js +0 -2
- package/dist/extensions/telegram/src/routing-integration.js +0 -2
- package/dist/extensions/telegram/src/send-options.js +0 -2
- package/dist/extensions/telegram/src/sent-cache.js +0 -2
- package/dist/extensions/telegram/src/startup-errors.js +0 -2
- package/dist/extensions/telegram/src/telegram-actions.js +0 -2
- package/dist/extensions/telegram/src/telegram-draft-errors.js +0 -2
- package/dist/extensions/telegram/src/thread-bindings.js +0 -2
- package/dist/extensions/telegram/src/timeout-abort.js +0 -2
- package/dist/extensions/telegram/src/token-resolver.js +0 -2
- package/dist/extensions/telegram/src/update-offset-store.js +0 -2
- package/dist/extensions/telegram/src/workflow-progress.js +0 -2
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/adapters/onboard-cli.js +0 -2
- package/dist/extensions/weixin/src/api/api.js +0 -2
- package/dist/extensions/weixin/src/api/config-cache.js +0 -2
- package/dist/extensions/weixin/src/api/session-guard.js +0 -2
- package/dist/extensions/weixin/src/api/types.js +0 -2
- package/dist/extensions/weixin/src/auth/accounts.js +0 -2
- package/dist/extensions/weixin/src/auth/login-qr.js +0 -2
- package/dist/extensions/weixin/src/auth/pairing.js +0 -2
- package/dist/extensions/weixin/src/auth/weixin-account-id.js +0 -2
- package/dist/extensions/weixin/src/cdn/aes-ecb.js +0 -2
- package/dist/extensions/weixin/src/cdn/cdn-upload.js +0 -2
- package/dist/extensions/weixin/src/cdn/cdn-url.js +0 -2
- package/dist/extensions/weixin/src/cdn/pic-decrypt.js +0 -2
- package/dist/extensions/weixin/src/cdn/upload.js +0 -2
- package/dist/extensions/weixin/src/cli/gateway-qr-login.js +0 -2
- package/dist/extensions/weixin/src/cli/qr-login.js +0 -2
- package/dist/extensions/weixin/src/config-schema.js +0 -2
- package/dist/extensions/weixin/src/config-surface.js +0 -2
- package/dist/extensions/weixin/src/delivery-to.js +0 -2
- package/dist/extensions/weixin/src/index.js +0 -2
- package/dist/extensions/weixin/src/media/data-url.js +0 -2
- package/dist/extensions/weixin/src/media/media-download.js +0 -2
- package/dist/extensions/weixin/src/media/mime.js +0 -2
- package/dist/extensions/weixin/src/media/silk-transcode.js +0 -2
- package/dist/extensions/weixin/src/messaging/context-token-init.js +0 -2
- package/dist/extensions/weixin/src/messaging/debug-mode.js +0 -2
- package/dist/extensions/weixin/src/messaging/error-notice.js +0 -2
- package/dist/extensions/weixin/src/messaging/inbound.js +0 -2
- package/dist/extensions/weixin/src/messaging/markdown-filter.js +0 -2
- package/dist/extensions/weixin/src/messaging/process-message.js +0 -2
- package/dist/extensions/weixin/src/messaging/send-media.js +0 -2
- package/dist/extensions/weixin/src/messaging/send.js +0 -2
- package/dist/extensions/weixin/src/messaging/slash-commands.js +0 -2
- package/dist/extensions/weixin/src/messaging/typing-ticket-store.js +0 -2
- package/dist/extensions/weixin/src/monitor/monitor.js +0 -2
- package/dist/extensions/weixin/src/outbound-send.js +0 -2
- package/dist/extensions/weixin/src/pairing-config-resolver.js +0 -2
- package/dist/extensions/weixin/src/plugin.js +0 -2
- package/dist/extensions/weixin/src/routing-integration.js +0 -2
- package/dist/extensions/weixin/src/storage/state-dir.js +0 -2
- package/dist/extensions/weixin/src/storage/sync-buf.js +0 -2
- package/dist/extensions/weixin/src/util/logger.js +0 -2
- package/dist/extensions/weixin/src/util/random.js +0 -2
- package/dist/extensions/weixin/src/util/redact.js +0 -2
- package/dist/extensions/weixin/src/workflow-progress.js +0 -2
- package/dist/gateway/static/root/assets/{activity-store-B4s0ipx2.js → activity-store-uu1xu9Pl.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BSccACje.js → agent-avatar-dicebear-BuO-OVfD.js} +1 -1
- package/dist/gateway/static/root/assets/agents-Bpv3h31T.js +2 -0
- package/dist/gateway/static/root/assets/{api-BMdUsNCV.js → api-CwL38LEV.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DrLGhYkI.js → app-management-settings-panel-B6OU3Eol.js} +1 -1
- package/dist/gateway/static/root/assets/appearance-settings-BaP4GFvN.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-DZKNIMRg.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BQ17IK9x.js → archive-plugin-CJX3zIh_.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-HXvgWHXu.js → attachment-load-CI1ejk_l.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CjIWpsch.js → automation-suggestion-card-CjmhICbv.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-BtZl3B8m.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-DifWJzNZ.js → binary-plugins-CZ8nOXqK.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DtRzIkPU.js → block-editor-BoSfyS_j.js} +46 -46
- package/dist/gateway/static/root/assets/browser-settings-page-CL1UiPcb.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-DazKjWW1.js → capability-presets-api-XzDKxPZ8.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-Cvrw4fD1.js → capability-presets-settings-panel-Dc_uHYgl.js} +2 -2
- package/dist/gateway/static/root/assets/{channel-recipient-api-Bea6if_6.js → channel-recipient-api-DYLBAhFF.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-mALvXpJj.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CZuEsO5b.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-BjbYbJjQ.js → connector-logo-BSjlInHT.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-Cm_E3mmI.js +2 -0
- package/dist/gateway/static/root/assets/desktop-pet-DcJc91-C.js +1 -0
- package/dist/gateway/static/root/assets/desktop-pet-settings-CdeqTa3Q.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-C8zZNUzC.js → directory-picker-path-field-Cp3fpm0k.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-gJSw7Adk.js → dreaming-settings-Bwj1O3zr.js} +3 -3
- package/dist/gateway/static/root/assets/{extension-debug-page-DFE5ADJ0.js → extension-debug-page-D_1xpKbZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CfR-aW8G.js → extension-page-CqZNCj96.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CFIEbs2L.js → extension-settings-page-5MWbtQaQ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-B6M_ra8U.js → gateway-config-api-Co_IaS34.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-kmeWm2Pt.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DNA3OOzV.js → gateway-startup-retry-BM_xvzl0.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-FoO-R4_U.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-CkJq7N5g.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-D88opgcs.js → goals-config-api-DrtsYjXz.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-DRAN-R64.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-D07UL8Jo.js → goals-settings-wq9TKhIZ.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-YCSNOcXC.js → heartbeat-settings-B5zDoHbo.js} +1 -1
- package/dist/gateway/static/root/assets/index-DIlxvrlG.css +1 -0
- package/dist/gateway/static/root/assets/index-apLU0Hun.js +196 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-3tC9iD21.js +1 -0
- package/dist/gateway/static/root/assets/local-app-workbench-page-CT-vDTLK.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CKvtLzsF.js → local-apps-page-B9ruF9GV.js} +1 -1
- package/dist/gateway/static/root/assets/locale-store-GfSwnwIZ.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-Ca1X8X2P.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-BVSFG99p.js → markdown-split-CzuhSQAB.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DdOjIVk3.js → media-plugins-a3R4y-EL.js} +1 -1
- package/dist/gateway/static/root/assets/messages-B0B40tpO.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-CbTlz9Of.js +2 -0
- package/dist/gateway/static/root/assets/{notes-page-ZbLR3awn.js → notes-page-BCxDy2dV.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-z6sBX9B2.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-DMlQERNg.js → page-tabs-CJfk6M78.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-CbiJRPxK.js → preview-open-alternatives-MFopTSgF.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-DU29deIr.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-Ck3DLTlZ.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-gLsLyAyi.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BZTj3hxl.js → save-bar-controls-D0uhU3Z8.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-CxYDObjT.js → schedule-field-NGOH-7wV.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CBbXgpKQ.js → schema-form-BJz5LoqG.js} +1 -1
- package/dist/gateway/static/root/assets/schemas-DgQq6Z5S.js +64 -0
- package/dist/gateway/static/root/assets/sessions-page-TmNoWpa_.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CtPhh2m9.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BySKZ8rp.js → settings-collapsible-section-oDnUHnX_.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-CjINay6t.js → settings-form-section-DND90dDt.js} +1 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-CEJtaoQp.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-BNrVwuL7.js → settings-page-B1LJlRi9.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-HdlQOOqp.js → settings-page-layout-CsrLuDsW.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BPCJPHHY.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DC-eQONB.js → share-preview-page-C1PwLh-p.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DCuqr7js.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-kn1Vypcy.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-k6VIqTkK.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-CVa90q2f.js → system-settings-panel-BEsrEkSx.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-D1cOpgsy.js → theme-store-Bi6hMBDb.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-DIKF9vpz.js → typed-models-lib-dOypdlMf.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-DnvpI0Ys.js → use-channel-catalog-f8A-PVuq.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-B9Y_Ciav.js +1 -0
- package/dist/gateway/static/root/assets/{user-profile-fields-editor-y8gTmkPX.js → user-profile-fields-editor-DGC38Lx7.js} +1 -1
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-C3pvqe28.js → user-profile-settings-panel-DFkZ-tan.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-BK2vwu_3.js → utils-CEIYZihF.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DK6gaQsA.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-page-DSJb9Kq7.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-DVavwV3D.js +1 -0
- package/dist/gateway/static/root/assets/work-page-foJDp0nz.js +1 -0
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BYqZpFCC.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DgO0WAzs.js +11 -0
- package/dist/gateway/static/root/favicon.svg +1 -187
- package/dist/gateway/static/root/index.html +8 -7
- package/dist/gateway/static/root/logo-dark.svg +1 -185
- package/dist/gateway/static/root/logo.svg +1 -185
- package/dist/package.js +1 -3
- package/dist/src/activity/context.js +0 -2
- package/dist/src/activity/emitter.js +0 -2
- package/dist/src/activity/service.js +0 -2
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +1 -2
- package/dist/src/agent/agent-scope.js +0 -2
- package/dist/src/agent/background-review/coordinator.js +0 -2
- package/dist/src/agent/background-review/prompts.js +0 -2
- package/dist/src/agent/background-review/run-background-review.js +0 -2
- package/dist/src/agent/background-review/settings.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-cache.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-context.js +0 -2
- package/dist/src/agent/bootstrap/bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +0 -2
- package/dist/src/agent/bootstrap/project-agents-context.js +0 -2
- package/dist/src/agent/capabilities/definitions.js +0 -2
- package/dist/src/agent/capabilities/registry.js +0 -2
- package/dist/src/agent/child-agent-factory.js +0 -2
- package/dist/src/agent/client-error-format.js +0 -2
- package/dist/src/agent/code-intelligence/binary.js +0 -2
- package/dist/src/agent/code-intelligence/runtime.js +0 -2
- package/dist/src/agent/code-intelligence/tools.js +0 -2
- package/dist/src/agent/coding/turn-diff-tracker.js +0 -2
- package/dist/src/agent/context/expand-at-file-mentions.js +0 -2
- package/dist/src/agent/context/project-context.js +0 -2
- package/dist/src/agent/context/workspace-seed.js +0 -2
- package/dist/src/agent/context/workspace-state.js +0 -2
- package/dist/src/agent/context/workspace.js +0 -2
- package/dist/src/agent/embedded/run-for-session.js +0 -2
- package/dist/src/agent/embedded/run-turn.js +0 -2
- package/dist/src/agent/embedded/runs.js +0 -2
- package/dist/src/agent/embedded/session-manager-init.js +0 -2
- package/dist/src/agent/embedded/session-runner.js +0 -2
- package/dist/src/agent/embedded/session-tool-result-guard.js +0 -2
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +0 -2
- package/dist/src/agent/embedded/subscribe-session.js +0 -2
- package/dist/src/agent/embedded/system-prompt-override.js +0 -2
- package/dist/src/agent/embedded/tool-result-context-guard.js +0 -2
- package/dist/src/agent/embedded/tool-result-truncation.js +0 -2
- package/dist/src/agent/embedded/xopc-auth-storage.js +0 -2
- package/dist/src/agent/embedded/xopc-stream-bridge.js +0 -2
- package/dist/src/agent/embedded/xopc-tools-bridge.js +0 -2
- package/dist/src/agent/failover-error.js +0 -2
- package/dist/src/agent/fallback/candidates.js +0 -2
- package/dist/src/agent/fallback/reason.js +0 -2
- package/dist/src/agent/feedback/feedback-coordinator.js +0 -2
- package/dist/src/agent/goals/checklist-judge.js +0 -2
- package/dist/src/agent/goals/checklist-types.js +0 -2
- package/dist/src/agent/goals/evaluate-turn.js +0 -2
- package/dist/src/agent/goals/goal-locale.js +0 -2
- package/dist/src/agent/goals/judge.js +0 -2
- package/dist/src/agent/goals/persistent-goal-service.js +0 -2
- package/dist/src/agent/goals/post-turn.js +0 -2
- package/dist/src/agent/goals/state.js +0 -2
- package/dist/src/agent/image/generation/bundled-registry.js +0 -2
- package/dist/src/agent/image/generation/bundled.js +0 -2
- package/dist/src/agent/image/generation/image-assets.js +0 -2
- package/dist/src/agent/image/generation/model-ref.js +0 -2
- package/dist/src/agent/image/generation/normalization.js +0 -2
- package/dist/src/agent/image/generation/openai-compatible-image-provider.js +0 -2
- package/dist/src/agent/image/generation/provider-registry.js +0 -2
- package/dist/src/agent/image/generation/runtime.js +0 -2
- package/dist/src/agent/image/image-helpers.js +0 -2
- package/dist/src/agent/image/image-model-fallback.js +0 -2
- package/dist/src/agent/image/inbound-image-handling.js +0 -2
- package/dist/src/agent/image/load-image-media.js +0 -2
- package/dist/src/agent/image/tool-model-config.js +0 -2
- package/dist/src/agent/image/understanding/pi-ai-provider.js +0 -2
- package/dist/src/agent/image/understanding/provider-registry.js +0 -2
- package/dist/src/agent/image/understanding/runtime.js +0 -2
- package/dist/src/agent/image/vision-detection.js +0 -2
- package/dist/src/agent/inbound/attachment-pipeline.js +0 -2
- package/dist/src/agent/inbound/inbound-loop.js +0 -2
- package/dist/src/agent/inbound/turn-dispatcher.js +0 -2
- package/dist/src/agent/ipc/bus.js +0 -2
- package/dist/src/agent/ipc/inbox.js +0 -2
- package/dist/src/agent/ipc/socket.js +0 -2
- package/dist/src/agent/ipc/types.js +0 -2
- package/dist/src/agent/lifecycle/handlers/compaction.js +0 -2
- package/dist/src/agent/lifecycle/hook-handler.js +0 -2
- package/dist/src/agent/lifecycle/manager.js +0 -2
- package/dist/src/agent/lifecycle/progress.js +0 -2
- package/dist/src/agent/lifecycle/timeout-wrapper.js +0 -2
- package/dist/src/agent/lifecycle/typing.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-config.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-names.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -2
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -2
- package/dist/src/agent/mcp/embedded-mcp.js +0 -2
- package/dist/src/agent/mcp/mcp-config-shared.js +0 -2
- package/dist/src/agent/mcp/mcp-http.js +0 -2
- package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -2
- package/dist/src/agent/mcp/mcp-stdio.js +0 -2
- package/dist/src/agent/mcp/mcp-tool-meta.js +0 -2
- package/dist/src/agent/mcp/mcp-transport-config.js +0 -2
- package/dist/src/agent/mcp/mcp-transport.js +0 -2
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +0 -2
- package/dist/src/agent/media-generation/model-ref.js +0 -2
- package/dist/src/agent/media-generation/normalization.types.js +0 -2
- package/dist/src/agent/media-generation/runtime-shared.js +0 -2
- package/dist/src/agent/memory/agent-message-access.js +0 -2
- package/dist/src/agent/memory/builtin-memory-store.js +0 -2
- package/dist/src/agent/memory/builtin-provider.js +0 -2
- package/dist/src/agent/memory/compaction.js +0 -2
- package/dist/src/agent/memory/context/planner.js +0 -2
- package/dist/src/agent/memory/context-fence.js +0 -2
- package/dist/src/agent/memory/create-memory-manager.js +0 -2
- package/dist/src/agent/memory/dreaming/config.js +0 -2
- package/dist/src/agent/memory/dreaming/constants.js +0 -2
- package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -2
- package/dist/src/agent/memory/dreaming/events.js +0 -2
- package/dist/src/agent/memory/dreaming/last-run.js +0 -2
- package/dist/src/agent/memory/dreaming/light-sweep.js +0 -2
- package/dist/src/agent/memory/dreaming/preview.js +0 -2
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -2
- package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -2
- package/dist/src/agent/memory/dreaming/scope.js +0 -2
- package/dist/src/agent/memory/dreaming/short-term-store.js +0 -2
- package/dist/src/agent/memory/dreaming/utils.js +0 -2
- package/dist/src/agent/memory/lifecycle.js +0 -2
- package/dist/src/agent/memory/manager.js +0 -2
- package/dist/src/agent/memory/memory-config.js +0 -2
- package/dist/src/agent/memory/message-sanitizer.js +0 -2
- package/dist/src/agent/memory/plugin-discovery.js +0 -2
- package/dist/src/agent/memory/sensitivity.js +0 -2
- package/dist/src/agent/memory/source-origin.js +0 -2
- package/dist/src/agent/memory/stub-memory-provider.js +0 -2
- package/dist/src/agent/memory/summary-generator.js +0 -2
- package/dist/src/agent/memory/understanding/correction.js +0 -2
- package/dist/src/agent/memory/understanding/quality.js +0 -2
- package/dist/src/agent/memory/understanding/service.js +0 -2
- package/dist/src/agent/memory/user-context-coordinator.js +0 -2
- package/dist/src/agent/memory/user-message-text.js +0 -2
- package/dist/src/agent/memory/window.js +0 -2
- package/dist/src/agent/messaging/command-handler.js +0 -2
- package/dist/src/agent/messaging/message-router.js +0 -2
- package/dist/src/agent/messaging/outbound-coordinator.js +0 -2
- package/dist/src/agent/messaging/stream-manager.js +0 -2
- package/dist/src/agent/middleware/context.js +0 -2
- package/dist/src/agent/middleware/self-verify.js +0 -2
- package/dist/src/agent/models/manager.js +0 -2
- package/dist/src/agent/models/request-limiter.js +0 -2
- package/dist/src/agent/models/selection.js +0 -2
- package/dist/src/agent/orchestration/agent-event-handler.js +0 -2
- package/dist/src/agent/orchestration/agent-orchestrator.js +0 -2
- package/dist/src/agent/orchestration/llm-turn-retry.js +0 -2
- package/dist/src/agent/orchestration/loop-guard.js +0 -2
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +0 -2
- package/dist/src/agent/prompt/cache-boundary.js +0 -2
- package/dist/src/agent/prompt/memory/index.js +0 -2
- package/dist/src/agent/prompt/safety.js +0 -2
- package/dist/src/agent/prompt/sanitize-for-prompt.js +0 -2
- package/dist/src/agent/prompt/sections/behavior.js +0 -2
- package/dist/src/agent/prompt/sections/memory-skills.js +0 -2
- package/dist/src/agent/prompt/sections/messaging-runtime.js +0 -2
- package/dist/src/agent/prompt/sections/project-context.js +0 -2
- package/dist/src/agent/prompt/sections/tooling.js +0 -2
- package/dist/src/agent/prompt/sections/workspace-runtime.js +0 -2
- package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
- package/dist/src/agent/prompt/subagent-context.js +0 -2
- package/dist/src/agent/prompt/system-prompt-params.js +0 -2
- package/dist/src/agent/prompt/system-prompt.js +0 -2
- package/dist/src/agent/prompt/system-reminder.js +0 -2
- package/dist/src/agent/reply/apply-turn-user-enrichment.js +0 -2
- package/dist/src/agent/reply/post-compaction-context.js +0 -2
- package/dist/src/agent/reply/startup-context.js +0 -2
- package/dist/src/agent/reply/workspace-boundary-read.js +0 -2
- package/dist/src/agent/sandbox/command-validator.js +0 -2
- package/dist/src/agent/sandbox/exec-policy.js +0 -2
- package/dist/src/agent/sandbox/path-policy.js +0 -2
- package/dist/src/agent/sandbox/sanitize-env-vars.js +0 -2
- package/dist/src/agent/sandbox/types.js +0 -2
- package/dist/src/agent/service/async-queue.js +0 -2
- package/dist/src/agent/service/btw-query.js +0 -2
- package/dist/src/agent/service/build-direct-message-content.js +0 -2
- package/dist/src/agent/service/direct-turn-helpers.js +0 -2
- package/dist/src/agent/service/parse-outbound-session-key.js +0 -2
- package/dist/src/agent/service/process-direct-one-shot.js +0 -2
- package/dist/src/agent/service/process-direct-streaming.js +0 -2
- package/dist/src/agent/service/session-context-report.js +0 -2
- package/dist/src/agent/service/webchat-tts.js +0 -2
- package/dist/src/agent/service-inbound-utils.js +0 -2
- package/dist/src/agent/service.js +1 -2
- package/dist/src/agent/service.types.d.ts +2 -0
- package/dist/src/agent/session/session-config-service.js +0 -2
- package/dist/src/agent/session/session-context.js +0 -2
- package/dist/src/agent/session/session-hydrator.js +0 -2
- package/dist/src/agent/session/session-inspector.js +0 -2
- package/dist/src/agent/session/session-lifecycle.js +0 -2
- package/dist/src/agent/session/session-state-bag.js +0 -2
- package/dist/src/agent/session/tracker.js +0 -2
- package/dist/src/agent/skills/config.js +0 -2
- package/dist/src/agent/skills/filesystem-watcher.js +0 -2
- package/dist/src/agent/skills/format-skills-prompt.js +0 -2
- package/dist/src/agent/skills/hub-hash.js +0 -2
- package/dist/src/agent/skills/hub-lock.js +0 -2
- package/dist/src/agent/skills/hub-pull.js +0 -2
- package/dist/src/agent/skills/index.js +0 -2
- package/dist/src/agent/skills/install-target.js +0 -2
- package/dist/src/agent/skills/installer.js +0 -2
- package/dist/src/agent/skills/managed-store.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +0 -2
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +0 -2
- package/dist/src/agent/skills/marketplace/marketplace-category-order.js +0 -2
- package/dist/src/agent/skills/marketplace/registry.js +0 -2
- package/dist/src/agent/skills/marketplace/resolve-adapter.js +0 -2
- package/dist/src/agent/skills/parse-skill-metadata.js +0 -2
- package/dist/src/agent/skills/required-env-vars.js +0 -2
- package/dist/src/agent/skills/scanner.js +0 -2
- package/dist/src/agent/skills/skill-manage-ops.js +0 -2
- package/dist/src/agent/skills/skill-manager.js +0 -2
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +0 -2
- package/dist/src/agent/skills/skill-tool-gating.js +0 -2
- package/dist/src/agent/skills/skill-view-path.js +0 -2
- package/dist/src/agent/skills/skills-marketplace.js +0 -2
- package/dist/src/agent/skills/test-framework.js +0 -2
- package/dist/src/agent/skills/watcher.js +0 -2
- package/dist/src/agent/skills/workspace-skills-dir.js +0 -2
- package/dist/src/agent/source-context/injector.js +0 -2
- package/dist/src/agent/source-context/types.js +0 -2
- package/dist/src/agent/starter-agents.js +0 -2
- package/dist/src/agent/streaming/reasoning-visibility-sse.js +0 -2
- package/dist/src/agent/tool-manuals/browser.js +0 -2
- package/dist/src/agent/tool-manuals/index.js +0 -2
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +41 -4
- package/dist/src/agent/tools/apply-patch.js +0 -2
- package/dist/src/agent/tools/automation-tool.js +45 -8
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +0 -2
- package/dist/src/agent/tools/browser/tool/schemas.js +0 -2
- package/dist/src/agent/tools/chain-tracker.js +0 -2
- package/dist/src/agent/tools/clarify-tool.js +0 -2
- package/dist/src/agent/tools/cli-clarify.js +0 -2
- package/dist/src/agent/tools/communication.js +0 -2
- package/dist/src/agent/tools/composio-tool.js +0 -2
- package/dist/src/agent/tools/concurrency.js +0 -2
- package/dist/src/agent/tools/create-share-tool.js +0 -2
- package/dist/src/agent/tools/curated-memory-tool.js +0 -2
- package/dist/src/agent/tools/delegate-tool.js +0 -2
- package/dist/src/agent/tools/desktop-pet-tool.d.ts +12 -0
- package/dist/src/agent/tools/desktop-pet-tool.js +28 -2
- package/dist/src/agent/tools/dreaming-tool.js +0 -2
- package/dist/src/agent/tools/edit-diff.js +0 -2
- package/dist/src/agent/tools/error-pattern-matcher.js +0 -2
- package/dist/src/agent/tools/error-tracker.js +0 -2
- package/dist/src/agent/tools/exec-command.js +0 -2
- package/dist/src/agent/tools/execute-code-tool.js +0 -2
- package/dist/src/agent/tools/executor.js +0 -2
- package/dist/src/agent/tools/factory.d.ts +2 -0
- package/dist/src/agent/tools/factory.js +3 -4
- package/dist/src/agent/tools/find.js +0 -2
- package/dist/src/agent/tools/goal-evidence-recorder.js +0 -2
- package/dist/src/agent/tools/goal-tool.d.ts +7 -1
- package/dist/src/agent/tools/goal-tool.js +34 -7
- package/dist/src/agent/tools/grep.js +0 -2
- package/dist/src/agent/tools/image-generate-tool.js +0 -2
- package/dist/src/agent/tools/image-tool.js +0 -2
- package/dist/src/agent/tools/list-dir.js +0 -2
- package/dist/src/agent/tools/media-read-tool.js +0 -2
- package/dist/src/agent/tools/memory-tool.js +0 -2
- package/dist/src/agent/tools/metadata.js +0 -2
- package/dist/src/agent/tools/read.js +0 -2
- package/dist/src/agent/tools/search/http.js +0 -2
- package/dist/src/agent/tools/search/providers/bing-api.js +0 -2
- package/dist/src/agent/tools/search/providers/bing-html.js +0 -2
- package/dist/src/agent/tools/search/providers/brave.js +0 -2
- package/dist/src/agent/tools/search/providers/duckduckgo-html.js +0 -2
- package/dist/src/agent/tools/search/providers/searxng.js +0 -2
- package/dist/src/agent/tools/search/providers/tavily.js +0 -2
- package/dist/src/agent/tools/search/region.js +0 -2
- package/dist/src/agent/tools/search/registry.js +0 -2
- package/dist/src/agent/tools/search/resolve-config.js +0 -2
- package/dist/src/agent/tools/send-media.js +0 -2
- package/dist/src/agent/tools/session-search-tool.js +0 -2
- package/dist/src/agent/tools/session-status-tool.js +0 -2
- package/dist/src/agent/tools/skill-install-tool.js +0 -2
- package/dist/src/agent/tools/skill-manage-tool.js +0 -2
- package/dist/src/agent/tools/skills-tools.js +0 -2
- package/dist/src/agent/tools/structured-output.js +0 -2
- package/dist/src/agent/tools/todo-tool.js +0 -2
- package/dist/src/agent/tools/tool-manual-tool.js +0 -2
- package/dist/src/agent/tools/tool-paths.js +0 -2
- package/dist/src/agent/tools/truncate.js +0 -2
- package/dist/src/agent/tools/tts-tool.js +0 -2
- package/dist/src/agent/tools/update-plan-tool.js +0 -2
- package/dist/src/agent/tools/url-safety.js +0 -2
- package/dist/src/agent/tools/usage-analyzer.js +0 -2
- package/dist/src/agent/tools/web-extract.js +0 -2
- package/dist/src/agent/tools/web.js +4 -4
- package/dist/src/agent/tools/workflow-tool.js +32 -4
- package/dist/src/agent/tools/write.js +23 -5
- package/dist/src/agent/tools/xopc-use-tool.d.ts +6 -2
- package/dist/src/agent/tools/xopc-use-tool.js +216 -8
- package/dist/src/agent/transcript/google-api.js +0 -2
- package/dist/src/agent/transcript/model-selection.js +0 -2
- package/dist/src/agent/transcript/provider-capabilities.js +0 -2
- package/dist/src/agent/transcript/session-transcript-repair.js +0 -2
- package/dist/src/agent/transcript/strip-tool-messages.js +0 -2
- package/dist/src/agent/transcript/thinking-types.js +0 -2
- package/dist/src/agent/transcript/thinking.js +0 -2
- package/dist/src/agent/transcript/tool-call-id.js +0 -2
- package/dist/src/agent/transcript/transcript-hygiene.js +0 -2
- package/dist/src/agent/transcript/transcript-policy.js +0 -2
- package/dist/src/agent/workflow/agent-progress.js +0 -2
- package/dist/src/agent/workflow/builtins/index.js +0 -2
- package/dist/src/agent/workflow/catalog.js +0 -2
- package/dist/src/agent/workflow/progress-broker.js +0 -2
- package/dist/src/agent/workflow/snapshot-empty.js +0 -2
- package/dist/src/agent/workflow/snapshot.js +0 -2
- package/dist/src/agent/workflow/step-labels.js +0 -2
- package/dist/src/agent/workflow/structured-output-tool.js +0 -2
- package/dist/src/agent/workflow/subagent-runner.js +0 -2
- package/dist/src/agent/workflow/workflow-child-tools.js +0 -2
- package/dist/src/agent/workspace-runtime/registry.js +0 -2
- package/dist/src/agent-manifest/index.js +0 -2
- package/dist/src/agent-manifest/preset-chain.js +0 -2
- package/dist/src/agent-manifest/prompt.js +0 -2
- package/dist/src/agent-manifest/resolver.js +0 -2
- package/dist/src/agent-manifest/schema.js +0 -2
- package/dist/src/agent-manifest/validator.js +0 -2
- package/dist/src/agent-runtime/boundary-guard.js +0 -2
- package/dist/src/agent-runtime/memory-runtime.js +0 -2
- package/dist/src/agent-runtime/model-router.js +0 -2
- package/dist/src/agent-runtime/run-trace.js +0 -2
- package/dist/src/agent-runtime/runtime-profile.js +0 -2
- package/dist/src/agent-runtime/tool-registry.js +0 -2
- package/dist/src/agent-runtime/workflow-runtime.js +0 -2
- package/dist/src/ai-assist/text-assist.js +0 -2
- package/dist/src/auth/credentials.js +0 -2
- package/dist/src/auth/index.js +0 -2
- package/dist/src/auth/oauth/anthropic.js +0 -2
- package/dist/src/auth/oauth/github-copilot.js +0 -2
- package/dist/src/auth/oauth/google-oauth/google-antigravity.js +0 -2
- package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js +0 -2
- package/dist/src/auth/oauth/google-oauth/oauth-page.js +0 -2
- package/dist/src/auth/oauth/google-oauth/pkce.js +0 -2
- package/dist/src/auth/oauth/kimi-coding.js +0 -2
- package/dist/src/auth/oauth/minimax-cn.js +0 -2
- package/dist/src/auth/oauth/minimax.js +0 -2
- package/dist/src/auth/oauth/openai-codex.js +0 -2
- package/dist/src/auth/oauth/pkce.js +0 -2
- package/dist/src/auth/profiles/oauth.js +0 -2
- package/dist/src/auth/profiles/order.js +0 -2
- package/dist/src/auth/profiles/profiles.js +0 -2
- package/dist/src/auth/profiles/store.js +0 -2
- package/dist/src/auth/sync-provider-auth.js +0 -2
- package/dist/src/automations/api/routes.js +0 -2
- package/dist/src/automations/domain/schedule.js +0 -2
- package/dist/src/automations/domain/validation.js +0 -2
- package/dist/src/automations/draft/automation-draft-prompt.js +0 -2
- package/dist/src/automations/draft/automation-draft-service.js +0 -2
- package/dist/src/automations/draft/automation-draft-validator.js +0 -2
- package/dist/src/automations/product-events.js +0 -2
- package/dist/src/automations/service/action-executor.js +0 -2
- package/dist/src/automations/service/automation-service.js +0 -2
- package/dist/src/automations/storage/automation-repository.js +0 -2
- package/dist/src/automations/storage/automation-run-repository.js +0 -2
- package/dist/src/browser/actions/extension-registry-bridge.js +0 -2
- package/dist/src/browser/actions/registry.js +0 -2
- package/dist/src/browser/backend-from-config.js +0 -2
- package/dist/src/browser/browser-command-timeout.js +0 -2
- package/dist/src/browser/cache-dir-policy.js +0 -2
- package/dist/src/browser/cdp-local-launcher.js +0 -2
- package/dist/src/browser/cdp-supervisor.js +0 -2
- package/dist/src/browser/free-port.js +0 -2
- package/dist/src/browser/humanize.js +0 -2
- package/dist/src/browser/install-lock.js +0 -2
- package/dist/src/browser/manager.js +0 -2
- package/dist/src/browser/pipeline/output.js +0 -2
- package/dist/src/browser/pipeline/runner.js +0 -2
- package/dist/src/browser/pipeline/schema.js +0 -2
- package/dist/src/browser/pipeline/source.js +0 -2
- package/dist/src/browser/pipeline/template.js +0 -2
- package/dist/src/browser/providers/browser-ext-install.js +0 -2
- package/dist/src/browser/providers/browser-use.js +0 -2
- package/dist/src/browser/providers/browserbase.js +0 -2
- package/dist/src/browser/providers/cloakbrowser.js +0 -2
- package/dist/src/browser/providers/extension-ws-acquire.js +0 -2
- package/dist/src/browser/providers/extension.js +0 -2
- package/dist/src/browser/providers/playwright-doctor.js +13 -4
- package/dist/src/browser/providers/playwright-install.js +0 -2
- package/dist/src/browser/readiness.js +0 -2
- package/dist/src/browser/schemas.js +0 -2
- package/dist/src/browser/session-lifecycle.js +0 -2
- package/dist/src/browser/snapshot-helpers.js +0 -2
- package/dist/src/browser/stealth.js +0 -2
- package/dist/src/browser/url-policy.js +0 -2
- package/dist/src/capabilities/store-connector.js +0 -2
- package/dist/src/channels/attachments/attachment-classifiers.js +0 -2
- package/dist/src/channels/attachments/inbound-persist.js +0 -2
- package/dist/src/channels/attachments/inbound-types.js +0 -2
- package/dist/src/channels/attachments/outbound-tts-persist.js +0 -2
- package/dist/src/channels/attachments/voice-stt-webchat.js +0 -2
- package/dist/src/channels/catalog/channel-catalog-service.js +0 -2
- package/dist/src/channels/config-helpers.js +0 -2
- package/dist/src/channels/envelope-timestamp.js +0 -2
- package/dist/src/channels/exec-approval-runtime.js +0 -2
- package/dist/src/channels/health-monitor.js +0 -2
- package/dist/src/channels/heartbeat-scheduler.js +0 -2
- package/dist/src/channels/internal-outbound.js +0 -2
- package/dist/src/channels/lifecycle-supervisor.js +0 -2
- package/dist/src/channels/manager.js +0 -2
- package/dist/src/channels/media.js +0 -2
- package/dist/src/channels/outbound/deliver.js +0 -2
- package/dist/src/channels/outbound/normalize.js +0 -2
- package/dist/src/channels/outbound/persist-store.js +0 -2
- package/dist/src/channels/outbound/queue.js +0 -2
- package/dist/src/channels/outbound-sender.js +0 -2
- package/dist/src/channels/pairing/allow-from-file.js +0 -2
- package/dist/src/channels/pairing/approve-cli.js +0 -2
- package/dist/src/channels/pairing/pairing-challenge.js +0 -2
- package/dist/src/channels/pairing/pairing-constants.js +0 -2
- package/dist/src/channels/pairing/pairing-events.js +0 -2
- package/dist/src/channels/pairing/pairing-messages.js +0 -2
- package/dist/src/channels/pairing/pairing-service.js +0 -2
- package/dist/src/channels/pairing/pairing-store-adapter.js +0 -2
- package/dist/src/channels/pairing/pairing-store.js +0 -2
- package/dist/src/channels/pairing/paths.js +0 -2
- package/dist/src/channels/pairing/preseed-allow-from.js +0 -2
- package/dist/src/channels/pipeline.js +0 -2
- package/dist/src/channels/plugin-registry.js +0 -2
- package/dist/src/channels/plugins/registry.js +0 -2
- package/dist/src/channels/restart-policy.js +0 -2
- package/dist/src/channels/security-helpers.js +0 -2
- package/dist/src/channels/security.js +0 -2
- package/dist/src/channels/setup-wizard-discovery.js +0 -2
- package/dist/src/chat-commands/agent-edit.js +0 -2
- package/dist/src/chat-commands/builtins/config.js +0 -2
- package/dist/src/chat-commands/builtins/context.js +0 -2
- package/dist/src/chat-commands/builtins/goal.js +0 -2
- package/dist/src/chat-commands/builtins/model.js +0 -2
- package/dist/src/chat-commands/builtins/review.js +0 -2
- package/dist/src/chat-commands/builtins/session.js +0 -2
- package/dist/src/chat-commands/builtins/skill.js +0 -2
- package/dist/src/chat-commands/builtins/subgoal.js +0 -2
- package/dist/src/chat-commands/builtins/system.js +0 -2
- package/dist/src/chat-commands/builtins/thinking.js +0 -2
- package/dist/src/chat-commands/builtins/tts.js +0 -2
- package/dist/src/chat-commands/builtins/workflow.js +0 -2
- package/dist/src/chat-commands/command-parse.js +0 -2
- package/dist/src/chat-commands/config-paths.js +0 -2
- package/dist/src/chat-commands/config-value.js +0 -2
- package/dist/src/chat-commands/context.js +0 -2
- package/dist/src/chat-commands/format-output.js +0 -2
- package/dist/src/chat-commands/index.js +0 -2
- package/dist/src/chat-commands/processor.js +0 -2
- package/dist/src/chat-commands/registry.js +0 -2
- package/dist/src/chat-commands/session-key.js +0 -2
- package/dist/src/cli/argv-invocation.js +0 -2
- package/dist/src/cli/argv.js +0 -2
- package/dist/src/cli/bin.js +0 -2
- package/dist/src/cli/cli-log-level-preset.js +0 -2
- package/dist/src/cli/command-catalog.js +0 -2
- package/dist/src/cli/command-loaders.js +0 -2
- package/dist/src/cli/command-manifest.js +0 -2
- package/dist/src/cli/command-path-matches.js +0 -2
- package/dist/src/cli/command-path-policy.js +0 -2
- package/dist/src/cli/command-startup-policy.js +0 -2
- package/dist/src/cli/commands/agent/interactive.js +0 -2
- package/dist/src/cli/commands/agent/sessions.js +0 -2
- package/dist/src/cli/commands/agent/stream-renderer.js +0 -2
- package/dist/src/cli/commands/agent.js +0 -2
- package/dist/src/cli/commands/agents.js +0 -2
- package/dist/src/cli/commands/auth.js +0 -2
- package/dist/src/cli/commands/browser-cli-helpers.js +0 -2
- package/dist/src/cli/commands/browser.js +0 -2
- package/dist/src/cli/commands/channels.js +0 -2
- package/dist/src/cli/commands/config.js +0 -2
- package/dist/src/cli/commands/connectors.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-config.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js +0 -2
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js +0 -2
- package/dist/src/cli/commands/doctor/checks/config-health.js +0 -2
- package/dist/src/cli/commands/doctor/checks/database-schema.js +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-health.js +0 -2
- package/dist/src/cli/commands/doctor/checks/gateway-service.js +0 -2
- package/dist/src/cli/commands/doctor/checks/migrations.js +0 -2
- package/dist/src/cli/commands/doctor/checks/node-version.js +0 -2
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +0 -2
- package/dist/src/cli/commands/doctor/checks/security-audit.js +0 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/state-integrity.js +0 -2
- package/dist/src/cli/commands/doctor/checks/version-check.js +0 -2
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -2
- package/dist/src/cli/commands/doctor/flow.js +0 -2
- package/dist/src/cli/commands/doctor/format.js +0 -2
- package/dist/src/cli/commands/doctor/index.js +0 -2
- package/dist/src/cli/commands/extension-create.js +0 -2
- package/dist/src/cli/commands/extension-dev.js +0 -2
- package/dist/src/cli/commands/extension-marketplace.js +0 -2
- package/dist/src/cli/commands/extension-pack.js +0 -2
- package/dist/src/cli/commands/extension.js +0 -2
- package/dist/src/cli/commands/gateway/call.js +0 -2
- package/dist/src/cli/commands/gateway/health.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle-core.js +0 -2
- package/dist/src/cli/commands/gateway/lifecycle.js +0 -2
- package/dist/src/cli/commands/gateway/logs.js +0 -2
- package/dist/src/cli/commands/gateway/probe.js +0 -2
- package/dist/src/cli/commands/gateway/restart-health.js +0 -2
- package/dist/src/cli/commands/gateway/restart.js +0 -2
- package/dist/src/cli/commands/gateway/run-foreground.js +0 -2
- package/dist/src/cli/commands/gateway/service.js +0 -2
- package/dist/src/cli/commands/gateway/shared.js +0 -2
- package/dist/src/cli/commands/gateway/status.js +0 -2
- package/dist/src/cli/commands/gateway/stop.js +0 -2
- package/dist/src/cli/commands/gateway/subcommands.js +0 -2
- package/dist/src/cli/commands/gateway/token.js +0 -2
- package/dist/src/cli/commands/gateway-ssh-tunnel.js +0 -2
- package/dist/src/cli/commands/gateway.js +0 -2
- package/dist/src/cli/commands/goal.js +0 -2
- package/dist/src/cli/commands/image.js +0 -2
- package/dist/src/cli/commands/init.js +0 -2
- package/dist/src/cli/commands/logs.js +0 -2
- package/dist/src/cli/commands/models.js +0 -2
- package/dist/src/cli/commands/onboard/channels/index.js +0 -2
- package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/channels/registry.js +0 -2
- package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js +0 -2
- package/dist/src/cli/commands/onboard/gateway.js +0 -2
- package/dist/src/cli/commands/onboard/model.js +0 -2
- package/dist/src/cli/commands/onboard.js +0 -2
- package/dist/src/cli/commands/profile.js +0 -2
- package/dist/src/cli/commands/project.js +0 -2
- package/dist/src/cli/commands/providers.js +0 -2
- package/dist/src/cli/commands/resume.js +0 -2
- package/dist/src/cli/commands/search.js +0 -2
- package/dist/src/cli/commands/session/actions.js +0 -2
- package/dist/src/cli/commands/session/utils.js +0 -2
- package/dist/src/cli/commands/session.js +0 -2
- package/dist/src/cli/commands/setup-shared/output.js +0 -2
- package/dist/src/cli/commands/setup-shared/prompts.js +0 -2
- package/dist/src/cli/commands/setup-shared/runner.js +0 -2
- package/dist/src/cli/commands/setup-shared/types.js +0 -2
- package/dist/src/cli/commands/setup.js +0 -2
- package/dist/src/cli/commands/skills-test.js +0 -2
- package/dist/src/cli/commands/skills.js +0 -2
- package/dist/src/cli/commands/tailscale.js +0 -2
- package/dist/src/cli/commands/tui-runner.js +0 -2
- package/dist/src/cli/commands/tui.js +0 -2
- package/dist/src/cli/commands/tunnel.js +0 -2
- package/dist/src/cli/commands/update.js +0 -2
- package/dist/src/cli/commands/voice.js +0 -2
- package/dist/src/cli/context.js +0 -2
- package/dist/src/cli/extension-cli-register.js +0 -2
- package/dist/src/cli/gateway-run-argv.js +0 -2
- package/dist/src/cli/gateway-run-fast-path.js +0 -2
- package/dist/src/cli/index.js +0 -2
- package/dist/src/cli/registry.js +0 -2
- package/dist/src/cli/templates.js +0 -2
- package/dist/src/cli/utils/colors.js +0 -2
- package/dist/src/cli/utils/gateway-client-options.js +0 -2
- package/dist/src/cli/utils/gateway-client.js +0 -2
- package/dist/src/cli/utils/init-workspace-core.js +0 -2
- package/dist/src/cli/utils/init-workspace.js +0 -2
- package/dist/src/cli/utils/oauth-login.js +0 -2
- package/dist/src/cli/utils/oauth-providers.js +0 -2
- package/dist/src/cli/utils/session.js +0 -2
- package/dist/src/commands/agents.config.js +0 -2
- package/dist/src/config/agent-profile.js +0 -2
- package/dist/src/config/agent-typed-models.js +0 -2
- package/dist/src/config/commands.flags.js +0 -2
- package/dist/src/config/default-model.js +0 -2
- package/dist/src/config/diff.js +0 -2
- package/dist/src/config/gateway-bind.js +0 -2
- package/dist/src/config/index.js +0 -2
- package/dist/src/config/loader.js +0 -2
- package/dist/src/config/mcp-config-normalize.js +0 -2
- package/dist/src/config/model-input.js +0 -2
- package/dist/src/config/models-json.js +0 -2
- package/dist/src/config/paths-state.js +0 -2
- package/dist/src/config/paths.js +0 -2
- package/dist/src/config/profile.js +0 -2
- package/dist/src/config/public-url.js +0 -2
- package/dist/src/config/reload.js +0 -2
- package/dist/src/config/resolve-config-value.js +0 -2
- package/dist/src/config/rules.js +0 -2
- package/dist/src/config/runtime-overrides.js +0 -2
- package/dist/src/config/schema.js +0 -2
- package/dist/src/config/validate-channel-configs.js +0 -2
- package/dist/src/config/voice.js +0 -2
- package/dist/src/config/web-patch.js +0 -2
- package/dist/src/config/workspace-defaults.js +0 -2
- package/dist/src/config/workspace-dirs.js +0 -2
- package/dist/src/config/workspace-path-helpers.js +0 -2
- package/dist/src/config/workspace-path.js +0 -2
- package/dist/src/connectors/approval.js +0 -2
- package/dist/src/connectors/auth-provider-registry.js +0 -2
- package/dist/src/connectors/builtin-catalog.js +0 -2
- package/dist/src/connectors/catalog.js +0 -2
- package/dist/src/connectors/composio-catalog.js +0 -2
- package/dist/src/connectors/composio-logo.js +0 -2
- package/dist/src/connectors/composio-sessions.js +9 -5
- package/dist/src/connectors/composio-triggers.js +0 -2
- package/dist/src/connectors/composio.js +0 -2
- package/dist/src/connectors/connector-memory-sync.js +0 -2
- package/dist/src/connectors/health.js +0 -2
- package/dist/src/connectors/install.js +0 -2
- package/dist/src/connectors/instances.js +0 -2
- package/dist/src/connectors/integration-strategy.js +0 -2
- package/dist/src/connectors/lifecycle.js +0 -2
- package/dist/src/connectors/materialize.js +0 -2
- package/dist/src/connectors/policy.js +0 -2
- package/dist/src/connectors/providers.js +0 -2
- package/dist/src/connectors/registries/modelscope.js +0 -2
- package/dist/src/connectors/registries/official-mcp.js +0 -2
- package/dist/src/connectors/registries/search.js +0 -2
- package/dist/src/connectors/registries/smithery.js +0 -2
- package/dist/src/connectors/runtime-adapter-registry.js +0 -2
- package/dist/src/connectors/secret-store.js +0 -2
- package/dist/src/connectors/setup-secrets.js +0 -2
- package/dist/src/connectors/supervisor.js +0 -2
- package/dist/src/connectors/usage.js +0 -2
- package/dist/src/connectors/workflow-preflight.js +0 -2
- package/dist/src/daemon/constants.js +0 -2
- package/dist/src/daemon/install-plan.js +0 -2
- package/dist/src/daemon/launchd.js +0 -2
- package/dist/src/daemon/schtasks.js +0 -2
- package/dist/src/daemon/service-audit.js +0 -2
- package/dist/src/daemon/service.js +0 -2
- package/dist/src/daemon/systemd.js +0 -2
- package/dist/src/document-understanding/extract.js +0 -2
- package/dist/src/errors/index.js +0 -2
- package/dist/src/extensions/activation-context.js +0 -2
- package/dist/src/extensions/activation-planner.js +0 -2
- package/dist/src/extensions/api.js +0 -2
- package/dist/src/extensions/bundle-mcp.js +0 -2
- package/dist/src/extensions/bundled-extension-activation.js +0 -2
- package/dist/src/extensions/diagnostics.js +0 -2
- package/dist/src/extensions/discover-extensions.js +0 -2
- package/dist/src/extensions/engine-check.js +0 -2
- package/dist/src/extensions/extension-metadata-snapshot.js +0 -2
- package/dist/src/extensions/extension-registry-impl.js +0 -2
- package/dist/src/extensions/health.js +0 -2
- package/dist/src/extensions/hooks.js +0 -2
- package/dist/src/extensions/index.js +0 -2
- package/dist/src/extensions/install-transaction.js +0 -2
- package/dist/src/extensions/install.js +0 -2
- package/dist/src/extensions/loader.js +0 -2
- package/dist/src/extensions/lockfile.js +0 -2
- package/dist/src/extensions/manifest-registry.js +0 -2
- package/dist/src/extensions/marketplace.js +0 -2
- package/dist/src/extensions/media-provider-contracts.js +0 -2
- package/dist/src/extensions/normalize-manifest.js +0 -2
- package/dist/src/extensions/onboard-helpers.js +0 -2
- package/dist/src/extensions/package-contract.js +0 -2
- package/dist/src/extensions/sdk/channel-entry.js +0 -2
- package/dist/src/extensions/sdk/channel-helpers.js +0 -2
- package/dist/src/extensions/sdk/index.js +0 -2
- package/dist/src/extensions/sdk/lazy.js +0 -2
- package/dist/src/extensions/sdk/testing.js +0 -2
- package/dist/src/extensions/security.js +0 -2
- package/dist/src/extensions/slots.js +0 -2
- package/dist/src/extensions/speech-provider-contracts.js +0 -2
- package/dist/src/extensions/store-zip-limits.js +0 -2
- package/dist/src/extensions/typed-event-bus.js +0 -2
- package/dist/src/extensions/types/hooks.js +0 -2
- package/dist/src/extensions/types/providers.js +0 -2
- package/dist/src/extensions/update.js +0 -2
- package/dist/src/extensions/when-context.js +0 -2
- package/dist/src/extensions/when-expression.js +0 -2
- package/dist/src/gateway/agent-builtin-tools.js +0 -2
- package/dist/src/gateway/agent-run-relay.js +0 -2
- package/dist/src/gateway/agents-admin.js +0 -2
- package/dist/src/gateway/auth.js +0 -2
- package/dist/src/gateway/capability-presets-admin.js +0 -2
- package/dist/src/gateway/chat-limits.js +0 -2
- package/dist/src/gateway/chat-stream/mapper.js +28 -14
- package/dist/src/gateway/chat-stream/pet-feedback.d.ts +13 -0
- package/dist/src/gateway/chat-stream/pet-feedback.js +45 -0
- package/dist/src/gateway/chat-stream/protocol.d.ts +26 -0
- package/dist/src/gateway/clarify-bridge.js +3 -3
- package/dist/src/gateway/clarify-runtime.js +0 -2
- package/dist/src/gateway/client-ip.js +0 -2
- package/dist/src/gateway/config-tools-web.js +0 -2
- package/dist/src/gateway/credential.js +0 -2
- package/dist/src/gateway/discovery/mdns.js +0 -2
- package/dist/src/gateway/dreaming-automation-reconciler.js +0 -2
- package/dist/src/gateway/ensure-network-cors.js +0 -2
- package/dist/src/gateway/file-path-classifier.js +0 -2
- package/dist/src/gateway/file-reference-registry.js +0 -2
- package/dist/src/gateway/global-defaults-admin.js +0 -2
- package/dist/src/gateway/heartbeat/service.js +0 -2
- package/dist/src/gateway/hono/app.js +0 -2
- package/dist/src/gateway/hono/lib/agent-model.js +0 -2
- package/dist/src/gateway/hono/lib/config-payload.js +0 -2
- package/dist/src/gateway/hono/lib/extension-assets.js +0 -2
- package/dist/src/gateway/hono/lib/extension-store.js +0 -2
- package/dist/src/gateway/hono/lib/mask-secret-length.js +0 -2
- package/dist/src/gateway/hono/lib/route-logger.js +0 -2
- package/dist/src/gateway/hono/lib/safe-providers-config.js +0 -2
- package/dist/src/gateway/hono/lib/safe-voice-config.js +0 -2
- package/dist/src/gateway/hono/lib/startup-unavailable.js +0 -2
- package/dist/src/gateway/hono/lib/static-ui.js +0 -2
- package/dist/src/gateway/hono/middleware/auth.js +0 -2
- package/dist/src/gateway/hono/middleware/log-context.js +0 -2
- package/dist/src/gateway/hono/middleware/logger.js +0 -2
- package/dist/src/gateway/hono/middleware/route-errors.js +0 -2
- package/dist/src/gateway/hono/middleware/scopes.js +0 -2
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +0 -2
- package/dist/src/gateway/hono/oauth-async.js +0 -2
- package/dist/src/gateway/hono/oauth.js +0 -2
- package/dist/src/gateway/hono/routes/activity.js +0 -2
- package/dist/src/gateway/hono/routes/agent-stream.js +0 -2
- package/dist/src/gateway/hono/routes/agents.js +0 -2
- package/dist/src/gateway/hono/routes/ai-assist.js +0 -2
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +0 -2
- package/dist/src/gateway/hono/routes/browser-install.js +0 -2
- package/dist/src/gateway/hono/routes/browser.js +0 -2
- package/dist/src/gateway/hono/routes/capabilities.js +0 -2
- package/dist/src/gateway/hono/routes/capability-presets.js +0 -2
- package/dist/src/gateway/hono/routes/channels.js +0 -2
- package/dist/src/gateway/hono/routes/commands-skills.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/agents.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/misc.js +0 -2
- package/dist/src/gateway/hono/routes/config-patch/result.js +0 -2
- package/dist/src/gateway/hono/routes/config.js +0 -2
- package/dist/src/gateway/hono/routes/connectors.js +0 -2
- package/dist/src/gateway/hono/routes/doctor.js +0 -2
- package/dist/src/gateway/hono/routes/dreaming.js +0 -2
- package/dist/src/gateway/hono/routes/exposure.js +0 -2
- package/dist/src/gateway/hono/routes/extension-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/global-defaults.js +0 -2
- package/dist/src/gateway/hono/routes/goals.js +0 -2
- package/dist/src/gateway/hono/routes/home.js +0 -2
- package/dist/src/gateway/hono/routes/host-fs.js +0 -2
- package/dist/src/gateway/hono/routes/index.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +0 -2
- package/dist/src/gateway/hono/routes/lazy-fallback.js +0 -2
- package/dist/src/gateway/hono/routes/local-apps.js +0 -2
- package/dist/src/gateway/hono/routes/logs.js +0 -2
- package/dist/src/gateway/hono/routes/mcp.js +0 -2
- package/dist/src/gateway/hono/routes/media.js +0 -2
- package/dist/src/gateway/hono/routes/memory.js +0 -2
- package/dist/src/gateway/hono/routes/migrations.js +0 -2
- package/dist/src/gateway/hono/routes/mobile.js +0 -2
- package/dist/src/gateway/hono/routes/models.js +0 -2
- package/dist/src/gateway/hono/routes/notes.js +3 -3
- package/dist/src/gateway/hono/routes/projects.js +0 -2
- package/dist/src/gateway/hono/routes/public-gateway.js +0 -2
- package/dist/src/gateway/hono/routes/search.js +0 -2
- package/dist/src/gateway/hono/routes/sessions.js +0 -2
- package/dist/src/gateway/hono/routes/shares.js +0 -2
- package/dist/src/gateway/hono/routes/site-shares.js +0 -2
- package/dist/src/gateway/hono/routes/status.js +0 -2
- package/dist/src/gateway/hono/routes/tui.js +0 -2
- package/dist/src/gateway/hono/routes/tunnel.js +0 -2
- package/dist/src/gateway/hono/routes/update.js +0 -2
- package/dist/src/gateway/hono/routes/voice.js +0 -2
- package/dist/src/gateway/hono/routes/work-discovery.js +0 -2
- package/dist/src/gateway/hono/routes/workflows.js +0 -2
- package/dist/src/gateway/hono/routes/workspace.js +0 -2
- package/dist/src/gateway/hono/routes/you.js +0 -2
- package/dist/src/gateway/hono/sse-json.js +0 -2
- package/dist/src/gateway/hono/sse.js +0 -2
- package/dist/src/gateway/host.js +0 -2
- package/dist/src/gateway/image-capabilities.js +0 -2
- package/dist/src/gateway/listen.js +0 -2
- package/dist/src/gateway/lock.js +0 -2
- package/dist/src/gateway/ports.js +0 -2
- package/dist/src/gateway/protocol.js +0 -2
- package/dist/src/gateway/public-url.js +0 -2
- package/dist/src/gateway/rate-limit/auth-policy.js +0 -2
- package/dist/src/gateway/rate-limit/buckets.js +0 -2
- package/dist/src/gateway/rate-limit/env-flags.js +0 -2
- package/dist/src/gateway/resolve-channel-connect-defer.js +0 -2
- package/dist/src/gateway/resolve-webchat-session-key.js +0 -2
- package/dist/src/gateway/respawn.js +0 -2
- package/dist/src/gateway/run-loop.js +0 -2
- package/dist/src/gateway/runtime-config.js +0 -2
- package/dist/src/gateway/security/audit.js +0 -2
- package/dist/src/gateway/security/csp.js +0 -2
- package/dist/src/gateway/security/dangerous-tools.js +0 -2
- package/dist/src/gateway/security/external-content.js +0 -2
- package/dist/src/gateway/security/known-weak-secrets.js +0 -2
- package/dist/src/gateway/security/loopback.js +0 -2
- package/dist/src/gateway/security/operator-scopes.js +0 -2
- package/dist/src/gateway/security/origin-check.js +0 -2
- package/dist/src/gateway/security/preauth-connection-budget.js +0 -2
- package/dist/src/gateway/security/secret-equal.js +0 -2
- package/dist/src/gateway/server-tailscale.js +0 -2
- package/dist/src/gateway/server.js +0 -2
- package/dist/src/gateway/service/agent-runner.js +0 -2
- package/dist/src/gateway/service/config-coordinator.js +0 -2
- package/dist/src/gateway/service/marketplace-service.js +0 -2
- package/dist/src/gateway/service/run-gateway-agent.js +0 -2
- package/dist/src/gateway/service/session-chat-ids.js +0 -2
- package/dist/src/gateway/service/sessions-api.js +0 -2
- package/dist/src/gateway/service/sse-hub.js +0 -2
- package/dist/src/gateway/service.js +1 -2
- package/dist/src/gateway/session-reset-service.js +0 -2
- package/dist/src/gateway/startup-readiness.js +0 -2
- package/dist/src/gateway/startup-trace.js +0 -2
- package/dist/src/gateway/tailscale-auth.js +0 -2
- package/dist/src/gateway/tailscale-lifecycle.js +0 -2
- package/dist/src/gateway/tls-server.js +0 -2
- package/dist/src/gateway/trusted-proxy.js +0 -2
- package/dist/src/gateway/user-turn-input.js +0 -2
- package/dist/src/gateway/workspace-editor-path.js +0 -2
- package/dist/src/gateway/workspace-file-search.js +0 -2
- package/dist/src/gateway/workspace-fs-file-list.js +0 -2
- package/dist/src/gateway/workspace-heartbeat-path.js +0 -2
- package/dist/src/gateway/workspace-ripgrep.js +0 -2
- package/dist/src/gateway/ws-security.js +0 -2
- package/dist/src/generated/bundled-image-generation-providers.js +0 -2
- package/dist/src/goals/goal-contract-draft.js +0 -2
- package/dist/src/goals/goal-evidence-review.js +0 -2
- package/dist/src/goals/goal-notifications.js +0 -2
- package/dist/src/goals/goal-queue-store.js +0 -2
- package/dist/src/goals/goal-runner.js +0 -2
- package/dist/src/goals/goal-service.js +0 -2
- package/dist/src/goals/goal-store.js +0 -2
- package/dist/src/goals/goal-workflow-judge.js +0 -2
- package/dist/src/heartbeat/active-hours.js +0 -2
- package/dist/src/heartbeat/content-check.js +0 -2
- package/dist/src/heartbeat/event-prompt.js +0 -2
- package/dist/src/heartbeat/tokens.js +0 -2
- package/dist/src/heartbeat/wake.js +0 -2
- package/dist/src/i18n/format.js +0 -2
- package/dist/src/i18n/goals-bundle.js +0 -2
- package/dist/src/i18n/locale.js +0 -2
- package/dist/src/i18n/locales/goals.en.js +0 -2
- package/dist/src/i18n/locales/goals.zh.js +0 -2
- package/dist/src/i18n/locales/share-tool.en.js +0 -2
- package/dist/src/i18n/locales/share-tool.zh.js +0 -2
- package/dist/src/i18n/share-tool-bundle.js +0 -2
- package/dist/src/index.js +0 -2
- package/dist/src/infra/brew.js +0 -2
- package/dist/src/infra/bus/queue.js +0 -2
- package/dist/src/infra/debounce.js +0 -2
- package/dist/src/infra/exec.js +0 -2
- package/dist/src/infra/gateway-process-argv.js +0 -2
- package/dist/src/infra/gateway-processes.js +0 -2
- package/dist/src/infra/host-env-security-policy.js +0 -2
- package/dist/src/infra/host-env-security.js +0 -2
- package/dist/src/infra/http-proxy-env.js +0 -2
- package/dist/src/infra/is-main.js +0 -2
- package/dist/src/infra/json-utf8-bytes.js +0 -2
- package/dist/src/infra/node-sqlite.js +0 -2
- package/dist/src/infra/package-json.js +0 -2
- package/dist/src/infra/package-update-steps.js +0 -2
- package/dist/src/infra/path-env.js +0 -2
- package/dist/src/infra/path-prepend.js +0 -2
- package/dist/src/infra/ports.js +0 -2
- package/dist/src/infra/rate-limit/failure-limiter.js +0 -2
- package/dist/src/infra/rate-limit/keyed-store.js +0 -2
- package/dist/src/infra/rate-limit/rate-limiter.js +0 -2
- package/dist/src/infra/restart.js +0 -2
- package/dist/src/infra/retry.js +0 -2
- package/dist/src/infra/run-command.js +0 -2
- package/dist/src/infra/sqlite-errors.js +0 -2
- package/dist/src/infra/ssh-tunnel.js +0 -2
- package/dist/src/infra/stable-node-path.js +0 -2
- package/dist/src/infra/tailscale.js +0 -2
- package/dist/src/infra/undici-fetch.js +0 -2
- package/dist/src/infra/unhandled-rejections.js +0 -2
- package/dist/src/infra/update-channels.js +0 -2
- package/dist/src/infra/update-check.js +0 -2
- package/dist/src/infra/update-global.js +0 -2
- package/dist/src/infra/update-lock.js +0 -2
- package/dist/src/infra/update-log.js +0 -2
- package/dist/src/infra/update-restart.js +0 -2
- package/dist/src/infra/update-runner.js +0 -2
- package/dist/src/infra/update-startup.js +0 -2
- package/dist/src/infra/warning-filter.js +0 -2
- package/dist/src/infra/write-file-atomic.js +0 -2
- package/dist/src/knowledge/connected-knowledge-pipeline.js +0 -2
- package/dist/src/knowledge/coordinator.js +0 -2
- package/dist/src/knowledge/ingestion-service.js +0 -2
- package/dist/src/local-apps/acceptance.js +0 -2
- package/dist/src/local-apps/preview-runtime-bridge.js +0 -2
- package/dist/src/local-apps/runtime-entry.js +0 -2
- package/dist/src/local-apps/scaffold.js +0 -2
- package/dist/src/local-apps/service.js +0 -2
- package/dist/src/local-apps/store.js +0 -2
- package/dist/src/markdown/chunk.js +0 -2
- package/dist/src/markdown/code-spans.js +0 -2
- package/dist/src/markdown/fences.js +0 -2
- package/dist/src/markdown/frontmatter.js +0 -2
- package/dist/src/markdown/ir.js +0 -2
- package/dist/src/markdown/render.js +0 -2
- package/dist/src/markdown/tables.js +0 -2
- package/dist/src/mcp/channel-bridge.js +0 -2
- package/dist/src/mcp/channel-server.js +0 -2
- package/dist/src/mcp/channel-shared.js +0 -2
- package/dist/src/mcp/channel-tools.js +0 -2
- package/dist/src/mcp/gateway-http-client.js +0 -2
- package/dist/src/media/media-reference.js +0 -2
- package/dist/src/media/paths.js +0 -2
- package/dist/src/media/session-references.js +0 -2
- package/dist/src/media/store.js +0 -2
- package/dist/src/media/uri.js +0 -2
- package/dist/src/media-shared/http/api-key-rotation.js +0 -2
- package/dist/src/media-shared/http/deadline.js +0 -2
- package/dist/src/media-shared/http/private-network.js +0 -2
- package/dist/src/media-shared/http/provider-http-errors.js +0 -2
- package/dist/src/media-shared/http/provider-http.js +0 -2
- package/dist/src/media-shared/http/resolve-provider-http-request-config.js +0 -2
- package/dist/src/media-shared/http/ssrf-guard.js +0 -2
- package/dist/src/media-shared/http/test-helpers/mock-server.js +0 -2
- package/dist/src/media-understanding/audio-transcription-runner.js +0 -2
- package/dist/src/media-understanding/openai-compatible-audio.js +0 -2
- package/dist/src/media-understanding/registry.js +0 -2
- package/dist/src/media-understanding/resolve-entries.js +0 -2
- package/dist/src/media-understanding/runner.js +0 -2
- package/dist/src/migrations/config/default-capability-preset.js +0 -2
- package/dist/src/migrations/registry.js +0 -2
- package/dist/src/migrations/runner.js +0 -2
- package/dist/src/mobile/notification-service.js +0 -2
- package/dist/src/mobile/notification-store.js +0 -2
- package/dist/src/mobile/notification-types.js +0 -2
- package/dist/src/notes/agent-context.js +0 -2
- package/dist/src/notes/attachment-ref.js +0 -2
- package/dist/src/notes/note-attachment-sync.js +0 -2
- package/dist/src/notes/note-index-meta.js +0 -2
- package/dist/src/notes/note-markdown.js +0 -2
- package/dist/src/notes/paths.js +0 -2
- package/dist/src/notes/service.d.ts +3 -1
- package/dist/src/notes/service.js +19 -5
- package/dist/src/notes/store.js +0 -2
- package/dist/src/package-version.js +0 -2
- package/dist/src/pets/factory.d.ts +13 -0
- package/dist/src/pets/factory.js +23 -2
- package/dist/src/pets/manifest.js +0 -2
- package/dist/src/pets/validator.js +0 -2
- package/dist/src/process/kill-tree.js +0 -2
- package/dist/src/project-trust/trust-store.js +0 -2
- package/dist/src/projects/automation-bind.js +0 -2
- package/dist/src/projects/goal-bind.js +0 -2
- package/dist/src/projects/memory-bind.js +0 -2
- package/dist/src/projects/project-agent-suggestion.js +0 -2
- package/dist/src/projects/project-agent.js +0 -2
- package/dist/src/projects/project-kind.js +0 -2
- package/dist/src/projects/project-loop.js +0 -2
- package/dist/src/projects/project-service.js +0 -2
- package/dist/src/projects/project-store.js +0 -2
- package/dist/src/projects/session-bind.js +0 -2
- package/dist/src/projects/workflow-bind.js +0 -2
- package/dist/src/projects/workspace-project.js +0 -2
- package/dist/src/projects/workspace.js +0 -2
- package/dist/src/providers/auth-runtime/auth-profile-store.js +0 -2
- package/dist/src/providers/auth-runtime/is-configured.js +0 -2
- package/dist/src/providers/auth-runtime/oauth.js +0 -2
- package/dist/src/providers/auth-runtime/resolve-api-key.js +0 -2
- package/dist/src/providers/auth-runtime/resolve-auth.js +0 -2
- package/dist/src/providers/constants.js +0 -2
- package/dist/src/providers/domestic-presets.js +0 -2
- package/dist/src/providers/env-keys.js +0 -2
- package/dist/src/providers/extension-stream-bridge.js +0 -2
- package/dist/src/providers/index.js +0 -2
- package/dist/src/providers/model-call.js +0 -2
- package/dist/src/providers/model-discovery.js +0 -2
- package/dist/src/providers/model-registry.js +0 -2
- package/dist/src/providers/model-supplements.js +0 -2
- package/dist/src/providers/plugin-registry.js +0 -2
- package/dist/src/providers/presentation.js +0 -2
- package/dist/src/remote-access/exposure-guards.js +0 -2
- package/dist/src/remote-access/exposure-manager.js +0 -2
- package/dist/src/review/review-git.js +0 -2
- package/dist/src/review/review-types.js +0 -2
- package/dist/src/routing/account-id.js +0 -2
- package/dist/src/routing/agent-session-key.js +0 -2
- package/dist/src/routing/bindings.js +0 -2
- package/dist/src/routing/index.js +0 -2
- package/dist/src/routing/resolve-route.js +0 -2
- package/dist/src/routing/resolve-tui-session-key.js +0 -2
- package/dist/src/routing/session-key-utils.js +0 -2
- package/dist/src/routing/session-key.js +0 -2
- package/dist/src/session/abort-cutoff.js +0 -2
- package/dist/src/session/chat-export.js +0 -2
- package/dist/src/session/client-history.js +0 -2
- package/dist/src/session/compaction-checkpoints.js +0 -2
- package/dist/src/session/config-store.js +0 -2
- package/dist/src/session/init-session-turn.js +0 -2
- package/dist/src/session/lifecycle-timestamps.js +0 -2
- package/dist/src/session/load-jsonl-entries.js +0 -2
- package/dist/src/session/manager.js +0 -2
- package/dist/src/session/patch-metadata.js +0 -2
- package/dist/src/session/reset-policy.js +0 -2
- package/dist/src/session/reset-triggers.js +0 -2
- package/dist/src/session/reset-type.js +0 -2
- package/dist/src/session/resolve-session.js +0 -2
- package/dist/src/session/session-context-for-llm.js +0 -2
- package/dist/src/session/session-id.js +0 -2
- package/dist/src/session/session-title.js +0 -2
- package/dist/src/session/session-workspace.js +0 -2
- package/dist/src/session/store.js +0 -2
- package/dist/src/session/stored-rows-to-file-entries.js +0 -2
- package/dist/src/session/thinking-resolve.js +0 -2
- package/dist/src/session/transcript-events.js +0 -2
- package/dist/src/session/transcript-format.js +0 -2
- package/dist/src/session/transcript-outline.js +0 -2
- package/dist/src/session/transcript-stats.js +0 -2
- package/dist/src/session/types.js +0 -2
- package/dist/src/session/user-round-delete.js +0 -2
- package/dist/src/share/share-audit.js +0 -2
- package/dist/src/share/share-auto.js +0 -2
- package/dist/src/share/share-config.js +0 -2
- package/dist/src/share/share-landing.js +0 -2
- package/dist/src/share/share-rate-limit.js +0 -2
- package/dist/src/share/share-store.js +0 -2
- package/dist/src/share/share-thumbnail.js +0 -2
- package/dist/src/share/share-types.js +0 -2
- package/dist/src/share/share-url.js +0 -2
- package/dist/src/share/share-zip.js +0 -2
- package/dist/src/share/site-proxy.js +0 -2
- package/dist/src/share/site-share-config.js +0 -2
- package/dist/src/share/site-share-router.js +0 -2
- package/dist/src/share/site-share-store.js +0 -2
- package/dist/src/share/site-share-types.js +0 -2
- package/dist/src/share/site-static-serve.js +0 -2
- package/dist/src/storage/sqlite/activity-repository.js +0 -2
- package/dist/src/storage/sqlite/config-repository.js +0 -2
- package/dist/src/storage/sqlite/connection.js +0 -2
- package/dist/src/storage/sqlite/connector-repository.js +0 -2
- package/dist/src/storage/sqlite/fts.js +0 -2
- package/dist/src/storage/sqlite/knowledge-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-index-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-records-repository.js +0 -2
- package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -2
- package/dist/src/storage/sqlite/migrations/discover.js +0 -2
- package/dist/src/storage/sqlite/migrations/errors.js +0 -2
- package/dist/src/storage/sqlite/migrations/runner.js +0 -2
- package/dist/src/storage/sqlite/note-agent-context-repository.js +0 -2
- package/dist/src/storage/sqlite/notes-repository.js +0 -2
- package/dist/src/storage/sqlite/paths.js +0 -2
- package/dist/src/storage/sqlite/row-mappers.js +0 -2
- package/dist/src/storage/sqlite/schema-version.js +0 -2
- package/dist/src/storage/sqlite/schema.js +0 -2
- package/dist/src/storage/sqlite/session-metadata.js +0 -2
- package/dist/src/storage/sqlite/session-repository.js +0 -2
- package/dist/src/storage/sqlite/transaction.js +0 -2
- package/dist/src/storage/sqlite/transcript-repository.js +0 -2
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -2
- package/dist/src/storage/sqlite/user-trust-repository.js +0 -2
- package/dist/src/tui/backends/embedded-backend.js +0 -2
- package/dist/src/tui/backends/gateway-sse-backend.js +0 -2
- package/dist/src/tui/chat-history.js +0 -2
- package/dist/src/tui/clipboard-image.js +0 -2
- package/dist/src/tui/clipboard-text.js +0 -2
- package/dist/src/tui/components/assistant-message.js +0 -2
- package/dist/src/tui/components/bash-execution.js +0 -2
- package/dist/src/tui/components/bash-summary.js +0 -2
- package/dist/src/tui/components/branch-message-summary.js +0 -2
- package/dist/src/tui/components/branch-summary.js +0 -2
- package/dist/src/tui/components/chat-log.js +0 -2
- package/dist/src/tui/components/compaction-summary.js +0 -2
- package/dist/src/tui/components/custom-editor.js +0 -2
- package/dist/src/tui/components/custom-message.js +0 -2
- package/dist/src/tui/components/dynamic-border.js +0 -2
- package/dist/src/tui/components/extension-dialog.js +0 -2
- package/dist/src/tui/components/fuzzy-filter.js +0 -2
- package/dist/src/tui/components/scoped-models-selector.js +0 -2
- package/dist/src/tui/components/searchable-select-list.js +0 -2
- package/dist/src/tui/components/session-selector.js +0 -2
- package/dist/src/tui/components/settings-selector.js +0 -2
- package/dist/src/tui/components/thinking-selector.js +0 -2
- package/dist/src/tui/components/tool-execution.js +0 -2
- package/dist/src/tui/components/tui-bottom-bar.js +0 -2
- package/dist/src/tui/components/tui-header.js +0 -2
- package/dist/src/tui/components/user-message.js +0 -2
- package/dist/src/tui/components/visual-truncate.js +0 -2
- package/dist/src/tui/extension-host/autocomplete.js +0 -2
- package/dist/src/tui/extension-host/host.js +0 -2
- package/dist/src/tui/extension-host/load-extensions.js +0 -2
- package/dist/src/tui/extension-host/runtime-context.js +0 -2
- package/dist/src/tui/extension-host/runtime.js +0 -2
- package/dist/src/tui/extension-host/surface.js +0 -2
- package/dist/src/tui/extension-host/tool-renderers.js +0 -2
- package/dist/src/tui/format-tui-hotkeys.js +0 -2
- package/dist/src/tui/sse-consumer.js +0 -2
- package/dist/src/tui/theme/dark.js +0 -2
- package/dist/src/tui/theme/light.js +0 -2
- package/dist/src/tui/theme-manager.js +0 -2
- package/dist/src/tui/theme.js +0 -2
- package/dist/src/tui/tool-summary.js +0 -2
- package/dist/src/tui/tui-agent-events.js +0 -2
- package/dist/src/tui/tui-command-formatters.js +0 -2
- package/dist/src/tui/tui-commands.js +0 -2
- package/dist/src/tui/tui-context-usage.js +0 -2
- package/dist/src/tui/tui-extension-user-message.js +0 -2
- package/dist/src/tui/tui-fd-path.js +0 -2
- package/dist/src/tui/tui-file-autocomplete.js +0 -2
- package/dist/src/tui/tui-follow-up-queue.js +0 -2
- package/dist/src/tui/tui-git-branch.js +0 -2
- package/dist/src/tui/tui-keybindings-file.js +0 -2
- package/dist/src/tui/tui-lifecycle.js +0 -2
- package/dist/src/tui/tui-local-shell.js +0 -2
- package/dist/src/tui/tui-model-picker.js +0 -2
- package/dist/src/tui/tui-oauth-login.js +0 -2
- package/dist/src/tui/tui-overlays.js +0 -2
- package/dist/src/tui/tui-picker-overlay.js +0 -2
- package/dist/src/tui/tui-run-state.js +0 -2
- package/dist/src/tui/tui-run-status-format.js +0 -2
- package/dist/src/tui/tui-runtime-hints.js +0 -2
- package/dist/src/tui/tui-scoped-models.js +0 -2
- package/dist/src/tui/tui-session-actions.js +0 -2
- package/dist/src/tui/tui-session-format.js +0 -2
- package/dist/src/tui/tui-session-snapshot.js +0 -2
- package/dist/src/tui/tui-session-stats.js +0 -2
- package/dist/src/tui/tui-settings.js +0 -2
- package/dist/src/tui/tui-skills-autocomplete.js +0 -2
- package/dist/src/tui/tui-startup-resources.js +0 -2
- package/dist/src/tui/tui-startup-text.js +0 -2
- package/dist/src/tui/tui-stdio-filter.js +0 -2
- package/dist/src/tui/tui-submit.js +0 -2
- package/dist/src/tui/tui-suspend.js +0 -2
- package/dist/src/tui/tui-timeline-picker.js +0 -2
- package/dist/src/tui/tui-timeline.js +0 -2
- package/dist/src/tui/tui-tool-diff.js +0 -2
- package/dist/src/tui/tui-tool-result.js +0 -2
- package/dist/src/tui/tui-transcript-tree-picker.js +0 -2
- package/dist/src/tui/tui-transcript-tree.js +0 -2
- package/dist/src/tui/tui-types.js +0 -2
- package/dist/src/tui/tui-workflow-slash.js +0 -2
- package/dist/src/tui/tui.js +0 -2
- package/dist/src/tui/xopc-tui-keybindings.js +0 -2
- package/dist/src/tunnel/broker-client.js +0 -2
- package/dist/src/tunnel/consent.js +0 -2
- package/dist/src/tunnel/enable-lan-pairing.js +0 -2
- package/dist/src/tunnel/env.js +0 -2
- package/dist/src/tunnel/frp-subdomain-host.js +0 -2
- package/dist/src/tunnel/frpc-binary.js +0 -2
- package/dist/src/tunnel/frpc-config.js +0 -2
- package/dist/src/tunnel/frpc-extract.js +0 -2
- package/dist/src/tunnel/frpc-process.js +0 -2
- package/dist/src/tunnel/gateway-lifecycle.js +0 -2
- package/dist/src/tunnel/pair-context.js +0 -2
- package/dist/src/tunnel/pair-url.js +0 -2
- package/dist/src/tunnel/pairing-rate-limit.js +0 -2
- package/dist/src/tunnel/pairing.js +0 -2
- package/dist/src/tunnel/tunnel-audit.js +0 -2
- package/dist/src/tunnel/tunnel-config.js +0 -2
- package/dist/src/tunnel/tunnel-persist.js +0 -2
- package/dist/src/tunnel/tunnel-qr.js +0 -2
- package/dist/src/tunnel/tunnel-rate-limit.js +0 -2
- package/dist/src/tunnel/tunnel-service.js +0 -2
- package/dist/src/tunnel/tunnel-state.js +0 -2
- package/dist/src/tunnel/well-known.js +0 -2
- package/dist/src/user-context/config.js +0 -2
- package/dist/src/user-context/import.js +0 -2
- package/dist/src/user-context/owner.js +0 -2
- package/dist/src/user-context/profile.js +0 -2
- package/dist/src/user-context/projection.js +0 -2
- package/dist/src/user-context/runtime.js +0 -2
- package/dist/src/user-context/source-recommendations.js +0 -2
- package/dist/src/user-context/trust-policy.js +0 -2
- package/dist/src/utils/global-singleton.js +0 -2
- package/dist/src/utils/helpers.js +0 -2
- package/dist/src/utils/index.js +0 -2
- package/dist/src/utils/is-record.js +0 -2
- package/dist/src/utils/logger/audit.js +0 -2
- package/dist/src/utils/logger/config.js +0 -2
- package/dist/src/utils/logger/context.js +0 -2
- package/dist/src/utils/logger/exporters.js +0 -2
- package/dist/src/utils/logger/index.js +0 -2
- package/dist/src/utils/logger/log-store.js +0 -2
- package/dist/src/utils/logger/log-stream.js +0 -2
- package/dist/src/utils/logger/pino-record.js +0 -2
- package/dist/src/utils/logger/redact.js +0 -2
- package/dist/src/utils/logger/rotation.js +0 -2
- package/dist/src/utils/logger/shutdown.js +0 -2
- package/dist/src/utils/logger/stats.js +0 -2
- package/dist/src/utils/logger/streams.js +0 -2
- package/dist/src/utils/logger/types.js +0 -2
- package/dist/src/utils/logger.js +0 -2
- package/dist/src/utils/redact-sensitive-url.js +0 -2
- package/dist/src/utils/sanitize-log.js +0 -2
- package/dist/src/utils/string-coerce.js +0 -2
- package/dist/src/voice/language-profile.js +0 -2
- package/dist/src/voice/local/model-files.js +0 -2
- package/dist/src/voice/local/model-manager.js +0 -2
- package/dist/src/voice/local/models.js +0 -2
- package/dist/src/voice/local/runtime-client.js +0 -2
- package/dist/src/voice/local/runtime-dispatcher.js +0 -2
- package/dist/src/voice/local/runtime-worker.js +12 -4
- package/dist/src/voice/local/wav.js +0 -2
- package/dist/src/voice/metadata/builtin.js +0 -2
- package/dist/src/voice/metadata/registry.js +0 -2
- package/dist/src/voice/stt/availability.js +0 -2
- package/dist/src/voice/stt/config-slice.js +0 -2
- package/dist/src/voice/stt/factory.js +0 -2
- package/dist/src/voice/stt/index.js +0 -2
- package/dist/src/voice/stt/list-providers.js +0 -2
- package/dist/src/voice/stt/mention.js +0 -2
- package/dist/src/voice/stt/preflight.js +0 -2
- package/dist/src/voice/stt/providers/alibaba-transcription.js +0 -2
- package/dist/src/voice/stt/providers/local-transcription.js +0 -2
- package/dist/src/voice/stt/providers/openai-transcription.js +0 -2
- package/dist/src/voice/stt/transcribe-core.js +0 -2
- package/dist/src/voice/stt/types.js +0 -2
- package/dist/src/voice/tts/audio.js +0 -2
- package/dist/src/voice/tts/config-slice.js +0 -2
- package/dist/src/voice/tts/directives.js +0 -2
- package/dist/src/voice/tts/factory.js +0 -2
- package/dist/src/voice/tts/list-providers.js +0 -2
- package/dist/src/voice/tts/merge-config.js +0 -2
- package/dist/src/voice/tts/openai-compatible-speech.js +0 -2
- package/dist/src/voice/tts/payload.js +0 -2
- package/dist/src/voice/tts/preprocess.js +0 -2
- package/dist/src/voice/tts/providers/alibaba-speech.js +0 -2
- package/dist/src/voice/tts/providers/edge-speech.js +0 -2
- package/dist/src/voice/tts/providers/minimax-speech.js +0 -2
- package/dist/src/voice/tts/providers/openai-speech.js +0 -2
- package/dist/src/voice/tts/sentence-boundary.js +0 -2
- package/dist/src/voice/tts/service.js +0 -2
- package/dist/src/voice/tts/speak-core.js +0 -2
- package/dist/src/voice/tts/speech-registry.js +0 -2
- package/dist/src/voice/tts/status-tracker.js +0 -2
- package/dist/src/voice/tts/summarize.js +0 -2
- package/dist/src/voice/tts/types.js +0 -2
- package/dist/src/work-discovery/analyzer.js +0 -2
- package/dist/src/work-discovery/probe.js +0 -2
- package/dist/src/work-discovery/repository.js +0 -2
- package/dist/src/work-discovery/service.js +0 -2
- package/dist/src/work-items/agent-context.js +0 -2
- package/dist/src/work-items/work-item-service.js +0 -2
- package/dist/src/work-items/work-item-store.js +0 -2
- package/dist/src/work-items/work-item-workflow-judge.js +0 -2
- package/dist/src/workflows/authoring/workflow-draft-store.js +0 -2
- package/dist/src/workflows/domain/definition-utils.js +0 -2
- package/dist/src/workflows/domain/run.js +0 -2
- package/dist/src/workflows/domain/schema-validation.js +0 -2
- package/dist/src/workflows/domain/validation.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-prompt.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-service.js +0 -2
- package/dist/src/workflows/draft/workflow-draft-validator.js +0 -2
- package/dist/src/workflows/engine/projector.js +0 -2
- package/dist/src/workflows/engine/workflow-engine.js +0 -2
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js +0 -2
- package/dist/src/workflows/runtime/graph-workflow-runtime.js +0 -2
- package/dist/src/workflows/service/run-view-to-snapshot.js +0 -2
- package/dist/src/workflows/service/workflow-run-service.js +1 -3
- package/dist/src/workflows/service/workflow-session-bridge.js +0 -2
- package/dist/src/workflows/service/workflow-session-key.js +0 -2
- package/dist/src/workflows/store/event-store.js +0 -2
- package/dist/src/workflows/store/paths.js +0 -2
- package/dist/src/workflows/store/run-index-store.js +0 -2
- package/dist/src/workflows/store/run-store.js +0 -2
- package/package.json +43 -12
- package/skills/creative/hatch-pet/SKILL.md +1 -0
- package/dist/extensions/dashscope/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/demo-memory/src/index.js.map +0 -1
- package/dist/extensions/fal/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/feishu/src/actions/message-action-handler.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/cli-login.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +0 -1
- package/dist/extensions/feishu/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/feishu/src/auth/app-registration.js.map +0 -1
- package/dist/extensions/feishu/src/auth/pairing.js.map +0 -1
- package/dist/extensions/feishu/src/auth/paths.js.map +0 -1
- package/dist/extensions/feishu/src/directory/directory-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/format.js.map +0 -1
- package/dist/extensions/feishu/src/index.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/actions.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/media-load.js.map +0 -1
- package/dist/extensions/feishu/src/outbound/outbound-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/pairing/feishu-pairing-prompt.js.map +0 -1
- package/dist/extensions/feishu/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/feishu/src/plugin.js.map +0 -1
- package/dist/extensions/feishu/src/schema/config-schema.js.map +0 -1
- package/dist/extensions/feishu/src/state/accounts.js.map +0 -1
- package/dist/extensions/feishu/src/state/message-bindings.js.map +0 -1
- package/dist/extensions/feishu/src/state/thread-bindings.js.map +0 -1
- package/dist/extensions/feishu/src/status/doctor.js.map +0 -1
- package/dist/extensions/feishu/src/status/status-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/streaming/streaming-adapter.js.map +0 -1
- package/dist/extensions/feishu/src/subagent-hooks.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-batch-insert.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-color-text.js.map +0 -1
- package/dist/extensions/feishu/src/tools/docx/docx-table-ops.js.map +0 -1
- package/dist/extensions/feishu/src/tools/tools.js.map +0 -1
- package/dist/extensions/feishu/src/transport/client/client.js.map +0 -1
- package/dist/extensions/feishu/src/transport/client/lark-sdk-logger.js.map +0 -1
- package/dist/extensions/feishu/src/transport/reliability/dedupe.js.map +0 -1
- package/dist/extensions/feishu/src/transport/reliability/inbound-pipeline.js.map +0 -1
- package/dist/extensions/feishu/src/transport/socket-mode/monitor.js.map +0 -1
- package/dist/extensions/feishu/src/transport/socket-mode/retry.js.map +0 -1
- package/dist/extensions/feishu/src/transport/text/mentions.js.map +0 -1
- package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +0 -1
- package/dist/extensions/feishu/src/ui/config-surface.js.map +0 -1
- package/dist/extensions/feishu/src/workflow-progress.js.map +0 -1
- package/dist/extensions/google/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/minimax/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/openai/src/image-generation-provider.js.map +0 -1
- package/dist/extensions/telegram/src/access-control.js.map +0 -1
- package/dist/extensions/telegram/src/account-manager.js.map +0 -1
- package/dist/extensions/telegram/src/actions/message-actions.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/command-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/config-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/debounce-keys.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/gateway-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/gateway-setup.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/inbound-access.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/index.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/outbound-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/security-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/status-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js.map +0 -1
- package/dist/extensions/telegram/src/api-root.js.map +0 -1
- package/dist/extensions/telegram/src/approval-delivery.js.map +0 -1
- package/dist/extensions/telegram/src/approval-store.js.map +0 -1
- package/dist/extensions/telegram/src/caption.js.map +0 -1
- package/dist/extensions/telegram/src/command-handler.js.map +0 -1
- package/dist/extensions/telegram/src/config-schema.js.map +0 -1
- package/dist/extensions/telegram/src/conversation-id.js.map +0 -1
- package/dist/extensions/telegram/src/dedupe.js.map +0 -1
- package/dist/extensions/telegram/src/delivery-chat-id.js.map +0 -1
- package/dist/extensions/telegram/src/doctor.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream-lifecycle.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream-loop.js.map +0 -1
- package/dist/extensions/telegram/src/draft-stream.js.map +0 -1
- package/dist/extensions/telegram/src/errors.js.map +0 -1
- package/dist/extensions/telegram/src/exec-approval-handler.js.map +0 -1
- package/dist/extensions/telegram/src/exec-approvals.js.map +0 -1
- package/dist/extensions/telegram/src/focus-handler.js.map +0 -1
- package/dist/extensions/telegram/src/format.js.map +0 -1
- package/dist/extensions/telegram/src/group-config-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/inbound-coalescer.js.map +0 -1
- package/dist/extensions/telegram/src/inbound-processor.js.map +0 -1
- package/dist/extensions/telegram/src/index.js.map +0 -1
- package/dist/extensions/telegram/src/inline-keyboards.js.map +0 -1
- package/dist/extensions/telegram/src/network-errors.js.map +0 -1
- package/dist/extensions/telegram/src/outbound-sender.js.map +0 -1
- package/dist/extensions/telegram/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/plugin-defaults.js.map +0 -1
- package/dist/extensions/telegram/src/plugin.js.map +0 -1
- package/dist/extensions/telegram/src/polling-session.js.map +0 -1
- package/dist/extensions/telegram/src/proxy-fetch.js.map +0 -1
- package/dist/extensions/telegram/src/reactions.js.map +0 -1
- package/dist/extensions/telegram/src/reply-params.js.map +0 -1
- package/dist/extensions/telegram/src/routing-integration.js.map +0 -1
- package/dist/extensions/telegram/src/send-options.js.map +0 -1
- package/dist/extensions/telegram/src/sent-cache.js.map +0 -1
- package/dist/extensions/telegram/src/startup-errors.js.map +0 -1
- package/dist/extensions/telegram/src/telegram-actions.js.map +0 -1
- package/dist/extensions/telegram/src/telegram-draft-errors.js.map +0 -1
- package/dist/extensions/telegram/src/thread-bindings.js.map +0 -1
- package/dist/extensions/telegram/src/timeout-abort.js.map +0 -1
- package/dist/extensions/telegram/src/token-resolver.js.map +0 -1
- package/dist/extensions/telegram/src/update-offset-store.js.map +0 -1
- package/dist/extensions/telegram/src/workflow-progress.js.map +0 -1
- package/dist/extensions/weixin/src/adapters/onboard-cli.js.map +0 -1
- package/dist/extensions/weixin/src/api/api.js.map +0 -1
- package/dist/extensions/weixin/src/api/config-cache.js.map +0 -1
- package/dist/extensions/weixin/src/api/session-guard.js.map +0 -1
- package/dist/extensions/weixin/src/api/types.js.map +0 -1
- package/dist/extensions/weixin/src/auth/accounts.js.map +0 -1
- package/dist/extensions/weixin/src/auth/login-qr.js.map +0 -1
- package/dist/extensions/weixin/src/auth/pairing.js.map +0 -1
- package/dist/extensions/weixin/src/auth/weixin-account-id.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/aes-ecb.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/cdn-upload.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/cdn-url.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/pic-decrypt.js.map +0 -1
- package/dist/extensions/weixin/src/cdn/upload.js.map +0 -1
- package/dist/extensions/weixin/src/cli/gateway-qr-login.js.map +0 -1
- package/dist/extensions/weixin/src/cli/qr-login.js.map +0 -1
- package/dist/extensions/weixin/src/config-schema.js.map +0 -1
- package/dist/extensions/weixin/src/config-surface.js.map +0 -1
- package/dist/extensions/weixin/src/delivery-to.js.map +0 -1
- package/dist/extensions/weixin/src/index.js.map +0 -1
- package/dist/extensions/weixin/src/media/data-url.js.map +0 -1
- package/dist/extensions/weixin/src/media/media-download.js.map +0 -1
- package/dist/extensions/weixin/src/media/mime.js.map +0 -1
- package/dist/extensions/weixin/src/media/silk-transcode.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/context-token-init.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/debug-mode.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/error-notice.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/inbound.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/markdown-filter.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/process-message.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/send-media.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/send.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/slash-commands.js.map +0 -1
- package/dist/extensions/weixin/src/messaging/typing-ticket-store.js.map +0 -1
- package/dist/extensions/weixin/src/monitor/monitor.js.map +0 -1
- package/dist/extensions/weixin/src/outbound-send.js.map +0 -1
- package/dist/extensions/weixin/src/pairing-config-resolver.js.map +0 -1
- package/dist/extensions/weixin/src/plugin.js.map +0 -1
- package/dist/extensions/weixin/src/routing-integration.js.map +0 -1
- package/dist/extensions/weixin/src/storage/state-dir.js.map +0 -1
- package/dist/extensions/weixin/src/storage/sync-buf.js.map +0 -1
- package/dist/extensions/weixin/src/util/logger.js.map +0 -1
- package/dist/extensions/weixin/src/util/random.js.map +0 -1
- package/dist/extensions/weixin/src/util/redact.js.map +0 -1
- package/dist/extensions/weixin/src/workflow-progress.js.map +0 -1
- package/dist/gateway/static/root/assets/agents-DZDOcgz5.js +0 -2
- package/dist/gateway/static/root/assets/appearance-settings-BNasnY9D.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-Cmr-Hvm9.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-TWgUAI8t.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DBsFItW_.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-BBkzrBYy.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-CuU6ez3y.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DLsZCAw7.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-C6V-PHwi.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-5Fcz47XQ.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-BrxzyVW2.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-DRVRLc5Z.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-8F7NElzP.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BaoLiV8G.js +0 -2
- package/dist/gateway/static/root/assets/index-CH7XN6KY.js +0 -259
- package/dist/gateway/static/root/assets/index-Dfnl9tp_.css +0 -1
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BHnh5OoY.js +0 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-Boe8n4zH.js +0 -2
- package/dist/gateway/static/root/assets/locale-store-BneNAR8R.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-Cb4Uptct.js +0 -7
- package/dist/gateway/static/root/assets/messages-t1yPaVCt.js +0 -5
- package/dist/gateway/static/root/assets/models-hub-panel-CNiUKZUV.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-C9__VkD6.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-CZhuB5kO.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BOq4WVdR.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BxGq0ebQ.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-B6gSU_Au.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DwuBL834.js +0 -1
- package/dist/gateway/static/root/assets/settings-loading-skeleton-vitElc-n.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BJeA4mmk.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DB2KYA2_.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DQtZiejw.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-Pm0fNe_p.js +0 -2
- package/dist/gateway/static/root/assets/user-context-page-DnLqQyRG.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BiFIIWC4.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-D2-_bC0J.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-B0FPG4eJ.js +0 -1
- package/dist/gateway/static/root/assets/work-page-BDeVxts_.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-BPzS67fU.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-xPhmrRLs.js +0 -11
- package/dist/gateway/static/root/favicon-icon.svg +0 -187
- package/dist/package.js.map +0 -1
- package/dist/src/activity/context.js.map +0 -1
- package/dist/src/activity/emitter.js.map +0 -1
- package/dist/src/activity/service.js.map +0 -1
- package/dist/src/agent/agent-manager.js.map +0 -1
- package/dist/src/agent/agent-scope.js.map +0 -1
- package/dist/src/agent/background-review/coordinator.js.map +0 -1
- package/dist/src/agent/background-review/prompts.js.map +0 -1
- package/dist/src/agent/background-review/run-background-review.js.map +0 -1
- package/dist/src/agent/background-review/settings.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-context.js.map +0 -1
- package/dist/src/agent/bootstrap/bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +0 -1
- package/dist/src/agent/bootstrap/project-agents-context.js.map +0 -1
- package/dist/src/agent/capabilities/definitions.js.map +0 -1
- package/dist/src/agent/capabilities/registry.js.map +0 -1
- package/dist/src/agent/child-agent-factory.js.map +0 -1
- package/dist/src/agent/client-error-format.js.map +0 -1
- package/dist/src/agent/code-intelligence/binary.js.map +0 -1
- package/dist/src/agent/code-intelligence/runtime.js.map +0 -1
- package/dist/src/agent/code-intelligence/tools.js.map +0 -1
- package/dist/src/agent/coding/turn-diff-tracker.js.map +0 -1
- package/dist/src/agent/context/expand-at-file-mentions.js.map +0 -1
- package/dist/src/agent/context/project-context.js.map +0 -1
- package/dist/src/agent/context/workspace-seed.js.map +0 -1
- package/dist/src/agent/context/workspace-state.js.map +0 -1
- package/dist/src/agent/context/workspace.js.map +0 -1
- package/dist/src/agent/embedded/run-for-session.js.map +0 -1
- package/dist/src/agent/embedded/run-turn.js.map +0 -1
- package/dist/src/agent/embedded/runs.js.map +0 -1
- package/dist/src/agent/embedded/session-manager-init.js.map +0 -1
- package/dist/src/agent/embedded/session-runner.js.map +0 -1
- package/dist/src/agent/embedded/session-tool-result-guard.js.map +0 -1
- package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js.map +0 -1
- package/dist/src/agent/embedded/subscribe-session.js.map +0 -1
- package/dist/src/agent/embedded/system-prompt-override.js.map +0 -1
- package/dist/src/agent/embedded/tool-result-context-guard.js.map +0 -1
- package/dist/src/agent/embedded/tool-result-truncation.js.map +0 -1
- package/dist/src/agent/embedded/xopc-auth-storage.js.map +0 -1
- package/dist/src/agent/embedded/xopc-stream-bridge.js.map +0 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +0 -1
- package/dist/src/agent/failover-error.js.map +0 -1
- package/dist/src/agent/fallback/candidates.js.map +0 -1
- package/dist/src/agent/fallback/reason.js.map +0 -1
- package/dist/src/agent/feedback/feedback-coordinator.js.map +0 -1
- package/dist/src/agent/goals/checklist-judge.js.map +0 -1
- package/dist/src/agent/goals/checklist-types.js.map +0 -1
- package/dist/src/agent/goals/evaluate-turn.js.map +0 -1
- package/dist/src/agent/goals/goal-locale.js.map +0 -1
- package/dist/src/agent/goals/judge.js.map +0 -1
- package/dist/src/agent/goals/persistent-goal-service.js.map +0 -1
- package/dist/src/agent/goals/post-turn.js.map +0 -1
- package/dist/src/agent/goals/state.js.map +0 -1
- package/dist/src/agent/image/generation/bundled-registry.js.map +0 -1
- package/dist/src/agent/image/generation/bundled.js.map +0 -1
- package/dist/src/agent/image/generation/image-assets.js.map +0 -1
- package/dist/src/agent/image/generation/model-ref.js.map +0 -1
- package/dist/src/agent/image/generation/normalization.js.map +0 -1
- package/dist/src/agent/image/generation/openai-compatible-image-provider.js.map +0 -1
- package/dist/src/agent/image/generation/provider-registry.js.map +0 -1
- package/dist/src/agent/image/generation/runtime.js.map +0 -1
- package/dist/src/agent/image/image-helpers.js.map +0 -1
- package/dist/src/agent/image/image-model-fallback.js.map +0 -1
- package/dist/src/agent/image/inbound-image-handling.js.map +0 -1
- package/dist/src/agent/image/load-image-media.js.map +0 -1
- package/dist/src/agent/image/tool-model-config.js.map +0 -1
- package/dist/src/agent/image/understanding/pi-ai-provider.js.map +0 -1
- package/dist/src/agent/image/understanding/provider-registry.js.map +0 -1
- package/dist/src/agent/image/understanding/runtime.js.map +0 -1
- package/dist/src/agent/image/vision-detection.js.map +0 -1
- package/dist/src/agent/inbound/attachment-pipeline.js.map +0 -1
- package/dist/src/agent/inbound/inbound-loop.js.map +0 -1
- package/dist/src/agent/inbound/turn-dispatcher.js.map +0 -1
- package/dist/src/agent/ipc/bus.js.map +0 -1
- package/dist/src/agent/ipc/inbox.js.map +0 -1
- package/dist/src/agent/ipc/socket.js.map +0 -1
- package/dist/src/agent/ipc/types.js.map +0 -1
- package/dist/src/agent/lifecycle/handlers/compaction.js.map +0 -1
- package/dist/src/agent/lifecycle/hook-handler.js.map +0 -1
- package/dist/src/agent/lifecycle/manager.js.map +0 -1
- package/dist/src/agent/lifecycle/progress.js.map +0 -1
- package/dist/src/agent/lifecycle/timeout-wrapper.js.map +0 -1
- package/dist/src/agent/lifecycle/typing.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-config.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-names.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-policy.js.map +0 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +0 -1
- package/dist/src/agent/mcp/embedded-mcp.js.map +0 -1
- package/dist/src/agent/mcp/mcp-config-shared.js.map +0 -1
- package/dist/src/agent/mcp/mcp-http.js.map +0 -1
- package/dist/src/agent/mcp/mcp-stdio-transport.js.map +0 -1
- package/dist/src/agent/mcp/mcp-stdio.js.map +0 -1
- package/dist/src/agent/mcp/mcp-tool-meta.js.map +0 -1
- package/dist/src/agent/mcp/mcp-transport-config.js.map +0 -1
- package/dist/src/agent/mcp/mcp-transport.js.map +0 -1
- package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +0 -1
- package/dist/src/agent/media-generation/model-ref.js.map +0 -1
- package/dist/src/agent/media-generation/normalization.types.js.map +0 -1
- package/dist/src/agent/media-generation/runtime-shared.js.map +0 -1
- package/dist/src/agent/memory/agent-message-access.js.map +0 -1
- package/dist/src/agent/memory/builtin-memory-store.js.map +0 -1
- package/dist/src/agent/memory/builtin-provider.js.map +0 -1
- package/dist/src/agent/memory/compaction.js.map +0 -1
- package/dist/src/agent/memory/context/planner.js.map +0 -1
- package/dist/src/agent/memory/context-fence.js.map +0 -1
- package/dist/src/agent/memory/create-memory-manager.js.map +0 -1
- package/dist/src/agent/memory/dreaming/config.js.map +0 -1
- package/dist/src/agent/memory/dreaming/constants.js.map +0 -1
- package/dist/src/agent/memory/dreaming/deep-promotion.js.map +0 -1
- package/dist/src/agent/memory/dreaming/events.js.map +0 -1
- package/dist/src/agent/memory/dreaming/last-run.js.map +0 -1
- package/dist/src/agent/memory/dreaming/light-sweep.js.map +0 -1
- package/dist/src/agent/memory/dreaming/preview.js.map +0 -1
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.js.map +0 -1
- package/dist/src/agent/memory/dreaming/rem-patterns.js.map +0 -1
- package/dist/src/agent/memory/dreaming/scope.js.map +0 -1
- package/dist/src/agent/memory/dreaming/short-term-store.js.map +0 -1
- package/dist/src/agent/memory/dreaming/utils.js.map +0 -1
- package/dist/src/agent/memory/lifecycle.js.map +0 -1
- package/dist/src/agent/memory/manager.js.map +0 -1
- package/dist/src/agent/memory/memory-config.js.map +0 -1
- package/dist/src/agent/memory/message-sanitizer.js.map +0 -1
- package/dist/src/agent/memory/plugin-discovery.js.map +0 -1
- package/dist/src/agent/memory/sensitivity.js.map +0 -1
- package/dist/src/agent/memory/source-origin.js.map +0 -1
- package/dist/src/agent/memory/stub-memory-provider.js.map +0 -1
- package/dist/src/agent/memory/summary-generator.js.map +0 -1
- package/dist/src/agent/memory/understanding/correction.js.map +0 -1
- package/dist/src/agent/memory/understanding/quality.js.map +0 -1
- package/dist/src/agent/memory/understanding/service.js.map +0 -1
- package/dist/src/agent/memory/user-context-coordinator.js.map +0 -1
- package/dist/src/agent/memory/user-message-text.js.map +0 -1
- package/dist/src/agent/memory/window.js.map +0 -1
- package/dist/src/agent/messaging/command-handler.js.map +0 -1
- package/dist/src/agent/messaging/message-router.js.map +0 -1
- package/dist/src/agent/messaging/outbound-coordinator.js.map +0 -1
- package/dist/src/agent/messaging/stream-manager.js.map +0 -1
- package/dist/src/agent/middleware/context.js.map +0 -1
- package/dist/src/agent/middleware/self-verify.js.map +0 -1
- package/dist/src/agent/models/manager.js.map +0 -1
- package/dist/src/agent/models/request-limiter.js.map +0 -1
- package/dist/src/agent/models/selection.js.map +0 -1
- package/dist/src/agent/orchestration/agent-event-handler.js.map +0 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js.map +0 -1
- package/dist/src/agent/orchestration/llm-turn-retry.js.map +0 -1
- package/dist/src/agent/orchestration/loop-guard.js.map +0 -1
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +0 -1
- package/dist/src/agent/prompt/cache-boundary.js.map +0 -1
- package/dist/src/agent/prompt/memory/index.js.map +0 -1
- package/dist/src/agent/prompt/safety.js.map +0 -1
- package/dist/src/agent/prompt/sanitize-for-prompt.js.map +0 -1
- package/dist/src/agent/prompt/sections/behavior.js.map +0 -1
- package/dist/src/agent/prompt/sections/memory-skills.js.map +0 -1
- package/dist/src/agent/prompt/sections/messaging-runtime.js.map +0 -1
- package/dist/src/agent/prompt/sections/project-context.js.map +0 -1
- package/dist/src/agent/prompt/sections/tooling.js.map +0 -1
- package/dist/src/agent/prompt/sections/workspace-runtime.js.map +0 -1
- package/dist/src/agent/prompt/service-prompt-builder.js.map +0 -1
- package/dist/src/agent/prompt/subagent-context.js.map +0 -1
- package/dist/src/agent/prompt/system-prompt-params.js.map +0 -1
- package/dist/src/agent/prompt/system-prompt.js.map +0 -1
- package/dist/src/agent/prompt/system-reminder.js.map +0 -1
- package/dist/src/agent/reply/apply-turn-user-enrichment.js.map +0 -1
- package/dist/src/agent/reply/post-compaction-context.js.map +0 -1
- package/dist/src/agent/reply/startup-context.js.map +0 -1
- package/dist/src/agent/reply/workspace-boundary-read.js.map +0 -1
- package/dist/src/agent/sandbox/command-validator.js.map +0 -1
- package/dist/src/agent/sandbox/exec-policy.js.map +0 -1
- package/dist/src/agent/sandbox/path-policy.js.map +0 -1
- package/dist/src/agent/sandbox/sanitize-env-vars.js.map +0 -1
- package/dist/src/agent/sandbox/types.js.map +0 -1
- package/dist/src/agent/service/async-queue.js.map +0 -1
- package/dist/src/agent/service/btw-query.js.map +0 -1
- package/dist/src/agent/service/build-direct-message-content.js.map +0 -1
- package/dist/src/agent/service/direct-turn-helpers.js.map +0 -1
- package/dist/src/agent/service/parse-outbound-session-key.js.map +0 -1
- package/dist/src/agent/service/process-direct-one-shot.js.map +0 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +0 -1
- package/dist/src/agent/service/session-context-report.js.map +0 -1
- package/dist/src/agent/service/webchat-tts.js.map +0 -1
- package/dist/src/agent/service-inbound-utils.js.map +0 -1
- package/dist/src/agent/service.js.map +0 -1
- package/dist/src/agent/session/session-config-service.js.map +0 -1
- package/dist/src/agent/session/session-context.js.map +0 -1
- package/dist/src/agent/session/session-hydrator.js.map +0 -1
- package/dist/src/agent/session/session-inspector.js.map +0 -1
- package/dist/src/agent/session/session-lifecycle.js.map +0 -1
- package/dist/src/agent/session/session-state-bag.js.map +0 -1
- package/dist/src/agent/session/tracker.js.map +0 -1
- package/dist/src/agent/skills/config.js.map +0 -1
- package/dist/src/agent/skills/filesystem-watcher.js.map +0 -1
- package/dist/src/agent/skills/format-skills-prompt.js.map +0 -1
- package/dist/src/agent/skills/hub-hash.js.map +0 -1
- package/dist/src/agent/skills/hub-lock.js.map +0 -1
- package/dist/src/agent/skills/hub-pull.js.map +0 -1
- package/dist/src/agent/skills/index.js.map +0 -1
- package/dist/src/agent/skills/install-target.js.map +0 -1
- package/dist/src/agent/skills/installer.js.map +0 -1
- package/dist/src/agent/skills/managed-store.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +0 -1
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +0 -1
- package/dist/src/agent/skills/marketplace/marketplace-category-order.js.map +0 -1
- package/dist/src/agent/skills/marketplace/registry.js.map +0 -1
- package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +0 -1
- package/dist/src/agent/skills/parse-skill-metadata.js.map +0 -1
- package/dist/src/agent/skills/required-env-vars.js.map +0 -1
- package/dist/src/agent/skills/scanner.js.map +0 -1
- package/dist/src/agent/skills/skill-manage-ops.js.map +0 -1
- package/dist/src/agent/skills/skill-manager.js.map +0 -1
- package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +0 -1
- package/dist/src/agent/skills/skill-tool-gating.js.map +0 -1
- package/dist/src/agent/skills/skill-view-path.js.map +0 -1
- package/dist/src/agent/skills/skills-marketplace.js.map +0 -1
- package/dist/src/agent/skills/test-framework.js.map +0 -1
- package/dist/src/agent/skills/watcher.js.map +0 -1
- package/dist/src/agent/skills/workspace-skills-dir.js.map +0 -1
- package/dist/src/agent/source-context/injector.js.map +0 -1
- package/dist/src/agent/source-context/types.js.map +0 -1
- package/dist/src/agent/starter-agents.js.map +0 -1
- package/dist/src/agent/streaming/reasoning-visibility-sse.js.map +0 -1
- package/dist/src/agent/tool-manuals/browser.js.map +0 -1
- package/dist/src/agent/tool-manuals/index.js.map +0 -1
- package/dist/src/agent/tool-manuals/xopc-use.js.map +0 -1
- package/dist/src/agent/tools/apply-patch.js.map +0 -1
- package/dist/src/agent/tools/automation-tool.js.map +0 -1
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +0 -1
- package/dist/src/agent/tools/browser/tool/schemas.js.map +0 -1
- package/dist/src/agent/tools/chain-tracker.js.map +0 -1
- package/dist/src/agent/tools/clarify-tool.js.map +0 -1
- package/dist/src/agent/tools/cli-clarify.js.map +0 -1
- package/dist/src/agent/tools/communication.js.map +0 -1
- package/dist/src/agent/tools/composio-tool.js.map +0 -1
- package/dist/src/agent/tools/concurrency.js.map +0 -1
- package/dist/src/agent/tools/create-share-tool.js.map +0 -1
- package/dist/src/agent/tools/curated-memory-tool.js.map +0 -1
- package/dist/src/agent/tools/delegate-tool.js.map +0 -1
- package/dist/src/agent/tools/desktop-pet-tool.js.map +0 -1
- package/dist/src/agent/tools/dreaming-tool.js.map +0 -1
- package/dist/src/agent/tools/edit-diff.js.map +0 -1
- package/dist/src/agent/tools/error-pattern-matcher.js.map +0 -1
- package/dist/src/agent/tools/error-tracker.js.map +0 -1
- package/dist/src/agent/tools/exec-command.js.map +0 -1
- package/dist/src/agent/tools/execute-code-tool.js.map +0 -1
- package/dist/src/agent/tools/executor.js.map +0 -1
- package/dist/src/agent/tools/factory.js.map +0 -1
- package/dist/src/agent/tools/find.js.map +0 -1
- package/dist/src/agent/tools/goal-evidence-recorder.js.map +0 -1
- package/dist/src/agent/tools/goal-tool.js.map +0 -1
- package/dist/src/agent/tools/grep.js.map +0 -1
- package/dist/src/agent/tools/image-generate-tool.js.map +0 -1
- package/dist/src/agent/tools/image-tool.js.map +0 -1
- package/dist/src/agent/tools/list-dir.js.map +0 -1
- package/dist/src/agent/tools/media-read-tool.js.map +0 -1
- package/dist/src/agent/tools/memory-tool.js.map +0 -1
- package/dist/src/agent/tools/metadata.js.map +0 -1
- package/dist/src/agent/tools/read.js.map +0 -1
- package/dist/src/agent/tools/search/http.js.map +0 -1
- package/dist/src/agent/tools/search/providers/bing-api.js.map +0 -1
- package/dist/src/agent/tools/search/providers/bing-html.js.map +0 -1
- package/dist/src/agent/tools/search/providers/brave.js.map +0 -1
- package/dist/src/agent/tools/search/providers/duckduckgo-html.js.map +0 -1
- package/dist/src/agent/tools/search/providers/searxng.js.map +0 -1
- package/dist/src/agent/tools/search/providers/tavily.js.map +0 -1
- package/dist/src/agent/tools/search/region.js.map +0 -1
- package/dist/src/agent/tools/search/registry.js.map +0 -1
- package/dist/src/agent/tools/search/resolve-config.js.map +0 -1
- package/dist/src/agent/tools/send-media.js.map +0 -1
- package/dist/src/agent/tools/session-search-tool.js.map +0 -1
- package/dist/src/agent/tools/session-status-tool.js.map +0 -1
- package/dist/src/agent/tools/skill-install-tool.js.map +0 -1
- package/dist/src/agent/tools/skill-manage-tool.js.map +0 -1
- package/dist/src/agent/tools/skills-tools.js.map +0 -1
- package/dist/src/agent/tools/structured-output.js.map +0 -1
- package/dist/src/agent/tools/todo-tool.js.map +0 -1
- package/dist/src/agent/tools/tool-manual-tool.js.map +0 -1
- package/dist/src/agent/tools/tool-paths.js.map +0 -1
- package/dist/src/agent/tools/truncate.js.map +0 -1
- package/dist/src/agent/tools/tts-tool.js.map +0 -1
- package/dist/src/agent/tools/update-plan-tool.js.map +0 -1
- package/dist/src/agent/tools/url-safety.js.map +0 -1
- package/dist/src/agent/tools/usage-analyzer.js.map +0 -1
- package/dist/src/agent/tools/web-extract.js.map +0 -1
- package/dist/src/agent/tools/web.js.map +0 -1
- package/dist/src/agent/tools/workflow-tool.js.map +0 -1
- package/dist/src/agent/tools/write.js.map +0 -1
- package/dist/src/agent/tools/xopc-use-tool.js.map +0 -1
- package/dist/src/agent/transcript/google-api.js.map +0 -1
- package/dist/src/agent/transcript/model-selection.js.map +0 -1
- package/dist/src/agent/transcript/provider-capabilities.js.map +0 -1
- package/dist/src/agent/transcript/session-transcript-repair.js.map +0 -1
- package/dist/src/agent/transcript/strip-tool-messages.js.map +0 -1
- package/dist/src/agent/transcript/thinking-types.js.map +0 -1
- package/dist/src/agent/transcript/thinking.js.map +0 -1
- package/dist/src/agent/transcript/tool-call-id.js.map +0 -1
- package/dist/src/agent/transcript/transcript-hygiene.js.map +0 -1
- package/dist/src/agent/transcript/transcript-policy.js.map +0 -1
- package/dist/src/agent/workflow/agent-progress.js.map +0 -1
- package/dist/src/agent/workflow/builtins/index.js.map +0 -1
- package/dist/src/agent/workflow/catalog.js.map +0 -1
- package/dist/src/agent/workflow/progress-broker.js.map +0 -1
- package/dist/src/agent/workflow/snapshot-empty.js.map +0 -1
- package/dist/src/agent/workflow/snapshot.js.map +0 -1
- package/dist/src/agent/workflow/step-labels.js.map +0 -1
- package/dist/src/agent/workflow/structured-output-tool.js.map +0 -1
- package/dist/src/agent/workflow/subagent-runner.js.map +0 -1
- package/dist/src/agent/workflow/workflow-child-tools.js.map +0 -1
- package/dist/src/agent/workspace-runtime/registry.js.map +0 -1
- package/dist/src/agent-manifest/index.js.map +0 -1
- package/dist/src/agent-manifest/preset-chain.js.map +0 -1
- package/dist/src/agent-manifest/prompt.js.map +0 -1
- package/dist/src/agent-manifest/resolver.js.map +0 -1
- package/dist/src/agent-manifest/schema.js.map +0 -1
- package/dist/src/agent-manifest/validator.js.map +0 -1
- package/dist/src/agent-runtime/boundary-guard.js.map +0 -1
- package/dist/src/agent-runtime/memory-runtime.js.map +0 -1
- package/dist/src/agent-runtime/model-router.js.map +0 -1
- package/dist/src/agent-runtime/run-trace.js.map +0 -1
- package/dist/src/agent-runtime/runtime-profile.js.map +0 -1
- package/dist/src/agent-runtime/tool-registry.js.map +0 -1
- package/dist/src/agent-runtime/workflow-runtime.js.map +0 -1
- package/dist/src/ai-assist/text-assist.js.map +0 -1
- package/dist/src/auth/credentials.js.map +0 -1
- package/dist/src/auth/index.js.map +0 -1
- package/dist/src/auth/oauth/anthropic.js.map +0 -1
- package/dist/src/auth/oauth/github-copilot.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +0 -1
- package/dist/src/auth/oauth/google-oauth/pkce.js.map +0 -1
- package/dist/src/auth/oauth/kimi-coding.js.map +0 -1
- package/dist/src/auth/oauth/minimax-cn.js.map +0 -1
- package/dist/src/auth/oauth/minimax.js.map +0 -1
- package/dist/src/auth/oauth/openai-codex.js.map +0 -1
- package/dist/src/auth/oauth/pkce.js.map +0 -1
- package/dist/src/auth/profiles/oauth.js.map +0 -1
- package/dist/src/auth/profiles/order.js.map +0 -1
- package/dist/src/auth/profiles/profiles.js.map +0 -1
- package/dist/src/auth/profiles/store.js.map +0 -1
- package/dist/src/auth/sync-provider-auth.js.map +0 -1
- package/dist/src/automations/api/routes.js.map +0 -1
- package/dist/src/automations/domain/schedule.js.map +0 -1
- package/dist/src/automations/domain/validation.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-prompt.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-service.js.map +0 -1
- package/dist/src/automations/draft/automation-draft-validator.js.map +0 -1
- package/dist/src/automations/product-events.js.map +0 -1
- package/dist/src/automations/service/action-executor.js.map +0 -1
- package/dist/src/automations/service/automation-service.js.map +0 -1
- package/dist/src/automations/storage/automation-repository.js.map +0 -1
- package/dist/src/automations/storage/automation-run-repository.js.map +0 -1
- package/dist/src/browser/actions/extension-registry-bridge.js.map +0 -1
- package/dist/src/browser/actions/registry.js.map +0 -1
- package/dist/src/browser/backend-from-config.js.map +0 -1
- package/dist/src/browser/browser-command-timeout.js.map +0 -1
- package/dist/src/browser/cache-dir-policy.js.map +0 -1
- package/dist/src/browser/cdp-local-launcher.js.map +0 -1
- package/dist/src/browser/cdp-supervisor.js.map +0 -1
- package/dist/src/browser/free-port.js.map +0 -1
- package/dist/src/browser/humanize.js.map +0 -1
- package/dist/src/browser/install-lock.js.map +0 -1
- package/dist/src/browser/manager.js.map +0 -1
- package/dist/src/browser/pipeline/output.js.map +0 -1
- package/dist/src/browser/pipeline/runner.js.map +0 -1
- package/dist/src/browser/pipeline/schema.js.map +0 -1
- package/dist/src/browser/pipeline/source.js.map +0 -1
- package/dist/src/browser/pipeline/template.js.map +0 -1
- package/dist/src/browser/providers/browser-ext-install.js.map +0 -1
- package/dist/src/browser/providers/browser-use.js.map +0 -1
- package/dist/src/browser/providers/browserbase.js.map +0 -1
- package/dist/src/browser/providers/cloakbrowser.js.map +0 -1
- package/dist/src/browser/providers/extension-ws-acquire.js.map +0 -1
- package/dist/src/browser/providers/extension.js.map +0 -1
- package/dist/src/browser/providers/playwright-doctor.js.map +0 -1
- package/dist/src/browser/providers/playwright-install.js.map +0 -1
- package/dist/src/browser/readiness.js.map +0 -1
- package/dist/src/browser/schemas.js.map +0 -1
- package/dist/src/browser/session-lifecycle.js.map +0 -1
- package/dist/src/browser/snapshot-helpers.js.map +0 -1
- package/dist/src/browser/stealth.js.map +0 -1
- package/dist/src/browser/url-policy.js.map +0 -1
- package/dist/src/capabilities/store-connector.js.map +0 -1
- package/dist/src/channels/attachments/attachment-classifiers.js.map +0 -1
- package/dist/src/channels/attachments/inbound-persist.js.map +0 -1
- package/dist/src/channels/attachments/inbound-types.js.map +0 -1
- package/dist/src/channels/attachments/outbound-tts-persist.js.map +0 -1
- package/dist/src/channels/attachments/voice-stt-webchat.js.map +0 -1
- package/dist/src/channels/catalog/channel-catalog-service.js.map +0 -1
- package/dist/src/channels/config-helpers.js.map +0 -1
- package/dist/src/channels/envelope-timestamp.js.map +0 -1
- package/dist/src/channels/exec-approval-runtime.js.map +0 -1
- package/dist/src/channels/health-monitor.js.map +0 -1
- package/dist/src/channels/heartbeat-scheduler.js.map +0 -1
- package/dist/src/channels/internal-outbound.js.map +0 -1
- package/dist/src/channels/lifecycle-supervisor.js.map +0 -1
- package/dist/src/channels/manager.js.map +0 -1
- package/dist/src/channels/media.js.map +0 -1
- package/dist/src/channels/outbound/deliver.js.map +0 -1
- package/dist/src/channels/outbound/normalize.js.map +0 -1
- package/dist/src/channels/outbound/persist-store.js.map +0 -1
- package/dist/src/channels/outbound/queue.js.map +0 -1
- package/dist/src/channels/outbound-sender.js.map +0 -1
- package/dist/src/channels/pairing/allow-from-file.js.map +0 -1
- package/dist/src/channels/pairing/approve-cli.js.map +0 -1
- package/dist/src/channels/pairing/pairing-challenge.js.map +0 -1
- package/dist/src/channels/pairing/pairing-constants.js.map +0 -1
- package/dist/src/channels/pairing/pairing-events.js.map +0 -1
- package/dist/src/channels/pairing/pairing-messages.js.map +0 -1
- package/dist/src/channels/pairing/pairing-service.js.map +0 -1
- package/dist/src/channels/pairing/pairing-store-adapter.js.map +0 -1
- package/dist/src/channels/pairing/pairing-store.js.map +0 -1
- package/dist/src/channels/pairing/paths.js.map +0 -1
- package/dist/src/channels/pairing/preseed-allow-from.js.map +0 -1
- package/dist/src/channels/pipeline.js.map +0 -1
- package/dist/src/channels/plugin-registry.js.map +0 -1
- package/dist/src/channels/plugins/registry.js.map +0 -1
- package/dist/src/channels/restart-policy.js.map +0 -1
- package/dist/src/channels/security-helpers.js.map +0 -1
- package/dist/src/channels/security.js.map +0 -1
- package/dist/src/channels/setup-wizard-discovery.js.map +0 -1
- package/dist/src/chat-commands/agent-edit.js.map +0 -1
- package/dist/src/chat-commands/builtins/config.js.map +0 -1
- package/dist/src/chat-commands/builtins/context.js.map +0 -1
- package/dist/src/chat-commands/builtins/goal.js.map +0 -1
- package/dist/src/chat-commands/builtins/model.js.map +0 -1
- package/dist/src/chat-commands/builtins/review.js.map +0 -1
- package/dist/src/chat-commands/builtins/session.js.map +0 -1
- package/dist/src/chat-commands/builtins/skill.js.map +0 -1
- package/dist/src/chat-commands/builtins/subgoal.js.map +0 -1
- package/dist/src/chat-commands/builtins/system.js.map +0 -1
- package/dist/src/chat-commands/builtins/thinking.js.map +0 -1
- package/dist/src/chat-commands/builtins/tts.js.map +0 -1
- package/dist/src/chat-commands/builtins/workflow.js.map +0 -1
- package/dist/src/chat-commands/command-parse.js.map +0 -1
- package/dist/src/chat-commands/config-paths.js.map +0 -1
- package/dist/src/chat-commands/config-value.js.map +0 -1
- package/dist/src/chat-commands/context.js.map +0 -1
- package/dist/src/chat-commands/format-output.js.map +0 -1
- package/dist/src/chat-commands/index.js.map +0 -1
- package/dist/src/chat-commands/processor.js.map +0 -1
- package/dist/src/chat-commands/registry.js.map +0 -1
- package/dist/src/chat-commands/session-key.js.map +0 -1
- package/dist/src/cli/argv-invocation.js.map +0 -1
- package/dist/src/cli/argv.js.map +0 -1
- package/dist/src/cli/bin.js.map +0 -1
- package/dist/src/cli/cli-log-level-preset.js.map +0 -1
- package/dist/src/cli/command-catalog.js.map +0 -1
- package/dist/src/cli/command-loaders.js.map +0 -1
- package/dist/src/cli/command-manifest.js.map +0 -1
- package/dist/src/cli/command-path-matches.js.map +0 -1
- package/dist/src/cli/command-path-policy.js.map +0 -1
- package/dist/src/cli/command-startup-policy.js.map +0 -1
- package/dist/src/cli/commands/agent/interactive.js.map +0 -1
- package/dist/src/cli/commands/agent/sessions.js.map +0 -1
- package/dist/src/cli/commands/agent/stream-renderer.js.map +0 -1
- package/dist/src/cli/commands/agent.js.map +0 -1
- package/dist/src/cli/commands/agents.js.map +0 -1
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/browser-cli-helpers.js.map +0 -1
- package/dist/src/cli/commands/browser.js.map +0 -1
- package/dist/src/cli/commands/channels.js.map +0 -1
- package/dist/src/cli/commands/config.js.map +0 -1
- package/dist/src/cli/commands/connectors.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-config.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-pairing-pending.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/config-health.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/migrations.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/node-version.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/security-audit.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/version-check.js.map +0 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +0 -1
- package/dist/src/cli/commands/doctor/flow.js.map +0 -1
- package/dist/src/cli/commands/doctor/format.js.map +0 -1
- package/dist/src/cli/commands/doctor/index.js.map +0 -1
- package/dist/src/cli/commands/extension-create.js.map +0 -1
- package/dist/src/cli/commands/extension-dev.js.map +0 -1
- package/dist/src/cli/commands/extension-marketplace.js.map +0 -1
- package/dist/src/cli/commands/extension-pack.js.map +0 -1
- package/dist/src/cli/commands/extension.js.map +0 -1
- package/dist/src/cli/commands/gateway/call.js.map +0 -1
- package/dist/src/cli/commands/gateway/health.js.map +0 -1
- package/dist/src/cli/commands/gateway/lifecycle-core.js.map +0 -1
- package/dist/src/cli/commands/gateway/lifecycle.js.map +0 -1
- package/dist/src/cli/commands/gateway/logs.js.map +0 -1
- package/dist/src/cli/commands/gateway/probe.js.map +0 -1
- package/dist/src/cli/commands/gateway/restart-health.js.map +0 -1
- package/dist/src/cli/commands/gateway/restart.js.map +0 -1
- package/dist/src/cli/commands/gateway/run-foreground.js.map +0 -1
- package/dist/src/cli/commands/gateway/service.js.map +0 -1
- package/dist/src/cli/commands/gateway/shared.js.map +0 -1
- package/dist/src/cli/commands/gateway/status.js.map +0 -1
- package/dist/src/cli/commands/gateway/stop.js.map +0 -1
- package/dist/src/cli/commands/gateway/subcommands.js.map +0 -1
- package/dist/src/cli/commands/gateway/token.js.map +0 -1
- package/dist/src/cli/commands/gateway-ssh-tunnel.js.map +0 -1
- package/dist/src/cli/commands/gateway.js.map +0 -1
- package/dist/src/cli/commands/goal.js.map +0 -1
- package/dist/src/cli/commands/image.js.map +0 -1
- package/dist/src/cli/commands/init.js.map +0 -1
- package/dist/src/cli/commands/logs.js.map +0 -1
- package/dist/src/cli/commands/models.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/index.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/onboard-to-configurator.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/registry.js.map +0 -1
- package/dist/src/cli/commands/onboard/channels/wizard-to-configurator.js.map +0 -1
- package/dist/src/cli/commands/onboard/gateway.js.map +0 -1
- package/dist/src/cli/commands/onboard/model.js.map +0 -1
- package/dist/src/cli/commands/onboard.js.map +0 -1
- package/dist/src/cli/commands/profile.js.map +0 -1
- package/dist/src/cli/commands/project.js.map +0 -1
- package/dist/src/cli/commands/providers.js.map +0 -1
- package/dist/src/cli/commands/resume.js.map +0 -1
- package/dist/src/cli/commands/search.js.map +0 -1
- package/dist/src/cli/commands/session/actions.js.map +0 -1
- package/dist/src/cli/commands/session/utils.js.map +0 -1
- package/dist/src/cli/commands/session.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/output.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/prompts.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/runner.js.map +0 -1
- package/dist/src/cli/commands/setup-shared/types.js.map +0 -1
- package/dist/src/cli/commands/setup.js.map +0 -1
- package/dist/src/cli/commands/skills-test.js.map +0 -1
- package/dist/src/cli/commands/skills.js.map +0 -1
- package/dist/src/cli/commands/tailscale.js.map +0 -1
- package/dist/src/cli/commands/tui-runner.js.map +0 -1
- package/dist/src/cli/commands/tui.js.map +0 -1
- package/dist/src/cli/commands/tunnel.js.map +0 -1
- package/dist/src/cli/commands/update.js.map +0 -1
- package/dist/src/cli/commands/voice.js.map +0 -1
- package/dist/src/cli/context.js.map +0 -1
- package/dist/src/cli/extension-cli-register.js.map +0 -1
- package/dist/src/cli/gateway-run-argv.js.map +0 -1
- package/dist/src/cli/gateway-run-fast-path.js.map +0 -1
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/registry.js.map +0 -1
- package/dist/src/cli/templates.js.map +0 -1
- package/dist/src/cli/utils/colors.js.map +0 -1
- package/dist/src/cli/utils/gateway-client-options.js.map +0 -1
- package/dist/src/cli/utils/gateway-client.js.map +0 -1
- package/dist/src/cli/utils/init-workspace-core.js.map +0 -1
- package/dist/src/cli/utils/init-workspace.js.map +0 -1
- package/dist/src/cli/utils/oauth-login.js.map +0 -1
- package/dist/src/cli/utils/oauth-providers.js.map +0 -1
- package/dist/src/cli/utils/session.js.map +0 -1
- package/dist/src/commands/agents.config.js.map +0 -1
- package/dist/src/config/agent-profile.js.map +0 -1
- package/dist/src/config/agent-typed-models.js.map +0 -1
- package/dist/src/config/commands.flags.js.map +0 -1
- package/dist/src/config/default-model.js.map +0 -1
- package/dist/src/config/diff.js.map +0 -1
- package/dist/src/config/gateway-bind.js.map +0 -1
- package/dist/src/config/index.js.map +0 -1
- package/dist/src/config/loader.js.map +0 -1
- package/dist/src/config/mcp-config-normalize.js.map +0 -1
- package/dist/src/config/model-input.js.map +0 -1
- package/dist/src/config/models-json.js.map +0 -1
- package/dist/src/config/paths-state.js.map +0 -1
- package/dist/src/config/paths.js.map +0 -1
- package/dist/src/config/profile.js.map +0 -1
- package/dist/src/config/public-url.js.map +0 -1
- package/dist/src/config/reload.js.map +0 -1
- package/dist/src/config/resolve-config-value.js.map +0 -1
- package/dist/src/config/rules.js.map +0 -1
- package/dist/src/config/runtime-overrides.js.map +0 -1
- package/dist/src/config/schema.js.map +0 -1
- package/dist/src/config/validate-channel-configs.js.map +0 -1
- package/dist/src/config/voice.js.map +0 -1
- package/dist/src/config/web-patch.js.map +0 -1
- package/dist/src/config/workspace-defaults.js.map +0 -1
- package/dist/src/config/workspace-dirs.js.map +0 -1
- package/dist/src/config/workspace-path-helpers.js.map +0 -1
- package/dist/src/config/workspace-path.js.map +0 -1
- package/dist/src/connectors/approval.js.map +0 -1
- package/dist/src/connectors/auth-provider-registry.js.map +0 -1
- package/dist/src/connectors/builtin-catalog.js.map +0 -1
- package/dist/src/connectors/catalog.js.map +0 -1
- package/dist/src/connectors/composio-catalog.js.map +0 -1
- package/dist/src/connectors/composio-logo.js.map +0 -1
- package/dist/src/connectors/composio-sessions.js.map +0 -1
- package/dist/src/connectors/composio-triggers.js.map +0 -1
- package/dist/src/connectors/composio.js.map +0 -1
- package/dist/src/connectors/connector-memory-sync.js.map +0 -1
- package/dist/src/connectors/health.js.map +0 -1
- package/dist/src/connectors/install.js.map +0 -1
- package/dist/src/connectors/instances.js.map +0 -1
- package/dist/src/connectors/integration-strategy.js.map +0 -1
- package/dist/src/connectors/lifecycle.js.map +0 -1
- package/dist/src/connectors/materialize.js.map +0 -1
- package/dist/src/connectors/policy.js.map +0 -1
- package/dist/src/connectors/providers.js.map +0 -1
- package/dist/src/connectors/registries/modelscope.js.map +0 -1
- package/dist/src/connectors/registries/official-mcp.js.map +0 -1
- package/dist/src/connectors/registries/search.js.map +0 -1
- package/dist/src/connectors/registries/smithery.js.map +0 -1
- package/dist/src/connectors/runtime-adapter-registry.js.map +0 -1
- package/dist/src/connectors/secret-store.js.map +0 -1
- package/dist/src/connectors/setup-secrets.js.map +0 -1
- package/dist/src/connectors/supervisor.js.map +0 -1
- package/dist/src/connectors/usage.js.map +0 -1
- package/dist/src/connectors/workflow-preflight.js.map +0 -1
- package/dist/src/daemon/constants.js.map +0 -1
- package/dist/src/daemon/install-plan.js.map +0 -1
- package/dist/src/daemon/launchd.js.map +0 -1
- package/dist/src/daemon/schtasks.js.map +0 -1
- package/dist/src/daemon/service-audit.js.map +0 -1
- package/dist/src/daemon/service.js.map +0 -1
- package/dist/src/daemon/systemd.js.map +0 -1
- package/dist/src/document-understanding/extract.js.map +0 -1
- package/dist/src/errors/index.js.map +0 -1
- package/dist/src/extensions/activation-context.js.map +0 -1
- package/dist/src/extensions/activation-planner.js.map +0 -1
- package/dist/src/extensions/api.js.map +0 -1
- package/dist/src/extensions/bundle-mcp.js.map +0 -1
- package/dist/src/extensions/bundled-extension-activation.js.map +0 -1
- package/dist/src/extensions/diagnostics.js.map +0 -1
- package/dist/src/extensions/discover-extensions.js.map +0 -1
- package/dist/src/extensions/engine-check.js.map +0 -1
- package/dist/src/extensions/extension-metadata-snapshot.js.map +0 -1
- package/dist/src/extensions/extension-registry-impl.js.map +0 -1
- package/dist/src/extensions/health.js.map +0 -1
- package/dist/src/extensions/hooks.js.map +0 -1
- package/dist/src/extensions/index.js.map +0 -1
- package/dist/src/extensions/install-transaction.js.map +0 -1
- package/dist/src/extensions/install.js.map +0 -1
- package/dist/src/extensions/loader.js.map +0 -1
- package/dist/src/extensions/lockfile.js.map +0 -1
- package/dist/src/extensions/manifest-registry.js.map +0 -1
- package/dist/src/extensions/marketplace.js.map +0 -1
- package/dist/src/extensions/media-provider-contracts.js.map +0 -1
- package/dist/src/extensions/normalize-manifest.js.map +0 -1
- package/dist/src/extensions/onboard-helpers.js.map +0 -1
- package/dist/src/extensions/package-contract.js.map +0 -1
- package/dist/src/extensions/sdk/channel-entry.js.map +0 -1
- package/dist/src/extensions/sdk/channel-helpers.js.map +0 -1
- package/dist/src/extensions/sdk/index.js.map +0 -1
- package/dist/src/extensions/sdk/lazy.js.map +0 -1
- package/dist/src/extensions/sdk/testing.js.map +0 -1
- package/dist/src/extensions/security.js.map +0 -1
- package/dist/src/extensions/slots.js.map +0 -1
- package/dist/src/extensions/speech-provider-contracts.js.map +0 -1
- package/dist/src/extensions/store-zip-limits.js.map +0 -1
- package/dist/src/extensions/typed-event-bus.js.map +0 -1
- package/dist/src/extensions/types/hooks.js.map +0 -1
- package/dist/src/extensions/types/providers.js.map +0 -1
- package/dist/src/extensions/update.js.map +0 -1
- package/dist/src/extensions/when-context.js.map +0 -1
- package/dist/src/extensions/when-expression.js.map +0 -1
- package/dist/src/gateway/agent-builtin-tools.js.map +0 -1
- package/dist/src/gateway/agent-run-relay.js.map +0 -1
- package/dist/src/gateway/agents-admin.js.map +0 -1
- package/dist/src/gateway/auth.js.map +0 -1
- package/dist/src/gateway/capability-presets-admin.js.map +0 -1
- package/dist/src/gateway/chat-limits.js.map +0 -1
- package/dist/src/gateway/chat-stream/mapper.js.map +0 -1
- package/dist/src/gateway/clarify-bridge.js.map +0 -1
- package/dist/src/gateway/clarify-runtime.js.map +0 -1
- package/dist/src/gateway/client-ip.js.map +0 -1
- package/dist/src/gateway/config-tools-web.js.map +0 -1
- package/dist/src/gateway/credential.js.map +0 -1
- package/dist/src/gateway/discovery/mdns.js.map +0 -1
- package/dist/src/gateway/dreaming-automation-reconciler.js.map +0 -1
- package/dist/src/gateway/ensure-network-cors.js.map +0 -1
- package/dist/src/gateway/file-path-classifier.js.map +0 -1
- package/dist/src/gateway/file-reference-registry.js.map +0 -1
- package/dist/src/gateway/global-defaults-admin.js.map +0 -1
- package/dist/src/gateway/heartbeat/service.js.map +0 -1
- package/dist/src/gateway/hono/app.js.map +0 -1
- package/dist/src/gateway/hono/lib/agent-model.js.map +0 -1
- package/dist/src/gateway/hono/lib/config-payload.js.map +0 -1
- package/dist/src/gateway/hono/lib/extension-assets.js.map +0 -1
- package/dist/src/gateway/hono/lib/extension-store.js.map +0 -1
- package/dist/src/gateway/hono/lib/mask-secret-length.js.map +0 -1
- package/dist/src/gateway/hono/lib/route-logger.js.map +0 -1
- package/dist/src/gateway/hono/lib/safe-providers-config.js.map +0 -1
- package/dist/src/gateway/hono/lib/safe-voice-config.js.map +0 -1
- package/dist/src/gateway/hono/lib/startup-unavailable.js.map +0 -1
- package/dist/src/gateway/hono/lib/static-ui.js.map +0 -1
- package/dist/src/gateway/hono/middleware/auth.js.map +0 -1
- package/dist/src/gateway/hono/middleware/log-context.js.map +0 -1
- package/dist/src/gateway/hono/middleware/logger.js.map +0 -1
- package/dist/src/gateway/hono/middleware/route-errors.js.map +0 -1
- package/dist/src/gateway/hono/middleware/scopes.js.map +0 -1
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js.map +0 -1
- package/dist/src/gateway/hono/oauth-async.js.map +0 -1
- package/dist/src/gateway/hono/oauth.js.map +0 -1
- package/dist/src/gateway/hono/routes/activity.js.map +0 -1
- package/dist/src/gateway/hono/routes/agent-stream.js.map +0 -1
- package/dist/src/gateway/hono/routes/agents.js.map +0 -1
- package/dist/src/gateway/hono/routes/ai-assist.js.map +0 -1
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js.map +0 -1
- package/dist/src/gateway/hono/routes/browser-install.js.map +0 -1
- package/dist/src/gateway/hono/routes/browser.js.map +0 -1
- package/dist/src/gateway/hono/routes/capabilities.js.map +0 -1
- package/dist/src/gateway/hono/routes/capability-presets.js.map +0 -1
- package/dist/src/gateway/hono/routes/channels.js.map +0 -1
- package/dist/src/gateway/hono/routes/commands-skills.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/agents.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/channels.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +0 -1
- package/dist/src/gateway/hono/routes/config-patch/result.js.map +0 -1
- package/dist/src/gateway/hono/routes/config.js.map +0 -1
- package/dist/src/gateway/hono/routes/connectors.js.map +0 -1
- package/dist/src/gateway/hono/routes/doctor.js.map +0 -1
- package/dist/src/gateway/hono/routes/dreaming.js.map +0 -1
- package/dist/src/gateway/hono/routes/exposure.js.map +0 -1
- package/dist/src/gateway/hono/routes/extension-gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/global-defaults.js.map +0 -1
- package/dist/src/gateway/hono/routes/goals.js.map +0 -1
- package/dist/src/gateway/hono/routes/home.js.map +0 -1
- package/dist/src/gateway/hono/routes/host-fs.js.map +0 -1
- package/dist/src/gateway/hono/routes/index.js.map +0 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js.map +0 -1
- package/dist/src/gateway/hono/routes/lazy-fallback.js.map +0 -1
- package/dist/src/gateway/hono/routes/local-apps.js.map +0 -1
- package/dist/src/gateway/hono/routes/logs.js.map +0 -1
- package/dist/src/gateway/hono/routes/mcp.js.map +0 -1
- package/dist/src/gateway/hono/routes/media.js.map +0 -1
- package/dist/src/gateway/hono/routes/memory.js.map +0 -1
- package/dist/src/gateway/hono/routes/migrations.js.map +0 -1
- package/dist/src/gateway/hono/routes/mobile.js.map +0 -1
- package/dist/src/gateway/hono/routes/models.js.map +0 -1
- package/dist/src/gateway/hono/routes/notes.js.map +0 -1
- package/dist/src/gateway/hono/routes/projects.js.map +0 -1
- package/dist/src/gateway/hono/routes/public-gateway.js.map +0 -1
- package/dist/src/gateway/hono/routes/search.js.map +0 -1
- package/dist/src/gateway/hono/routes/sessions.js.map +0 -1
- package/dist/src/gateway/hono/routes/shares.js.map +0 -1
- package/dist/src/gateway/hono/routes/site-shares.js.map +0 -1
- package/dist/src/gateway/hono/routes/status.js.map +0 -1
- package/dist/src/gateway/hono/routes/tui.js.map +0 -1
- package/dist/src/gateway/hono/routes/tunnel.js.map +0 -1
- package/dist/src/gateway/hono/routes/update.js.map +0 -1
- package/dist/src/gateway/hono/routes/voice.js.map +0 -1
- package/dist/src/gateway/hono/routes/work-discovery.js.map +0 -1
- package/dist/src/gateway/hono/routes/workflows.js.map +0 -1
- package/dist/src/gateway/hono/routes/workspace.js.map +0 -1
- package/dist/src/gateway/hono/routes/you.js.map +0 -1
- package/dist/src/gateway/hono/sse-json.js.map +0 -1
- package/dist/src/gateway/hono/sse.js.map +0 -1
- package/dist/src/gateway/host.js.map +0 -1
- package/dist/src/gateway/image-capabilities.js.map +0 -1
- package/dist/src/gateway/listen.js.map +0 -1
- package/dist/src/gateway/lock.js.map +0 -1
- package/dist/src/gateway/ports.js.map +0 -1
- package/dist/src/gateway/protocol.js.map +0 -1
- package/dist/src/gateway/public-url.js.map +0 -1
- package/dist/src/gateway/rate-limit/auth-policy.js.map +0 -1
- package/dist/src/gateway/rate-limit/buckets.js.map +0 -1
- package/dist/src/gateway/rate-limit/env-flags.js.map +0 -1
- package/dist/src/gateway/resolve-channel-connect-defer.js.map +0 -1
- package/dist/src/gateway/resolve-webchat-session-key.js.map +0 -1
- package/dist/src/gateway/respawn.js.map +0 -1
- package/dist/src/gateway/run-loop.js.map +0 -1
- package/dist/src/gateway/runtime-config.js.map +0 -1
- package/dist/src/gateway/security/audit.js.map +0 -1
- package/dist/src/gateway/security/csp.js.map +0 -1
- package/dist/src/gateway/security/dangerous-tools.js.map +0 -1
- package/dist/src/gateway/security/external-content.js.map +0 -1
- package/dist/src/gateway/security/known-weak-secrets.js.map +0 -1
- package/dist/src/gateway/security/loopback.js.map +0 -1
- package/dist/src/gateway/security/operator-scopes.js.map +0 -1
- package/dist/src/gateway/security/origin-check.js.map +0 -1
- package/dist/src/gateway/security/preauth-connection-budget.js.map +0 -1
- package/dist/src/gateway/security/secret-equal.js.map +0 -1
- package/dist/src/gateway/server-tailscale.js.map +0 -1
- package/dist/src/gateway/server.js.map +0 -1
- package/dist/src/gateway/service/agent-runner.js.map +0 -1
- package/dist/src/gateway/service/config-coordinator.js.map +0 -1
- package/dist/src/gateway/service/marketplace-service.js.map +0 -1
- package/dist/src/gateway/service/run-gateway-agent.js.map +0 -1
- package/dist/src/gateway/service/session-chat-ids.js.map +0 -1
- package/dist/src/gateway/service/sessions-api.js.map +0 -1
- package/dist/src/gateway/service/sse-hub.js.map +0 -1
- package/dist/src/gateway/service.js.map +0 -1
- package/dist/src/gateway/session-reset-service.js.map +0 -1
- package/dist/src/gateway/startup-readiness.js.map +0 -1
- package/dist/src/gateway/startup-trace.js.map +0 -1
- package/dist/src/gateway/tailscale-auth.js.map +0 -1
- package/dist/src/gateway/tailscale-lifecycle.js.map +0 -1
- package/dist/src/gateway/tls-server.js.map +0 -1
- package/dist/src/gateway/trusted-proxy.js.map +0 -1
- package/dist/src/gateway/user-turn-input.js.map +0 -1
- package/dist/src/gateway/workspace-editor-path.js.map +0 -1
- package/dist/src/gateway/workspace-file-search.js.map +0 -1
- package/dist/src/gateway/workspace-fs-file-list.js.map +0 -1
- package/dist/src/gateway/workspace-heartbeat-path.js.map +0 -1
- package/dist/src/gateway/workspace-ripgrep.js.map +0 -1
- package/dist/src/gateway/ws-security.js.map +0 -1
- package/dist/src/generated/bundled-image-generation-providers.js.map +0 -1
- package/dist/src/goals/goal-contract-draft.js.map +0 -1
- package/dist/src/goals/goal-evidence-review.js.map +0 -1
- package/dist/src/goals/goal-notifications.js.map +0 -1
- package/dist/src/goals/goal-queue-store.js.map +0 -1
- package/dist/src/goals/goal-runner.js.map +0 -1
- package/dist/src/goals/goal-service.js.map +0 -1
- package/dist/src/goals/goal-store.js.map +0 -1
- package/dist/src/goals/goal-workflow-judge.js.map +0 -1
- package/dist/src/heartbeat/active-hours.js.map +0 -1
- package/dist/src/heartbeat/content-check.js.map +0 -1
- package/dist/src/heartbeat/event-prompt.js.map +0 -1
- package/dist/src/heartbeat/tokens.js.map +0 -1
- package/dist/src/heartbeat/wake.js.map +0 -1
- package/dist/src/i18n/format.js.map +0 -1
- package/dist/src/i18n/goals-bundle.js.map +0 -1
- package/dist/src/i18n/locale.js.map +0 -1
- package/dist/src/i18n/locales/goals.en.js.map +0 -1
- package/dist/src/i18n/locales/goals.zh.js.map +0 -1
- package/dist/src/i18n/locales/share-tool.en.js.map +0 -1
- package/dist/src/i18n/locales/share-tool.zh.js.map +0 -1
- package/dist/src/i18n/share-tool-bundle.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/infra/brew.js.map +0 -1
- package/dist/src/infra/bus/queue.js.map +0 -1
- package/dist/src/infra/debounce.js.map +0 -1
- package/dist/src/infra/exec.js.map +0 -1
- package/dist/src/infra/gateway-process-argv.js.map +0 -1
- package/dist/src/infra/gateway-processes.js.map +0 -1
- package/dist/src/infra/host-env-security-policy.js.map +0 -1
- package/dist/src/infra/host-env-security.js.map +0 -1
- package/dist/src/infra/http-proxy-env.js.map +0 -1
- package/dist/src/infra/is-main.js.map +0 -1
- package/dist/src/infra/json-utf8-bytes.js.map +0 -1
- package/dist/src/infra/node-sqlite.js.map +0 -1
- package/dist/src/infra/package-json.js.map +0 -1
- package/dist/src/infra/package-update-steps.js.map +0 -1
- package/dist/src/infra/path-env.js.map +0 -1
- package/dist/src/infra/path-prepend.js.map +0 -1
- package/dist/src/infra/ports.js.map +0 -1
- package/dist/src/infra/rate-limit/failure-limiter.js.map +0 -1
- package/dist/src/infra/rate-limit/keyed-store.js.map +0 -1
- package/dist/src/infra/rate-limit/rate-limiter.js.map +0 -1
- package/dist/src/infra/restart.js.map +0 -1
- package/dist/src/infra/retry.js.map +0 -1
- package/dist/src/infra/run-command.js.map +0 -1
- package/dist/src/infra/sqlite-errors.js.map +0 -1
- package/dist/src/infra/ssh-tunnel.js.map +0 -1
- package/dist/src/infra/stable-node-path.js.map +0 -1
- package/dist/src/infra/tailscale.js.map +0 -1
- package/dist/src/infra/undici-fetch.js.map +0 -1
- package/dist/src/infra/unhandled-rejections.js.map +0 -1
- package/dist/src/infra/update-channels.js.map +0 -1
- package/dist/src/infra/update-check.js.map +0 -1
- package/dist/src/infra/update-global.js.map +0 -1
- package/dist/src/infra/update-lock.js.map +0 -1
- package/dist/src/infra/update-log.js.map +0 -1
- package/dist/src/infra/update-restart.js.map +0 -1
- package/dist/src/infra/update-runner.js.map +0 -1
- package/dist/src/infra/update-startup.js.map +0 -1
- package/dist/src/infra/warning-filter.js.map +0 -1
- package/dist/src/infra/write-file-atomic.js.map +0 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js.map +0 -1
- package/dist/src/knowledge/coordinator.js.map +0 -1
- package/dist/src/knowledge/ingestion-service.js.map +0 -1
- package/dist/src/local-apps/acceptance.js.map +0 -1
- package/dist/src/local-apps/preview-runtime-bridge.js.map +0 -1
- package/dist/src/local-apps/runtime-entry.js.map +0 -1
- package/dist/src/local-apps/scaffold.js.map +0 -1
- package/dist/src/local-apps/service.js.map +0 -1
- package/dist/src/local-apps/store.js.map +0 -1
- package/dist/src/markdown/chunk.js.map +0 -1
- package/dist/src/markdown/code-spans.js.map +0 -1
- package/dist/src/markdown/fences.js.map +0 -1
- package/dist/src/markdown/frontmatter.js.map +0 -1
- package/dist/src/markdown/ir.js.map +0 -1
- package/dist/src/markdown/render.js.map +0 -1
- package/dist/src/markdown/tables.js.map +0 -1
- package/dist/src/mcp/channel-bridge.js.map +0 -1
- package/dist/src/mcp/channel-server.js.map +0 -1
- package/dist/src/mcp/channel-shared.js.map +0 -1
- package/dist/src/mcp/channel-tools.js.map +0 -1
- package/dist/src/mcp/gateway-http-client.js.map +0 -1
- package/dist/src/media/media-reference.js.map +0 -1
- package/dist/src/media/paths.js.map +0 -1
- package/dist/src/media/session-references.js.map +0 -1
- package/dist/src/media/store.js.map +0 -1
- package/dist/src/media/uri.js.map +0 -1
- package/dist/src/media-shared/http/api-key-rotation.js.map +0 -1
- package/dist/src/media-shared/http/deadline.js.map +0 -1
- package/dist/src/media-shared/http/private-network.js.map +0 -1
- package/dist/src/media-shared/http/provider-http-errors.js.map +0 -1
- package/dist/src/media-shared/http/provider-http.js.map +0 -1
- package/dist/src/media-shared/http/resolve-provider-http-request-config.js.map +0 -1
- package/dist/src/media-shared/http/ssrf-guard.js.map +0 -1
- package/dist/src/media-shared/http/test-helpers/mock-server.js.map +0 -1
- package/dist/src/media-understanding/audio-transcription-runner.js.map +0 -1
- package/dist/src/media-understanding/openai-compatible-audio.js.map +0 -1
- package/dist/src/media-understanding/registry.js.map +0 -1
- package/dist/src/media-understanding/resolve-entries.js.map +0 -1
- package/dist/src/media-understanding/runner.js.map +0 -1
- package/dist/src/migrations/config/default-capability-preset.js.map +0 -1
- package/dist/src/migrations/registry.js.map +0 -1
- package/dist/src/migrations/runner.js.map +0 -1
- package/dist/src/mobile/notification-service.js.map +0 -1
- package/dist/src/mobile/notification-store.js.map +0 -1
- package/dist/src/mobile/notification-types.js.map +0 -1
- package/dist/src/notes/agent-context.js.map +0 -1
- package/dist/src/notes/attachment-ref.js.map +0 -1
- package/dist/src/notes/note-attachment-sync.js.map +0 -1
- package/dist/src/notes/note-index-meta.js.map +0 -1
- package/dist/src/notes/note-markdown.js.map +0 -1
- package/dist/src/notes/paths.js.map +0 -1
- package/dist/src/notes/service.js.map +0 -1
- package/dist/src/notes/store.js.map +0 -1
- package/dist/src/package-version.js.map +0 -1
- package/dist/src/pets/factory.js.map +0 -1
- package/dist/src/pets/manifest.js.map +0 -1
- package/dist/src/pets/validator.js.map +0 -1
- package/dist/src/process/kill-tree.js.map +0 -1
- package/dist/src/project-trust/trust-store.js.map +0 -1
- package/dist/src/projects/automation-bind.js.map +0 -1
- package/dist/src/projects/goal-bind.js.map +0 -1
- package/dist/src/projects/memory-bind.js.map +0 -1
- package/dist/src/projects/project-agent-suggestion.js.map +0 -1
- package/dist/src/projects/project-agent.js.map +0 -1
- package/dist/src/projects/project-kind.js.map +0 -1
- package/dist/src/projects/project-loop.js.map +0 -1
- package/dist/src/projects/project-service.js.map +0 -1
- package/dist/src/projects/project-store.js.map +0 -1
- package/dist/src/projects/session-bind.js.map +0 -1
- package/dist/src/projects/workflow-bind.js.map +0 -1
- package/dist/src/projects/workspace-project.js.map +0 -1
- package/dist/src/projects/workspace.js.map +0 -1
- package/dist/src/providers/auth-runtime/auth-profile-store.js.map +0 -1
- package/dist/src/providers/auth-runtime/is-configured.js.map +0 -1
- package/dist/src/providers/auth-runtime/oauth.js.map +0 -1
- package/dist/src/providers/auth-runtime/resolve-api-key.js.map +0 -1
- package/dist/src/providers/auth-runtime/resolve-auth.js.map +0 -1
- package/dist/src/providers/constants.js.map +0 -1
- package/dist/src/providers/domestic-presets.js.map +0 -1
- package/dist/src/providers/env-keys.js.map +0 -1
- package/dist/src/providers/extension-stream-bridge.js.map +0 -1
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/providers/model-call.js.map +0 -1
- package/dist/src/providers/model-discovery.js.map +0 -1
- package/dist/src/providers/model-registry.js.map +0 -1
- package/dist/src/providers/model-supplements.js.map +0 -1
- package/dist/src/providers/plugin-registry.js.map +0 -1
- package/dist/src/providers/presentation.js.map +0 -1
- package/dist/src/remote-access/exposure-guards.js.map +0 -1
- package/dist/src/remote-access/exposure-manager.js.map +0 -1
- package/dist/src/review/review-git.js.map +0 -1
- package/dist/src/review/review-types.js.map +0 -1
- package/dist/src/routing/account-id.js.map +0 -1
- package/dist/src/routing/agent-session-key.js.map +0 -1
- package/dist/src/routing/bindings.js.map +0 -1
- package/dist/src/routing/index.js.map +0 -1
- package/dist/src/routing/resolve-route.js.map +0 -1
- package/dist/src/routing/resolve-tui-session-key.js.map +0 -1
- package/dist/src/routing/session-key-utils.js.map +0 -1
- package/dist/src/routing/session-key.js.map +0 -1
- package/dist/src/session/abort-cutoff.js.map +0 -1
- package/dist/src/session/chat-export.js.map +0 -1
- package/dist/src/session/client-history.js.map +0 -1
- package/dist/src/session/compaction-checkpoints.js.map +0 -1
- package/dist/src/session/config-store.js.map +0 -1
- package/dist/src/session/init-session-turn.js.map +0 -1
- package/dist/src/session/lifecycle-timestamps.js.map +0 -1
- package/dist/src/session/load-jsonl-entries.js.map +0 -1
- package/dist/src/session/manager.js.map +0 -1
- package/dist/src/session/patch-metadata.js.map +0 -1
- package/dist/src/session/reset-policy.js.map +0 -1
- package/dist/src/session/reset-triggers.js.map +0 -1
- package/dist/src/session/reset-type.js.map +0 -1
- package/dist/src/session/resolve-session.js.map +0 -1
- package/dist/src/session/session-context-for-llm.js.map +0 -1
- package/dist/src/session/session-id.js.map +0 -1
- package/dist/src/session/session-title.js.map +0 -1
- package/dist/src/session/session-workspace.js.map +0 -1
- package/dist/src/session/store.js.map +0 -1
- package/dist/src/session/stored-rows-to-file-entries.js.map +0 -1
- package/dist/src/session/thinking-resolve.js.map +0 -1
- package/dist/src/session/transcript-events.js.map +0 -1
- package/dist/src/session/transcript-format.js.map +0 -1
- package/dist/src/session/transcript-outline.js.map +0 -1
- package/dist/src/session/transcript-stats.js.map +0 -1
- package/dist/src/session/types.js.map +0 -1
- package/dist/src/session/user-round-delete.js.map +0 -1
- package/dist/src/share/share-audit.js.map +0 -1
- package/dist/src/share/share-auto.js.map +0 -1
- package/dist/src/share/share-config.js.map +0 -1
- package/dist/src/share/share-landing.js.map +0 -1
- package/dist/src/share/share-rate-limit.js.map +0 -1
- package/dist/src/share/share-store.js.map +0 -1
- package/dist/src/share/share-thumbnail.js.map +0 -1
- package/dist/src/share/share-types.js.map +0 -1
- package/dist/src/share/share-url.js.map +0 -1
- package/dist/src/share/share-zip.js.map +0 -1
- package/dist/src/share/site-proxy.js.map +0 -1
- package/dist/src/share/site-share-config.js.map +0 -1
- package/dist/src/share/site-share-router.js.map +0 -1
- package/dist/src/share/site-share-store.js.map +0 -1
- package/dist/src/share/site-share-types.js.map +0 -1
- package/dist/src/share/site-static-serve.js.map +0 -1
- package/dist/src/storage/sqlite/activity-repository.js.map +0 -1
- package/dist/src/storage/sqlite/config-repository.js.map +0 -1
- package/dist/src/storage/sqlite/connection.js.map +0 -1
- package/dist/src/storage/sqlite/connector-repository.js.map +0 -1
- package/dist/src/storage/sqlite/fts.js.map +0 -1
- package/dist/src/storage/sqlite/knowledge-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-index-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-records-repository.js.map +0 -1
- package/dist/src/storage/sqlite/memory-reference-consent-repository.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/discover.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/errors.js.map +0 -1
- package/dist/src/storage/sqlite/migrations/runner.js.map +0 -1
- package/dist/src/storage/sqlite/note-agent-context-repository.js.map +0 -1
- package/dist/src/storage/sqlite/notes-repository.js.map +0 -1
- package/dist/src/storage/sqlite/paths.js.map +0 -1
- package/dist/src/storage/sqlite/row-mappers.js.map +0 -1
- package/dist/src/storage/sqlite/schema-version.js.map +0 -1
- package/dist/src/storage/sqlite/schema.js.map +0 -1
- package/dist/src/storage/sqlite/session-metadata.js.map +0 -1
- package/dist/src/storage/sqlite/session-repository.js.map +0 -1
- package/dist/src/storage/sqlite/transaction.js.map +0 -1
- package/dist/src/storage/sqlite/transcript-repository.js.map +0 -1
- package/dist/src/storage/sqlite/user-profile-setup-repository.js.map +0 -1
- package/dist/src/storage/sqlite/user-trust-repository.js.map +0 -1
- package/dist/src/tui/backends/embedded-backend.js.map +0 -1
- package/dist/src/tui/backends/gateway-sse-backend.js.map +0 -1
- package/dist/src/tui/chat-history.js.map +0 -1
- package/dist/src/tui/clipboard-image.js.map +0 -1
- package/dist/src/tui/clipboard-text.js.map +0 -1
- package/dist/src/tui/components/assistant-message.js.map +0 -1
- package/dist/src/tui/components/bash-execution.js.map +0 -1
- package/dist/src/tui/components/bash-summary.js.map +0 -1
- package/dist/src/tui/components/branch-message-summary.js.map +0 -1
- package/dist/src/tui/components/branch-summary.js.map +0 -1
- package/dist/src/tui/components/chat-log.js.map +0 -1
- package/dist/src/tui/components/compaction-summary.js.map +0 -1
- package/dist/src/tui/components/custom-editor.js.map +0 -1
- package/dist/src/tui/components/custom-message.js.map +0 -1
- package/dist/src/tui/components/dynamic-border.js.map +0 -1
- package/dist/src/tui/components/extension-dialog.js.map +0 -1
- package/dist/src/tui/components/fuzzy-filter.js.map +0 -1
- package/dist/src/tui/components/scoped-models-selector.js.map +0 -1
- package/dist/src/tui/components/searchable-select-list.js.map +0 -1
- package/dist/src/tui/components/session-selector.js.map +0 -1
- package/dist/src/tui/components/settings-selector.js.map +0 -1
- package/dist/src/tui/components/thinking-selector.js.map +0 -1
- package/dist/src/tui/components/tool-execution.js.map +0 -1
- package/dist/src/tui/components/tui-bottom-bar.js.map +0 -1
- package/dist/src/tui/components/tui-header.js.map +0 -1
- package/dist/src/tui/components/user-message.js.map +0 -1
- package/dist/src/tui/components/visual-truncate.js.map +0 -1
- package/dist/src/tui/extension-host/autocomplete.js.map +0 -1
- package/dist/src/tui/extension-host/host.js.map +0 -1
- package/dist/src/tui/extension-host/load-extensions.js.map +0 -1
- package/dist/src/tui/extension-host/runtime-context.js.map +0 -1
- package/dist/src/tui/extension-host/runtime.js.map +0 -1
- package/dist/src/tui/extension-host/surface.js.map +0 -1
- package/dist/src/tui/extension-host/tool-renderers.js.map +0 -1
- package/dist/src/tui/format-tui-hotkeys.js.map +0 -1
- package/dist/src/tui/sse-consumer.js.map +0 -1
- package/dist/src/tui/theme/dark.js.map +0 -1
- package/dist/src/tui/theme/light.js.map +0 -1
- package/dist/src/tui/theme-manager.js.map +0 -1
- package/dist/src/tui/theme.js.map +0 -1
- package/dist/src/tui/tool-summary.js.map +0 -1
- package/dist/src/tui/tui-agent-events.js.map +0 -1
- package/dist/src/tui/tui-command-formatters.js.map +0 -1
- package/dist/src/tui/tui-commands.js.map +0 -1
- package/dist/src/tui/tui-context-usage.js.map +0 -1
- package/dist/src/tui/tui-extension-user-message.js.map +0 -1
- package/dist/src/tui/tui-fd-path.js.map +0 -1
- package/dist/src/tui/tui-file-autocomplete.js.map +0 -1
- package/dist/src/tui/tui-follow-up-queue.js.map +0 -1
- package/dist/src/tui/tui-git-branch.js.map +0 -1
- package/dist/src/tui/tui-keybindings-file.js.map +0 -1
- package/dist/src/tui/tui-lifecycle.js.map +0 -1
- package/dist/src/tui/tui-local-shell.js.map +0 -1
- package/dist/src/tui/tui-model-picker.js.map +0 -1
- package/dist/src/tui/tui-oauth-login.js.map +0 -1
- package/dist/src/tui/tui-overlays.js.map +0 -1
- package/dist/src/tui/tui-picker-overlay.js.map +0 -1
- package/dist/src/tui/tui-run-state.js.map +0 -1
- package/dist/src/tui/tui-run-status-format.js.map +0 -1
- package/dist/src/tui/tui-runtime-hints.js.map +0 -1
- package/dist/src/tui/tui-scoped-models.js.map +0 -1
- package/dist/src/tui/tui-session-actions.js.map +0 -1
- package/dist/src/tui/tui-session-format.js.map +0 -1
- package/dist/src/tui/tui-session-snapshot.js.map +0 -1
- package/dist/src/tui/tui-session-stats.js.map +0 -1
- package/dist/src/tui/tui-settings.js.map +0 -1
- package/dist/src/tui/tui-skills-autocomplete.js.map +0 -1
- package/dist/src/tui/tui-startup-resources.js.map +0 -1
- package/dist/src/tui/tui-startup-text.js.map +0 -1
- package/dist/src/tui/tui-stdio-filter.js.map +0 -1
- package/dist/src/tui/tui-submit.js.map +0 -1
- package/dist/src/tui/tui-suspend.js.map +0 -1
- package/dist/src/tui/tui-timeline-picker.js.map +0 -1
- package/dist/src/tui/tui-timeline.js.map +0 -1
- package/dist/src/tui/tui-tool-diff.js.map +0 -1
- package/dist/src/tui/tui-tool-result.js.map +0 -1
- package/dist/src/tui/tui-transcript-tree-picker.js.map +0 -1
- package/dist/src/tui/tui-transcript-tree.js.map +0 -1
- package/dist/src/tui/tui-types.js.map +0 -1
- package/dist/src/tui/tui-workflow-slash.js.map +0 -1
- package/dist/src/tui/tui.js.map +0 -1
- package/dist/src/tui/xopc-tui-keybindings.js.map +0 -1
- package/dist/src/tunnel/broker-client.js.map +0 -1
- package/dist/src/tunnel/consent.js.map +0 -1
- package/dist/src/tunnel/enable-lan-pairing.js.map +0 -1
- package/dist/src/tunnel/env.js.map +0 -1
- package/dist/src/tunnel/frp-subdomain-host.js.map +0 -1
- package/dist/src/tunnel/frpc-binary.js.map +0 -1
- package/dist/src/tunnel/frpc-config.js.map +0 -1
- package/dist/src/tunnel/frpc-extract.js.map +0 -1
- package/dist/src/tunnel/frpc-process.js.map +0 -1
- package/dist/src/tunnel/gateway-lifecycle.js.map +0 -1
- package/dist/src/tunnel/pair-context.js.map +0 -1
- package/dist/src/tunnel/pair-url.js.map +0 -1
- package/dist/src/tunnel/pairing-rate-limit.js.map +0 -1
- package/dist/src/tunnel/pairing.js.map +0 -1
- package/dist/src/tunnel/tunnel-audit.js.map +0 -1
- package/dist/src/tunnel/tunnel-config.js.map +0 -1
- package/dist/src/tunnel/tunnel-persist.js.map +0 -1
- package/dist/src/tunnel/tunnel-qr.js.map +0 -1
- package/dist/src/tunnel/tunnel-rate-limit.js.map +0 -1
- package/dist/src/tunnel/tunnel-service.js.map +0 -1
- package/dist/src/tunnel/tunnel-state.js.map +0 -1
- package/dist/src/tunnel/well-known.js.map +0 -1
- package/dist/src/user-context/config.js.map +0 -1
- package/dist/src/user-context/import.js.map +0 -1
- package/dist/src/user-context/owner.js.map +0 -1
- package/dist/src/user-context/profile.js.map +0 -1
- package/dist/src/user-context/projection.js.map +0 -1
- package/dist/src/user-context/runtime.js.map +0 -1
- package/dist/src/user-context/source-recommendations.js.map +0 -1
- package/dist/src/user-context/trust-policy.js.map +0 -1
- package/dist/src/utils/global-singleton.js.map +0 -1
- package/dist/src/utils/helpers.js.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/is-record.js.map +0 -1
- package/dist/src/utils/logger/audit.js.map +0 -1
- package/dist/src/utils/logger/config.js.map +0 -1
- package/dist/src/utils/logger/context.js.map +0 -1
- package/dist/src/utils/logger/exporters.js.map +0 -1
- package/dist/src/utils/logger/index.js.map +0 -1
- package/dist/src/utils/logger/log-store.js.map +0 -1
- package/dist/src/utils/logger/log-stream.js.map +0 -1
- package/dist/src/utils/logger/pino-record.js.map +0 -1
- package/dist/src/utils/logger/redact.js.map +0 -1
- package/dist/src/utils/logger/rotation.js.map +0 -1
- package/dist/src/utils/logger/shutdown.js.map +0 -1
- package/dist/src/utils/logger/stats.js.map +0 -1
- package/dist/src/utils/logger/streams.js.map +0 -1
- package/dist/src/utils/logger/types.js.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/utils/redact-sensitive-url.js.map +0 -1
- package/dist/src/utils/sanitize-log.js.map +0 -1
- package/dist/src/utils/string-coerce.js.map +0 -1
- package/dist/src/voice/language-profile.js.map +0 -1
- package/dist/src/voice/local/model-files.js.map +0 -1
- package/dist/src/voice/local/model-manager.js.map +0 -1
- package/dist/src/voice/local/models.js.map +0 -1
- package/dist/src/voice/local/runtime-client.js.map +0 -1
- package/dist/src/voice/local/runtime-dispatcher.js.map +0 -1
- package/dist/src/voice/local/runtime-worker.js.map +0 -1
- package/dist/src/voice/local/wav.js.map +0 -1
- package/dist/src/voice/metadata/builtin.js.map +0 -1
- package/dist/src/voice/metadata/registry.js.map +0 -1
- package/dist/src/voice/stt/availability.js.map +0 -1
- package/dist/src/voice/stt/config-slice.js.map +0 -1
- package/dist/src/voice/stt/factory.js.map +0 -1
- package/dist/src/voice/stt/index.js.map +0 -1
- package/dist/src/voice/stt/list-providers.js.map +0 -1
- package/dist/src/voice/stt/mention.js.map +0 -1
- package/dist/src/voice/stt/preflight.js.map +0 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.js.map +0 -1
- package/dist/src/voice/stt/providers/local-transcription.js.map +0 -1
- package/dist/src/voice/stt/providers/openai-transcription.js.map +0 -1
- package/dist/src/voice/stt/transcribe-core.js.map +0 -1
- package/dist/src/voice/stt/types.js.map +0 -1
- package/dist/src/voice/tts/audio.js.map +0 -1
- package/dist/src/voice/tts/config-slice.js.map +0 -1
- package/dist/src/voice/tts/directives.js.map +0 -1
- package/dist/src/voice/tts/factory.js.map +0 -1
- package/dist/src/voice/tts/list-providers.js.map +0 -1
- package/dist/src/voice/tts/merge-config.js.map +0 -1
- package/dist/src/voice/tts/openai-compatible-speech.js.map +0 -1
- package/dist/src/voice/tts/payload.js.map +0 -1
- package/dist/src/voice/tts/preprocess.js.map +0 -1
- package/dist/src/voice/tts/providers/alibaba-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/edge-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/minimax-speech.js.map +0 -1
- package/dist/src/voice/tts/providers/openai-speech.js.map +0 -1
- package/dist/src/voice/tts/sentence-boundary.js.map +0 -1
- package/dist/src/voice/tts/service.js.map +0 -1
- package/dist/src/voice/tts/speak-core.js.map +0 -1
- package/dist/src/voice/tts/speech-registry.js.map +0 -1
- package/dist/src/voice/tts/status-tracker.js.map +0 -1
- package/dist/src/voice/tts/summarize.js.map +0 -1
- package/dist/src/voice/tts/types.js.map +0 -1
- package/dist/src/work-discovery/analyzer.js.map +0 -1
- package/dist/src/work-discovery/probe.js.map +0 -1
- package/dist/src/work-discovery/repository.js.map +0 -1
- package/dist/src/work-discovery/service.js.map +0 -1
- package/dist/src/work-items/agent-context.js.map +0 -1
- package/dist/src/work-items/work-item-service.js.map +0 -1
- package/dist/src/work-items/work-item-store.js.map +0 -1
- package/dist/src/work-items/work-item-workflow-judge.js.map +0 -1
- package/dist/src/workflows/authoring/workflow-draft-store.js.map +0 -1
- package/dist/src/workflows/domain/definition-utils.js.map +0 -1
- package/dist/src/workflows/domain/run.js.map +0 -1
- package/dist/src/workflows/domain/schema-validation.js.map +0 -1
- package/dist/src/workflows/domain/validation.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-prompt.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-service.js.map +0 -1
- package/dist/src/workflows/draft/workflow-draft-validator.js.map +0 -1
- package/dist/src/workflows/engine/projector.js.map +0 -1
- package/dist/src/workflows/engine/workflow-engine.js.map +0 -1
- package/dist/src/workflows/registry/catalog-workflow-definition-registry.js.map +0 -1
- package/dist/src/workflows/runtime/graph-workflow-runtime.js.map +0 -1
- package/dist/src/workflows/service/run-view-to-snapshot.js.map +0 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +0 -1
- package/dist/src/workflows/service/workflow-session-bridge.js.map +0 -1
- package/dist/src/workflows/service/workflow-session-key.js.map +0 -1
- package/dist/src/workflows/store/event-store.js.map +0 -1
- package/dist/src/workflows/store/paths.js.map +0 -1
- package/dist/src/workflows/store/run-index-store.js.map +0 -1
- package/dist/src/workflows/store/run-store.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-config.js","names":[],"sources":["../../../../../src/agent/tools/search/resolve-config.ts"],"sourcesContent":["import type { WebToolsConfig } from '../../../config/schema.js';\nimport { resolveConfigValue } from '../../../config/resolve-config-value.js';\nimport { resolveWebSearchRegion } from './region.js';\nimport type { ResolvedWebSearchConfig } from './types.js';\n\nfunction resolveKey(raw?: string): string | undefined {\n if (raw === undefined || raw === '') return undefined;\n return resolveConfigValue(raw) ?? raw;\n}\n\n/** Build registry input from config (keys resolved via resolveConfigValue when set). */\nexport function resolveWebSearchConfig(web?: WebToolsConfig): ResolvedWebSearchConfig {\n const search = web?.search;\n const region = resolveWebSearchRegion(web);\n\n const providers = (search?.providers ?? []).map((p) => {\n const resolvedKey =\n p.apiKey !== undefined && p.apiKey !== '' ? resolveKey(p.apiKey) : undefined;\n const url = p.url?.replace(/\\/+$/, '');\n return {\n type: p.type,\n apiKey: resolvedKey,\n url,\n disabled: p.disabled,\n };\n });\n\n return {\n region,\n maxResults: search?.maxResults ?? 5,\n providers,\n };\n}\n"],"mappings":";;;2BAC6E;AAI7E,SAAS,WAAW,KAAkC;AACpD,KAAI,QAAQ,KAAA,KAAa,QAAQ,GAAI,QAAO,KAAA;AAC5C,QAAO,mBAAmB,IAAI,IAAI;;;AAIpC,SAAgB,uBAAuB,KAA+C;CACpF,MAAM,SAAS,KAAK;CACpB,MAAM,SAAS,uBAAuB,IAAI;CAE1C,MAAM,aAAa,QAAQ,aAAa,EAAE,EAAE,KAAK,MAAM;EACrD,MAAM,cACJ,EAAE,WAAW,KAAA,KAAa,EAAE,WAAW,KAAK,WAAW,EAAE,OAAO,GAAG,KAAA;EACrE,MAAM,MAAM,EAAE,KAAK,QAAQ,QAAQ,GAAG;AACtC,SAAO;GACL,MAAM,EAAE;GACR,QAAQ;GACR;GACA,UAAU,EAAE;GACb;GACD;AAEF,QAAO;EACL;EACA,YAAY,QAAQ,cAAc;EAClC;EACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"send-media.js","names":[],"sources":["../../../../src/agent/tools/send-media.ts"],"sourcesContent":["// Send media tool - allows sending local files as media\nimport { Type } from '@sinclair/typebox';\nimport { readFile } from 'fs/promises';\nimport { basename } from 'node:path';\nimport { AgentTool, type AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { checkFileSafety } from '../prompt/safety.js';\nimport { resolvePathUnderWorkspace } from './tool-paths.js';\nimport type { MessageBus, OutboundMessage } from '../../infra/bus/index.js';\n\nconst SendMediaSchema = Type.Object({\n filePath: Type.String({\n description:\n 'File to send. Relative paths are under the current agent workspace; absolute paths are used as given.',\n }),\n mediaType: Type.Optional(Type.Enum({\n photo: 'photo',\n video: 'video',\n audio: 'audio',\n document: 'document',\n }, { description: 'Type of media to send (auto-detected if not specified)' })),\n caption: Type.Optional(Type.String({ description: 'Caption for the media' })),\n});\n\ninterface MessageContext {\n channel: string;\n chatId: string;\n}\n\ntype SendMediaParams = {\n filePath: string;\n mediaType?: 'photo' | 'video' | 'audio' | 'document';\n caption?: string;\n};\n\n// Detect media type from file extension\nfunction detectMediaType(filePath: string): 'photo' | 'video' | 'audio' | 'document' {\n const ext = filePath.split('.').pop()?.toLowerCase();\n const imageExts = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp'];\n const videoExts = ['mp4', 'mov', 'avi', 'webm', 'mkv'];\n const audioExts = ['mp3', 'wav', 'ogg', 'm4a', 'flac'];\n\n if (imageExts.includes(ext || '')) return 'photo';\n if (videoExts.includes(ext || '')) return 'video';\n if (audioExts.includes(ext || '')) return 'audio';\n return 'document';\n}\n\n// Detect MIME type from file extension\nfunction detectMimeType(filePath: string): string {\n const ext = filePath.split('.').pop()?.toLowerCase();\n const mimeMap: Record<string, string> = {\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n mp4: 'video/mp4',\n mov: 'video/quicktime',\n avi: 'video/x-msvideo',\n webm: 'video/webm',\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n m4a: 'audio/mp4',\n flac: 'audio/flac',\n pdf: 'application/pdf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n txt: 'text/plain',\n zip: 'application/zip',\n rar: 'application/x-rar-compressed',\n };\n return mimeMap[ext || ''] || 'application/octet-stream';\n}\n\nexport function createSendMediaTool(\n workspace: string,\n bus: MessageBus,\n getContext: () => MessageContext | null,\n): AgentTool {\n return {\n name: 'send_media',\n description:\n 'Send a media file (photo, video, audio, document) to the current conversation. Relative paths resolve to the current agent workspace (same as read_file).',\n parameters: SendMediaSchema,\n label: '📎 Send Media',\n\n async execute(\n _toolCallId: string,\n params: any,\n _signal?: AbortSignal,\n ): Promise<AgentToolResult<{}>> {\n const p = params as SendMediaParams;\n const ctx = getContext();\n if (!ctx) {\n return {\n content: [{ type: 'text', text: 'Error: No active conversation context' }],\n details: {},\n };\n }\n\n const resolved = resolvePathUnderWorkspace(p.filePath, workspace);\n const safety = checkFileSafety('read', resolved);\n if (!safety.allowed) {\n return {\n content: [{ type: 'text', text: `🚫 ${safety.message}` }],\n details: {},\n };\n }\n\n try {\n const fileBuffer = await readFile(resolved);\n const base64 = fileBuffer.toString('base64');\n const mimeType = detectMimeType(resolved);\n const mediaType = p.mediaType || detectMediaType(resolved);\n\n // Create data URL\n const dataUrl = `data:${mimeType};base64,${base64}`;\n\n const msg: OutboundMessage = {\n channel: ctx.channel,\n chat_id: ctx.chatId,\n content: p.caption || '',\n mediaUrl: dataUrl,\n mediaType,\n };\n\n await bus.publishOutbound(msg);\n\n const fileName = basename(resolved);\n return {\n content: [{ type: 'text', text: `✅ Media sent: ${fileName} (${mediaType})` }],\n details: { filePath: resolved, mediaType },\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text', text: `Error sending media: ${errorMessage}` }],\n details: { error: errorMessage },\n };\n }\n },\n } as any;\n}\n"],"mappings":";;;;;;AASA,MAAM,kBAAkB,KAAK,OAAO;CAClC,UAAU,KAAK,OAAO,EACpB,aACE,yGACH,CAAC;CACF,WAAW,KAAK,SAAS,KAAK,KAAK;EACjC,OAAO;EACP,OAAO;EACP,OAAO;EACP,UAAU;EACX,EAAE,EAAE,aAAa,0DAA0D,CAAC,CAAC;CAC9E,SAAS,KAAK,SAAS,KAAK,OAAO,EAAE,aAAa,yBAAyB,CAAC,CAAC;CAC9E,CAAC;AAcF,SAAS,gBAAgB,UAA4D;CACnF,MAAM,MAAM,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa;CACpD,MAAM,YAAY;EAAC;EAAO;EAAQ;EAAO;EAAO;EAAQ;EAAM;CAC9D,MAAM,YAAY;EAAC;EAAO;EAAO;EAAO;EAAQ;EAAM;CACtD,MAAM,YAAY;EAAC;EAAO;EAAO;EAAO;EAAO;EAAO;AAEtD,KAAI,UAAU,SAAS,OAAO,GAAG,CAAE,QAAO;AAC1C,KAAI,UAAU,SAAS,OAAO,GAAG,CAAE,QAAO;AAC1C,KAAI,UAAU,SAAS,OAAO,GAAG,CAAE,QAAO;AAC1C,QAAO;;AAIT,SAAS,eAAe,UAA0B;AA0BhD,QAAO;EAvBL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,MAAM;EACN,KAAK;EACL,KAAK;EACL,KAAK;EAEO,CAzBF,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa,IAyB9B,OAAO;;AAG/B,SAAgB,oBACd,WACA,KACA,YACW;AACX,QAAO;EACL,MAAM;EACN,aACE;EACF,YAAY;EACZ,OAAO;EAEP,MAAM,QACJ,aACA,QACA,SAC8B;GAC9B,MAAM,IAAI;GACV,MAAM,MAAM,YAAY;AACxB,OAAI,CAAC,IACH,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAyC,CAAC;IAC1E,SAAS,EAAE;IACZ;GAGH,MAAM,WAAW,0BAA0B,EAAE,UAAU,UAAU;GACjE,MAAM,SAAS,gBAAgB,QAAQ,SAAS;AAChD,OAAI,CAAC,OAAO,QACV,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,MAAM,OAAO;KAAW,CAAC;IACzD,SAAS,EAAE;IACZ;AAGH,OAAI;IAEF,MAAM,UAAS,MADU,SAAS,SAAS,EACjB,SAAS,SAAS;IAC5C,MAAM,WAAW,eAAe,SAAS;IACzC,MAAM,YAAY,EAAE,aAAa,gBAAgB,SAAS;IAG1D,MAAM,UAAU,QAAQ,SAAS,UAAU;IAE3C,MAAM,MAAuB;KAC3B,SAAS,IAAI;KACb,SAAS,IAAI;KACb,SAAS,EAAE,WAAW;KACtB,UAAU;KACV;KACD;AAED,UAAM,IAAI,gBAAgB,IAAI;AAG9B,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,iBAFjB,SAAS,SAEiC,CAAC,IAAI,UAAU;MAAI,CAAC;KAC7E,SAAS;MAAE,UAAU;MAAU;MAAW;KAC3C;YACM,OAAO;IACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAC3E,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,wBAAwB;MAAgB,CAAC;KACzE,SAAS,EAAE,OAAO,cAAc;KACjC;;;EAGN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-search-tool.js","names":[],"sources":["../../../../src/agent/tools/session-search-tool.ts"],"sourcesContent":["// Cross-session transcript search + optional LLM summaries\nimport { Type } from '@sinclair/typebox';\nimport type { AgentMessage, AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { type UserMessage } from '@earendil-works/pi-ai/compat';\n\nimport type { Config } from '../../config/schema.js';\nimport { getDefaultModelSync, resolveModel } from '../../providers/index.js';\nimport { completeWithResolvedCredentials } from '../../providers/model-call.js';\nimport type { SessionStore } from '../../session/store.js';\nimport { readAgentMessageContent } from '../memory/agent-message-access.js';\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('Agent:SessionSearch');\n\nconst MAX_SUMMARY_CHARS = 20_000;\n\nfunction resolveSummaryModel(getConfig?: () => Config | undefined) {\n const envRef = process.env.XOPC_SESSION_SEARCH_MODEL?.trim();\n const ref = envRef;\n if (ref) {\n try {\n return resolveModel(ref);\n } catch (err) {\n log.warn({ err, ref }, 'session_search: summary model resolve failed, using fallback');\n }\n }\n try {\n return resolveModel('openai/gpt-4o-mini');\n } catch {\n const d = getDefaultModelSync(getConfig?.());\n return resolveModel(d);\n }\n}\n\nfunction extractTextFromContent(content: unknown): string {\n if (typeof content === 'string') {\n return content;\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const item of content) {\n if (typeof item !== 'object' || item === null || !('type' in item)) {\n continue;\n }\n const c = item as { type?: string; text?: string };\n if (c.type === 'text' && typeof c.text === 'string') {\n parts.push(c.text);\n }\n }\n return parts.join(' ');\n}\n\nfunction formatMessagesForSummary(messages: AgentMessage[]): string {\n const lines: string[] = [];\n let total = 0;\n for (const msg of messages) {\n const role = String(msg.role || 'unknown').toUpperCase();\n const text = extractTextFromContent(readAgentMessageContent(msg));\n const line = `${role}: ${text}`;\n if (total + line.length > MAX_SUMMARY_CHARS) {\n lines.push('… [truncated]');\n break;\n }\n lines.push(line);\n total += line.length + 1;\n }\n return lines.join('\\n\\n');\n}\n\nasync function summarizeSession(\n messages: AgentMessage[],\n query: string,\n getConfig: (() => Config | undefined) | undefined,\n signal: AbortSignal | undefined,\n logMeta?: { summarizingSessionKey: string },\n): Promise<string> {\n if (messages.length === 0) {\n return 'No messages in session.';\n }\n\n const formatted = formatMessagesForSummary(messages);\n const prompt = `Summarize this conversation for someone searching with: \"${query}\". Focus on facts, decisions, and names. Max 200 words. Use the same language as the conversation when possible.\n\nConversation:\n${formatted}`;\n\n const userMsg: UserMessage = { role: 'user', content: prompt, timestamp: Date.now() };\n const model = resolveSummaryModel(getConfig);\n\n try {\n const result = await completeWithResolvedCredentials(\n model,\n { messages: [userMsg] },\n {\n maxTokens: 400,\n temperature: 0.15,\n signal: signal as AbortSignal,\n },\n );\n\n let text = '';\n if (Array.isArray(result.content)) {\n for (const c of result.content) {\n if (c && typeof c === 'object' && (c as { type?: string }).type === 'text') {\n text += String((c as { text?: string }).text || '');\n }\n }\n }\n return text.trim() || '[Empty summary]';\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(\n {\n err,\n summarizingSessionKey: logMeta?.summarizingSessionKey,\n queryLength: query.length,\n messageCount: messages.length,\n },\n `session_search LLM summarization failed${logMeta?.summarizingSessionKey ? ` (session ${logMeta.summarizingSessionKey})` : ''}: ${msg}`,\n );\n return `[Summarization failed: ${msg}]`;\n }\n}\n\nconst SessionSearchSchema = Type.Object({\n query: Type.Optional(\n Type.String({ description: 'Keyword search over past sessions. Omit to list recent sessions.' }),\n ),\n roleFilter: Type.Optional(\n Type.Union([\n Type.Literal('user'),\n Type.Literal('assistant'),\n Type.Literal('system'),\n Type.Literal('tool'),\n Type.Literal('toolResult'),\n ]),\n ),\n limit: Type.Optional(Type.Number({ minimum: 1, maximum: 15 })),\n excludeSessionKey: Type.Optional(\n Type.String({ description: 'Exclude this session key from keyword results (default: current chat).' }),\n ),\n});\n\nexport interface SessionSearchToolDeps {\n getSessionStore: () => SessionStore;\n getConfig?: () => Config | undefined;\n getCurrentSessionKey?: () => string | undefined;\n}\n\ntype SessionSearchParams = {\n query?: string;\n roleFilter?: 'user' | 'assistant' | 'system' | 'tool' | 'toolResult';\n limit?: number;\n excludeSessionKey?: string;\n};\n\nexport function createSessionSearchTool(deps: SessionSearchToolDeps): AgentTool {\n return {\n name: 'session_search',\n label: 'Session search',\n description:\n 'Search other chat sessions by keywords and get short summaries, or omit `query` to list recent sessions (no LLM cost). Uses the same session store as the gateway. Narrow with roleFilter if needed.',\n parameters: SessionSearchSchema,\n\n async execute(\n _toolCallId: string,\n params: any,\n signal?: AbortSignal,\n ): Promise<AgentToolResult<{}>> {\n const p = params as SessionSearchParams;\n const store = deps.getSessionStore();\n const limit = Math.min(15, Math.max(1, p.limit ?? 5));\n const query = p.query?.trim() ?? '';\n\n try {\n if (!query) {\n const listed = await store.list({\n limit: limit + 5,\n sortBy: 'updatedAt',\n sortOrder: 'desc',\n });\n const items = listed.items.slice(0, limit).map((s) => ({\n key: s.key,\n name: s.name,\n updatedAt: s.updatedAt,\n messageCount: s.messageCount,\n sourceChannel: s.sourceChannel,\n }));\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n { success: true, mode: 'recent', results: items, total: listed.total },\n null,\n 2,\n ),\n },\n ],\n details: { mode: 'recent', items },\n };\n }\n\n const listed = await store.list({\n search: query,\n limit: limit + 10,\n sortBy: 'updatedAt',\n sortOrder: 'desc',\n });\n let matches = listed.items.map((item) => ({ key: item.key, score: 1 }));\n\n const exclude = p.excludeSessionKey?.trim() || deps.getCurrentSessionKey?.() || '';\n if (exclude) {\n matches = matches.filter((m) => m.key !== exclude);\n }\n\n const top = matches.slice(0, limit);\n\n const summaries = await Promise.all(\n top.map(async ({ key, score }) => {\n let messages = await store.load(key);\n\n if (p.roleFilter) {\n messages = messages.filter((m) => m.role === p.roleFilter);\n }\n\n const summary = await summarizeSession(messages, query, deps.getConfig, signal, {\n summarizingSessionKey: key,\n });\n return { sessionKey: key, score, summary };\n }),\n );\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: true,\n mode: 'keyword',\n query,\n results: summaries,\n count: summaries.length,\n },\n null,\n 2,\n ),\n },\n ],\n details: { query, summaries },\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: 'text', text: `session_search error: ${message}` }],\n details: { error: message },\n };\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-status-tool.js","names":[],"sources":["../../../../src/agent/tools/session-status-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nconst SessionStatusSchema = Type.Object({\n timezone: Type.Optional(\n Type.String({\n description:\n 'Optional IANA timezone for formatting (e.g. Asia/Shanghai). When omitted, uses the host/browser default timezone.',\n }),\n ),\n});\n\nfunction formatTimestamp(now: Date, timezone?: string): { label: string; isoUtc: string; tz: string } {\n const isoUtc = now.toISOString();\n const fallbackTz = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\n const tz = (timezone ?? '').trim() || fallbackTz;\n try {\n const parts = new Intl.DateTimeFormat('en-GB', {\n timeZone: tz,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n timeZoneName: 'short',\n }).formatToParts(now);\n\n const map: Record<string, string> = {};\n for (const part of parts) {\n if (part.type !== 'literal') {\n map[part.type] = part.value;\n }\n }\n\n const year = map.year ?? '';\n const month = map.month ?? '';\n const day = map.day ?? '';\n const hour = map.hour ?? '';\n const minute = map.minute ?? '';\n const second = map.second ?? '';\n const tzName = map.timeZoneName ?? '';\n\n const ok = year && month && day && hour && minute && second;\n const label = ok\n ? `${year}-${month}-${day} ${hour}:${minute}:${second}${tzName ? ` ${tzName}` : ''}`\n : `${isoUtc.slice(0, 19).replace('T', ' ')} UTC`;\n return { label, isoUtc, tz };\n } catch {\n return { label: `${isoUtc.slice(0, 19).replace('T', ' ')} UTC`, isoUtc, tz };\n }\n}\n\nexport function createSessionStatusTool(): AgentTool {\n return {\n name: 'session_status',\n label: '📊 Session Status',\n description:\n 'Show a compact status card including the current timestamp (UTC + formatted local time). Useful when you need the current date/time without relying on the system prompt.',\n parameters: SessionStatusSchema,\n async execute(\n _toolCallId: string,\n params: any,\n _signal?: AbortSignal,\n ): Promise<AgentToolResult<{}>> {\n const now = new Date();\n const fmt = formatTimestamp(now, (params as { timezone?: string }).timezone);\n const lines = [\n '📊 Session status',\n `Time: ${fmt.label}`,\n `Time zone: ${fmt.tz}`,\n `UTC: ${fmt.isoUtc}`,\n `timestampMs: ${now.getTime()}`,\n ];\n return {\n content: [{ type: 'text', text: lines.join('\\n') }],\n details: {},\n };\n },\n } as any;\n}\n\n"],"mappings":";;AAGA,MAAM,sBAAsB,KAAK,OAAO,EACtC,UAAU,KAAK,SACb,KAAK,OAAO,EACV,aACE,qHACH,CAAC,CACH,EACF,CAAC;AAEF,SAAS,gBAAgB,KAAW,UAAkE;CACpG,MAAM,SAAS,IAAI,aAAa;CAChC,MAAM,aAAa,KAAK,gBAAgB,CAAC,iBAAiB,CAAC,YAAY;CACvE,MAAM,MAAM,YAAY,IAAI,MAAM,IAAI;AACtC,KAAI;EACF,MAAM,QAAQ,IAAI,KAAK,eAAe,SAAS;GAC7C,UAAU;GACV,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,cAAc;GACf,CAAC,CAAC,cAAc,IAAI;EAErB,MAAM,MAA8B,EAAE;AACtC,OAAK,MAAM,QAAQ,MACjB,KAAI,KAAK,SAAS,UAChB,KAAI,KAAK,QAAQ,KAAK;EAI1B,MAAM,OAAO,IAAI,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS;EAC3B,MAAM,MAAM,IAAI,OAAO;EACvB,MAAM,OAAO,IAAI,QAAQ;EACzB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,SAAS,IAAI,gBAAgB;AAMnC,SAAO;GAAE,OAJE,QAAQ,SAAS,OAAO,QAAQ,UAAU,SAEjD,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,SAAS,IAAI,WAAW,OAC9E,GAAG,OAAO,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC;GAC7B;GAAQ;GAAI;SACtB;AACN,SAAO;GAAE,OAAO,GAAG,OAAO,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC;GAAO;GAAQ;GAAI;;;AAIhF,SAAgB,0BAAqC;AACnD,QAAO;EACL,MAAM;EACN,OAAO;EACP,aACE;EACF,YAAY;EACZ,MAAM,QACJ,aACA,QACA,SAC8B;GAC9B,MAAM,sBAAM,IAAI,MAAM;GACtB,MAAM,MAAM,gBAAgB,KAAM,OAAiC,SAAS;AAQ5E,UAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;MAPhC;MACA,SAAS,IAAI;MACb,cAAc,IAAI;MAClB,QAAQ,IAAI;MACZ,gBAAgB,IAAI,SAAS;MAGQ,CAAC,KAAK,KAAK;KAAE,CAAC;IACnD,SAAS,EAAE;IACZ;;EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-install-tool.js","names":[],"sources":["../../../../src/agent/tools/skill-install-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { isSkillInstallTarget, type SkillInstallTarget } from '../skills/install-target.js';\n\nexport interface SkillInstallToolOptions {\n source: string;\n ref?: string;\n path?: string;\n skillId?: string;\n target?: SkillInstallTarget;\n /** Current session whose resolved workspace should receive workspace installs. */\n sessionKey?: string;\n /** Explicit workspace override for workspace installs. */\n workspace?: string;\n force?: boolean;\n strictScan?: boolean;\n}\n\nexport interface SkillInstallToolResult {\n skillId: string;\n path: string;\n source: string;\n kind: 'git' | 'archive';\n contentHash: string;\n target?: SkillInstallTarget;\n}\n\nexport interface SkillInstallToolDeps {\n installSkillFromSource?: (opts: SkillInstallToolOptions) => Promise<SkillInstallToolResult>;\n getSessionKey?: () => string | undefined;\n}\n\nconst SkillInstallSchema = Type.Object({\n source: Type.String({\n description:\n 'Explicit skill source: Git URL, GitHub repository URL, https .zip/.tar.gz URL, file:// URL, or local archive/path.',\n }),\n ref: Type.Optional(Type.String({ description: 'Optional Git branch/tag/ref.' })),\n path: Type.Optional(\n Type.String({ description: 'Optional subdirectory inside the source that contains SKILL.md.' }),\n ),\n skillId: Type.Optional(\n Type.String({ description: 'Optional target managed skill id under the current workspace .xopc/skills.' }),\n ),\n target: Type.Optional(\n Type.Union([\n Type.Literal('workspace'),\n Type.Literal('global'),\n ], {\n description:\n 'Install target. Defaults to workspace. Use global only when the user explicitly asks for a global/personal install.',\n }),\n ),\n force: Type.Optional(Type.Boolean({ description: 'Replace an existing managed skill with the same id.' })),\n strictScan: Type.Optional(\n Type.Boolean({ description: 'Fail when the current scanner reports critical findings.' }),\n ),\n});\n\nfunction clean(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nexport function createSkillInstallTool(deps: SkillInstallToolDeps): AgentTool {\n return {\n name: 'skill_install',\n label: 'Install skill',\n description:\n 'Install an xopc skill from an explicit user-provided source. Use only when the user clearly asks to install or update a skill; do not install from a URL the user merely pasted without installation intent.',\n parameters: SkillInstallSchema,\n async execute(_toolCallId: string, params: any): Promise<AgentToolResult<{}>> {\n if (!deps.installSkillFromSource) {\n return {\n content: [{ type: 'text', text: 'Skill installation is not available in this runtime context.' }],\n details: {},\n };\n }\n\n const source = clean(params.source);\n if (!source) {\n return {\n content: [{ type: 'text', text: 'Missing source. Provide a Git URL, archive URL, file URL, or local path.' }],\n details: { errorCode: 'missing_source' },\n };\n }\n\n try {\n const result = await deps.installSkillFromSource({\n source,\n ref: clean(params.ref),\n path: clean(params.path),\n skillId: clean(params.skillId),\n target: isSkillInstallTarget(params.target) ? params.target : undefined,\n sessionKey: deps.getSessionKey?.(),\n force: params.force === true,\n strictScan: params.strictScan === true,\n });\n return {\n content: [\n {\n type: 'text',\n text: [\n `Installed skill \"${result.skillId}\".`,\n `Target: ${result.target ?? 'workspace'}`,\n `Source: ${result.source} (${result.kind})`,\n `Path: ${result.path}`,\n `Tree hash: ${result.contentHash.slice(0, 16)}`,\n ].join('\\n'),\n },\n ],\n details: { result },\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: 'text', text: `Skill install failed: ${message}` }],\n details: { errorCode: 'install_failed', errorMessage: message },\n };\n }\n },\n } as any;\n}\n"],"mappings":";;;AAgCA,MAAM,qBAAqB,KAAK,OAAO;CACrC,QAAQ,KAAK,OAAO,EAClB,aACE,sHACH,CAAC;CACF,KAAK,KAAK,SAAS,KAAK,OAAO,EAAE,aAAa,gCAAgC,CAAC,CAAC;CAChF,MAAM,KAAK,SACT,KAAK,OAAO,EAAE,aAAa,mEAAmE,CAAC,CAChG;CACD,SAAS,KAAK,SACZ,KAAK,OAAO,EAAE,aAAa,8EAA8E,CAAC,CAC3G;CACD,QAAQ,KAAK,SACX,KAAK,MAAM,CACT,KAAK,QAAQ,YAAY,EACzB,KAAK,QAAQ,SAAS,CACvB,EAAE,EACD,aACE,uHACH,CAAC,CACH;CACD,OAAO,KAAK,SAAS,KAAK,QAAQ,EAAE,aAAa,uDAAuD,CAAC,CAAC;CAC1G,YAAY,KAAK,SACf,KAAK,QAAQ,EAAE,aAAa,4DAA4D,CAAC,CAC1F;CACF,CAAC;AAEF,SAAS,MAAM,OAAoC;AACjD,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,KAAA;;AAGpE,SAAgB,uBAAuB,MAAuC;AAC5E,QAAO;EACL,MAAM;EACN,OAAO;EACP,aACE;EACF,YAAY;EACZ,MAAM,QAAQ,aAAqB,QAA2C;AAC5E,OAAI,CAAC,KAAK,uBACR,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAgE,CAAC;IACjG,SAAS,EAAE;IACZ;GAGH,MAAM,SAAS,MAAM,OAAO,OAAO;AACnC,OAAI,CAAC,OACH,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAA4E,CAAC;IAC7G,SAAS,EAAE,WAAW,kBAAkB;IACzC;AAGH,OAAI;IACF,MAAM,SAAS,MAAM,KAAK,uBAAuB;KAC/C;KACA,KAAK,MAAM,OAAO,IAAI;KACtB,MAAM,MAAM,OAAO,KAAK;KACxB,SAAS,MAAM,OAAO,QAAQ;KAC9B,QAAQ,qBAAqB,OAAO,OAAO,GAAG,OAAO,SAAS,KAAA;KAC9D,YAAY,KAAK,iBAAiB;KAClC,OAAO,OAAO,UAAU;KACxB,YAAY,OAAO,eAAe;KACnC,CAAC;AACF,WAAO;KACL,SAAS,CACP;MACE,MAAM;MACN,MAAM;OACJ,oBAAoB,OAAO,QAAQ;OACnC,WAAW,OAAO,UAAU;OAC5B,WAAW,OAAO,OAAO,IAAI,OAAO,KAAK;OACzC,SAAS,OAAO;OAChB,cAAc,OAAO,YAAY,MAAM,GAAG,GAAG;OAC9C,CAAC,KAAK,KAAK;MACb,CACF;KACD,SAAS,EAAE,QAAQ;KACpB;YACM,KAAK;IACZ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAChE,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,yBAAyB;MAAW,CAAC;KACrE,SAAS;MAAE,WAAW;MAAkB,cAAc;MAAS;KAChE;;;EAGN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manage-tool.js","names":[],"sources":["../../../../src/agent/tools/skill-manage-tool.ts"],"sourcesContent":["import { Type, type Static } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { existsSync, rmSync } from 'fs';\nimport { join } from 'path';\nimport { readFile, rm } from 'fs/promises';\n\nimport { resolveStateDir } from '../../config/paths.js';\nimport { createSkillConfigManager } from '../skills/config.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport {\n applyPatchToContent,\n atomicWriteUtf8,\n effectiveAgentWritePolicy,\n ensureCategorySegment,\n maxSkillMdChars,\n maxSupportFileBytes,\n mutatableSkillOrNull,\n isPathInsideDir,\n resolveCreateSkillDir,\n scanSkillDirOrError,\n validateSkillMdContent,\n validateSkillNameSegment,\n validateSupportingRelativePath,\n} from '../skills/skill-manage-ops.js';\n\nconst SkillManageSchema = Type.Object({\n action: Type.Union([\n Type.Literal('create'),\n Type.Literal('edit'),\n Type.Literal('patch'),\n Type.Literal('delete'),\n Type.Literal('write_file'),\n Type.Literal('remove_file'),\n ]),\n name: Type.Optional(Type.String({ description: 'Skill name (directory id / frontmatter name)' })),\n content: Type.Optional(Type.String({ description: 'Full SKILL.md for create or edit' })),\n category: Type.Optional(Type.String({ description: 'Optional single-segment category folder under skills root' })),\n write_target: Type.Optional(\n Type.Union([Type.Literal('global'), Type.Literal('workspace')], {\n description:\n 'Where to create the skill. Defaults to workspace. Use global only when the user explicitly asks for a global/personal skill. Respects skills.agentWritePolicy.',\n }),\n ),\n old_string: Type.Optional(Type.String()),\n new_string: Type.Optional(Type.String()),\n replace_all: Type.Optional(Type.Boolean({ default: false })),\n file_path: Type.Optional(\n Type.String({\n description: 'Relative path under skill dir (references/, templates/, scripts/, assets/)',\n }),\n ),\n file_content: Type.Optional(Type.String({ description: 'For write_file' })),\n});\n\nexport interface SkillManageToolDeps {\n getSkillManager: () => SkillManager | undefined;\n getWorkspace: () => string;\n onSkillsFilesystemMutate?: () => void;\n}\n\nfunction jsonResult(obj: Record<string, unknown>): AgentToolResult<{}> {\n return { content: [{ type: 'text', text: JSON.stringify(obj, null, 2) }], details: {} };\n}\n\nexport function createSkillManageTool(deps: SkillManageToolDeps): AgentTool {\n return {\n name: 'skill_manage',\n label: '🛠️ Skill',\n description:\n 'Create, edit, patch, or delete user skills under ~/.xopc/skills and/or workspace .xopc/skills/ (see skills.agentWritePolicy). ' +\n 'Also write_file / remove_file under references/, templates/, scripts/, assets/. ' +\n 'Bundled and extra-dir skills cannot be modified. Runs a security scan after writes.',\n parameters: SkillManageSchema,\n async execute(\n _toolCallId: string,\n params: Static<typeof SkillManageSchema>,\n ): Promise<AgentToolResult<{}>> {\n const mgr = deps.getSkillManager();\n if (!mgr) {\n return jsonResult({ success: false, error: 'Skill manager not available in this context.' });\n }\n\n const workspace = deps.getWorkspace();\n const skillsCfg = createSkillConfigManager(resolveStateDir()).load();\n const policy = effectiveAgentWritePolicy(skillsCfg);\n const mdMax = maxSkillMdChars(skillsCfg);\n const supMax = maxSupportFileBytes(skillsCfg);\n\n const notify = () => deps.onSkillsFilesystemMutate?.();\n\n try {\n switch (params.action) {\n case 'create': {\n const nameErr = validateSkillNameSegment(params.name ?? '', 'name');\n if (nameErr) return jsonResult({ success: false, error: nameErr });\n const name = params.name!.trim();\n\n const catErr = ensureCategorySegment(params.category);\n if (catErr) return jsonResult({ success: false, error: catErr });\n\n const md = validateSkillMdContent(params.content ?? '', name, mdMax);\n if (md.ok === false) return jsonResult({ success: false, error: md.error });\n\n const target = params.write_target ?? 'workspace';\n const dirRes = resolveCreateSkillDir(name, params.category?.trim(), target, workspace, policy);\n if (dirRes.ok === false) return jsonResult({ success: false, error: dirRes.error });\n\n if (existsSync(dirRes.dir)) {\n return jsonResult({ success: false, error: `Directory already exists: ${dirRes.dir}` });\n }\n\n const skillMdPath = join(dirRes.dir, 'SKILL.md');\n try {\n await atomicWriteUtf8(skillMdPath, params.content!);\n const scanErr = await scanSkillDirOrError(dirRes.dir, name);\n if (scanErr) {\n rmSync(dirRes.dir, { recursive: true, force: true });\n return jsonResult({ success: false, error: scanErr });\n }\n } catch (e) {\n rmSync(dirRes.dir, { recursive: true, force: true });\n throw e;\n }\n\n notify();\n return jsonResult({\n success: true,\n message: `Skill \"${name}\" created.`,\n target,\n path: dirRes.dir,\n });\n }\n\n case 'edit': {\n const nameErr = validateSkillNameSegment(params.name ?? '', 'name');\n if (nameErr) return jsonResult({ success: false, error: nameErr });\n const name = params.name!.trim();\n\n const sk = mutatableSkillOrNull(mgr.findSkill(name), workspace, policy);\n if (!sk) {\n return jsonResult({\n success: false,\n error: `Skill \"${name}\" not found or not writable (bundled/extra or policy).`,\n });\n }\n\n const md = validateSkillMdContent(params.content ?? '', name, mdMax);\n if (md.ok === false) return jsonResult({ success: false, error: md.error });\n\n const skillMdPath = join(sk.baseDir, 'SKILL.md');\n let previous: string;\n try {\n previous = await readFile(skillMdPath, 'utf-8');\n } catch {\n return jsonResult({ success: false, error: 'SKILL.md could not be read.' });\n }\n\n try {\n await atomicWriteUtf8(skillMdPath, params.content!);\n const scanErr = await scanSkillDirOrError(sk.baseDir, name);\n if (scanErr) {\n await atomicWriteUtf8(skillMdPath, previous);\n return jsonResult({ success: false, error: scanErr });\n }\n } catch (e) {\n await atomicWriteUtf8(skillMdPath, previous).catch(() => {});\n throw e;\n }\n\n notify();\n return jsonResult({ success: true, message: `Skill \"${name}\" updated.`, path: sk.baseDir });\n }\n\n case 'patch': {\n const nameErr = validateSkillNameSegment(params.name ?? '', 'name');\n if (nameErr) return jsonResult({ success: false, error: nameErr });\n const name = params.name!.trim();\n\n const sk = mutatableSkillOrNull(mgr.findSkill(name), workspace, policy);\n if (!sk) {\n return jsonResult({\n success: false,\n error: `Skill \"${name}\" not found or not writable.`,\n });\n }\n\n let relPath: string | undefined;\n if (params.file_path?.trim()) {\n const pErr = validateSupportingRelativePath(params.file_path.trim());\n if (pErr) return jsonResult({ success: false, error: pErr });\n relPath = params.file_path.trim().replace(/\\\\/g, '/');\n }\n\n const targetPath = relPath ? join(sk.baseDir, relPath) : join(sk.baseDir, 'SKILL.md');\n if (!isPathInsideDir(sk.baseDir, targetPath)) {\n return jsonResult({ success: false, error: 'Resolved path escapes skill directory.' });\n }\n\n let previous: string;\n try {\n previous = await readFile(targetPath, 'utf-8');\n } catch {\n return jsonResult({ success: false, error: `File not found: ${relPath ?? 'SKILL.md'}` });\n }\n\n const patched = applyPatchToContent(\n previous,\n params.old_string ?? '',\n params.new_string ?? '',\n params.replace_all === true,\n );\n if (patched.ok === false) return jsonResult({ success: false, error: patched.error });\n\n if (!relPath) {\n const md = validateSkillMdContent(patched.next, name, mdMax);\n if (md.ok === false) return jsonResult({ success: false, error: `Patch rejected: ${md.error}` });\n } else if (Buffer.byteLength(patched.next, 'utf-8') > supMax) {\n return jsonResult({ success: false, error: `File exceeds size limit (${supMax} bytes).` });\n }\n\n try {\n await atomicWriteUtf8(targetPath, patched.next);\n const scanErr = await scanSkillDirOrError(sk.baseDir, name);\n if (scanErr) {\n await atomicWriteUtf8(targetPath, previous);\n return jsonResult({ success: false, error: scanErr });\n }\n } catch (e) {\n await atomicWriteUtf8(targetPath, previous).catch(() => {});\n throw e;\n }\n\n notify();\n return jsonResult({\n success: true,\n message: `Patched ${relPath ?? 'SKILL.md'} (${patched.replacements} replacement(s)).`,\n });\n }\n\n case 'delete': {\n const nameErr = validateSkillNameSegment(params.name ?? '', 'name');\n if (nameErr) return jsonResult({ success: false, error: nameErr });\n const name = params.name!.trim();\n\n const sk = mutatableSkillOrNull(mgr.findSkill(name), workspace, policy);\n if (!sk) {\n return jsonResult({\n success: false,\n error: `Skill \"${name}\" not found or not writable.`,\n });\n }\n\n rmSync(sk.baseDir, { recursive: true, force: true });\n notify();\n return jsonResult({ success: true, message: `Skill \"${name}\" removed.`, path: sk.baseDir });\n }\n\n case 'write_file': {\n const nameErr = validateSkillNameSegment(params.name ?? '', 'name');\n if (nameErr) return jsonResult({ success: false, error: nameErr });\n const name = params.name!.trim();\n\n const sk = mutatableSkillOrNull(mgr.findSkill(name), workspace, policy);\n if (!sk) {\n return jsonResult({\n success: false,\n error: `Skill \"${name}\" not found or not writable.`,\n });\n }\n\n const pErr = validateSupportingRelativePath(params.file_path ?? '');\n if (pErr) return jsonResult({ success: false, error: pErr });\n const rel = params.file_path!.trim().replace(/\\\\/g, '/');\n const targetPath = join(sk.baseDir, rel);\n if (!isPathInsideDir(sk.baseDir, targetPath)) {\n return jsonResult({ success: false, error: 'Resolved path escapes skill directory.' });\n }\n\n const body = params.file_content ?? '';\n if (Buffer.byteLength(body, 'utf-8') > supMax) {\n return jsonResult({ success: false, error: `File exceeds size limit (${supMax} bytes).` });\n }\n\n const existed = existsSync(targetPath);\n let previous: string | null = null;\n if (existed) {\n try {\n previous = await readFile(targetPath, 'utf-8');\n } catch {\n previous = null;\n }\n }\n\n try {\n await atomicWriteUtf8(targetPath, body);\n const scanErr = await scanSkillDirOrError(sk.baseDir, name);\n if (scanErr) {\n if (previous !== null) await atomicWriteUtf8(targetPath, previous);\n else await rm(targetPath, { force: true });\n return jsonResult({ success: false, error: scanErr });\n }\n } catch (e) {\n if (previous !== null) await atomicWriteUtf8(targetPath, previous).catch(() => {});\n else await rm(targetPath, { force: true }).catch(() => {});\n throw e;\n }\n\n notify();\n return jsonResult({\n success: true,\n message: `Wrote ${rel}.`,\n });\n }\n\n case 'remove_file': {\n const nameErr = validateSkillNameSegment(params.name ?? '', 'name');\n if (nameErr) return jsonResult({ success: false, error: nameErr });\n const name = params.name!.trim();\n\n const sk = mutatableSkillOrNull(mgr.findSkill(name), workspace, policy);\n if (!sk) {\n return jsonResult({\n success: false,\n error: `Skill \"${name}\" not found or not writable.`,\n });\n }\n\n const pErr = validateSupportingRelativePath(params.file_path ?? '');\n if (pErr) return jsonResult({ success: false, error: pErr });\n const rel = params.file_path!.trim().replace(/\\\\/g, '/');\n const targetPath = join(sk.baseDir, rel);\n if (!isPathInsideDir(sk.baseDir, targetPath)) {\n return jsonResult({ success: false, error: 'Resolved path escapes skill directory.' });\n }\n\n if (!existsSync(targetPath)) {\n return jsonResult({ success: false, error: `File not found: ${rel}` });\n }\n\n await rm(targetPath, { force: true });\n await scanSkillDirOrError(sk.baseDir, name);\n notify();\n return jsonResult({ success: true, message: `Removed ${rel}.` });\n }\n\n default:\n return jsonResult({ success: false, error: 'Unknown action.' });\n }\n } catch (e) {\n return jsonResult({\n success: false,\n error: e instanceof Error ? e.message : String(e),\n });\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-tools.js","names":[],"sources":["../../../../src/agent/tools/skills-tools.ts"],"sourcesContent":["import { readFileSync, statSync } from 'fs';\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { resolveStateDir } from '../../config/paths.js';\nimport { createSkillConfigManager, isSkillEnabled, resolveSkillConfig } from '../skills/config.js';\nimport { resolveSkillReadablePath } from '../skills/skill-view-path.js';\nimport type { SkillManager } from '../skills/skill-manager.js';\nimport { truncateHead, formatSize, DEFAULT_MAX_BYTES } from './truncate.js';\n\nconst DEFAULT_MAX_LINES = 500;\nconst DEFAULT_MAX_SKILL_FILE_BYTES = 1_048_576;\n\nconst SkillsListSchema = Type.Object({\n query: Type.Optional(\n Type.String({\n description: 'Optional case-insensitive substring filter on skill name and description',\n }),\n ),\n});\n\nconst SkillViewSchema = Type.Object({\n name: Type.String({ description: 'Skill name (as in <available_skills> / skills_list)' }),\n path: Type.Optional(\n Type.String({\n description:\n 'Relative path inside the skill dir: omit for SKILL.md, or e.g. references/doc.md (only references/, templates/, scripts/, assets/)',\n }),\n ),\n limit: Type.Optional(\n Type.Number({ description: 'Max lines to return (default 500, like read_file)' }),\n ),\n});\n\nexport interface SkillsToolsDeps {\n getSkillManager: () => SkillManager | undefined;\n getSkillIndexingContext?: () =>\n | { registeredToolNames: string[]; skillAllowlist?: string[] }\n | undefined;\n /** Register declared env var names for command/tool passthrough (values never exposed). */\n registerSkillEnvPassthrough?: (names: string[]) => void;\n}\n\nfunction maxSkillBytes(): number {\n const lim = createSkillConfigManager(resolveStateDir()).load().limits?.maxSkillFileBytes;\n return typeof lim === 'number' && lim > 0 ? lim : DEFAULT_MAX_SKILL_FILE_BYTES;\n}\n\nexport function createSkillsListTool(deps: SkillsToolsDeps): AgentTool {\n return {\n name: 'skills_list',\n label: '📚 Skills',\n description:\n 'List available skills (name and description only). Use skill_view(name) to load SKILL.md or a file under references/, templates/, scripts/, or assets/.',\n parameters: SkillsListSchema,\n async execute(\n _toolCallId: string,\n params: any,\n ): Promise<AgentToolResult<{}>> {\n const mgr = deps.getSkillManager();\n if (!mgr) {\n return {\n content: [{ type: 'text', text: 'Skills are not available in this runtime context.' }],\n details: {},\n };\n }\n\n const idx = deps.getSkillIndexingContext?.();\n let skills = mgr.getEnabledSkillsForAgentSession({\n skillAllowlist: idx?.skillAllowlist,\n registeredToolNames: idx?.registeredToolNames,\n });\n const q = (params as { query?: string }).query?.trim().toLowerCase();\n if (q) {\n skills = skills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) || s.description.toLowerCase().includes(q),\n );\n }\n\n const payload = {\n skills: skills.map((s) => ({\n name: s.name,\n description: s.description,\n source: s.source,\n })),\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],\n details: {},\n };\n },\n } as any;\n}\n\nexport function createSkillViewTool(deps: SkillsToolsDeps): AgentTool {\n return {\n name: 'skill_view',\n label: '📖 Skill',\n description:\n 'Load a skill\\'s SKILL.md (default) or a supporting file under references/, templates/, scripts/, or assets/.',\n parameters: SkillViewSchema,\n async execute(\n _toolCallId: string,\n params: any,\n ): Promise<AgentToolResult<{}>> {\n const p = params as { name: string; path?: string; limit?: number };\n const mgr = deps.getSkillManager();\n if (!mgr) {\n return {\n content: [{ type: 'text', text: 'Skills are not available in this runtime context.' }],\n details: {},\n };\n }\n\n const skill = mgr.findSkill(p.name.trim());\n if (!skill) {\n return {\n content: [\n {\n type: 'text',\n text: `Skill \"${p.name}\" was not found. It may not be installed. Open the Skills library to install it, or use skills_list to see available names.`,\n },\n ],\n details: { errorCode: 'skill_not_found', skillName: p.name },\n };\n }\n\n const skillsConfig = createSkillConfigManager(resolveStateDir()).load();\n const skillConfig = resolveSkillConfig(skill, skillsConfig);\n if (skillConfig.enabled === false) {\n return {\n content: [\n {\n type: 'text',\n text: `Skill \"${skill.name}\" is installed but disabled. Enable it in Skills settings before using it.`,\n },\n ],\n details: { errorCode: 'skill_disabled', skillName: skill.name },\n };\n }\n if (skill.disableModelInvocation) {\n return {\n content: [{ type: 'text', text: `Skill \"${skill.name}\" is installed, but it is not available for model invocation.` }],\n details: { errorCode: 'skill_model_invocation_disabled', skillName: skill.name },\n };\n }\n if (!isSkillEnabled(skill, skillsConfig)) {\n return {\n content: [{ type: 'text', text: `Skill \"${skill.name}\" is installed, but its requirements are not met.` }],\n details: { errorCode: 'skill_requirements_unmet', skillName: skill.name },\n };\n }\n\n const idx = deps.getSkillIndexingContext?.();\n const visible = mgr.getEnabledSkillsForAgentSession({\n skillAllowlist: idx?.skillAllowlist,\n registeredToolNames: idx?.registeredToolNames,\n });\n if (!visible.some((s) => s.name === skill.name)) {\n return {\n content: [\n {\n type: 'text',\n text: `The current agent cannot use skill \"${skill.name}\". It is installed, but it is not in this agent's skill allowlist or is hidden by tool gating. Enable it in Agent settings → Skills before using it.`,\n },\n ],\n details: { errorCode: 'skill_agent_denied', skillName: skill.name },\n };\n }\n\n const resolved = resolveSkillReadablePath(skill, p.path);\n if (resolved.ok === false) {\n return { content: [{ type: 'text', text: resolved.error }], details: {} };\n }\n\n const maxBytes = maxSkillBytes();\n try {\n const st = statSync(resolved.absolutePath);\n if (st.size > maxBytes) {\n return {\n content: [\n {\n type: 'text',\n text: `File too large: ${formatSize(st.size)} (limit ${formatSize(maxBytes)})`,\n },\n ],\n details: {},\n };\n }\n\n const raw = readFileSync(resolved.absolutePath, 'utf-8');\n const truncation = truncateHead(raw, {\n maxLines: p.limit ?? DEFAULT_MAX_LINES,\n maxBytes: DEFAULT_MAX_BYTES,\n });\n\n let outputText = truncation.content;\n if (truncation.truncated) {\n if (truncation.firstLineExceedsLimit) {\n outputText = `(Line exceeds ${formatSize(DEFAULT_MAX_BYTES)})`;\n } else {\n outputText += `\\n\\n[${truncation.outputLines}/${truncation.totalLines} lines]`;\n }\n }\n\n const envNames = skill.requiredEnvVarNames;\n if (envNames?.length && deps.registerSkillEnvPassthrough) {\n deps.registerSkillEnvPassthrough(envNames);\n const setNow = envNames.filter((k) => process.env[k] !== undefined).length;\n outputText += `\\n\\n[skill env passthrough] Registered ${envNames.length} declared variable name(s) for this session; ${setNow} are currently defined in the process (values are never shown).`;\n }\n\n return { content: [{ type: 'text', text: outputText }], details: {} };\n } catch (e) {\n return {\n content: [{ type: 'text', text: `Error: ${e instanceof Error ? e.message : String(e)}` }],\n details: {},\n };\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"structured-output.js","names":[],"sources":["../../../../src/agent/tools/structured-output.ts"],"sourcesContent":["/**\n * Structured Output - XML Element Builder for tool outputs\n *\n * Provides structured XML output format for better parsing by LLMs.\n * Inspired by Forge's Element builder pattern.\n *\n * @example\n * ```typescript\n * const output = Element.create('file_content')\n * .attr('path', '/src/main.ts')\n * .attr('lines', '1-50')\n * .cdata(fileContent)\n * .render();\n * ```\n */\n\nexport interface ElementAttributes {\n [key: string]: string | number | boolean | undefined;\n}\n\nexport class Element {\n private tag: string;\n private attributes: Map<string, string> = new Map();\n private children: Element[] = [];\n private textContent?: string;\n private isCData = false;\n\n constructor(tag: string) {\n this.tag = tag;\n }\n\n /**\n * Create a new element\n */\n static create(tag: string): Element {\n return new Element(tag);\n }\n\n /**\n * Create a file content element\n */\n static fileContent(path: string, content: string, options?: {\n startLine?: number;\n endLine?: number;\n totalLines?: number;\n language?: string;\n }): Element {\n const el = Element.create('file_content').attr('path', path);\n\n if (options?.startLine !== undefined) {\n el.attr('start_line', options.startLine);\n }\n if (options?.endLine !== undefined) {\n el.attr('end_line', options.endLine);\n }\n if (options?.totalLines !== undefined) {\n el.attr('total_lines', options.totalLines);\n }\n if (options?.language) {\n el.attr('language', options.language);\n }\n\n return el.cdata(content);\n }\n\n /**\n * Create a directory listing element\n */\n static directoryListing(path: string, entries: Array<{\n name: string;\n type: 'file' | 'directory';\n size?: number;\n modified?: Date;\n }>): Element {\n const el = Element.create('directory_listing').attr('path', path);\n\n for (const entry of entries) {\n const entryEl = Element.create('entry')\n .attr('name', entry.name)\n .attr('type', entry.type);\n\n if (entry.size !== undefined) {\n entryEl.attr('size', entry.size);\n }\n if (entry.modified) {\n entryEl.attr('modified', entry.modified.toISOString());\n }\n\n el.child(entryEl);\n }\n\n return el;\n }\n\n /**\n * Create a search results element\n */\n static searchResults(pattern: string, results: Array<{\n path: string;\n line: number;\n column?: number;\n match: string;\n context?: string;\n }>, options?: {\n totalResults?: number;\n truncated?: boolean;\n }): Element {\n const el = Element.create('search_results')\n .attr('pattern', pattern);\n\n if (options?.totalResults !== undefined) {\n el.attr('total_results', options.totalResults);\n }\n if (options?.truncated) {\n el.attr('truncated', 'true');\n }\n\n for (const result of results) {\n const resultEl = Element.create('result')\n .attr('path', result.path)\n .attr('line', result.line);\n\n if (result.column !== undefined) {\n resultEl.attr('column', result.column);\n }\n\n resultEl.child(Element.create('match').text(result.match));\n\n if (result.context) {\n resultEl.child(Element.create('context').cdata(result.context));\n }\n\n el.child(resultEl);\n }\n\n return el;\n }\n\n /**\n * Create a command output element\n */\n static commandOutput(command: string, output: string, options?: {\n exitCode?: number;\n executionTimeMs?: number;\n workingDirectory?: string;\n }): Element {\n const el = Element.create('command_output')\n .attr('command', command);\n\n if (options?.exitCode !== undefined) {\n el.attr('exit_code', options.exitCode);\n }\n if (options?.executionTimeMs !== undefined) {\n el.attr('execution_time_ms', options.executionTimeMs);\n }\n if (options?.workingDirectory) {\n el.attr('working_directory', options.workingDirectory);\n }\n\n return el.cdata(output);\n }\n\n /**\n * Create an error element\n */\n static error(message: string, options?: {\n type?: string;\n code?: string;\n suggestion?: string;\n recoverable?: boolean;\n }): Element {\n const el = Element.create('error').attr('message', message);\n\n if (options?.type) {\n el.attr('type', options.type);\n }\n if (options?.code) {\n el.attr('code', options.code);\n }\n if (options?.recoverable !== undefined) {\n el.attr('recoverable', options.recoverable);\n }\n if (options?.suggestion) {\n el.child(Element.create('suggestion').text(options.suggestion));\n }\n\n return el;\n }\n\n /**\n * Create a success element\n */\n static success(message: string, details?: Record<string, string>): Element {\n const el = Element.create('success').attr('message', message);\n\n if (details) {\n for (const [key, value] of Object.entries(details)) {\n el.child(Element.create(key).text(value));\n }\n }\n\n return el;\n }\n\n /**\n * Escape XML special characters for attribute values\n */\n private escapeXml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n /**\n * Add an attribute\n */\n attr(key: string, value: string | number | boolean | undefined): this {\n if (value !== undefined && value !== null) {\n this.attributes.set(key, this.escapeXml(String(value)));\n }\n return this;\n }\n\n /**\n * Add multiple attributes\n */\n attrs(attributes: ElementAttributes): this {\n for (const [key, value] of Object.entries(attributes)) {\n this.attr(key, value);\n }\n return this;\n }\n\n /**\n * Set text content (XML escaped)\n */\n text(content: string): this {\n this.textContent = this.escapeXml(content);\n this.isCData = false;\n return this;\n }\n\n /**\n * Set CDATA content (not XML escaped)\n */\n cdata(content: string): this {\n this.textContent = content;\n this.isCData = true;\n return this;\n }\n\n /**\n * Add a child element\n */\n child(child: Element): this {\n this.children.push(child);\n return this;\n }\n\n /**\n * Add multiple child elements\n */\n addChildren(children: Element[]): this {\n for (const child of children) {\n this.children.push(child);\n }\n return this;\n }\n\n /**\n * Render the element as XML string\n */\n render(indent: string = ''): string {\n const attrs = [...this.attributes.entries()]\n .map(([k, v]) => ` ${k}=\"${this.escapeXml(v)}\"`)\n .join('');\n\n // Self-closing tag if no content and no children\n if (!this.textContent && this.children.length === 0) {\n return `${indent}<${this.tag}${attrs}/>`;\n }\n\n const childrenStr = this.children.map(c => c.render(indent + ' ')).join('\\n');\n\n let content: string;\n if (this.isCData) {\n content = `<![CDATA[${this.textContent}]]>`;\n } else if (this.textContent) {\n content = this.textContent;\n } else {\n content = '';\n }\n\n if (childrenStr) {\n if (content) {\n return `${indent}<${this.tag}${attrs}>\\n${indent} ${content}\\n${childrenStr}\\n${indent}</${this.tag}>`;\n } else {\n return `${indent}<${this.tag}${attrs}>\\n${childrenStr}\\n${indent}</${this.tag}>`;\n }\n } else {\n return `${indent}<${this.tag}${attrs}>${content}</${this.tag}>`;\n }\n }\n\n /**\n * Render as compact XML (no indentation)\n */\n renderCompact(): string {\n const attrs = [...this.attributes.entries()]\n .map(([k, v]) => ` ${k}=\"${this.escapeXml(v)}\"`)\n .join('');\n\n if (!this.textContent && this.children.length === 0) {\n return `<${this.tag}${attrs}/>`;\n }\n\n const childrenStr = this.children.map(c => c.renderCompact()).join('');\n\n let content: string;\n if (this.isCData) {\n content = `<![CDATA[${this.textContent}]]>`;\n } else if (this.textContent) {\n content = this.textContent;\n } else {\n content = '';\n }\n\n return `<${this.tag}${attrs}>${content}${childrenStr}</${this.tag}>`;\n }\n\n /**\n * Get the tag name\n */\n getTag(): string {\n return this.tag;\n }\n\n /**\n * Get an attribute value\n */\n getAttr(key: string): string | undefined {\n return this.attributes.get(key);\n }\n\n /**\n * Get all attributes\n */\n getAttrs(): Record<string, string> {\n return Object.fromEntries(this.attributes);\n }\n\n /**\n * Get text content\n */\n getText(): string | undefined {\n return this.textContent;\n }\n\n /**\n * Get children\n */\n getChildren(): Element[] {\n return [...this.children];\n }\n\n /**\n * Check if element has children\n */\n hasChildren(): boolean {\n return this.children.length > 0;\n }\n\n /**\n * Check if element has text content\n */\n hasText(): boolean {\n return this.textContent !== undefined && this.textContent.length > 0;\n }\n\n /**\n * Clone the element\n */\n clone(): Element {\n const cloned = new Element(this.tag);\n cloned.attributes = new Map(this.attributes);\n cloned.textContent = this.textContent;\n cloned.isCData = this.isCData;\n cloned.children = this.children.map(c => c.clone());\n return cloned;\n }\n\n /**\n * Convert to JSON representation\n */\n toJSON(): object {\n return {\n tag: this.tag,\n attributes: Object.fromEntries(this.attributes),\n text: this.textContent,\n cdata: this.isCData,\n children: this.children.map(c => c.toJSON()),\n };\n }\n\n /**\n * Create from JSON\n */\n static fromJSON(json: any): Element {\n const el = new Element(json.tag);\n\n if (json.attributes) {\n for (const [key, value] of Object.entries(json.attributes)) {\n el.attr(key, value as string);\n }\n }\n\n if (json.text) {\n if (json.cdata) {\n el.cdata(json.text);\n } else {\n el.text(json.text);\n }\n }\n\n if (json.children) {\n for (const childJson of json.children) {\n el.child(Element.fromJSON(childJson));\n }\n }\n\n return el;\n }\n}\n\n// XML Parser for parsing structured output\nexport class XMLParser {\n /**\n * Parse XML string to Element\n * Note: This is a simple parser for the output format, not a full XML parser\n */\n static parse(xml: string): Element | null {\n // Simple regex-based parser for our specific format\n const tagMatch = xml.match(/<([\\w_]+)([^>]*)>([\\s\\S]*?)<\\/\\1>/);\n if (!tagMatch) {\n // Try self-closing\n const selfClosingMatch = xml.match(/<([\\w_]+)([^>]*)\\/>/);\n if (selfClosingMatch) {\n const [, tag, attrsStr] = selfClosingMatch;\n const el = Element.create(tag);\n XMLParser.parseAttributes(el, attrsStr);\n return el;\n }\n return null;\n }\n\n const [, tag, attrsStr, content] = tagMatch;\n const el = Element.create(tag);\n XMLParser.parseAttributes(el, attrsStr);\n\n // Check for CDATA\n const cdataMatch = content.match(/<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/);\n if (cdataMatch) {\n el.cdata(cdataMatch[1]);\n } else {\n // Check for child elements\n const childRegex = /<([\\w_]+)([^>]*)>([\\s\\S]*?)<\\/\\1>/g;\n let childMatch;\n let hasChildren = false;\n\n while ((childMatch = childRegex.exec(content)) !== null) {\n const child = XMLParser.parse(childMatch[0]);\n if (child) {\n el.child(child);\n hasChildren = true;\n }\n }\n\n if (!hasChildren) {\n // It's text content\n const trimmed = content.trim();\n if (trimmed) {\n el.text(trimmed);\n }\n }\n }\n\n return el;\n }\n\n private static parseAttributes(el: Element, attrsStr: string): void {\n const attrRegex = /(\\w+)=\"([^\"]*)\"/g;\n let match;\n while ((match = attrRegex.exec(attrsStr)) !== null) {\n el.attr(match[1], match[2]);\n }\n }\n}\n\n// Utility functions for common patterns\nexport const StructuredOutput = {\n Element,\n XMLParser,\n\n // Convenience methods\n fileContent: Element.fileContent,\n directoryListing: Element.directoryListing,\n searchResults: Element.searchResults,\n commandOutput: Element.commandOutput,\n error: Element.error,\n success: Element.success,\n\n // Render multiple elements\n renderList(elements: Element[], separator: string = '\\n\\n'): string {\n return elements.map(e => e.render()).join(separator);\n },\n\n // Wrap in root element\n wrapInRoot(rootTag: string, children: Element[]): Element {\n const root = Element.create(rootTag);\n for (const child of children) {\n root.child(child);\n }\n return root;\n },\n};\n\nexport default StructuredOutput;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"todo-tool.js","names":[],"sources":["../../../../src/agent/tools/todo-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nconst VALID_STATUSES = new Set(['pending', 'in_progress', 'completed', 'cancelled']);\n\nexport type TodoStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled';\n\nexport interface TodoItem {\n id: string;\n content: string;\n status: TodoStatus;\n}\n\nconst TodoItemSchema = Type.Object({\n id: Type.String({ description: 'Unique identifier for the todo item' }),\n content: Type.String({ description: 'Task description' }),\n status: Type.Union(\n [\n Type.Literal('pending'),\n Type.Literal('in_progress'),\n Type.Literal('completed'),\n Type.Literal('cancelled'),\n ],\n { description: 'Current status of the task' },\n ),\n});\n\nconst TodoSchema = Type.Object({\n todos: Type.Optional(\n Type.Array(TodoItemSchema, {\n description: 'Array of todo items to write. Omit to read current list.',\n }),\n ),\n merge: Type.Optional(\n Type.Boolean({\n description:\n 'When true, update existing items by id and append new ones. ' +\n 'When false (default), replace the entire list.',\n default: false,\n }),\n ),\n});\n\nexport class TodoStore {\n private items: TodoItem[] = [];\n\n write(todos: Array<Partial<TodoItem> & { id?: string }>, merge: boolean): TodoItem[] {\n if (!merge) {\n this.items = todos.map((t) => this.validate(t));\n return this.read();\n }\n\n const existing = new Map(this.items.map((item) => [item.id, item]));\n\n for (const todo of todos) {\n const itemId = String(todo.id ?? '').trim();\n if (!itemId) continue;\n\n if (existing.has(itemId)) {\n const current = existing.get(itemId)!;\n if (todo.content !== undefined && String(todo.content).trim()) {\n current.content = String(todo.content).trim();\n }\n if (todo.status !== undefined && VALID_STATUSES.has(todo.status)) {\n current.status = todo.status;\n }\n } else {\n const validated = this.validate(todo);\n existing.set(validated.id, validated);\n this.items.push(validated);\n }\n }\n\n const seen = new Set<string>();\n this.items = this.items\n .map((item) => existing.get(item.id) ?? item)\n .filter((item) => {\n if (seen.has(item.id)) return false;\n seen.add(item.id);\n return true;\n });\n\n return this.read();\n }\n\n read(): TodoItem[] {\n return this.items.map((i) => ({ ...i }));\n }\n\n private validate(todo: Partial<TodoItem>): TodoItem {\n const id = String(todo.id ?? '').trim();\n const content = String(todo.content ?? '').trim();\n const statusRaw = todo.status ?? '';\n const status = VALID_STATUSES.has(statusRaw) ? (statusRaw as TodoStatus) : 'pending';\n if (!id) throw new Error('Todo item must have an id');\n if (!content) throw new Error('Todo item must have content');\n return { id, content, status };\n }\n}\n\nexport interface CreateTodoToolOptions {\n /** Resolve session key for isolated lists; defaults to a single in-memory list. */\n getSessionKey?: () => string | null | undefined;\n}\n\nfunction formatTodoList(items: TodoItem[]): string {\n const statusEmoji: Record<string, string> = {\n pending: '⬜',\n in_progress: '🔄',\n completed: '✅',\n cancelled: '❌',\n };\n\n const lines = items.map(\n (item) =>\n `${statusEmoji[item.status] ?? '⬜'} [${item.id}] ${item.content} (${item.status})`,\n );\n\n const total = items.length;\n const completed = items.filter((i) => i.status === 'completed').length;\n const inProgress = items.filter((i) => i.status === 'in_progress').length;\n\n return [\n `Todo List (${completed}/${total} done${inProgress > 0 ? `, ${inProgress} in progress` : ''}):`,\n '',\n ...lines,\n ].join('\\n');\n}\n\nfunction resolveSessionKey(getSessionKey: () => string | null | undefined): string {\n const raw = getSessionKey();\n const s = raw != null ? String(raw).trim() : '';\n return s.length > 0 ? s : 'default';\n}\n\n/**\n * In-session task list for multi-step work. One {@link TodoStore} per session key.\n */\nexport function createTodoTool(options?: CreateTodoToolOptions): AgentTool {\n const getSessionKey = options?.getSessionKey ?? (() => 'default');\n const stores = new Map<string, TodoStore>();\n\n const getStore = (): TodoStore => {\n const key = resolveSessionKey(getSessionKey);\n let s = stores.get(key);\n if (!s) {\n s = new TodoStore();\n stores.set(key, s);\n }\n return s;\n };\n\n return {\n name: 'todo',\n label: '📋 Todo',\n description:\n 'Plan and track tasks for complex multi-step work.\\n\\n' +\n 'USAGE:\\n' +\n '- Provide `todos` array to write/update tasks\\n' +\n '- Omit `todos` to read the current list\\n' +\n '- Set `merge: true` to update existing items by id without replacing the whole list\\n' +\n '- Each item needs: id (unique string), content (task description), status\\n' +\n '- Valid statuses: pending, in_progress, completed, cancelled\\n\\n' +\n 'WHEN TO USE:\\n' +\n '- At the start of complex tasks (3+ steps) to plan your approach\\n' +\n '- After completing each step to update progress\\n' +\n '- When the user asks about progress or remaining work\\n\\n' +\n 'BEST PRACTICES:\\n' +\n '- Keep only one item in_progress at a time\\n' +\n '- Use merge=true to update status without rewriting the whole list\\n' +\n '- Create concrete, actionable items (not vague goals)',\n parameters: TodoSchema,\n\n async execute(\n _toolCallId: string,\n params: any,\n _signal?: AbortSignal,\n ): Promise<AgentToolResult<{ items: TodoItem[] }>> {\n const store = getStore();\n try {\n if ((params as { todos?: unknown }).todos === undefined) {\n const items = store.read();\n const text = items.length === 0 ? 'No todos yet.' : formatTodoList(items);\n return {\n content: [{ type: 'text', text }],\n details: { items },\n };\n }\n\n const p = params as { todos: TodoItem[]; merge?: boolean };\n const items = store.write(p.todos, p.merge ?? false);\n return {\n content: [{ type: 'text', text: formatTodoList(items) }],\n details: { items },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n details: { items: store.read() },\n };\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-manual-tool.js","names":[],"sources":["../../../../src/agent/tools/tool-manual-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { getToolManual, listToolManuals } from '../tool-manuals/index.js';\n\nconst ToolManualSchema = Type.Object({\n tool: Type.String({ description: 'Built-in tool name, e.g. browser_use' }),\n});\n\nexport function createToolManualTool(): AgentTool<typeof ToolManualSchema, {}> {\n return {\n name: 'tool_manual',\n label: '📘 Tool Manual',\n description:\n 'Load built-in usage manuals for complex tools. Use before non-trivial use of tools such as browser_use.',\n parameters: ToolManualSchema,\n async execute(_toolCallId, params): Promise<AgentToolResult<{}>> {\n const toolName = params.tool.trim();\n const manual = getToolManual(toolName);\n if (!manual) {\n const available = listToolManuals().map((m) => m.toolName);\n return {\n content: [\n {\n type: 'text',\n text: `No built-in manual found for tool: ${toolName}. Available manuals: ${available.join(', ') || 'none'}.`,\n },\n ],\n details: {},\n };\n }\n\n return {\n content: [{ type: 'text', text: manual.content }],\n details: {},\n };\n },\n };\n}\n"],"mappings":";;;AAKA,MAAM,mBAAmB,KAAK,OAAO,EACnC,MAAM,KAAK,OAAO,EAAE,aAAa,wCAAwC,CAAC,EAC3E,CAAC;AAEF,SAAgB,uBAA+D;AAC7E,QAAO;EACL,MAAM;EACN,OAAO;EACP,aACE;EACF,YAAY;EACZ,MAAM,QAAQ,aAAa,QAAsC;GAC/D,MAAM,WAAW,OAAO,KAAK,MAAM;GACnC,MAAM,SAAS,cAAc,SAAS;AACtC,OAAI,CAAC,OAEH,QAAO;IACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,sCAAsC,SAAS,uBALzC,iBAAiB,CAAC,KAAK,MAAM,EAAE,SAK0C,CAAC,KAAK,KAAK,IAAI,OAAO;KAC5G,CACF;IACD,SAAS,EAAE;IACZ;AAGH,UAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,OAAO;KAAS,CAAC;IACjD,SAAS,EAAE;IACZ;;EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-paths.js","names":[],"sources":["../../../../src/agent/tools/tool-paths.ts"],"sourcesContent":["import { basename, isAbsolute, normalize, resolve } from 'node:path';\nimport { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES } from '../context/workspace.js';\n\nconst PROFILE_SYSTEM_MARKDOWN_NAME_LOWER = new Set(\n AGENT_PROFILE_MARKDOWN_SYSTEM_FILES.map((f) => f.toLowerCase()),\n);\n\n/**\n * Paths from the model: relative paths are under `workspaceRoot`; absolute paths are normalized.\n *\n * Security: resolves `..` traversal and normalizes the path. For absolute paths the caller\n * should additionally run sandbox path-policy validation when enforcement is enabled.\n */\nexport function resolvePathUnderWorkspace(userPath: string, workspaceRoot: string): string {\n const t = userPath.trim();\n if (!t) return workspaceRoot;\n if (isAbsolute(t)) {\n return normalize(t);\n }\n return resolve(workspaceRoot, t);\n}\n\n/** True if `userPath` is only a profile-system filename, e.g. `SOUL.md` or `.\\SOUL.md` (basename matches). */\nexport function isBareProfileMarkdownFileName(userPath: string): boolean {\n const b = basename(userPath.replace(/\\\\/g, '/'));\n if (!b || b === '.' || b === '..') return false;\n return PROFILE_SYSTEM_MARKDOWN_NAME_LOWER.has(b.toLowerCase());\n}\n\n/**\n * If `userPath` refers to a profile Markdown file by name, resolve under `profileMarkdownRoot`.\n */\nexport function resolveProfileMarkdownPathIfBareName(userPath: string, profileMarkdownRoot: string): string {\n return resolve(profileMarkdownRoot, basename(userPath.replace(/\\\\/g, '/')));\n}\n"],"mappings":";;;AAGA,MAAM,qCAAqC,IAAI,IAC7C,oCAAoC,KAAK,MAAM,EAAE,aAAa,CAAC,CAChE;;;;;;;AAQD,SAAgB,0BAA0B,UAAkB,eAA+B;CACzF,MAAM,IAAI,SAAS,MAAM;AACzB,KAAI,CAAC,EAAG,QAAO;AACf,KAAI,WAAW,EAAE,CACf,QAAO,UAAU,EAAE;AAErB,QAAO,QAAQ,eAAe,EAAE;;;AAIlC,SAAgB,8BAA8B,UAA2B;CACvE,MAAM,IAAI,SAAS,SAAS,QAAQ,OAAO,IAAI,CAAC;AAChD,KAAI,CAAC,KAAK,MAAM,OAAO,MAAM,KAAM,QAAO;AAC1C,QAAO,mCAAmC,IAAI,EAAE,aAAa,CAAC;;;;;AAMhE,SAAgB,qCAAqC,UAAkB,qBAAqC;AAC1G,QAAO,QAAQ,qBAAqB,SAAS,SAAS,QAAQ,OAAO,IAAI,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"truncate.js","names":[],"sources":["../../../../src/agent/tools/truncate.ts"],"sourcesContent":["// Truncation utilities - limits output to max lines/bytes\n\nexport const DEFAULT_MAX_LINES = 2000;\nexport const DEFAULT_MAX_BYTES = 50 * 1024;\nexport const GREP_MAX_LINE_LENGTH = 500;\n\nexport interface TruncationResult {\n\tcontent: string;\n\ttruncated: boolean;\n\ttruncatedBy: \"lines\" | \"bytes\" | null;\n\ttotalLines: number;\n\ttotalBytes: number;\n\toutputLines: number;\n\toutputBytes: number;\n\tlastLinePartial: boolean;\n\tfirstLineExceedsLimit: boolean;\n\tmaxLines: number;\n\tmaxBytes: number;\n}\n\nexport interface TruncationOptions {\n\tmaxLines?: number;\n\tmaxBytes?: number;\n}\n\nexport function formatSize(bytes: number): string {\n\tif (bytes < 1024) return `${bytes}B`;\n\tif (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;\n\treturn `${(bytes / (1024 * 1024)).toFixed(1)}MB`;\n}\n\n/**\n * Truncate from head - keep beginning of content\n */\nexport function truncateHead(content: string, options: TruncationOptions = {}): TruncationResult {\n\tconst maxLines = options.maxLines ?? DEFAULT_MAX_LINES;\n\tconst maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n\n\tconst totalBytes = Buffer.byteLength(content, 'utf-8');\n\tconst lines = content.split('\\n');\n\tconst totalLines = lines.length;\n\n\tif (totalLines <= maxLines && totalBytes <= maxBytes) {\n\t\treturn result(content, false, null, totalLines, totalBytes);\n\t}\n\n\t// Check first line\n\tif (Buffer.byteLength(lines[0], 'utf-8') > maxBytes) {\n\t\treturn result('', true, 'bytes', totalLines, totalBytes, 0, 0, false, true);\n\t}\n\n\t// Collect lines within limits\n\tconst output: string[] = [];\n\tlet bytes = 0;\n\tlet truncatedBy: 'lines' | 'bytes' = 'lines';\n\n\tfor (let i = 0; i < lines.length && i < maxLines; i++) {\n\t\tconst lineLen = Buffer.byteLength(lines[i], 'utf-8') + (i > 0 ? 1 : 0);\n\t\tif (bytes + lineLen > maxBytes) {\n\t\t\ttruncatedBy = 'bytes';\n\t\t\tbreak;\n\t\t}\n\t\toutput.push(lines[i]);\n\t\tbytes += lineLen;\n\t}\n\n\treturn result(output.join('\\n'), true, truncatedBy, totalLines, totalBytes, output.length, bytes);\n}\n\n/**\n * Truncate from tail - keep end of content (like tail command)\n */\nexport function truncateTail(content: string, options: TruncationOptions = {}): TruncationResult {\n\tconst maxLines = options.maxLines ?? DEFAULT_MAX_LINES;\n\tconst maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\n\n\tconst totalBytes = Buffer.byteLength(content, 'utf-8');\n\tconst lines = content.split('\\n');\n\tconst totalLines = lines.length;\n\n\tif (totalLines <= maxLines && totalBytes <= maxBytes) {\n\t\treturn result(content, false, null, totalLines, totalBytes);\n\t}\n\n\t// Start from end\n\tconst output: string[] = [];\n\tlet bytes = 0;\n\tlet lastLinePartial = false;\n\n\tfor (let i = Math.max(0, totalLines - maxLines); i < totalLines; i++) {\n\t\tconst line = lines[i];\n\t\tconst lineLen = Buffer.byteLength(line, 'utf-8') + (output.length > 0 ? 1 : 0);\n\n\t\tif (bytes + lineLen > maxBytes) {\n\t\t\tif (output.length === 0 && lineLen > maxBytes) {\n\t\t\t\t// First line itself exceeds limit - truncate it\n\t\t\t\tconst truncated = line.slice(0, Math.floor(maxBytes * 0.9));\n\t\t\t\toutput.push(truncated);\n\t\t\t\tlastLinePartial = true;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\toutput.push(line);\n\t\tbytes += lineLen;\n\t}\n\n\treturn result(output.join('\\n'), true, 'lines', totalLines, totalBytes, output.length, bytes, lastLinePartial);\n}\n\n/**\n * Truncate long lines to max length\n */\nexport function truncateLine(content: string, maxLen = GREP_MAX_LINE_LENGTH): { text: string; wasTruncated: boolean } {\n\tconst truncated = content.length > maxLen ? content.slice(0, maxLen) + '...' : content;\n\treturn { text: truncated, wasTruncated: content.length > maxLen };\n}\n\nfunction result(\n\tcontent: string,\n\ttruncated: boolean,\n\ttruncatedBy: \"lines\" | \"bytes\" | null,\n\ttotalLines: number,\n\ttotalBytes: number,\n\toutputLines = totalLines,\n\toutputBytes = totalBytes,\n\tlastLinePartial = false,\n\tfirstLineExceedsLimit = false\n): TruncationResult {\n\treturn {\n\t\tcontent,\n\t\ttruncated,\n\t\ttruncatedBy,\n\t\ttotalLines,\n\t\ttotalBytes,\n\t\toutputLines,\n\t\toutputBytes,\n\t\tmaxLines: DEFAULT_MAX_LINES,\n\t\tmaxBytes: DEFAULT_MAX_BYTES,\n\t\tlastLinePartial,\n\t\tfirstLineExceedsLimit,\n\t};\n}\n"],"mappings":";AAEA,MAAa,oBAAoB;AACjC,MAAa,oBAAoB,KAAK;AACtC,MAAa,uBAAuB;AAqBpC,SAAgB,WAAW,OAAuB;AACjD,KAAI,QAAQ,KAAM,QAAO,GAAG,MAAM;AAClC,KAAI,QAAQ,OAAO,KAAM,QAAO,IAAI,QAAQ,MAAM,QAAQ,EAAE,CAAC;AAC7D,QAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,EAAE,CAAC;;;;;AAM9C,SAAgB,aAAa,SAAiB,UAA6B,EAAE,EAAoB;CAChG,MAAM,WAAW,QAAQ,YAAA;CACzB,MAAM,WAAW,QAAQ,YAAA;CAEzB,MAAM,aAAa,OAAO,WAAW,SAAS,QAAQ;CACtD,MAAM,QAAQ,QAAQ,MAAM,KAAK;CACjC,MAAM,aAAa,MAAM;AAEzB,KAAI,cAAc,YAAY,cAAc,SAC3C,QAAO,OAAO,SAAS,OAAO,MAAM,YAAY,WAAW;AAI5D,KAAI,OAAO,WAAW,MAAM,IAAI,QAAQ,GAAG,SAC1C,QAAO,OAAO,IAAI,MAAM,SAAS,YAAY,YAAY,GAAG,GAAG,OAAO,KAAK;CAI5E,MAAM,SAAmB,EAAE;CAC3B,IAAI,QAAQ;CACZ,IAAI,cAAiC;AAErC,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,UAAU,IAAI,UAAU,KAAK;EACtD,MAAM,UAAU,OAAO,WAAW,MAAM,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI;AACpE,MAAI,QAAQ,UAAU,UAAU;AAC/B,iBAAc;AACd;;AAED,SAAO,KAAK,MAAM,GAAG;AACrB,WAAS;;AAGV,QAAO,OAAO,OAAO,KAAK,KAAK,EAAE,MAAM,aAAa,YAAY,YAAY,OAAO,QAAQ,MAAM;;;;;AAMlG,SAAgB,aAAa,SAAiB,UAA6B,EAAE,EAAoB;CAChG,MAAM,WAAW,QAAQ,YAAA;CACzB,MAAM,WAAW,QAAQ,YAAA;CAEzB,MAAM,aAAa,OAAO,WAAW,SAAS,QAAQ;CACtD,MAAM,QAAQ,QAAQ,MAAM,KAAK;CACjC,MAAM,aAAa,MAAM;AAEzB,KAAI,cAAc,YAAY,cAAc,SAC3C,QAAO,OAAO,SAAS,OAAO,MAAM,YAAY,WAAW;CAI5D,MAAM,SAAmB,EAAE;CAC3B,IAAI,QAAQ;CACZ,IAAI,kBAAkB;AAEtB,MAAK,IAAI,IAAI,KAAK,IAAI,GAAG,aAAa,SAAS,EAAE,IAAI,YAAY,KAAK;EACrE,MAAM,OAAO,MAAM;EACnB,MAAM,UAAU,OAAO,WAAW,MAAM,QAAQ,IAAI,OAAO,SAAS,IAAI,IAAI;AAE5E,MAAI,QAAQ,UAAU,UAAU;AAC/B,OAAI,OAAO,WAAW,KAAK,UAAU,UAAU;IAE9C,MAAM,YAAY,KAAK,MAAM,GAAG,KAAK,MAAM,WAAW,GAAI,CAAC;AAC3D,WAAO,KAAK,UAAU;AACtB,sBAAkB;;AAEnB;;AAED,SAAO,KAAK,KAAK;AACjB,WAAS;;AAGV,QAAO,OAAO,OAAO,KAAK,KAAK,EAAE,MAAM,SAAS,YAAY,YAAY,OAAO,QAAQ,OAAO,gBAAgB;;;;;AAM/G,SAAgB,aAAa,SAAiB,SAAA,KAAwE;AAErH,QAAO;EAAE,MADS,QAAQ,SAAS,SAAS,QAAQ,MAAM,GAAG,OAAO,GAAG,QAAQ;EACrD,cAAc,QAAQ,SAAS;EAAQ;;AAGlE,SAAS,OACR,SACA,WACA,aACA,YACA,YACA,cAAc,YACd,cAAc,YACd,kBAAkB,OAClB,wBAAwB,OACL;AACnB,QAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACV,UAAU;EACV;EACA;EACA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tts-tool.js","names":[],"sources":["../../../../src/agent/tools/tts-tool.ts"],"sourcesContent":["import { Type, type Static } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport type { Config } from '../../config/schema.js';\nimport type { MessageBus, OutboundMessage } from '../../infra/bus/index.js';\nimport { speak } from '../../voice/tts/speak-core.js';\nimport { mergeTtsConfigFromAppConfig } from '../../voice/tts/merge-config.js';\nimport { getChannelOutputFormat } from '../../voice/tts/service.js';\nimport { compressAudio } from '../../voice/tts/audio.js';\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('Agent:TTSTool');\n\nconst TextToSpeechSchema = Type.Object({\n text: Type.String({\n description:\n 'Plain text to convert to speech. Natural language only; avoid code blocks and long URLs.',\n }),\n voice: Type.Optional(\n Type.String({ description: 'Optional voice id override (provider-specific).' }),\n ),\n speed: Type.Optional(\n Type.Number({\n description: 'Speech speed multiplier 0.25–4.0 (provider support varies).',\n minimum: 0.25,\n maximum: 4,\n }),\n ),\n});\n\nexport interface TextToSpeechToolDeps {\n bus: MessageBus;\n getContext: () => { channel: string; chatId: string } | null;\n getConfig: () => Config | undefined;\n}\n\nexport function createTextToSpeechTool(deps: TextToSpeechToolDeps): AgentTool {\n return {\n name: 'text_to_speech',\n label: '🔊 Text to speech',\n description: [\n 'Convert text to speech and send it to the current chat as an audio message.',\n 'Use when the user explicitly asks you to read something aloud, or when short voice output fits better than a long text reply.',\n 'Do not use on every turn. Prefer clean, speakable text (no markdown fences, minimal symbols).',\n ].join(' '),\n parameters: TextToSpeechSchema,\n\n async execute(\n _toolCallId: string,\n params: Static<typeof TextToSpeechSchema>,\n _signal?: AbortSignal,\n ): Promise<AgentToolResult<{}>> {\n const ctx = deps.getContext();\n if (!ctx) {\n return {\n content: [{ type: 'text', text: 'Error: No active conversation context' }],\n details: {},\n };\n }\n\n const cfg = deps.getConfig();\n const ttsConfig = mergeTtsConfigFromAppConfig(cfg?.messages?.tts);\n if (!ttsConfig.enabled) {\n return {\n content: [{ type: 'text', text: 'TTS is not enabled in configuration.' }],\n details: {},\n };\n }\n\n const maxLength = ttsConfig.maxTextLength || 4096;\n if (params.text.length > maxLength) {\n return {\n content: [\n {\n type: 'text',\n text: `Text too long (${params.text.length} chars). Maximum is ${maxLength}. Shorten and retry.`,\n },\n ],\n details: {},\n };\n }\n\n if (!params.text.trim()) {\n return {\n content: [{ type: 'text', text: 'Text is empty.' }],\n details: {},\n };\n }\n\n try {\n const outFmt = getChannelOutputFormat(ctx.channel);\n const result = await speak(params.text, ttsConfig, {\n appConfig: cfg,\n tts: {\n format: outFmt.format as 'opus' | 'mp3' | 'wav',\n voice: params.voice,\n speed: params.speed,\n },\n });\n\n const wavTarget = outFmt.format === 'mp3' ? 'mp3' : 'opus';\n const { buffer: compressedAudio, format: compressedFormat } = await compressAudio(\n Buffer.from(result.audio),\n result.format,\n wavTarget,\n );\n\n const mimeType =\n compressedFormat === 'opus'\n ? 'audio/ogg'\n : compressedFormat === 'mp3' || compressedFormat === 'mpeg'\n ? 'audio/mpeg'\n : `audio/${compressedFormat}`;\n const dataUrl = `data:${mimeType};base64,${compressedAudio.toString('base64')}`;\n\n const msg: OutboundMessage = {\n channel: ctx.channel,\n chat_id: ctx.chatId,\n content: '',\n mediaUrl: dataUrl,\n mediaType: 'audio',\n audioAsVoice: outFmt.voiceCompatible,\n };\n\n await deps.bus.publishOutbound(msg);\n\n log.info(\n {\n provider: result.provider,\n format: compressedFormat,\n textLength: params.text.length,\n audioSize: compressedAudio.length,\n },\n 'TTS tool sent audio',\n );\n\n return {\n content: [\n {\n type: 'text',\n text: `✅ Sent voice message (${result.provider}, ${compressedFormat}).`,\n },\n ],\n details: { provider: result.provider, format: compressedFormat },\n };\n } catch (error) {\n const em = error instanceof Error ? error.message : String(error);\n log.error({ errorMessage: em, textLength: params.text.length }, 'TTS tool failed');\n return {\n content: [{ type: 'text', text: `TTS failed: ${em}` }],\n details: { error: em },\n };\n }\n },\n } as any;\n}\n"],"mappings":";;;;;;;;aASqD;AAErD,MAAM,MAAM,aAAa,gBAAgB;AAEzC,MAAM,qBAAqB,KAAK,OAAO;CACrC,MAAM,KAAK,OAAO,EAChB,aACE,4FACH,CAAC;CACF,OAAO,KAAK,SACV,KAAK,OAAO,EAAE,aAAa,mDAAmD,CAAC,CAChF;CACD,OAAO,KAAK,SACV,KAAK,OAAO;EACV,aAAa;EACb,SAAS;EACT,SAAS;EACV,CAAC,CACH;CACF,CAAC;AAQF,SAAgB,uBAAuB,MAAuC;AAC5E,QAAO;EACL,MAAM;EACN,OAAO;EACP,aAAa;GACX;GACA;GACA;GACD,CAAC,KAAK,IAAI;EACX,YAAY;EAEZ,MAAM,QACJ,aACA,QACA,SAC8B;GAC9B,MAAM,MAAM,KAAK,YAAY;AAC7B,OAAI,CAAC,IACH,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAyC,CAAC;IAC1E,SAAS,EAAE;IACZ;GAGH,MAAM,MAAM,KAAK,WAAW;GAC5B,MAAM,YAAY,4BAA4B,KAAK,UAAU,IAAI;AACjE,OAAI,CAAC,UAAU,QACb,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAwC,CAAC;IACzE,SAAS,EAAE;IACZ;GAGH,MAAM,YAAY,UAAU,iBAAiB;AAC7C,OAAI,OAAO,KAAK,SAAS,UACvB,QAAO;IACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,kBAAkB,OAAO,KAAK,OAAO,sBAAsB,UAAU;KAC5E,CACF;IACD,SAAS,EAAE;IACZ;AAGH,OAAI,CAAC,OAAO,KAAK,MAAM,CACrB,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAkB,CAAC;IACnD,SAAS,EAAE;IACZ;AAGH,OAAI;IACF,MAAM,SAAS,uBAAuB,IAAI,QAAQ;IAClD,MAAM,SAAS,MAAM,MAAM,OAAO,MAAM,WAAW;KACjD,WAAW;KACX,KAAK;MACH,QAAQ,OAAO;MACf,OAAO,OAAO;MACd,OAAO,OAAO;MACf;KACF,CAAC;IAEF,MAAM,YAAY,OAAO,WAAW,QAAQ,QAAQ;IACpD,MAAM,EAAE,QAAQ,iBAAiB,QAAQ,qBAAqB,MAAM,cAClE,OAAO,KAAK,OAAO,MAAM,EACzB,OAAO,QACP,UACD;IAQD,MAAM,UAAU,QALd,qBAAqB,SACjB,cACA,qBAAqB,SAAS,qBAAqB,SACjD,eACA,SAAS,mBACgB,UAAU,gBAAgB,SAAS,SAAS;IAE7E,MAAM,MAAuB;KAC3B,SAAS,IAAI;KACb,SAAS,IAAI;KACb,SAAS;KACT,UAAU;KACV,WAAW;KACX,cAAc,OAAO;KACtB;AAED,UAAM,KAAK,IAAI,gBAAgB,IAAI;AAEnC,QAAI,KACF;KACE,UAAU,OAAO;KACjB,QAAQ;KACR,YAAY,OAAO,KAAK;KACxB,WAAW,gBAAgB;KAC5B,EACD,sBACD;AAED,WAAO;KACL,SAAS,CACP;MACE,MAAM;MACN,MAAM,yBAAyB,OAAO,SAAS,IAAI,iBAAiB;MACrE,CACF;KACD,SAAS;MAAE,UAAU,OAAO;MAAU,QAAQ;MAAkB;KACjE;YACM,OAAO;IACd,MAAM,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACjE,QAAI,MAAM;KAAE,cAAc;KAAI,YAAY,OAAO,KAAK;KAAQ,EAAE,kBAAkB;AAClF,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,eAAe;MAAM,CAAC;KACtD,SAAS,EAAE,OAAO,IAAI;KACvB;;;EAGN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-plan-tool.js","names":[],"sources":["../../../../src/agent/tools/update-plan-tool.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nexport type TurnPlanStatus = 'pending' | 'in_progress' | 'completed';\n\nexport interface TurnPlanStep {\n step: string;\n status: TurnPlanStatus;\n}\n\nexport interface TurnPlanDetails {\n explanation?: string;\n plan: TurnPlanStep[];\n}\n\nconst VALID_STATUSES = new Set<TurnPlanStatus>(['pending', 'in_progress', 'completed']);\n\nconst PlanStepSchema = Type.Object({\n step: Type.String({ minLength: 1, description: 'Short task step' }),\n status: Type.Union([\n Type.Literal('pending'),\n Type.Literal('in_progress'),\n Type.Literal('completed'),\n ]),\n});\n\nconst UpdatePlanSchema = Type.Object({\n explanation: Type.Optional(Type.String({ description: 'Short reason for this plan update' })),\n plan: Type.Array(PlanStepSchema, {\n minItems: 1,\n maxItems: 8,\n description: 'Full current plan. Exactly zero or one step may be in_progress.',\n }),\n});\n\nfunction normalizePlan(raw: unknown): TurnPlanStep[] {\n if (!Array.isArray(raw)) {\n throw new Error('plan must be an array');\n }\n const plan = raw.map((item) => {\n const rec = item && typeof item === 'object' ? item as Record<string, unknown> : {};\n const step = String(rec.step ?? '').trim();\n const statusRaw = String(rec.status ?? '').trim();\n if (!step) {\n throw new Error('each plan item must include a non-empty step');\n }\n if (!VALID_STATUSES.has(statusRaw as TurnPlanStatus)) {\n throw new Error(`invalid plan status: ${statusRaw || '(empty)'}`);\n }\n return { step, status: statusRaw as TurnPlanStatus };\n });\n\n const active = plan.filter((item) => item.status === 'in_progress');\n if (active.length > 1) {\n throw new Error('at most one plan item may be in_progress');\n }\n return plan;\n}\n\nfunction formatPlan(details: TurnPlanDetails): string {\n const lines = details.plan.map((item) => `- [${item.status}] ${item.step}`);\n return [details.explanation?.trim(), ...lines].filter(Boolean).join('\\n');\n}\n\nexport function createUpdatePlanTool(): AgentTool {\n return {\n name: 'update_plan',\n label: 'Update Plan',\n description:\n 'Update the current coding-task plan. Use for multi-step implementation, review, or debugging work. ' +\n 'Keep the full plan current, with at most one step marked in_progress.',\n parameters: UpdatePlanSchema,\n async execute(_toolCallId, params): Promise<AgentToolResult<TurnPlanDetails>> {\n const rec = params as Record<string, unknown>;\n const details: TurnPlanDetails = {\n explanation: typeof rec.explanation === 'string' && rec.explanation.trim()\n ? rec.explanation.trim()\n : undefined,\n plan: normalizePlan(rec.plan),\n };\n return {\n content: [{ type: 'text', text: formatPlan(details) }],\n details,\n };\n },\n };\n}\n"],"mappings":";;AAeA,MAAM,iBAAiB,IAAI,IAAoB;CAAC;CAAW;CAAe;CAAY,CAAC;AAEvF,MAAM,iBAAiB,KAAK,OAAO;CACjC,MAAM,KAAK,OAAO;EAAE,WAAW;EAAG,aAAa;EAAmB,CAAC;CACnE,QAAQ,KAAK,MAAM;EACjB,KAAK,QAAQ,UAAU;EACvB,KAAK,QAAQ,cAAc;EAC3B,KAAK,QAAQ,YAAY;EAC1B,CAAC;CACH,CAAC;AAEF,MAAM,mBAAmB,KAAK,OAAO;CACnC,aAAa,KAAK,SAAS,KAAK,OAAO,EAAE,aAAa,qCAAqC,CAAC,CAAC;CAC7F,MAAM,KAAK,MAAM,gBAAgB;EAC/B,UAAU;EACV,UAAU;EACV,aAAa;EACd,CAAC;CACH,CAAC;AAEF,SAAS,cAAc,KAA8B;AACnD,KAAI,CAAC,MAAM,QAAQ,IAAI,CACrB,OAAM,IAAI,MAAM,wBAAwB;CAE1C,MAAM,OAAO,IAAI,KAAK,SAAS;EAC7B,MAAM,MAAM,QAAQ,OAAO,SAAS,WAAW,OAAkC,EAAE;EACnF,MAAM,OAAO,OAAO,IAAI,QAAQ,GAAG,CAAC,MAAM;EAC1C,MAAM,YAAY,OAAO,IAAI,UAAU,GAAG,CAAC,MAAM;AACjD,MAAI,CAAC,KACH,OAAM,IAAI,MAAM,+CAA+C;AAEjE,MAAI,CAAC,eAAe,IAAI,UAA4B,CAClD,OAAM,IAAI,MAAM,wBAAwB,aAAa,YAAY;AAEnE,SAAO;GAAE;GAAM,QAAQ;GAA6B;GACpD;AAGF,KADe,KAAK,QAAQ,SAAS,KAAK,WAAW,cAC3C,CAAC,SAAS,EAClB,OAAM,IAAI,MAAM,2CAA2C;AAE7D,QAAO;;AAGT,SAAS,WAAW,SAAkC;CACpD,MAAM,QAAQ,QAAQ,KAAK,KAAK,SAAS,MAAM,KAAK,OAAO,IAAI,KAAK,OAAO;AAC3E,QAAO,CAAC,QAAQ,aAAa,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,QAAQ,CAAC,KAAK,KAAK;;AAG3E,SAAgB,uBAAkC;AAChD,QAAO;EACL,MAAM;EACN,OAAO;EACP,aACE;EAEF,YAAY;EACZ,MAAM,QAAQ,aAAa,QAAmD;GAC5E,MAAM,MAAM;GACZ,MAAM,UAA2B;IAC/B,aAAa,OAAO,IAAI,gBAAgB,YAAY,IAAI,YAAY,MAAM,GACtE,IAAI,YAAY,MAAM,GACtB,KAAA;IACJ,MAAM,cAAc,IAAI,KAAK;IAC9B;AACD,UAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM,WAAW,QAAQ;KAAE,CAAC;IACtD;IACD;;EAEJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"url-safety.js","names":[],"sources":["../../../../src/agent/tools/url-safety.ts"],"sourcesContent":["/**\n * URL safety checks for web tools — blocks requests to private/internal\n * network addresses and cloud metadata endpoints (SSRF protection).\n *\n * Prevents Server-Side Request Forgery where a malicious prompt could trick\n * the agent into fetching internal resources like cloud metadata endpoints\n * (169.254.169.254), localhost services, or private network hosts.\n *\n * Cloud metadata endpoints are ALWAYS blocked regardless of any toggle —\n * they are never legitimate agent targets.\n *\n * Inspired by hermes-agent's `url_safety.py`.\n */\nimport { isIPv4, isIPv6 } from 'node:net';\n\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('url-safety');\n\n// ---------------------------------------------------------------------------\n// Always-blocked: cloud metadata endpoints\n// ---------------------------------------------------------------------------\n\n/** Hostnames that are always blocked (cloud metadata services). */\nconst BLOCKED_HOSTNAMES = new Set([\n 'metadata.google.internal',\n 'metadata.goog',\n]);\n\n/** IPs that are always blocked regardless of any toggle. */\nconst ALWAYS_BLOCKED_IPS = new Set([\n '169.254.169.254', // AWS/GCP/Azure/DO/Oracle metadata\n '169.254.170.2', // AWS ECS task metadata (task IAM creds)\n '169.254.169.253', // Azure IMDS wire server\n '100.100.100.200', // Alibaba Cloud metadata\n]);\n\n// ---------------------------------------------------------------------------\n// Private IP detection\n// ---------------------------------------------------------------------------\n\nfunction isBlockedIPv4(host: string): boolean {\n const parts = host.split('.').map((p) => Number(p));\n if (parts.length !== 4 || parts.some((n) => !Number.isInteger(n) || n < 0 || n > 255)) {\n return true;\n }\n const [octet1, octet2] = parts;\n if (octet1 === 10) return true; // 10.0.0.0/8\n if (octet1 === 127) return true; // 127.0.0.0/8\n if (octet1 === 0) return true; // 0.0.0.0/8\n if (octet1 === 169 && octet2 === 254) return true; // 169.254.0.0/16 link-local\n if (octet1 === 192 && octet2 === 168) return true; // 192.168.0.0/16\n if (octet1 === 172 && octet2 >= 16 && octet2 <= 31) return true; // 172.16.0.0/12\n if (octet1 === 100 && octet2 >= 64 && octet2 <= 127) return true; // 100.64.0.0/10 CGNAT\n return false;\n}\n\nfunction isBlockedIPv6(host: string): boolean {\n const normalized = host.toLowerCase().replace(/^\\[|\\]$/g, '');\n if (normalized === '::1') return true; // loopback\n if (normalized.startsWith('fe80:')) return true; // link-local\n if (normalized.startsWith('fc') || normalized.startsWith('fd')) return true; // ULA\n return false;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport interface UrlSafetyResult {\n safe: boolean;\n reason?: string;\n}\n\n/**\n * Check whether a URL is safe to fetch (not targeting private/internal addresses).\n *\n * Blocks:\n * - Cloud metadata endpoints (always, non-negotiable)\n * - Private/loopback/link-local IP addresses\n * - localhost and internal hostnames\n * - URLs with embedded credentials\n * - Non-HTTP(S) schemes\n *\n * Returns `{ safe: true }` for allowed URLs,\n * or `{ safe: false, reason }` for blocked ones.\n */\nexport function checkUrlSafety(rawUrl: string): UrlSafetyResult {\n let url: URL;\n try {\n url = new URL(rawUrl.trim());\n } catch {\n return { safe: false, reason: 'Invalid URL' };\n }\n\n // Block non-HTTP(S) schemes\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n return { safe: false, reason: 'Only http and https URLs are allowed' };\n }\n\n // Block embedded credentials\n if (url.username || url.password) {\n return { safe: false, reason: 'URLs with embedded credentials are not allowed' };\n }\n\n const rawHost = url.hostname.toLowerCase();\n if (!rawHost) {\n return { safe: false, reason: 'Missing hostname' };\n }\n\n // URL API keeps brackets for IPv6 (e.g. \"[::1]\") — strip for checks\n const host = rawHost.replace(/^\\[|\\]$/g, '');\n\n // Always block cloud metadata hostnames\n if (BLOCKED_HOSTNAMES.has(host)) {\n log.warn({ host }, 'Blocked request to cloud metadata hostname');\n return { safe: false, reason: `Blocked: cloud metadata endpoint '${host}'` };\n }\n\n // Block localhost\n if (host === 'localhost' || host.endsWith('.localhost')) {\n return { safe: false, reason: 'Blocked: localhost' };\n }\n\n // Block internal TLDs\n if (host.endsWith('.local') || host.endsWith('.internal')) {\n return { safe: false, reason: 'Blocked: internal hostname' };\n }\n\n // IPv4 checks\n if (isIPv4(host)) {\n // Always block cloud metadata IPs first\n if (ALWAYS_BLOCKED_IPS.has(host)) {\n log.warn({ host }, 'Blocked request to cloud metadata IP');\n return { safe: false, reason: `Blocked: cloud metadata address ${host}` };\n }\n if (isBlockedIPv4(host)) {\n return { safe: false, reason: 'Blocked: private or non-public IPv4 address' };\n }\n return { safe: true };\n }\n\n // IPv6 checks\n if (isIPv6(host)) {\n if (isBlockedIPv6(host)) {\n return { safe: false, reason: 'Blocked: private or loopback IPv6 address' };\n }\n return { safe: true };\n }\n\n return { safe: true };\n}\n\n/**\n * Assert that a URL is safe to fetch. Throws on blocked URLs.\n * Convenience wrapper over {@link checkUrlSafety}.\n */\nexport function assertUrlSafe(rawUrl: string): void {\n const result = checkUrlSafety(rawUrl);\n if (!result.safe) {\n throw new Error(result.reason ?? 'URL blocked by safety check');\n }\n}\n\n// ---------------------------------------------------------------------------\n// Website blocklist (user-configurable domain blocking)\n// ---------------------------------------------------------------------------\n\nexport interface WebsiteBlocklistConfig {\n enabled?: boolean;\n /** Domain patterns to block (e.g. \"example.com\", \"*.evil.org\"). */\n domains?: string[];\n}\n\n/**\n * Normalize a domain pattern for matching:\n * strips protocol, path, www. prefix, trailing dots.\n */\nfunction normalizeDomainPattern(raw: string): string | undefined {\n let value = raw.trim().toLowerCase();\n if (!value || value.startsWith('#')) return undefined;\n\n // Strip protocol if present\n if (value.includes('://')) {\n try {\n const parsed = new URL(value);\n value = parsed.hostname;\n } catch {\n value = value.split('://')[1] ?? value;\n }\n }\n\n // Strip path, port\n value = value.split('/')[0].split(':')[0].trim().replace(/\\.+$/, '');\n\n // Strip www.\n if (value.startsWith('www.')) {\n value = value.slice(4);\n }\n\n return value || undefined;\n}\n\nfunction matchHostAgainstRule(host: string, pattern: string): boolean {\n if (!host || !pattern) return false;\n\n if (pattern.startsWith('*.')) {\n // Wildcard match: *.example.com matches foo.example.com and bar.foo.example.com\n const suffix = pattern.slice(2);\n return host === suffix || host.endsWith(`.${suffix}`);\n }\n\n // Exact match or subdomain match\n return host === pattern || host.endsWith(`.${pattern}`);\n}\n\n/**\n * Check whether a URL is blocked by the website blocklist.\n *\n * Returns `undefined` if allowed, or a block descriptor if blocked.\n */\nexport function checkWebsiteBlocklist(\n rawUrl: string,\n blocklist?: WebsiteBlocklistConfig,\n): { host: string; rule: string; message: string } | undefined {\n if (!blocklist?.enabled || !blocklist.domains?.length) return undefined;\n\n let host: string;\n try {\n const url = new URL(rawUrl.trim());\n host = url.hostname.toLowerCase().replace(/\\.+$/, '');\n } catch {\n return undefined; // let downstream URL validation handle parse errors\n }\n\n if (host.startsWith('www.')) {\n host = host.slice(4);\n }\n\n for (const rawRule of blocklist.domains) {\n const pattern = normalizeDomainPattern(rawRule);\n if (!pattern) continue;\n\n if (matchHostAgainstRule(host, pattern)) {\n log.info({ host, rule: pattern }, 'Blocked URL by website blocklist');\n return {\n host,\n rule: pattern,\n message: `Blocked by website policy: '${host}' matched rule '${pattern}'`,\n };\n }\n }\n\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Base64 image cleaning\n// ---------------------------------------------------------------------------\n\n/**\n * Remove base64-encoded images from text to reduce token usage.\n * Strips patterns like `data:image/png;base64,...` and their markdown wrappers.\n */\nexport function cleanBase64Images(text: string): string {\n // Markdown images with base64 src: \n let cleaned = text.replace(\n /!\\[[^\\]]*\\]\\(data:image\\/[^;]+;base64,[A-Za-z0-9+/=]+\\)/g,\n '[image removed]',\n );\n // Parenthesized base64 images\n cleaned = cleaned.replace(\n /\\(data:image\\/[^;]+;base64,[A-Za-z0-9+/=]+\\)/g,\n '[image removed]',\n );\n // Bare base64 data URIs\n cleaned = cleaned.replace(\n /data:image\\/[^;]+;base64,[A-Za-z0-9+/=]+/g,\n '[image removed]',\n );\n\n return cleaned;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage-analyzer.js","names":[],"sources":["../../../../src/agent/tools/usage-analyzer.ts"],"sourcesContent":["/**\n * Tool Usage Analyzer - Tracks and analyzes tool usage patterns\n * \n * Based on Agent Harness theory: \"Vercel deleted 80% of its Agent tools, \n * and the Agent went from task failure to task success\"\n */\n\nimport { createLogger } from '../../utils/logger.js';\n\nconst log = createLogger('ToolUsageAnalyzer');\n\nexport interface ToolUsageStats {\n toolName: string;\n calls: number;\n successes: number;\n failures: number;\n avgDurationMs: number;\n lastUsedTimestamp: number;\n successRate: number;\n}\n\nexport interface ToolUsageRecommendations {\n keep: string[]; // High-usage, high-success tools\n review: string[]; // Low-usage or low-success tools\n remove: string[]; // Very low-usage tools\n}\n\nexport interface ToolUsageAnalyzerConfig {\n enabled: boolean;\n lowUsageThreshold: number; // Below this % = low usage (default: 5%)\n veryLowUsageThreshold: number; // Below this % = very low usage (default: 1%)\n minCallsForAnalysis: number; // Minimum calls before making recommendations (default: 100)\n reportIntervalMs: number; // How often to log reports (default: 1 hour)\n}\n\nconst DEFAULT_CONFIG: ToolUsageAnalyzerConfig = {\n enabled: true,\n lowUsageThreshold: 5, // 5%\n veryLowUsageThreshold: 1, // 1%\n minCallsForAnalysis: 100,\n reportIntervalMs: 60 * 60 * 1000, // 1 hour\n};\n\nexport class ToolUsageAnalyzer {\n private stats: Map<string, ToolUsageStats> = new Map();\n private config: ToolUsageAnalyzerConfig;\n private totalCalls = 0;\n private lastReportTime = 0;\n\n constructor(config: Partial<ToolUsageAnalyzerConfig> = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n /**\n * Record a tool usage event\n */\n recordUsage(\n toolName: string,\n success: boolean,\n durationMs: number\n ): void {\n if (!this.config.enabled) return;\n\n const now = Date.now();\n let toolStats = this.stats.get(toolName);\n\n if (!toolStats) {\n toolStats = {\n toolName,\n calls: 0,\n successes: 0,\n failures: 0,\n avgDurationMs: 0,\n lastUsedTimestamp: 0,\n successRate: 0,\n };\n this.stats.set(toolName, toolStats);\n }\n\n // Update stats\n toolStats.calls++;\n toolStats.lastUsedTimestamp = now;\n \n if (success) {\n toolStats.successes++;\n } else {\n toolStats.failures++;\n }\n\n // Update average duration (running average)\n toolStats.avgDurationMs = \n ((toolStats.avgDurationMs * (toolStats.calls - 1)) + durationMs) / toolStats.calls;\n \n // Update success rate\n toolStats.successRate = (toolStats.successes / toolStats.calls) * 100;\n\n this.totalCalls++;\n\n // Periodic report\n if (now - this.lastReportTime > this.config.reportIntervalMs) {\n this.generateReport();\n this.lastReportTime = now;\n }\n }\n\n /**\n * Get usage stats for a specific tool\n */\n getToolStats(toolName: string): ToolUsageStats | undefined {\n return this.stats.get(toolName);\n }\n\n /**\n * Get all tool usage stats\n */\n getAllStats(): Map<string, ToolUsageStats> {\n return new Map(this.stats);\n }\n\n /**\n * Get tools with low usage (below threshold)\n */\n getLowUsageTools(threshold?: number): string[] {\n const thresholdPercent = threshold ?? this.config.lowUsageThreshold;\n const lowUsageTools: string[] = [];\n\n for (const [name, stats] of this.stats.entries()) {\n const usagePercent = (stats.calls / this.totalCalls) * 100;\n if (usagePercent < thresholdPercent && stats.calls >= this.config.minCallsForAnalysis) {\n lowUsageTools.push(name);\n }\n }\n\n return lowUsageTools;\n }\n\n /**\n * Get tools with low success rate\n */\n getLowSuccessTools(threshold?: number): string[] {\n const thresholdPercent = threshold ?? 50; // Default 50% success rate\n const lowSuccessTools: string[] = [];\n\n for (const [name, stats] of this.stats.entries()) {\n if (stats.successRate < thresholdPercent && stats.calls >= this.config.minCallsForAnalysis) {\n lowSuccessTools.push(name);\n }\n }\n\n return lowSuccessTools;\n }\n\n /**\n * Get recommendations for tool optimization\n */\n getRecommendations(): ToolUsageRecommendations {\n const recommendations: ToolUsageRecommendations = {\n keep: [],\n review: [],\n remove: [],\n };\n\n if (this.totalCalls < this.config.minCallsForAnalysis) {\n log.warn({ totalCalls: this.totalCalls }, 'Not enough data for recommendations');\n return recommendations;\n }\n\n for (const [name, stats] of this.stats.entries()) {\n const usagePercent = (stats.calls / this.totalCalls) * 100;\n \n // High usage + high success = keep\n if (usagePercent >= this.config.lowUsageThreshold && stats.successRate >= 80) {\n recommendations.keep.push(name);\n }\n // Very low usage = consider removing\n else if (usagePercent < this.config.veryLowUsageThreshold) {\n recommendations.remove.push(name);\n }\n // Low usage OR low success = review\n else if (\n usagePercent < this.config.lowUsageThreshold || \n stats.successRate < 80\n ) {\n recommendations.review.push(name);\n }\n // Default = keep\n else {\n recommendations.keep.push(name);\n }\n }\n\n return recommendations;\n }\n\n /**\n * Generate and log usage report\n */\n generateReport(): void {\n if (!this.config.enabled) return;\n\n const report = {\n totalCalls: this.totalCalls,\n uniqueTools: this.stats.size,\n topTools: this.getTopTools(5),\n lowUsageTools: this.getLowUsageTools(),\n lowSuccessTools: this.getLowSuccessTools(),\n recommendations: this.getRecommendations(),\n };\n\n log.info(report, 'Tool Usage Report');\n }\n\n /**\n * Get top N most used tools\n */\n getTopTools(n: number): ToolUsageStats[] {\n return Array.from(this.stats.values())\n .sort((a, b) => b.calls - a.calls)\n .slice(0, n);\n }\n\n /**\n * Get usage summary as text\n */\n getSummaryText(): string {\n const lines: string[] = [\n 'Tool Usage Summary',\n `==================`,\n `Total Calls: ${this.totalCalls}`,\n `Unique Tools: ${this.stats.size}`,\n '',\n 'Top Tools:',\n ];\n\n const topTools = this.getTopTools(5);\n for (const tool of topTools) {\n lines.push(` - ${tool.toolName}: ${tool.calls} calls (${tool.successRate.toFixed(1)}% success)`);\n }\n\n const recommendations = this.getRecommendations();\n \n if (recommendations.remove.length > 0) {\n lines.push('');\n lines.push('Consider Removing:');\n for (const tool of recommendations.remove) {\n lines.push(` - ${tool}`);\n }\n }\n\n if (recommendations.review.length > 0) {\n lines.push('');\n lines.push('Review Needed:');\n for (const tool of recommendations.review) {\n lines.push(` - ${tool}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Reset all stats\n */\n reset(): void {\n this.stats.clear();\n this.totalCalls = 0;\n this.lastReportTime = 0;\n log.info('Tool usage stats reset');\n }\n\n /**\n * Export stats as JSON\n */\n exportStats(): string {\n return JSON.stringify({\n totalCalls: this.totalCalls,\n generatedAt: new Date().toISOString(),\n tools: Array.from(this.stats.values()),\n recommendations: this.getRecommendations(),\n }, null, 2);\n }\n\n /**\n * Get config\n */\n getConfig(): ToolUsageAnalyzerConfig {\n return { ...this.config };\n }\n\n /**\n * Update config\n */\n setConfig(config: Partial<ToolUsageAnalyzerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-extract.js","names":[],"sources":["../../../../src/agent/tools/web-extract.ts"],"sourcesContent":["import { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { type UserMessage } from '@earendil-works/pi-ai/compat';\n\nimport type { Config } from '../../config/schema.js';\nimport { getDefaultModelSync, resolveModel } from '../../providers/index.js';\nimport { completeWithResolvedCredentials } from '../../providers/model-call.js';\nimport { createLogger } from '../../utils/logger.js';\nimport { checkUrlSafety, checkWebsiteBlocklist, cleanBase64Images } from './url-safety.js';\n\nconst log = createLogger('web-extract');\n\nexport const DEFAULT_WEB_EXTRACT_MAX_LENGTH = 15_000;\nexport const MAX_RAW_HTML_CHARS_FOR_WEB_EXTRACT = 200_000;\nconst EXTRACTION_TIMEOUT_MS = 30_000;\n\n// Large-document chunked processing thresholds (inspired by hermes-agent)\nconst MAX_CONTENT_SIZE = 2_000_000; // 2M chars — refuse entirely above this\nconst CHUNK_THRESHOLD = 500_000; // 500k chars — use chunked processing above this\nconst CHUNK_SIZE = 100_000; // 100k chars per chunk\nconst MAX_OUTPUT_SIZE = 15_000; // Hard cap on final output size\n\nconst WebExtractSchema = Type.Object({\n url: Type.String({ description: 'URL to extract content from' }),\n instruction: Type.Optional(\n Type.String({\n description:\n 'What to extract or focus on. Examples: \"main article text\", ' +\n '\"pricing table\", \"API documentation for the auth endpoint\". ' +\n 'If omitted, extracts the main content.',\n }),\n ),\n maxLength: Type.Optional(\n Type.Number({\n description: 'Maximum characters in the extracted content (default: from config or 15000)',\n }),\n ),\n});\n\nexport interface WebExtractDeps {\n getConfig: () => Config | undefined;\n}\n\nasync function fetchPageContent(url: string, signal?: AbortSignal): Promise<string> {\n const response = await fetch(url, {\n signal,\n headers: {\n 'User-Agent': 'Mozilla/5.0 (compatible; xopc/1.0)',\n Accept: 'text/html,application/xhtml+xml,text/plain,application/json',\n },\n redirect: 'follow',\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n const json: unknown = await response.json();\n return JSON.stringify(json, null, 2);\n }\n\n return await response.text();\n}\n\nexport function stripHtmlBoilerplate(\n html: string,\n maxRaw = MAX_RAW_HTML_CHARS_FOR_WEB_EXTRACT,\n): string {\n let cleaned = html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, '')\n .replace(/<style[\\s\\S]*?<\\/style>/gi, '')\n .replace(/<svg[\\s\\S]*?<\\/svg>/gi, '')\n .replace(/<noscript[\\s\\S]*?<\\/noscript>/gi, '')\n .replace(/<!--[\\s\\S]*?-->/g, '');\n\n // Remove base64 images early to avoid wasting characters on them\n cleaned = cleanBase64Images(cleaned);\n cleaned = cleaned.replace(/\\s+/g, ' ').trim();\n\n if (cleaned.length > maxRaw) {\n cleaned = cleaned.slice(0, maxRaw) + '\\n\\n[...truncated]';\n }\n\n return cleaned;\n}\n\nfunction resolveExtractionModel(config?: Config) {\n const envRef = process.env.XOPC_WEB_EXTRACT_MODEL?.trim();\n const ref = envRef;\n\n if (ref) {\n try {\n return resolveModel(ref);\n } catch {\n /* fall through */\n }\n }\n\n const defaultRef = getDefaultModelSync(config);\n if (!defaultRef) {\n throw new Error('No global default model configured for web extraction');\n }\n\n return resolveModel(defaultRef);\n}\n\nfunction buildExtractionSystemPrompt(maxLength: number): string {\n return (\n 'You are a web content extractor. Given raw HTML/text from a web page, ' +\n 'extract the relevant content as clean, well-structured markdown.\\n\\n' +\n 'Rules:\\n' +\n '- Remove navigation, headers, footers, ads, cookie banners, sidebars\\n' +\n '- Preserve the main content structure (headings, lists, tables, code blocks)\\n' +\n '- Keep URLs for important links\\n' +\n '- If the page has structured data (tables, specs), preserve the structure\\n' +\n `- Keep output under ${maxLength} characters\\n` +\n '- If content is truncated, note what was cut\\n' +\n '- Output ONLY the extracted content, no meta-commentary'\n );\n}\n\n// ---------------------------------------------------------------------------\n// LLM call helper — shared by single-pass and chunked extraction\n// ---------------------------------------------------------------------------\n\nfunction buildTimeoutSignal(signal: AbortSignal | undefined): AbortSignal | undefined {\n const timeoutSignal =\n typeof AbortSignal !== 'undefined' && typeof AbortSignal.timeout === 'function'\n ? AbortSignal.timeout(EXTRACTION_TIMEOUT_MS)\n : undefined;\n if (signal && timeoutSignal && typeof AbortSignal.any === 'function') {\n return AbortSignal.any([signal, timeoutSignal]);\n }\n return signal ?? timeoutSignal;\n}\n\nfunction extractTextFromCompletion(result: { content?: unknown }): string {\n let text = '';\n if (Array.isArray(result.content)) {\n for (const c of result.content) {\n if (c && typeof c === 'object' && (c as { type?: string }).type === 'text') {\n text += String((c as { text?: string }).text || '');\n }\n }\n }\n return text.trim();\n}\n\nasync function callExtractionLlm(\n systemPrompt: string,\n userPrompt: string,\n maxTokens: number,\n config: Config | undefined,\n signal: AbortSignal | undefined,\n): Promise<string> {\n const model = resolveExtractionModel(config);\n const userMsg: UserMessage = {\n role: 'user',\n content: `${systemPrompt}\\n\\n---\\n\\n${userPrompt}`,\n timestamp: Date.now(),\n };\n\n const result = await completeWithResolvedCredentials(\n model,\n { messages: [userMsg] },\n {\n maxTokens,\n temperature: 0.2,\n signal: buildTimeoutSignal(signal) as AbortSignal,\n },\n );\n\n return extractTextFromCompletion(result);\n}\n\n// ---------------------------------------------------------------------------\n// Single-pass extraction (content < CHUNK_THRESHOLD)\n// ---------------------------------------------------------------------------\n\nasync function extractWithLlm(\n rawContent: string,\n url: string,\n instruction: string | undefined,\n maxLength: number,\n config: Config | undefined,\n signal: AbortSignal | undefined,\n): Promise<string> {\n const contentLength = rawContent.length;\n\n // Refuse absurdly large content\n if (contentLength > MAX_CONTENT_SIZE) {\n const sizeMb = (contentLength / 1_000_000).toFixed(1);\n return (\n `[Content too large to process: ${sizeMb}MB. ` +\n 'Try using web_fetch for raw text, or search for a more focused source.]'\n );\n }\n\n // Route to chunked processing for large documents\n if (contentLength > CHUNK_THRESHOLD) {\n log.info(\n { url, contentLength, chunkSize: CHUNK_SIZE },\n 'Large document detected, using chunked extraction',\n );\n return extractLargeDocumentChunked(rawContent, url, instruction, maxLength, config, signal);\n }\n\n // Standard single-pass extraction\n const systemPrompt = buildExtractionSystemPrompt(maxLength);\n const body = instruction\n ? `Extract from this page (${url}):\\n\\nFOCUS: ${instruction}\\n\\n---\\n\\n${rawContent}`\n : `Extract the main content from this page (${url}):\\n\\n---\\n\\n${rawContent}`;\n\n const text = await callExtractionLlm(\n systemPrompt,\n body,\n Math.min(Math.ceil(maxLength / 3), 8000),\n config,\n signal,\n );\n\n if (!text) return 'No content could be extracted.';\n\n const outputCap = Math.min(maxLength, MAX_OUTPUT_SIZE);\n if (text.length > outputCap) {\n return text.slice(0, outputCap) + '\\n\\n[...output truncated to maxLength]';\n }\n\n log.debug(\n { url, originalChars: contentLength, extractedChars: text.length },\n 'Single-pass extraction complete',\n );\n return text;\n}\n\n// ---------------------------------------------------------------------------\n// Chunked extraction for large documents (inspired by hermes-agent)\n//\n// Flow: split → parallel chunk summaries → synthesis pass\n// ---------------------------------------------------------------------------\n\nasync function extractLargeDocumentChunked(\n content: string,\n url: string,\n instruction: string | undefined,\n maxLength: number,\n config: Config | undefined,\n signal: AbortSignal | undefined,\n): Promise<string> {\n // Split content into chunks\n const chunks: string[] = [];\n for (let offset = 0; offset < content.length; offset += CHUNK_SIZE) {\n chunks.push(content.slice(offset, offset + CHUNK_SIZE));\n }\n log.info({ url, chunkCount: chunks.length, chunkSize: CHUNK_SIZE }, 'Split into chunks');\n\n // Summarize each chunk in parallel\n const chunkPromises = chunks.map(async (chunk, index) => {\n const chunkLabel = `[Chunk ${index + 1}/${chunks.length}]`;\n try {\n const systemPrompt =\n 'You are an expert content analyst processing a SECTION of a larger document. ' +\n 'Extract and summarize the key information from THIS SECTION ONLY.\\n\\n' +\n 'Guidelines:\\n' +\n '- Do NOT write introductions or conclusions — this is a partial document\\n' +\n '- Extract ALL key facts, figures, data points, and insights\\n' +\n '- Preserve important quotes, code snippets, and specific details verbatim\\n' +\n '- Use bullet points and structured formatting\\n' +\n '- Note references to other sections without trying to resolve them';\n\n const focusLine = instruction ? `\\nFOCUS: ${instruction}\\n` : '';\n const userPrompt =\n `${chunkLabel} Extract key information from this section of ${url}:` +\n `${focusLine}\\n\\n${chunk}`;\n\n const summary = await callExtractionLlm(systemPrompt, userPrompt, 6000, config, signal);\n if (summary) {\n log.debug(\n { url, chunk: index + 1, originalChars: chunk.length, summaryChars: summary.length },\n 'Chunk summarized',\n );\n }\n return { index, summary: summary || null };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n log.warn({ url, chunk: index + 1, error: message }, 'Chunk summarization failed');\n return { index, summary: null };\n }\n });\n\n const chunkResults = await Promise.all(chunkPromises);\n\n // Collect successful summaries in order\n const summaries: string[] = [];\n for (const { index, summary } of chunkResults.sort((a, b) => a.index - b.index)) {\n if (summary) {\n summaries.push(`## Section ${index + 1}\\n${summary}`);\n }\n }\n\n if (summaries.length === 0) {\n // All chunks failed — fall back to truncated raw content\n const outputCap = Math.min(maxLength, MAX_OUTPUT_SIZE);\n const truncated = content.slice(0, outputCap);\n return truncated + '\\n\\n[...all chunk summaries failed; showing truncated raw content]';\n }\n\n log.info(\n { url, successfulChunks: summaries.length, totalChunks: chunks.length },\n 'Chunk summaries collected, synthesizing',\n );\n\n // Single chunk — return directly\n if (summaries.length === 1) {\n const result = summaries[0];\n const outputCap = Math.min(maxLength, MAX_OUTPUT_SIZE);\n return result.length > outputCap\n ? result.slice(0, outputCap) + '\\n\\n[...truncated]'\n : result;\n }\n\n // Synthesize multiple chunk summaries into one cohesive summary\n return synthesizeChunkSummaries(summaries, url, instruction, maxLength, config, signal, content.length);\n}\n\nasync function synthesizeChunkSummaries(\n summaries: string[],\n url: string,\n instruction: string | undefined,\n maxLength: number,\n config: Config | undefined,\n signal: AbortSignal | undefined,\n originalContentLength: number,\n): Promise<string> {\n const outputCap = Math.min(maxLength, MAX_OUTPUT_SIZE);\n\n const systemPrompt =\n 'You synthesize multiple section summaries into one cohesive, comprehensive summary. ' +\n 'Remove redundancy, preserve all key facts and actionable information, ' +\n 'and organize with clear markdown structure.';\n\n const focusLine = instruction ? `\\nFOCUS: ${instruction}\\n` : '';\n const combined = summaries.join('\\n\\n---\\n\\n');\n const userPrompt =\n `Synthesize these section summaries from ${url} into ONE unified markdown summary ` +\n `(under ${outputCap} characters):${focusLine}\\n\\n${combined}`;\n\n try {\n const synthesized = await callExtractionLlm(systemPrompt, userPrompt, 8000, config, signal);\n\n if (!synthesized) {\n // Synthesis LLM returned empty — fall back to concatenation\n log.warn({ url }, 'Synthesis returned empty, concatenating chunk summaries');\n const fallback = summaries.join('\\n\\n');\n return fallback.length > outputCap\n ? fallback.slice(0, outputCap) + '\\n\\n[...truncated]'\n : fallback;\n }\n\n const finalOutput = synthesized.length > outputCap\n ? synthesized.slice(0, outputCap) + '\\n\\n[...summary truncated for context management]'\n : synthesized;\n\n const compressionRatio = finalOutput.length / originalContentLength;\n log.info(\n {\n url,\n originalChars: originalContentLength,\n extractedChars: finalOutput.length,\n compressionPercent: `${(compressionRatio * 100).toFixed(1)}%`,\n },\n 'Chunked extraction complete',\n );\n\n return finalOutput;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n log.warn({ url, error: message }, 'Synthesis failed, concatenating chunk summaries');\n const fallback = summaries.join('\\n\\n');\n return fallback.length > outputCap\n ? fallback.slice(0, outputCap) + '\\n\\n[...truncated due to synthesis failure]'\n : fallback;\n }\n}\n\ntype WebExtractParams = { url: string; instruction?: string; maxLength?: number };\n\nfunction resolveConfiguredMaxLength(): number {\n return DEFAULT_WEB_EXTRACT_MAX_LENGTH;\n}\n\nexport function createWebExtractTool(deps: WebExtractDeps): AgentTool {\n return {\n name: 'web_extract',\n label: '📄 Web Extract',\n description:\n 'Extract and summarize content from a web page using LLM-powered extraction.\\n\\n' +\n 'Unlike web_fetch (which returns cleaned plain text from HTML), this tool uses a ' +\n 'dedicated model pass to produce focused markdown. Use when you need semantic extraction ' +\n 'or a specific focus (instruction), not just a single readability pass.\\n\\n' +\n 'WHEN TO USE:\\n' +\n '- Reading articles, blog posts, documentation\\n' +\n '- Extracting specific data (pricing, specs, API docs)\\n' +\n '- Summarizing long pages to save context\\n\\n' +\n 'WHEN TO USE web_fetch INSTEAD:\\n' +\n '- Inspecting raw-ish page text quickly without an extra LLM call\\n' +\n '- Downloading JSON/API responses\\n' +\n '- Debugging page rendering issues',\n parameters: WebExtractSchema,\n\n async execute(\n _toolCallId: string,\n params: any,\n signal?: AbortSignal,\n ): Promise<AgentToolResult<{ url: string; extractedLength: number }>> {\n const { url, instruction } = params as WebExtractParams;\n const cfg = deps.getConfig();\n const maxLength = (params as WebExtractParams).maxLength ?? resolveConfiguredMaxLength();\n\n try {\n // SSRF protection\n const safety = checkUrlSafety(url);\n if (!safety.safe) {\n return {\n content: [{ type: 'text', text: `Blocked: ${safety.reason}` }],\n details: { url, extractedLength: 0 },\n };\n }\n\n // Website blocklist check\n const blocked = checkWebsiteBlocklist(url, cfg?.tools?.web?.blocklist);\n if (blocked) {\n return {\n content: [{ type: 'text', text: `Blocked: ${blocked.message}` }],\n details: { url, extractedLength: 0 },\n };\n }\n\n const rawContent = await fetchPageContent(url, signal);\n const cleaned = stripHtmlBoilerplate(rawContent);\n const trimmed = cleaned.trim();\n const looksStructured = trimmed.startsWith('{') || trimmed.startsWith('[');\n if (trimmed.length < 100 && !looksStructured) {\n return {\n content: [\n { type: 'text', text: `Page at ${url} appears to have no extractable content.` },\n ],\n details: { url, extractedLength: 0 },\n };\n }\n\n const extracted = await extractWithLlm(\n cleaned,\n url,\n instruction,\n maxLength,\n cfg,\n signal,\n );\n\n return {\n content: [{ type: 'text', text: extracted }],\n details: { url, extractedLength: extracted.length },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n log.warn({ url, error: message }, 'web_extract failed');\n return {\n content: [{ type: 'text', text: `Failed to extract content from ${url}: ${message}` }],\n details: { url, extractedLength: 0 },\n };\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","names":[],"sources":["../../../../src/agent/tools/web.ts"],"sourcesContent":["// Web search and fetch tools\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport type { Config } from '../../config/schema.js';\nimport { SearchProviderRegistry } from './search/registry.js';\nimport { resolveWebSearchConfig } from './search/resolve-config.js';\nimport { checkUrlSafety, checkWebsiteBlocklist } from './url-safety.js';\n\n// =============================================================================\n// Web Search Tool\n// =============================================================================\nconst WebSearchSchema = Type.Object({\n query: Type.String({ description: 'The search query' }),\n count: Type.Optional(Type.Number({ description: 'Number of results (default: from config, usually 5)' })),\n});\n\nfunction formatSearchResults(\n results: Array<{ title: string; url: string; description: string }>,\n): string {\n return results\n .map(\n (r, i) =>\n `${i + 1}. ${r.title}\\n ${r.url}\\n ${r.description ? `${r.description}` : ''}`,\n )\n .join('\\n\\n');\n}\n\ntype WebSearchParams = { query: string; count?: number };\n\nexport function createWebSearchTool(getConfig: () => Config | undefined): AgentTool {\n return {\n name: 'web_search',\n description:\n 'Search the web. Uses configured search APIs when set; otherwise falls back to a built-in HTML search (region-aware).',\n parameters: WebSearchSchema,\n label: '🔍 Web Search',\n\n async execute(\n _toolCallId: string,\n params: any,\n signal?: AbortSignal,\n ): Promise<AgentToolResult<{ results: unknown[]; provider?: string }>> {\n const p = params as WebSearchParams;\n const cfg = resolveWebSearchConfig(getConfig()?.tools?.web);\n const registry = new SearchProviderRegistry(cfg);\n const count = p.count ?? cfg.maxResults ?? 5;\n\n try {\n const { results, provider } = await registry.search(p.query, count, signal);\n\n if (results.length === 0) {\n return {\n content: [{ type: 'text', text: 'No results found.' }],\n details: { results: [], provider },\n };\n }\n\n const formatted = formatSearchResults(results);\n return {\n content: [{ type: 'text', text: formatted }],\n details: { results, provider },\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Search error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n details: { results: [] },\n };\n }\n },\n } as any;\n}\n\n// =============================================================================\n// Web Fetch Tool\n// =============================================================================\nconst MAX_FETCH_CHARS = 6_000_000;\n\nconst WebFetchSchema = Type.Object({\n url: Type.String({ description: 'The URL to fetch' }),\n maxChars: Type.Optional(Type.Number({ description: 'Maximum characters to return (default: 10000)' })),\n});\n\nfunction stripHtmlFallback(html: string): string {\n return html\n .replace(/<script[^\\u003e]*\\u003e[\\s\\S]*?\\u003c\\/script\\u003e/gi, '')\n .replace(/<style[^\\u003e]*\\u003e[\\s\\S]*?\\u003c\\/style\\u003e/gi, '')\n .replace(/\\u003c[^\\u003e]+\\u003e/g, ' ')\n .replace(/\\n\\s*\\n+/g, '\\n')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nasync function extractReadableText(html: string, pageUrl: string): Promise<string> {\n const { JSDOM } = await import('jsdom');\n const { Readability } = await import('@mozilla/readability');\n const dom = new JSDOM(html, { url: pageUrl });\n const reader = new Readability(dom.window.document);\n const article = reader.parse();\n const text = article?.textContent?.trim() ?? '';\n return text;\n}\n\ntype WebFetchParams = { url: string; maxChars?: number };\n\nexport function createWebFetchTool(getConfig: () => Config | undefined): AgentTool {\n return {\n name: 'web_fetch',\n description: 'Fetch and extract readable content from a URL (HTML via Readability; plain text as-is).',\n parameters: WebFetchSchema,\n label: '🌐 Web Fetch',\n\n async execute(\n _toolCallId: string,\n params: any,\n signal?: AbortSignal,\n ): Promise<AgentToolResult<{}>> {\n try {\n const p = params as WebFetchParams;\n\n // SSRF protection\n const safety = checkUrlSafety(p.url);\n if (!safety.safe) {\n return {\n content: [{ type: 'text', text: `Blocked: ${safety.reason}` }],\n details: {},\n };\n }\n\n // Website blocklist check\n const blocked = checkWebsiteBlocklist(p.url, getConfig()?.tools?.web?.blocklist);\n if (blocked) {\n return {\n content: [{ type: 'text', text: `Blocked: ${blocked.message}` }],\n details: {},\n };\n }\n\n const response = await fetch(p.url, { signal });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n const html = await response.text();\n if (html.length > MAX_FETCH_CHARS) {\n throw new Error('Response too large');\n }\n const maxChars = p.maxChars || 10000;\n const contentType = response.headers.get('content-type') ?? '';\n const looksHtml =\n /html|xml/i.test(contentType) || /^[\\s\\n]*</.test(html.slice(0, Math.min(500, html.length)));\n\n let text: string;\n if (looksHtml) {\n try {\n text = await extractReadableText(html, p.url);\n if (!text || text.length < 40) {\n text = stripHtmlFallback(html);\n }\n } catch {\n text = stripHtmlFallback(html);\n }\n } else {\n text = html.trim();\n }\n\n if (text.length > maxChars) {\n text = text.substring(0, maxChars) + '\\n\\n[truncated...]';\n }\n\n return {\n content: [{ type: 'text', text }],\n details: {},\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Fetch error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n details: {},\n };\n }\n },\n } as any;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tool.js","names":[],"sources":["../../../../src/agent/tools/workflow-tool.ts"],"sourcesContent":["/**\n * `workflow` — starts a persisted workflow run in a dedicated chat session.\n */\n\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\n\nimport { extractProfileAgentId } from '../../config/agent-profile.js';\nimport { createLogger } from '../../utils/logger.js';\nimport type { WorkflowCatalog } from '../workflow/catalog.js';\nimport type {\n StartWorkflowRunServiceParams,\n WorkflowRunServiceResult,\n} from '../../workflows/service/workflow-run-service.types.js';\n\nconst log = createLogger('Agent:WorkflowTool');\n\nconst WorkflowToolSchema = Type.Object({\n name: Type.Optional(\n Type.String({\n description:\n 'Name of a saved visual workflow to run.',\n }),\n ),\n args: Type.Optional(\n Type.Any({\n description: 'Optional JSON value passed as workflow input payload.',\n }),\n ),\n goal: Type.Optional(\n Type.String({\n description: 'Optional goal or task description for this workflow run (defaults to user intent in chat).',\n }),\n ),\n goalId: Type.Optional(\n Type.String({\n description: 'Optional durable Goal id. When set, terminal workflow output is archived to that Goal.',\n }),\n ),\n});\n\nexport type WorkflowToolInput = {\n name?: string;\n args?: unknown;\n goal?: string;\n goalId?: string;\n};\n\nexport interface WorkflowToolDeps {\n catalog: WorkflowCatalog;\n getCurrentSessionKey?: () => string | undefined;\n getConfig: () => import('../../config/schema.js').Config | undefined;\n startWorkflowRun?: (params: StartWorkflowRunServiceParams) => Promise<WorkflowRunServiceResult>;\n}\n\nexport function createWorkflowTool(deps: WorkflowToolDeps): AgentTool {\n return {\n name: 'workflow',\n label: '◆ Workflow',\n description: [\n 'Start a multi-agent workflow run in its own chat session.',\n 'Use `name` for a workflow from the visual workflow catalog.',\n 'Returns immediately with runId + sessionKey — track progress in the linked chat session.',\n ].join(' '),\n parameters: WorkflowToolSchema,\n\n async execute(\n _toolCallId: string,\n params: WorkflowToolInput,\n ): Promise<AgentToolResult<{ runId: string; sessionKey: string } | { error: string }>> {\n if (!deps.startWorkflowRun) {\n return {\n content: [{ type: 'text', text: 'workflow: gateway workflow runs are not available in this context' }],\n details: { error: 'workflow_run_unavailable' },\n };\n }\n\n let definitionId: string;\n try {\n definitionId = resolveDefinitionId(params, deps.catalog);\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `workflow: ${message}` }],\n details: { error: message },\n };\n }\n\n const config = deps.getConfig();\n const parentSessionKey = deps.getCurrentSessionKey?.()?.trim();\n const agentId = extractProfileAgentId(parentSessionKey, config);\n\n const goal = params.goal?.trim() || '';\n const goalId = params.goalId?.trim();\n const source = parentSessionKey\n ? ({ kind: 'chat' as const, sessionKey: parentSessionKey })\n : ({ kind: 'api' as const });\n const inputEnvelope = goalId\n ? {\n payload: params.args ?? {},\n ...(goal ? { goal } : {}),\n }\n : undefined;\n\n try {\n const result = await deps.startWorkflowRun({\n agentId,\n definitionId,\n goal,\n goalId,\n input: inputEnvelope ? undefined : params.args,\n inputEnvelope,\n parentSessionKey,\n source,\n });\n\n if (result.ok === false) {\n return {\n content: [{ type: 'text', text: `workflow: ${result.message}` }],\n details: { error: result.message },\n };\n }\n\n const summary = goal\n ? `Started workflow \\`${definitionId}\\` (run ${result.runId}). Open chat session to track progress and continue.`\n : `Started workflow \\`${definitionId}\\` (run ${result.runId}). Open the workflow chat session to track progress.`;\n\n return {\n content: [\n {\n type: 'text',\n text: `${summary}\\n\\nsessionKey: ${result.sessionKey}`,\n },\n ],\n details: {\n runId: result.runId,\n sessionKey: result.sessionKey,\n definitionId,\n parentSessionKey: parentSessionKey ?? null,\n } as { runId: string; sessionKey: string },\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n log.warn({ err: e, errorMessage: message, workflow: definitionId }, `workflow start failed: ${message}`);\n return {\n content: [{ type: 'text', text: `workflow: ${message}` }],\n details: { error: message },\n };\n }\n },\n } as unknown as AgentTool;\n}\n\nfunction resolveDefinitionId(params: WorkflowToolInput, catalog: WorkflowCatalog): string {\n const name = params.name?.trim();\n if (name) {\n catalog.load(name);\n return name;\n }\n throw new Error('`name` is required. Create workflows in the visual workflow studio.');\n}\n"],"mappings":";;;;;;;;aAQqD;AAOrD,MAAM,MAAM,aAAa,qBAAqB;AAE9C,MAAM,qBAAqB,KAAK,OAAO;CACrC,MAAM,KAAK,SACT,KAAK,OAAO,EACV,aACE,2CACH,CAAC,CACH;CACD,MAAM,KAAK,SACT,KAAK,IAAI,EACP,aAAa,yDACd,CAAC,CACH;CACD,MAAM,KAAK,SACT,KAAK,OAAO,EACV,aAAa,8FACd,CAAC,CACH;CACD,QAAQ,KAAK,SACX,KAAK,OAAO,EACV,aAAa,0FACd,CAAC,CACH;CACF,CAAC;AAgBF,SAAgB,mBAAmB,MAAmC;AACpE,QAAO;EACL,MAAM;EACN,OAAO;EACP,aAAa;GACX;GACA;GACA;GACD,CAAC,KAAK,IAAI;EACX,YAAY;EAEZ,MAAM,QACJ,aACA,QACqF;AACrF,OAAI,CAAC,KAAK,iBACR,QAAO;IACL,SAAS,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAqE,CAAC;IACtG,SAAS,EAAE,OAAO,4BAA4B;IAC/C;GAGH,IAAI;AACJ,OAAI;AACF,mBAAe,oBAAoB,QAAQ,KAAK,QAAQ;YACjD,GAAG;IACV,MAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;AAC1D,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,aAAa;MAAW,CAAC;KACzD,SAAS,EAAE,OAAO,SAAS;KAC5B;;GAGH,MAAM,SAAS,KAAK,WAAW;GAC/B,MAAM,mBAAmB,KAAK,wBAAwB,EAAE,MAAM;GAC9D,MAAM,UAAU,sBAAsB,kBAAkB,OAAO;GAE/D,MAAM,OAAO,OAAO,MAAM,MAAM,IAAI;GACpC,MAAM,SAAS,OAAO,QAAQ,MAAM;GACpC,MAAM,SAAS,mBACV;IAAE,MAAM;IAAiB,YAAY;IAAkB,GACvD,EAAE,MAAM,OAAgB;GAC7B,MAAM,gBAAgB,SAClB;IACE,SAAS,OAAO,QAAQ,EAAE;IAC1B,GAAI,OAAO,EAAE,MAAM,GAAG,EAAE;IACzB,GACD,KAAA;AAEJ,OAAI;IACF,MAAM,SAAS,MAAM,KAAK,iBAAiB;KACzC;KACA;KACA;KACA;KACA,OAAO,gBAAgB,KAAA,IAAY,OAAO;KAC1C;KACA;KACA;KACD,CAAC;AAEF,QAAI,OAAO,OAAO,MAChB,QAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,aAAa,OAAO;MAAW,CAAC;KAChE,SAAS,EAAE,OAAO,OAAO,SAAS;KACnC;AAOH,WAAO;KACL,SAAS,CACP;MACE,MAAM;MACN,MAAM,GARI,OACZ,sBAAsB,aAAa,UAAU,OAAO,MAAM,wDAC1D,sBAAsB,aAAa,UAAU,OAAO,MAAM,sDAMvC,kBAAkB,OAAO;MAC3C,CACF;KACD,SAAS;MACP,OAAO,OAAO;MACd,YAAY,OAAO;MACnB;MACA,kBAAkB,oBAAoB;MACvC;KACF;YACM,GAAG;IACV,MAAM,UAAU,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE;AAC1D,QAAI,KAAK;KAAE,KAAK;KAAG,cAAc;KAAS,UAAU;KAAc,EAAE,0BAA0B,UAAU;AACxG,WAAO;KACL,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,aAAa;MAAW,CAAC;KACzD,SAAS,EAAE,OAAO,SAAS;KAC5B;;;EAGN;;AAGH,SAAS,oBAAoB,QAA2B,SAAkC;CACxF,MAAM,OAAO,OAAO,MAAM,MAAM;AAChC,KAAI,MAAM;AACR,UAAQ,KAAK,KAAK;AAClB,SAAO;;AAET,OAAM,IAAI,MAAM,sEAAsE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"write.js","names":[],"sources":["../../../../src/agent/tools/write.ts"],"sourcesContent":["// Write file tool\nimport { Type } from '@sinclair/typebox';\nimport type { AgentTool, AgentToolResult } from '@earendil-works/pi-agent-core';\nimport { writeFile, mkdir } from 'fs/promises';\nimport { dirname } from 'path';\nimport { checkFileSafety } from '../prompt/safety.js';\nimport {\n isBareProfileMarkdownFileName,\n resolveProfileMarkdownPathIfBareName,\n resolvePathUnderWorkspace,\n} from './tool-paths.js';\nimport { evaluateFilePolicy } from '../sandbox/exec-policy.js';\nimport type { GoalEvidenceRecordInput } from './goal-evidence-recorder.js';\n\nconst MAX_FILE_SIZE = 10 * 1024 * 1024;\n\nconst WriteFileSchema = Type.Object({\n path: Type.String({ description: 'File path to write' }),\n content: Type.String({ description: 'Content to write' }),\n});\n\ntype WriteFileParams = { path: string; content: string };\n\nexport interface CreateWriteFileToolOptions {\n /** When set and the path is a bare profile filename (e.g. SOUL.md), write to this root. */\n profileMarkdownRoot?: string;\n recordGoalEvidence?: (input: GoalEvidenceRecordInput) => Promise<void> | void;\n}\n\nexport function createWriteFileTool(\n workspace: string,\n options?: CreateWriteFileToolOptions,\n): AgentTool {\n return {\n name: 'write_file',\n description:\n 'Create or overwrite a file. Relative paths are under the current agent workspace; profile Markdown (SOUL.md, etc.) is written automatically when given by filename.',\n parameters: WriteFileSchema,\n label: '📝 Write',\n mutatesWorkspace: true,\n mutationScope: 'workspace',\n supportsParallel: false,\n idempotent: false,\n requiresExclusiveWorkspaceLock: true,\n finalGuardRelevant: true,\n\n async execute(\n _toolCallId: string,\n params: any,\n _signal?: AbortSignal,\n ): Promise<AgentToolResult<{}>> {\n try {\n const p = params as WriteFileParams;\n const safety = checkFileSafety('write', p.path);\n if (!safety.allowed) {\n return { content: [{ type: 'text', text: `🚫 ${safety.message}` }], details: {} };\n }\n\n const writesProfileFile = Boolean(\n options?.profileMarkdownRoot && isBareProfileMarkdownFileName(p.path),\n );\n const workspaceRoot = writesProfileFile ? options!.profileMarkdownRoot! : workspace;\n\n // Sandbox path-policy check (blocked dirs, symlink escape, config protection)\n const pathPolicy = evaluateFilePolicy({\n operation: 'write',\n path: p.path,\n workspaceRoot,\n });\n if (!pathPolicy.allowed) {\n return { content: [{ type: 'text', text: `🚫 Sandbox: ${pathPolicy.reason}` }], details: {} };\n }\n\n const contentBytes = Buffer.byteLength(p.content, 'utf-8');\n if (contentBytes > MAX_FILE_SIZE) {\n return { content: [{ type: 'text', text: `🚫 File too large: ${contentBytes} bytes` }], details: {} };\n }\n\n const target = writesProfileFile\n ? resolveProfileMarkdownPathIfBareName(p.path, options!.profileMarkdownRoot!)\n : resolvePathUnderWorkspace(p.path, workspace);\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, p.content, 'utf-8');\n await options?.recordGoalEvidence?.({\n kind: 'file',\n title: `File written: ${target}`,\n summary: `${contentBytes} bytes written`,\n uri: target,\n data: { path: target, size: contentBytes, operation: 'write' },\n });\n return { content: [{ type: 'text', text: `File written: ${target}` }], details: { size: contentBytes } };\n } catch (error) {\n return { content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }], details: {} };\n }\n },\n } as any;\n}\n\nexport const writeFileTool: AgentTool = createWriteFileTool(process.cwd());\n"],"mappings":";;;;;;;AAcA,MAAM,gBAAgB,KAAK,OAAO;AAElC,MAAM,kBAAkB,KAAK,OAAO;CAClC,MAAM,KAAK,OAAO,EAAE,aAAa,sBAAsB,CAAC;CACxD,SAAS,KAAK,OAAO,EAAE,aAAa,oBAAoB,CAAC;CAC1D,CAAC;AAUF,SAAgB,oBACd,WACA,SACW;AACX,QAAO;EACL,MAAM;EACN,aACE;EACF,YAAY;EACZ,OAAO;EACP,kBAAkB;EAClB,eAAe;EACf,kBAAkB;EAClB,YAAY;EACZ,gCAAgC;EAChC,oBAAoB;EAEpB,MAAM,QACJ,aACA,QACA,SAC8B;AAC9B,OAAI;IACF,MAAM,IAAI;IACV,MAAM,SAAS,gBAAgB,SAAS,EAAE,KAAK;AAC/C,QAAI,CAAC,OAAO,QACV,QAAO;KAAE,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,MAAM,OAAO;MAAW,CAAC;KAAE,SAAS,EAAE;KAAE;IAGnF,MAAM,oBAAoB,QACxB,SAAS,uBAAuB,8BAA8B,EAAE,KAAK,CACtE;IACD,MAAM,gBAAgB,oBAAoB,QAAS,sBAAuB;IAG1E,MAAM,aAAa,mBAAmB;KACpC,WAAW;KACX,MAAM,EAAE;KACR;KACD,CAAC;AACF,QAAI,CAAC,WAAW,QACd,QAAO;KAAE,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,eAAe,WAAW;MAAU,CAAC;KAAE,SAAS,EAAE;KAAE;IAG/F,MAAM,eAAe,OAAO,WAAW,EAAE,SAAS,QAAQ;AAC1D,QAAI,eAAe,cACjB,QAAO;KAAE,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,sBAAsB,aAAa;MAAS,CAAC;KAAE,SAAS,EAAE;KAAE;IAGvG,MAAM,SAAS,oBACX,qCAAqC,EAAE,MAAM,QAAS,oBAAqB,GAC3E,0BAA0B,EAAE,MAAM,UAAU;AAChD,UAAM,MAAM,QAAQ,OAAO,EAAE,EAAE,WAAW,MAAM,CAAC;AACjD,UAAM,UAAU,QAAQ,EAAE,SAAS,QAAQ;AAC3C,UAAM,SAAS,qBAAqB;KAClC,MAAM;KACN,OAAO,iBAAiB;KACxB,SAAS,GAAG,aAAa;KACzB,KAAK;KACL,MAAM;MAAE,MAAM;MAAQ,MAAM;MAAc,WAAW;MAAS;KAC/D,CAAC;AACF,WAAO;KAAE,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,iBAAiB;MAAU,CAAC;KAAE,SAAS,EAAE,MAAM,cAAc;KAAE;YACjG,OAAO;AACd,WAAO;KAAE,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;MAAI,CAAC;KAAE,SAAS,EAAE;KAAE;;;EAGlI;;AAGH,MAAa,gBAA2B,oBAAoB,QAAQ,KAAK,CAAC"}
|