@xopcai/xopc 0.0.161 → 0.0.163
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 +4 -2
- package/README.zh-CN.md +4 -2
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-o7GRljfD.js → activity-store-Xj95LzTv.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-9R3szLMc.js → agent-avatar-dicebear-C-QeUFwU.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DVKlWKJE.js +2 -0
- package/dist/gateway/static/root/assets/{api-jSTqFMq9.js → api-BTLmAm1_.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-D81cyE76.js → app-management-settings-panel-zc6Gf-S5.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Ct6bZQCV.js → appearance-settings-0fMLnOWn.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-BZXEJDIV.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-CfD7AZKn.js → archive-plugin-DOiR_E21.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CP_Gaxt3.js → attachment-load-BxmYl1D1.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-BGKM_NDZ.js → automation-suggestion-card-BhZOirad.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-B8CnkoXv.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-IPr2EVnS.js → binary-plugins-DTTKsvgk.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-B6aHEGA6.js → block-editor-C7se7iqg.js} +46 -46
- package/dist/gateway/static/root/assets/browser-settings-page-BCPWKI9V.js +8 -0
- package/dist/gateway/static/root/assets/browser-workflow-inputs-kxmStCcv.js +1 -0
- package/dist/gateway/static/root/assets/browser-workflows-page-CwYf9OM_.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-C7lr_mX2.js +2 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-CCX9-LjU.js → capability-presets-api-BZKh2cWX.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Ble9kHRu.js +2 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-MmLMLDWf.js → channel-recipient-api-r7tdbnJE.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-CtQQQHrv.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-_VirfMKW.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-BbjzIs87.js → connector-logo-BpnQYAxA.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-BXWJSJeY.js +2 -0
- package/dist/gateway/static/root/assets/{desktop-pet-CYH5ZSXy.js → desktop-pet-B86W4a5c.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-DQLqGLc0.js → desktop-pet-settings-uv8Grtgk.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-ClsiXhmz.js → directory-picker-path-field-C4TTvf7p.js} +1 -1
- package/dist/gateway/static/root/assets/{dreaming-settings-CjMPPdzg.js → dreaming-settings-CzJAUPvM.js} +3 -3
- package/dist/gateway/static/root/assets/{extension-debug-page-57eizjhB.js → extension-debug-page-Ci2mOYUt.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CsbSb3u1.js → extension-page-DeXdmhXQ.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-C93vaOsU.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-DIPJuzBZ.js → gateway-config-api-C31Hlblp.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-CDLqAQY7.js → gateway-settings-D3zS6RZh.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DrfSJtvT.js → gateway-startup-retry-CSRvCqxh.js} +1 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-CWp2b7__.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-Dtm29FxD.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-lGC10UkU.js → goals-config-api-D4wYNRrf.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-jMzBJs6e.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-BWq0pdrA.js → goals-settings-Bx2jVvhQ.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-D4o8BJVv.js → heartbeat-settings-BEIF1eXy.js} +1 -1
- package/dist/gateway/static/root/assets/index-BXtJvaQl.css +1 -0
- package/dist/gateway/static/root/assets/index-HZdBKfk_.js +199 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-6T2QYehS.js → keyboard-shortcuts-settings-DOEDpvTM.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CseW9jD3.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-DCjg2K9f.js → local-apps-page-B0OpGpxv.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-Dar-xqQr.js → locale-store-Ys6RP7Be.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-DVqPbth5.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-rt1XO43g.js → markdown-split-CEZwysCH.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-Bwo8CJuh.js → media-plugins-CpGKE7B0.js} +1 -1
- package/dist/gateway/static/root/assets/messages-BzI9Wx30.js +5 -0
- package/dist/gateway/static/root/assets/{notes-page-Dp-pkX7d.js → notes-page-CdiuDZ5a.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-mrc3xtpn.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-CzZ4iKOb.js → page-tabs-BkH5AVV2.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-3E_Qa-58.js → preview-open-alternatives-CQai8f9D.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-B2T48Sbt.js → product-open-page-B2kSdB2b.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CfhPJLkH.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-BfMoKjdm.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-CrDtcsZ9.js +1 -0
- package/dist/gateway/static/root/assets/save-bar-controls-NGYnO7n7.js +1 -0
- package/dist/gateway/static/root/assets/schedule-field-nLOphnv3.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-DC-iU5IG.js → schema-form-D0e90ndE.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-D3DbF3dV.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BZp0O2dH.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CNqF6IwY.js → settings-form-section-X2Sl-EAk.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-DkvwitK_.js → settings-loading-skeleton-DOnUabm7.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-C4UUNi1n.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-DWvNgISx.js → settings-page-layout-C1yYqbT6.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-84iao4DZ.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-DGpSPW-n.js → share-preview-page-Cfy_pH7V.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DtcwQvRG.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-L7j5Gc8Z.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-1Ps8PjsP.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-8TxxSbUw.js → system-settings-panel-Da81RJ6G.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-B5FzMWOx.js → theme-store-DflSp9o4.js} +1 -1
- package/dist/gateway/static/root/assets/time-picker-BIkOW-2L.js +1 -0
- package/dist/gateway/static/root/assets/{typed-models-lib-DEGtSA5h.js → typed-models-lib--HptwFcD.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-BDU6FneG.js → use-channel-catalog-CMHY4ZfW.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-BYAAs2iW.js +1 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-nvIZerol.js +1 -0
- package/dist/gateway/static/root/assets/work-discovery-page-J35JkJ7_.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-C4wYDYqV.js +1 -0
- package/dist/gateway/static/root/assets/work-page-DMvitV6c.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-Cwi8Pz7n.js → workflow-run-setup-panel-D96MHABy.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-JMN0nMbM.js +11 -0
- package/dist/gateway/static/root/index.html +7 -7
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.d.ts +1 -0
- package/dist/src/agent/agent-manager.js +1 -0
- package/dist/src/agent/client-error-format.d.ts +1 -1
- package/dist/src/agent/client-error-format.js +9 -5
- package/dist/src/agent/embedded/run-for-session.js +38 -31
- package/dist/src/agent/embedded/session-runner.d.ts +1 -0
- package/dist/src/agent/embedded/session-runner.js +12 -4
- package/dist/src/agent/failover-error.d.ts +1 -1
- package/dist/src/agent/image/generation/openai-compatible-image-provider.d.ts +2 -6
- package/dist/src/agent/image/generation/openai-compatible-image-provider.js +1 -3
- package/dist/src/agent/image/generation/provider-registry.d.ts +5 -46
- package/dist/src/agent/image/generation/provider-registry.js +24 -73
- package/dist/{extensions/dashscope/src/image-generation-provider.d.ts → src/agent/image/generation/providers/dashscope.d.ts} +3 -6
- package/dist/{extensions/dashscope/src/image-generation-provider.js → src/agent/image/generation/providers/dashscope.js} +36 -59
- package/dist/{extensions/fal/src/image-generation-provider.d.ts → src/agent/image/generation/providers/fal.d.ts} +1 -1
- package/dist/{extensions/fal/src/image-generation-provider.js → src/agent/image/generation/providers/fal.js} +19 -29
- package/dist/{extensions/google/src/image-generation-provider.d.ts → src/agent/image/generation/providers/google.d.ts} +2 -2
- package/dist/{extensions/google/src/image-generation-provider.js → src/agent/image/generation/providers/google.js} +23 -30
- package/dist/{extensions/minimax/src/image-generation-provider.d.ts → src/agent/image/generation/providers/minimax.d.ts} +2 -5
- package/dist/{extensions/minimax/src/image-generation-provider.js → src/agent/image/generation/providers/minimax.js} +35 -51
- package/dist/{extensions/openai/src/image-generation-provider.d.ts → src/agent/image/generation/providers/openai.d.ts} +2 -2
- package/dist/{extensions/openai/src/image-generation-provider.js → src/agent/image/generation/providers/openai.js} +13 -38
- package/dist/src/agent/image/generation/runtime-types.d.ts +1 -0
- package/dist/src/agent/image/generation/runtime.d.ts +1 -3
- package/dist/src/agent/image/generation/runtime.js +6 -6
- package/dist/src/agent/image/generation/types.d.ts +23 -3
- package/dist/src/agent/image/index.d.ts +1 -1
- package/dist/src/agent/image/index.js +2 -2
- package/dist/src/agent/media-generation/runtime-shared.d.ts +2 -0
- package/dist/src/agent/media-generation/runtime-shared.js +1 -0
- package/dist/src/agent/outcomes/task-evaluation.d.ts +20 -0
- package/dist/src/agent/outcomes/task-evaluation.js +48 -0
- package/dist/src/agent/outcomes/task-verifier.d.ts +29 -0
- package/dist/src/agent/outcomes/task-verifier.js +71 -0
- package/dist/src/agent/prompt/memory/index.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +32 -1
- package/dist/src/agent/service.js +1 -0
- package/dist/src/agent/service.types.d.ts +1 -0
- package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +1 -7
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +2 -73
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +1 -13
- package/dist/src/agent/tools/browser/tool/schemas.js +1 -9
- package/dist/src/agent/tools/browser-recipe-tool.d.ts +12 -0
- package/dist/src/agent/tools/browser-recipe-tool.js +113 -0
- package/dist/src/agent/tools/factory.d.ts +2 -0
- package/dist/src/agent/tools/factory.js +6 -1
- package/dist/src/agent/tools/image-generate-tool.d.ts +2 -0
- package/dist/src/agent/tools/image-generate-tool.js +14 -7
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/auth/sync-provider-auth.d.ts +3 -0
- package/dist/src/auth/sync-provider-auth.js +12 -1
- package/dist/src/automations/domain/types.d.ts +13 -0
- package/dist/src/automations/domain/validation.d.ts +44 -24
- package/dist/src/automations/domain/validation.js +27 -18
- package/dist/src/automations/draft/automation-draft-validator.d.ts +6 -1
- package/dist/src/automations/draft/automation-draft-validator.js +1 -0
- package/dist/src/automations/service/action-executor.d.ts +1 -0
- package/dist/src/automations/service/action-executor.js +22 -0
- package/dist/src/browser/index.d.ts +0 -1
- package/dist/src/browser/index.js +1 -2
- package/dist/src/browser/pipeline/runner.d.ts +9 -2
- package/dist/src/browser/pipeline/runner.js +151 -105
- package/dist/src/browser/pipeline/schema.d.ts +21 -15
- package/dist/src/browser/pipeline/schema.js +93 -99
- package/dist/src/browser/recipes/index.d.ts +3 -0
- package/dist/src/browser/recipes/index.js +3 -0
- package/dist/src/browser/recipes/repository.d.ts +13 -0
- package/dist/src/browser/recipes/repository.js +81 -0
- package/dist/src/browser/recipes/runtime-service.d.ts +6 -0
- package/dist/src/browser/recipes/runtime-service.js +30 -0
- package/dist/src/browser/recipes/service.d.ts +36 -0
- package/dist/src/browser/recipes/service.js +186 -0
- package/dist/src/browser/recipes/types.d.ts +36 -0
- package/dist/src/cli/commands/browser-cli-helpers.js +6 -12
- package/dist/src/cli/commands/browser.js +4 -3
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/models.js +2 -5
- package/dist/src/cli/commands/onboard/model.js +3 -2
- package/dist/src/cli/commands/setup-shared/types.d.ts +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/models-json.d.ts +6 -0
- package/dist/src/config/models-json.js +2 -6
- package/dist/src/config/schema.d.ts +29 -18
- package/dist/src/config/schema.js +44 -33
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/hono/app.js +12 -6
- package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -1
- package/dist/src/gateway/hono/lib/safe-providers-config.d.ts +0 -3
- package/dist/src/gateway/hono/lib/safe-providers-config.js +1 -3
- package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +4 -0
- package/dist/src/gateway/hono/middleware/strict-rate-limit.js +8 -1
- package/dist/src/gateway/hono/routes/browser-workflows.d.ts +3 -0
- package/dist/src/gateway/hono/routes/browser-workflows.js +78 -0
- package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -11
- package/dist/src/gateway/hono/routes/deps.d.ts +1 -0
- package/dist/src/gateway/hono/routes/home.js +1 -0
- package/dist/src/gateway/hono/routes/index.js +4 -0
- package/dist/src/gateway/hono/routes/interaction-state.d.ts +3 -0
- package/dist/src/gateway/hono/routes/interaction-state.js +45 -0
- package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -2
- package/dist/src/gateway/hono/routes/memory.js +33 -4
- package/dist/src/gateway/hono/routes/models.js +151 -129
- package/dist/src/gateway/hono/routes/task-outcomes.d.ts +3 -0
- package/dist/src/gateway/hono/routes/task-outcomes.js +109 -0
- package/dist/src/gateway/hono/routes/you.d.ts +10 -2
- package/dist/src/gateway/hono/routes/you.js +184 -28
- package/dist/src/gateway/image-generation-setup.d.ts +40 -0
- package/dist/src/gateway/image-generation-setup.js +130 -0
- package/dist/src/gateway/rate-limit/buckets.d.ts +3 -0
- package/dist/src/gateway/rate-limit/buckets.js +12 -0
- package/dist/src/gateway/service/run-gateway-agent.js +84 -0
- package/dist/src/gateway/service.d.ts +6 -0
- package/dist/src/gateway/service.js +24 -0
- package/dist/src/media-shared/http/private-network.d.ts +1 -1
- package/dist/src/media-shared/http/private-network.js +1 -1
- package/dist/src/proactive/insight-repository.d.ts +2 -0
- package/dist/src/proactive/insight-repository.js +5 -2
- package/dist/src/proactive/run-processor.js +22 -1
- package/dist/src/proactive/types.d.ts +2 -0
- package/dist/src/proactive/value-score.d.ts +13 -0
- package/dist/src/proactive/value-score.js +30 -0
- package/dist/src/providers/auth-runtime/resolve-api-key.d.ts +2 -4
- package/dist/src/providers/auth-runtime/resolve-api-key.js +2 -4
- package/dist/src/providers/auth-runtime/resolve-auth.d.ts +3 -4
- package/dist/src/providers/auth-runtime/resolve-auth.js +18 -18
- package/dist/src/providers/domestic-presets.d.ts +22 -0
- package/dist/src/providers/domestic-presets.js +25 -0
- package/dist/src/providers/model-catalog-store.d.ts +71 -0
- package/dist/src/providers/model-catalog-store.js +102 -0
- package/dist/src/providers/model-catalog-sync-service.d.ts +41 -0
- package/dist/src/providers/model-catalog-sync-service.js +142 -0
- package/dist/src/providers/model-reference-auditor.d.ts +14 -0
- package/dist/src/providers/model-reference-auditor.js +71 -0
- package/dist/src/providers/model-registry.d.ts +4 -1
- package/dist/src/providers/model-registry.js +35 -2
- package/dist/src/providers/presentation.js +2 -0
- package/dist/src/providers/xopc-cloud-connection.d.ts +51 -0
- package/dist/src/providers/xopc-cloud-connection.js +196 -0
- package/dist/src/session/index.d.ts +1 -1
- package/dist/src/session/index.js +2 -2
- package/dist/src/session/session-title.d.ts +2 -0
- package/dist/src/session/session-title.js +24 -3
- package/dist/src/share/share-types.js +5 -5
- package/dist/src/share/site-share-types.d.ts +1 -1
- package/dist/src/share/site-share-types.js +5 -5
- package/dist/src/storage/sqlite/index.d.ts +3 -0
- package/dist/src/storage/sqlite/index.js +4 -1
- package/dist/src/storage/sqlite/interaction-state-repository.d.ts +17 -0
- package/dist/src/storage/sqlite/interaction-state-repository.js +60 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +1 -1
- package/dist/src/storage/sqlite/migrations/053_browser_recipes.sql +45 -0
- package/dist/src/storage/sqlite/migrations/054_task_outcomes.sql +24 -0
- package/dist/src/storage/sqlite/migrations/055_relationship_settings.sql +14 -0
- package/dist/src/storage/sqlite/migrations/056_task_verification.sql +6 -0
- package/dist/src/storage/sqlite/migrations/057_interaction_states.sql +11 -0
- package/dist/src/storage/sqlite/migrations/058_proactive_value.sql +3 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/relationship-settings-repository.d.ts +17 -0
- package/dist/src/storage/sqlite/relationship-settings-repository.js +64 -0
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +46 -0
- package/dist/src/storage/sqlite/task-outcome-repository.d.ts +90 -0
- package/dist/src/storage/sqlite/task-outcome-repository.js +138 -0
- package/dist/src/user-context/interaction-state.d.ts +13 -0
- package/dist/src/user-context/interaction-state.js +69 -0
- package/dist/src/user-context/memory-use-audit.d.ts +10 -0
- package/dist/src/user-context/memory-use-audit.js +25 -0
- package/dist/src/user-context/personal-playbook.d.ts +11 -0
- package/dist/src/user-context/personal-playbook.js +41 -0
- package/dist/src/user-context/projection.d.ts +4 -0
- package/dist/src/user-context/projection.js +5 -1
- package/dist/src/user-context/relationship-continuity.d.ts +14 -0
- package/dist/src/user-context/relationship-continuity.js +51 -0
- package/package.json +5 -7
- package/dist/extensions/dashscope/src/index.d.ts +0 -4
- package/dist/extensions/dashscope/src/index.js +0 -2
- package/dist/extensions/dashscope/xopc.extension.json +0 -15
- package/dist/extensions/fal/src/index.d.ts +0 -4
- package/dist/extensions/fal/src/index.js +0 -2
- package/dist/extensions/fal/xopc.extension.json +0 -14
- package/dist/extensions/google/src/index.d.ts +0 -4
- package/dist/extensions/google/src/index.js +0 -2
- package/dist/extensions/google/xopc.extension.json +0 -14
- package/dist/extensions/minimax/src/index.d.ts +0 -4
- package/dist/extensions/minimax/src/index.js +0 -2
- package/dist/extensions/minimax/xopc.extension.json +0 -15
- package/dist/extensions/openai/src/index.d.ts +0 -4
- package/dist/extensions/openai/src/index.js +0 -2
- package/dist/extensions/openai/xopc.extension.json +0 -14
- package/dist/gateway/static/root/assets/action-boundary-settings-panel-BIVBUiNT.js +0 -1
- package/dist/gateway/static/root/assets/agents-_qbUaYbs.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-0sPqD0FK.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-BxWBuBsE.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-C499b9AH.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Dva9SiPK.js +0 -2
- package/dist/gateway/static/root/assets/channels-settings-DNAU7u9o.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-CIOH7tgn.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-TwiBp8vY.js +0 -2
- package/dist/gateway/static/root/assets/extension-settings-page-DKA9-lyP.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-Q3B0E-0s.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-C5VAK04G.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-BJb-5IYw.js +0 -2
- package/dist/gateway/static/root/assets/index-CkUHH170.css +0 -1
- package/dist/gateway/static/root/assets/index-vq_cJZJC.js +0 -199
- package/dist/gateway/static/root/assets/local-app-workbench-page-euH17Kvb.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-CyYCBqym.js +0 -7
- package/dist/gateway/static/root/assets/messages-CxySDn9d.js +0 -5
- package/dist/gateway/static/root/assets/models-hub-panel-DObxxjc9.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-CCb4RXcZ.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-BvEcriRC.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-B_e79MRJ.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DGcqnYfR.js +0 -1
- package/dist/gateway/static/root/assets/save-bar-controls-CkeKasGm.js +0 -1
- package/dist/gateway/static/root/assets/schedule-field-TkqUL3wm.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DQZhrDJ8.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BkdeN99Y.js +0 -1
- package/dist/gateway/static/root/assets/settings-collapsible-section-Dpqth3oA.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-qPG7I2zd.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-lwRAh9aw.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-BGj9IVUr.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-B2UBAs5U.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DdjzFZ8I.js +0 -2
- package/dist/gateway/static/root/assets/user-context-page-BTTZpAGV.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DuDQd-WU.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-BUVkVCsW.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-DeEPPu4n.js +0 -1
- package/dist/gateway/static/root/assets/work-page-DQNUyTUq.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-BIy4wrzO.js +0 -11
- package/dist/src/agent/image/generation/bundled-registry.d.ts +0 -18
- package/dist/src/agent/image/generation/bundled-registry.js +0 -35
- package/dist/src/agent/image/generation/bundled.d.ts +0 -10
- package/dist/src/agent/image/generation/bundled.js +0 -15
- package/dist/src/agent/image/generation/image-provider-ui.d.ts +0 -20
- package/dist/src/browser/pipeline/source.d.ts +0 -9
- package/dist/src/browser/pipeline/source.js +0 -77
- package/dist/src/gateway/image-capabilities.d.ts +0 -28
- package/dist/src/gateway/image-capabilities.js +0 -78
- package/dist/src/generated/bundled-image-generation-providers.d.ts +0 -14
- package/dist/src/generated/bundled-image-generation-providers.js +0 -17
- /package/dist/src/{agent/image/generation/image-provider-ui.js → browser/recipes/types.js} +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { runSqliteWriteTransaction } from "../../../storage/sqlite/transaction.js";
|
|
2
|
+
import { getRelationshipSettings, updateRelationshipSettings } from "../../../storage/sqlite/relationship-settings-repository.js";
|
|
2
3
|
import { deleteMemoryRecord, getMemoryRecord, listMemoryRecords, upsertMemoryRecord } from "../../../storage/sqlite/memory-records-repository.js";
|
|
3
4
|
import { listKnowledgeSourceItems, listKnowledgeSyncRuns } from "../../../storage/sqlite/knowledge-repository.js";
|
|
4
5
|
import { getConnectorConnection, listConnectorConnections } from "../../../storage/sqlite/connector-repository.js";
|
|
@@ -15,6 +16,7 @@ import "../../../goals/index.js";
|
|
|
15
16
|
import { revokeComposioConnection } from "../../../connectors/composio.js";
|
|
16
17
|
import { listConnectorCatalog } from "../../../connectors/catalog.js";
|
|
17
18
|
import { nextMemoryReviewAt, resolveMemoryStability } from "../../../agent/memory/lifecycle.js";
|
|
19
|
+
import { PERSONAL_PLAYBOOK_DISABLED_TAG, PERSONAL_PLAYBOOK_ORDER_PREFIX, PERSONAL_PLAYBOOK_RULE_TAG, patchPersonalPlaybookContextTags, personalPlaybookContext } from "../../../user-context/personal-playbook.js";
|
|
18
20
|
import { listConnectorInstances } from "../../../connectors/instances.js";
|
|
19
21
|
import { uninstallConnector } from "../../../connectors/install.js";
|
|
20
22
|
import { readUserProfileFile, writeUserProfileFile } from "../../agents-admin.js";
|
|
@@ -44,8 +46,13 @@ const PLAYBOOK_IDS = [
|
|
|
44
46
|
"execution",
|
|
45
47
|
"routines"
|
|
46
48
|
];
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
+
const PLAYBOOK_SUPPORT_NEEDS = new Set([
|
|
50
|
+
"listen",
|
|
51
|
+
"clarify",
|
|
52
|
+
"advise",
|
|
53
|
+
"act",
|
|
54
|
+
"unknown"
|
|
55
|
+
]);
|
|
49
56
|
const PROFILE_FIELD_LIMITS = {
|
|
50
57
|
callName: 80,
|
|
51
58
|
pronouns: 80,
|
|
@@ -154,34 +161,57 @@ function parseProfilePatch(body) {
|
|
|
154
161
|
return Object.keys(patch).length > 0 ? { patch } : { error: "No profile fields provided" };
|
|
155
162
|
}
|
|
156
163
|
function playbookForRecord(record) {
|
|
164
|
+
if (!record.tags?.includes("playbook:rule")) return void 0;
|
|
157
165
|
if (record.kind === "preference" || record.kind === "boundary" || record.kind === "tool_preference") return "communication";
|
|
158
166
|
if (record.kind === "task_lesson" || record.kind === "derived_insight") return "execution";
|
|
159
167
|
if (record.kind === "routine") return "routines";
|
|
160
168
|
}
|
|
161
169
|
function playbookRuleOrder(record) {
|
|
162
|
-
const tag = record.tags?.find((value) => value.startsWith(
|
|
163
|
-
const parsed = tag ? Number.parseInt(tag.slice(
|
|
170
|
+
const tag = record.tags?.find((value) => value.startsWith(PERSONAL_PLAYBOOK_ORDER_PREFIX));
|
|
171
|
+
const parsed = tag ? Number.parseInt(tag.slice(PERSONAL_PLAYBOOK_ORDER_PREFIX.length), 10) : NaN;
|
|
164
172
|
return Number.isFinite(parsed) ? parsed : 1e3;
|
|
165
173
|
}
|
|
166
174
|
function patchPlaybookRuleTags(record, patch) {
|
|
167
|
-
let tags = (record.tags ?? []).filter((tag) => !tag.startsWith(
|
|
168
|
-
if (patch.enabled === true) tags = tags.filter((tag) => tag !==
|
|
169
|
-
if (patch.enabled === false) tags.push(
|
|
170
|
-
if (patch.order !== void 0) tags.push(`${
|
|
175
|
+
let tags = (record.tags ?? []).filter((tag) => !tag.startsWith(PERSONAL_PLAYBOOK_ORDER_PREFIX));
|
|
176
|
+
if (patch.enabled === true) tags = tags.filter((tag) => tag !== PERSONAL_PLAYBOOK_DISABLED_TAG);
|
|
177
|
+
if (patch.enabled === false) tags.push(PERSONAL_PLAYBOOK_DISABLED_TAG);
|
|
178
|
+
if (patch.order !== void 0) tags.push(`${PERSONAL_PLAYBOOK_ORDER_PREFIX}${patch.order}`);
|
|
171
179
|
return [...new Set(tags)];
|
|
172
180
|
}
|
|
181
|
+
function parsePlaybookContext(value) {
|
|
182
|
+
if (value === void 0) return { context: {} };
|
|
183
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return { error: "context must be an object" };
|
|
184
|
+
const input = value;
|
|
185
|
+
const context = {};
|
|
186
|
+
if ("channel" in input) {
|
|
187
|
+
if (input.channel !== null && (typeof input.channel !== "string" || !/^[a-z0-9_-]{1,40}$/i.test(input.channel))) return { error: "context.channel is invalid" };
|
|
188
|
+
context.channel = input.channel === null ? void 0 : String(input.channel);
|
|
189
|
+
}
|
|
190
|
+
if ("supportNeed" in input) {
|
|
191
|
+
if (input.supportNeed !== null && !PLAYBOOK_SUPPORT_NEEDS.has(String(input.supportNeed))) return { error: "context.supportNeed is invalid" };
|
|
192
|
+
context.supportNeed = input.supportNeed === null ? void 0 : input.supportNeed;
|
|
193
|
+
}
|
|
194
|
+
return { context };
|
|
195
|
+
}
|
|
173
196
|
function buildPersonalPlaybooks(records) {
|
|
174
197
|
return PLAYBOOK_IDS.map((id) => {
|
|
175
|
-
const rules = records.filter((record) => playbookForRecord(record) === id).sort((left, right) => playbookRuleOrder(left) - playbookRuleOrder(right) || left.updatedAt.localeCompare(right.updatedAt));
|
|
198
|
+
const rules = records.filter((record) => record.status === "active" && playbookForRecord(record) === id).sort((left, right) => playbookRuleOrder(left) - playbookRuleOrder(right) || left.updatedAt.localeCompare(right.updatedAt));
|
|
176
199
|
return {
|
|
177
200
|
id,
|
|
178
|
-
enabled: rules.some((record) => !record.tags?.includes(
|
|
201
|
+
enabled: rules.some((record) => !record.tags?.includes(PERSONAL_PLAYBOOK_DISABLED_TAG)),
|
|
179
202
|
rules: rules.map((record) => ({
|
|
180
203
|
id: record.id,
|
|
181
204
|
statement: record.content,
|
|
182
205
|
origin: record.explicitness,
|
|
183
|
-
enabled: !record.tags?.includes(
|
|
184
|
-
order: playbookRuleOrder(record)
|
|
206
|
+
enabled: !record.tags?.includes(PERSONAL_PLAYBOOK_DISABLED_TAG),
|
|
207
|
+
order: playbookRuleOrder(record),
|
|
208
|
+
context: personalPlaybookContext(record),
|
|
209
|
+
versions: playbookVersionChain(records, record.id).map((version) => ({
|
|
210
|
+
id: version.id,
|
|
211
|
+
statement: version.content,
|
|
212
|
+
updatedAt: version.updatedAt,
|
|
213
|
+
current: version.id === record.id
|
|
214
|
+
}))
|
|
185
215
|
})),
|
|
186
216
|
updatedAt: rules.map((record) => record.updatedAt).sort().at(-1)
|
|
187
217
|
};
|
|
@@ -195,7 +225,7 @@ function buildInsightSuggestions(records) {
|
|
|
195
225
|
id: record.id,
|
|
196
226
|
insight: record.content,
|
|
197
227
|
kind: record.kind,
|
|
198
|
-
action: record.kind === "routine" ? "make_repeatable" : "start_progress",
|
|
228
|
+
action: record.kind === "routine" ? "make_repeatable" : record.kind === "task_lesson" || record.kind === "derived_insight" ? "add_playbook" : "start_progress",
|
|
199
229
|
evidenceCount: record.evidence?.length ?? 0,
|
|
200
230
|
confidence: record.confidence,
|
|
201
231
|
sourceName: record.source.provider ?? "local"
|
|
@@ -216,11 +246,11 @@ function editableRecord(recordId) {
|
|
|
216
246
|
if (!record || !VISIBLE_STATUSES.has(record.status) || !isUserContextRecord(record)) return null;
|
|
217
247
|
return record;
|
|
218
248
|
}
|
|
219
|
-
function
|
|
220
|
-
return
|
|
221
|
-
id: record.id,
|
|
249
|
+
function memoryRecordInput(record) {
|
|
250
|
+
return {
|
|
222
251
|
providerId: record.source.provider ?? "local",
|
|
223
252
|
kind: record.kind,
|
|
253
|
+
userId: record.scope.userId,
|
|
224
254
|
sourceAgentId: record.provenance.sourceAgentId,
|
|
225
255
|
workspaceId: record.scope.workspaceId,
|
|
226
256
|
sessionKey: record.scope.sessionKey,
|
|
@@ -242,8 +272,41 @@ function preserveRecord(record, patch) {
|
|
|
242
272
|
validFrom: record.validFrom,
|
|
243
273
|
validTo: record.validTo,
|
|
244
274
|
supersedesRecordId: record.supersedesRecordId,
|
|
245
|
-
conflictGroupId: record.conflictGroupId
|
|
246
|
-
|
|
275
|
+
conflictGroupId: record.conflictGroupId
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
function preserveRecord(record, patch) {
|
|
279
|
+
return upsertMemoryRecord({
|
|
280
|
+
...memoryRecordInput(record),
|
|
281
|
+
...patch,
|
|
282
|
+
id: record.id
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
function playbookVersionChain(records, recordId) {
|
|
286
|
+
const relatedIds = new Set([recordId]);
|
|
287
|
+
let previousSize = 0;
|
|
288
|
+
while (previousSize !== relatedIds.size) {
|
|
289
|
+
previousSize = relatedIds.size;
|
|
290
|
+
for (const record of records) {
|
|
291
|
+
if (!record.supersedesRecordId) continue;
|
|
292
|
+
if (relatedIds.has(record.id) || relatedIds.has(record.supersedesRecordId)) {
|
|
293
|
+
relatedIds.add(record.id);
|
|
294
|
+
relatedIds.add(record.supersedesRecordId);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return records.filter((record) => relatedIds.has(record.id) && playbookForRecord(record) !== void 0).sort((left, right) => Date.parse(right.updatedAt) - Date.parse(left.updatedAt));
|
|
299
|
+
}
|
|
300
|
+
function versionPlaybookRule(record, patch) {
|
|
301
|
+
return upsertMemoryRecord({
|
|
302
|
+
...memoryRecordInput(record),
|
|
303
|
+
...patch,
|
|
304
|
+
status: "active",
|
|
305
|
+
supersedesRecordId: record.id,
|
|
306
|
+
source: {
|
|
307
|
+
provider: "local",
|
|
308
|
+
path: "you://playbook/version"
|
|
309
|
+
}
|
|
247
310
|
});
|
|
248
311
|
}
|
|
249
312
|
function registerYouRoutes(authenticated, deps) {
|
|
@@ -291,13 +354,14 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
291
354
|
}),
|
|
292
355
|
conflictGroups: buildConflictGroups(allUserContextRecords),
|
|
293
356
|
insights: buildInsightSuggestions(records),
|
|
294
|
-
playbooks: buildPersonalPlaybooks(
|
|
357
|
+
playbooks: buildPersonalPlaybooks(allUserContextRecords),
|
|
295
358
|
sources,
|
|
296
359
|
sourceRecommendations: buildGoalSourceRecommendations(sourceDefinitions.filter((definition) => definition.capabilities.includes("context") || definition.capabilities.includes("memory_source")), new Set(sourceInstances.map((instance) => instance.connectorId)), activeGoals),
|
|
297
360
|
controls: {
|
|
298
361
|
mode: config.userContext.memory.mode,
|
|
299
362
|
sensitiveWritePolicy: config.userContext.privacy.sensitiveWritePolicy
|
|
300
363
|
},
|
|
364
|
+
relationship: getRelationshipSettings(),
|
|
301
365
|
trust: {
|
|
302
366
|
defaultActionLevel: trustPolicy.defaultActionLevel,
|
|
303
367
|
levels: USER_TRUST_LEVELS,
|
|
@@ -305,6 +369,41 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
305
369
|
}
|
|
306
370
|
});
|
|
307
371
|
});
|
|
372
|
+
authenticated.patch("/api/you/relationship", deps.strictRateLimitMiddleware, async (c) => {
|
|
373
|
+
const body = await c.req.json().catch(() => null);
|
|
374
|
+
if (!body || typeof body !== "object" || Array.isArray(body)) return c.json({ error: "Invalid relationship settings" }, 400);
|
|
375
|
+
const input = body;
|
|
376
|
+
const patch = {};
|
|
377
|
+
if ("supportMode" in input) {
|
|
378
|
+
if (![
|
|
379
|
+
"efficient",
|
|
380
|
+
"coach",
|
|
381
|
+
"companion",
|
|
382
|
+
"auto"
|
|
383
|
+
].includes(String(input.supportMode))) return c.json({ error: "Invalid supportMode" }, 400);
|
|
384
|
+
patch.supportMode = input.supportMode;
|
|
385
|
+
}
|
|
386
|
+
if ("proactiveEnabled" in input) {
|
|
387
|
+
if (typeof input.proactiveEnabled !== "boolean") return c.json({ error: "proactiveEnabled must be boolean" }, 400);
|
|
388
|
+
patch.proactiveEnabled = input.proactiveEnabled;
|
|
389
|
+
}
|
|
390
|
+
for (const field of ["quietStart", "quietEnd"]) {
|
|
391
|
+
if (!(field in input)) continue;
|
|
392
|
+
const value = input[field];
|
|
393
|
+
if (value !== null && (typeof value !== "string" || !/^([01]\d|2[0-3]):[0-5]\d$/.test(value))) return c.json({ error: `${field} must use HH:mm` }, 400);
|
|
394
|
+
patch[field] = value === null ? void 0 : String(value);
|
|
395
|
+
}
|
|
396
|
+
for (const field of ["allowedTopics", "blockedTopics"]) {
|
|
397
|
+
if (!(field in input)) continue;
|
|
398
|
+
if (!Array.isArray(input[field]) || input[field].length > 20 || input[field].some((value) => typeof value !== "string" || !value.trim() || value.length > 80)) return c.json({ error: `${field} must contain up to 20 short topics` }, 400);
|
|
399
|
+
patch[field] = [...new Set(input[field].map((value) => value.trim()))];
|
|
400
|
+
}
|
|
401
|
+
if (Object.keys(patch).length === 0) return c.json({ error: "No relationship settings provided" }, 400);
|
|
402
|
+
return c.json({
|
|
403
|
+
ok: true,
|
|
404
|
+
relationship: updateRelationshipSettings(patch)
|
|
405
|
+
});
|
|
406
|
+
});
|
|
308
407
|
authenticated.get("/api/you/profile", async (c) => {
|
|
309
408
|
return c.json(await readProfileBundle(deps.service.currentConfig));
|
|
310
409
|
});
|
|
@@ -523,7 +622,7 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
523
622
|
limit: 500
|
|
524
623
|
}).filter(isUserContextRecord).filter((record) => playbookForRecord(record) === id);
|
|
525
624
|
runSqliteWriteTransaction(() => {
|
|
526
|
-
for (const record of active)
|
|
625
|
+
for (const record of active) versionPlaybookRule(record, { tags: patchPlaybookRuleTags(record, { enabled }) });
|
|
527
626
|
});
|
|
528
627
|
const current = active.map((record) => ({
|
|
529
628
|
...record,
|
|
@@ -540,6 +639,8 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
540
639
|
const body = await c.req.json().catch(() => ({}));
|
|
541
640
|
const statement = typeof body.statement === "string" ? body.statement.trim() : "";
|
|
542
641
|
if (!statement || statement.length > 5e3) return c.json({ error: "Rule statement is required" }, 400);
|
|
642
|
+
const parsedContext = parsePlaybookContext(body.context);
|
|
643
|
+
if ("error" in parsedContext) return c.json({ error: parsedContext.error }, 400);
|
|
543
644
|
const record = upsertMemoryRecord({
|
|
544
645
|
providerId: "local",
|
|
545
646
|
kind: id === "communication" ? "preference" : id === "execution" ? "task_lesson" : "routine",
|
|
@@ -550,11 +651,11 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
550
651
|
path: "you://playbook"
|
|
551
652
|
},
|
|
552
653
|
confidence: 1,
|
|
553
|
-
tags: [
|
|
654
|
+
tags: patchPersonalPlaybookContextTags([
|
|
554
655
|
"user-understanding",
|
|
555
|
-
|
|
556
|
-
`${
|
|
557
|
-
],
|
|
656
|
+
PERSONAL_PLAYBOOK_RULE_TAG,
|
|
657
|
+
`${PERSONAL_PLAYBOOK_ORDER_PREFIX}${Number.isInteger(body.order) ? body.order : 1e3}`
|
|
658
|
+
], parsedContext.context),
|
|
558
659
|
status: "active",
|
|
559
660
|
sensitivity: "normal",
|
|
560
661
|
explicitness: "explicit",
|
|
@@ -576,12 +677,14 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
576
677
|
if (!content || content.length > 5e3) return c.json({ error: "Rule statement is required" }, 400);
|
|
577
678
|
if (body.enabled !== void 0 && typeof body.enabled !== "boolean") return c.json({ error: "enabled must be boolean" }, 400);
|
|
578
679
|
if (body.order !== void 0 && (!Number.isInteger(body.order) || body.order < 0 || body.order > 1e4)) return c.json({ error: "order must be an integer between 0 and 10000" }, 400);
|
|
579
|
-
const
|
|
680
|
+
const parsedContext = parsePlaybookContext(body.context);
|
|
681
|
+
if ("error" in parsedContext) return c.json({ error: parsedContext.error }, 400);
|
|
682
|
+
const updated = versionPlaybookRule(record, {
|
|
580
683
|
content,
|
|
581
|
-
tags: patchPlaybookRuleTags(record, {
|
|
684
|
+
tags: patchPersonalPlaybookContextTags(patchPlaybookRuleTags(record, {
|
|
582
685
|
enabled: body.enabled,
|
|
583
686
|
order: body.order
|
|
584
|
-
}),
|
|
687
|
+
}), parsedContext.context),
|
|
585
688
|
explicitness: body.statement === void 0 ? record.explicitness : "explicit"
|
|
586
689
|
});
|
|
587
690
|
return c.json({
|
|
@@ -593,9 +696,32 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
593
696
|
const id = c.req.param("id");
|
|
594
697
|
const record = editableRecord(c.req.param("recordId"));
|
|
595
698
|
if (!PLAYBOOK_IDS.includes(id) || !record || playbookForRecord(record) !== id) return c.json({ error: "Playbook rule not found" }, 404);
|
|
596
|
-
|
|
699
|
+
preserveRecord(record, {
|
|
700
|
+
status: "archived",
|
|
701
|
+
validTo: (/* @__PURE__ */ new Date()).toISOString()
|
|
702
|
+
});
|
|
597
703
|
return c.json({ ok: true });
|
|
598
704
|
});
|
|
705
|
+
authenticated.post("/api/you/playbooks/:id/rules/:recordId/rollback", deps.strictRateLimitMiddleware, async (c) => {
|
|
706
|
+
const id = c.req.param("id");
|
|
707
|
+
const current = editableRecord(c.req.param("recordId"));
|
|
708
|
+
if (!PLAYBOOK_IDS.includes(id) || !current || playbookForRecord(current) !== id) return c.json({ error: "Playbook rule not found" }, 404);
|
|
709
|
+
const body = await c.req.json().catch(() => ({}));
|
|
710
|
+
const versionId = typeof body.versionId === "string" ? body.versionId : "";
|
|
711
|
+
const all = listAllUserContextRecords(ALL_MEMORY_STATUSES);
|
|
712
|
+
const target = playbookVersionChain(all, current.id).find((record) => record.id === versionId);
|
|
713
|
+
if (!target || target.id === current.id) return c.json({ error: "Previous version not found" }, 404);
|
|
714
|
+
const rolledBack = versionPlaybookRule(current, {
|
|
715
|
+
content: target.content,
|
|
716
|
+
tags: target.tags,
|
|
717
|
+
evidence: target.evidence,
|
|
718
|
+
explicitness: "explicit"
|
|
719
|
+
});
|
|
720
|
+
return c.json({
|
|
721
|
+
ok: true,
|
|
722
|
+
rule: buildPersonalPlaybooks([...all, rolledBack]).find((playbook) => playbook.id === id)?.rules.find((rule) => rule.id === rolledBack.id)
|
|
723
|
+
});
|
|
724
|
+
});
|
|
599
725
|
authenticated.patch("/api/you/insights/:id", deps.strictRateLimitMiddleware, async (c) => {
|
|
600
726
|
const config = deps.service.currentConfig;
|
|
601
727
|
const existing = editableRecord(c.req.param("id"));
|
|
@@ -622,6 +748,36 @@ function registerYouRoutes(authenticated, deps) {
|
|
|
622
748
|
status: "drafting",
|
|
623
749
|
href: buildRoutineAutomationDraftHref(existing)
|
|
624
750
|
});
|
|
751
|
+
if (existing.kind === "task_lesson" || existing.kind === "derived_insight") {
|
|
752
|
+
upsertMemoryRecord({
|
|
753
|
+
providerId: "local",
|
|
754
|
+
kind: "task_lesson",
|
|
755
|
+
sourceAgentId: selectedAgentId(config),
|
|
756
|
+
content: existing.content,
|
|
757
|
+
source: {
|
|
758
|
+
provider: "local",
|
|
759
|
+
path: "you://insight-proposal"
|
|
760
|
+
},
|
|
761
|
+
confidence: 1,
|
|
762
|
+
tags: [
|
|
763
|
+
"user-understanding",
|
|
764
|
+
PERSONAL_PLAYBOOK_RULE_TAG,
|
|
765
|
+
`${PERSONAL_PLAYBOOK_ORDER_PREFIX}1000`
|
|
766
|
+
],
|
|
767
|
+
status: "active",
|
|
768
|
+
sensitivity: existing.sensitivity,
|
|
769
|
+
explicitness: "explicit",
|
|
770
|
+
durability: "durable",
|
|
771
|
+
importance: existing.importance,
|
|
772
|
+
disclosurePolicy: existing.disclosurePolicy,
|
|
773
|
+
evidence: existing.evidence
|
|
774
|
+
});
|
|
775
|
+
preserveRecord(existing, { tags: [...new Set([...existing.tags ?? [], INSIGHT_ACCEPTED_TAG])] });
|
|
776
|
+
return c.json({
|
|
777
|
+
ok: true,
|
|
778
|
+
status: "saved"
|
|
779
|
+
});
|
|
780
|
+
}
|
|
625
781
|
const title = existing.content.trim().split(/\r?\n/)[0].slice(0, 72);
|
|
626
782
|
const uiLocale = body.uiLocale === "zh" ? "zh" : "en";
|
|
627
783
|
const contractDraft = await draftGoalContract({
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { listImageGenerationProvidersSummary } from '../agent/image/generation/provider-registry.js';
|
|
2
|
+
import { type Config } from '../config/schema.js';
|
|
3
|
+
export type ImageGenerationSetupInput = {
|
|
4
|
+
providerId: string;
|
|
5
|
+
modelId?: string;
|
|
6
|
+
region?: 'cn' | 'intl';
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ImageGenerationCatalogItem = ReturnType<typeof listImageGenerationProvidersSummary>[number] & {
|
|
10
|
+
configured: boolean;
|
|
11
|
+
requiresRegion: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare function getImageGenerationCatalog(config: Config): ImageGenerationCatalogItem[];
|
|
14
|
+
export declare function getAgentImageGenerationConfig(config: Config, agentIdRaw: string): {
|
|
15
|
+
agentId: string;
|
|
16
|
+
model: {
|
|
17
|
+
primary: string;
|
|
18
|
+
fallbacks?: string[];
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
autoProviderFallback?: boolean;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export declare function prepareImageGenerationSetup(config: Config, agentIdRaw: string, input: ImageGenerationSetupInput): {
|
|
24
|
+
ok: true;
|
|
25
|
+
config: Config;
|
|
26
|
+
providerId: string;
|
|
27
|
+
modelId: string;
|
|
28
|
+
} | {
|
|
29
|
+
ok: false;
|
|
30
|
+
error: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function verifyImageGenerationCredential(input: {
|
|
33
|
+
providerId: string;
|
|
34
|
+
apiKey: string;
|
|
35
|
+
baseUrl?: string;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
verified: boolean;
|
|
38
|
+
supported: boolean;
|
|
39
|
+
message?: string;
|
|
40
|
+
}>;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { ConfigSchema, init_schema } from "../config/schema.js";
|
|
2
|
+
import { init_agent_scope, normalizeAgentId } from "../agent/agent-scope.js";
|
|
3
|
+
import { resolveEffectiveAgentManifestForAgent } from "../config/agent-profile.js";
|
|
4
|
+
import { fetchWithTimeoutGuarded } from "../media-shared/http/provider-http.js";
|
|
5
|
+
import "../media-shared/http/index.js";
|
|
6
|
+
import { getImageGenerationProvider, listImageGenerationProvidersSummary } from "../agent/image/generation/provider-registry.js";
|
|
7
|
+
//#region src/gateway/image-generation-setup.ts
|
|
8
|
+
init_agent_scope();
|
|
9
|
+
init_schema();
|
|
10
|
+
function getImageGenerationCatalog(config) {
|
|
11
|
+
return listImageGenerationProvidersSummary().map((summary) => {
|
|
12
|
+
const provider = getImageGenerationProvider(summary.id);
|
|
13
|
+
return {
|
|
14
|
+
...summary,
|
|
15
|
+
configured: provider.isConfigured({ cfg: config }),
|
|
16
|
+
requiresRegion: summary.id === "dashscope" || summary.id === "minimax"
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function getAgentImageGenerationConfig(config, agentIdRaw) {
|
|
21
|
+
const agentId = normalizeAgentId(agentIdRaw);
|
|
22
|
+
if (!config.agents.list.some((entry) => entry.enabled !== false && normalizeAgentId(entry.id) === agentId)) throw new Error(`Agent not found: ${agentId}`);
|
|
23
|
+
return {
|
|
24
|
+
agentId,
|
|
25
|
+
model: resolveEffectiveAgentManifestForAgent(config, agentId).models.imageGenerationModel ?? null
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function prepareImageGenerationSetup(config, agentIdRaw, input) {
|
|
29
|
+
const agentId = normalizeAgentId(agentIdRaw);
|
|
30
|
+
if (!config.agents.list.some((entry) => entry.enabled !== false && normalizeAgentId(entry.id) === agentId)) return {
|
|
31
|
+
ok: false,
|
|
32
|
+
error: `Agent not found: ${agentId}`
|
|
33
|
+
};
|
|
34
|
+
const providerId = input.providerId.trim();
|
|
35
|
+
const provider = getImageGenerationProvider(providerId);
|
|
36
|
+
if (!provider) return {
|
|
37
|
+
ok: false,
|
|
38
|
+
error: `Unknown image provider: ${providerId}`
|
|
39
|
+
};
|
|
40
|
+
const modelId = input.modelId?.trim() || provider.defaultModel;
|
|
41
|
+
if (!provider.models.includes(modelId)) return {
|
|
42
|
+
ok: false,
|
|
43
|
+
error: `Unknown ${providerId} image model: ${modelId}`
|
|
44
|
+
};
|
|
45
|
+
if ((providerId === "dashscope" || providerId === "minimax") && input.region !== "cn" && input.region !== "intl") return {
|
|
46
|
+
ok: false,
|
|
47
|
+
error: `${providerId} requires region "cn" or "intl"`
|
|
48
|
+
};
|
|
49
|
+
const next = structuredClone(config);
|
|
50
|
+
const index = next.agents.list.findIndex((entry) => entry.enabled !== false && normalizeAgentId(entry.id) === agentId);
|
|
51
|
+
if (index < 0) return {
|
|
52
|
+
ok: false,
|
|
53
|
+
error: `Agent not found: ${agentId}`
|
|
54
|
+
};
|
|
55
|
+
const connection = {
|
|
56
|
+
...input.region ? { region: input.region } : {},
|
|
57
|
+
...input.baseUrl?.trim() ? { baseUrl: input.baseUrl.trim() } : {}
|
|
58
|
+
};
|
|
59
|
+
next.providers = {
|
|
60
|
+
...next.providers ?? {},
|
|
61
|
+
[providerId]: {
|
|
62
|
+
...next.providers?.[providerId] ?? {},
|
|
63
|
+
...connection
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const entry = next.agents.list[index];
|
|
67
|
+
entry.models.imageGenerationModel = { primary: `${providerId}/${modelId}` };
|
|
68
|
+
const parsed = ConfigSchema.safeParse(next);
|
|
69
|
+
if (!parsed.success) return {
|
|
70
|
+
ok: false,
|
|
71
|
+
error: parsed.error.issues.map((issue) => issue.message).join("; ")
|
|
72
|
+
};
|
|
73
|
+
return {
|
|
74
|
+
ok: true,
|
|
75
|
+
config: next,
|
|
76
|
+
providerId,
|
|
77
|
+
modelId
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async function verifyImageGenerationCredential(input) {
|
|
81
|
+
const apiKey = input.apiKey.trim();
|
|
82
|
+
if (!apiKey) return {
|
|
83
|
+
verified: false,
|
|
84
|
+
supported: true,
|
|
85
|
+
message: "API key is required"
|
|
86
|
+
};
|
|
87
|
+
if (!getImageGenerationProvider(input.providerId)) return {
|
|
88
|
+
verified: false,
|
|
89
|
+
supported: true,
|
|
90
|
+
message: `Unknown image provider: ${input.providerId}`
|
|
91
|
+
};
|
|
92
|
+
let url;
|
|
93
|
+
let headers = {};
|
|
94
|
+
if (input.providerId === "openai") {
|
|
95
|
+
url = `${input.baseUrl?.trim().replace(/\/+$/, "") || "https://api.openai.com/v1"}/models`;
|
|
96
|
+
headers = { Authorization: `Bearer ${apiKey}` };
|
|
97
|
+
} else if (input.providerId === "google") url = `${input.baseUrl?.trim().replace(/\/+$/, "") || "https://generativelanguage.googleapis.com"}/v1beta/models?pageSize=1&key=${encodeURIComponent(apiKey)}`;
|
|
98
|
+
else return {
|
|
99
|
+
verified: false,
|
|
100
|
+
supported: false
|
|
101
|
+
};
|
|
102
|
+
try {
|
|
103
|
+
const response = await fetchWithTimeoutGuarded(url, {
|
|
104
|
+
timeoutMs: 1e4,
|
|
105
|
+
label: `${input.providerId} credential verification`,
|
|
106
|
+
allowPrivateNetwork: false,
|
|
107
|
+
init: {
|
|
108
|
+
headers,
|
|
109
|
+
redirect: "error"
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
if (response.ok) return {
|
|
113
|
+
verified: true,
|
|
114
|
+
supported: true
|
|
115
|
+
};
|
|
116
|
+
return {
|
|
117
|
+
verified: false,
|
|
118
|
+
supported: true,
|
|
119
|
+
message: `Provider returned HTTP ${response.status}`
|
|
120
|
+
};
|
|
121
|
+
} catch (error) {
|
|
122
|
+
return {
|
|
123
|
+
verified: false,
|
|
124
|
+
supported: true,
|
|
125
|
+
message: error instanceof Error ? error.message : String(error)
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { getAgentImageGenerationConfig, getImageGenerationCatalog, prepareImageGenerationSetup, verifyImageGenerationCredential };
|
|
@@ -35,6 +35,7 @@ declare class BucketRegistry {
|
|
|
35
35
|
private authFailureLimiter?;
|
|
36
36
|
private authFailureSignature?;
|
|
37
37
|
private strictApiLimiter?;
|
|
38
|
+
private xopcCloudPollLimiter?;
|
|
38
39
|
private channelApiLimiter?;
|
|
39
40
|
private tunnelMutateLimiter?;
|
|
40
41
|
private pairingExchangeLimiter?;
|
|
@@ -48,6 +49,8 @@ declare class BucketRegistry {
|
|
|
48
49
|
authFailure(cfg: ResolvedAuthRateLimitConfig): FailureLimiter;
|
|
49
50
|
/** Sensitive admin / mutation endpoints — 15 req / 60 s per client IP. */
|
|
50
51
|
strictApi(): RateLimiter;
|
|
52
|
+
/** XOPC Cloud authorization polling — 60 req / 60 s per client IP. */
|
|
53
|
+
xopcCloudPoll(): RateLimiter;
|
|
51
54
|
/** Channel mutation/action endpoints — 20 req / 60 s per client IP. */
|
|
52
55
|
channelApi(): RateLimiter;
|
|
53
56
|
/** Tunnel mutation calls — 12 req / 5 min per gateway-token fingerprint. */
|
|
@@ -47,6 +47,7 @@ var BucketRegistry = class {
|
|
|
47
47
|
authFailureLimiter;
|
|
48
48
|
authFailureSignature;
|
|
49
49
|
strictApiLimiter;
|
|
50
|
+
xopcCloudPollLimiter;
|
|
50
51
|
channelApiLimiter;
|
|
51
52
|
tunnelMutateLimiter;
|
|
52
53
|
pairingExchangeLimiter;
|
|
@@ -79,6 +80,14 @@ var BucketRegistry = class {
|
|
|
79
80
|
});
|
|
80
81
|
return this.strictApiLimiter;
|
|
81
82
|
}
|
|
83
|
+
/** XOPC Cloud authorization polling — 60 req / 60 s per client IP. */
|
|
84
|
+
xopcCloudPoll() {
|
|
85
|
+
if (!this.xopcCloudPollLimiter) this.xopcCloudPollLimiter = new RateLimiter({
|
|
86
|
+
maxRequests: 60,
|
|
87
|
+
windowMs: 6e4
|
|
88
|
+
});
|
|
89
|
+
return this.xopcCloudPollLimiter;
|
|
90
|
+
}
|
|
82
91
|
/** Channel mutation/action endpoints — 20 req / 60 s per client IP. */
|
|
83
92
|
channelApi() {
|
|
84
93
|
if (!this.channelApiLimiter) this.channelApiLimiter = new RateLimiter({
|
|
@@ -123,6 +132,7 @@ var BucketRegistry = class {
|
|
|
123
132
|
destroyAll() {
|
|
124
133
|
this.authFailureLimiter?.destroy();
|
|
125
134
|
this.strictApiLimiter?.destroy();
|
|
135
|
+
this.xopcCloudPollLimiter?.destroy();
|
|
126
136
|
this.channelApiLimiter?.destroy();
|
|
127
137
|
this.tunnelMutateLimiter?.destroy();
|
|
128
138
|
this.pairingExchangeLimiter?.destroy();
|
|
@@ -130,6 +140,7 @@ var BucketRegistry = class {
|
|
|
130
140
|
this.sharePublicLongLimiter?.destroy();
|
|
131
141
|
this.authFailureLimiter = void 0;
|
|
132
142
|
this.strictApiLimiter = void 0;
|
|
143
|
+
this.xopcCloudPollLimiter = void 0;
|
|
133
144
|
this.channelApiLimiter = void 0;
|
|
134
145
|
this.tunnelMutateLimiter = void 0;
|
|
135
146
|
this.pairingExchangeLimiter = void 0;
|
|
@@ -141,6 +152,7 @@ var BucketRegistry = class {
|
|
|
141
152
|
resetAllForTests() {
|
|
142
153
|
this.authFailureLimiter?.resetForTests();
|
|
143
154
|
this.strictApiLimiter?.resetForTests();
|
|
155
|
+
this.xopcCloudPollLimiter?.resetForTests();
|
|
144
156
|
this.channelApiLimiter?.resetForTests();
|
|
145
157
|
this.tunnelMutateLimiter?.resetForTests();
|
|
146
158
|
this.pairingExchangeLimiter?.resetForTests();
|