@xopcai/xopc 0.0.188 → 0.0.190
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 +1 -4
- package/README.zh-CN.md +0 -3
- 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--QoUGhiS.js → activity-store-DstnJCS5.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B0yweLNQ.js → agent-avatar-dicebear-9vAbkroX.js} +1 -1
- package/dist/gateway/static/root/assets/agents-D1t4SfMQ.js +68 -0
- package/dist/gateway/static/root/assets/{api-5laWqfiE.js → api-BTL9kayv.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BXJ8Jiv_.js → app-management-settings-panel-DkFeIdBf.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DG9n9D1M.js → appearance-settings-Bxs8Fpaj.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-Cgrgu5OW.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-Ceh5qrZf.js → archive-plugin-Ch2RmLCC.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-jFW7uYf7.js → attachment-load-BhMQM_Ky.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-CtJxstKh.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-XDlkI1r4.js → binary-plugins-D6CqlymH.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-kyKc2IhE.js → block-editor-ClL6HEg9.js} +56 -56
- package/dist/gateway/static/root/assets/browser-settings-page-DW99iDmD.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-BJa5Iz_v.js → browser-workflow-inputs-BYy48VhN.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-CTQQOsn5.js → browser-workflows-page-zgLibuMH.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CHUrT9EB.js +7 -0
- package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Cycrv0YV.js +1 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-BgIkWq01.js → channel-recipient-api-BThDGiO3.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-V96gPUAU.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +1 -0
- package/dist/gateway/static/root/assets/connectors-api-DS9ED-EL.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-BhlyQoQI.js +2 -0
- package/dist/gateway/static/root/assets/cron-expression-CkgsvhtW.js +2 -0
- package/dist/gateway/static/root/assets/{desktop-pet-CSwd00CV.js → desktop-pet-Cv8rGhYW.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CuNQvHGu.js → desktop-pet-settings-CIeJdwfV.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-ct0n5Rje.js → directory-picker-path-field-D8jXEiAY.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BeRBuMUU.js → extension-debug-page-CCZ9u6TZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DbK-Cwao.js → extension-page-CV36ILRG.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-IyQrSILY.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-CC7EvEFp.js → gateway-config-api-D4_r5iJM.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-CYlntpBH.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-B2DmdlwO.js → gateway-startup-retry-EO9mKvzE.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-D4SyWob8.js +1 -0
- package/dist/gateway/static/root/assets/home-page-B2Kagoh8.js +3 -0
- package/dist/gateway/static/root/assets/{image-generation-api-GMTaS6eI.js → image-generation-api-Bu7PyVSh.js} +1 -1
- package/dist/gateway/static/root/assets/index-CYT5DOzr.js +150 -0
- package/dist/gateway/static/root/assets/index-D6e3tPL-.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DhGYddbI.js → keyboard-shortcuts-settings-BMhCuVBZ.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-BHYbFjqy.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CmnrBmWi.js → local-apps-page-ijIe7_y2.js} +1 -1
- package/dist/gateway/static/root/assets/locale-store-deR2zRaE.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-IIn8Tess.js +2 -0
- package/dist/gateway/static/root/assets/management-settings--V_fovKD.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-split-CZaBPOVn.js → markdown-split-Dt9-in6W.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-CiKvSgCv.js → media-plugins-B3pj_iO0.js} +1 -1
- package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +3 -0
- package/dist/gateway/static/root/assets/{notes-page-Bisbzqlz.js → notes-page-DZ366lIT.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-S2sBVOLw.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-BxlwhAbH.js → page-tabs-C5ge434C.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-RM8wXxfT.js → preview-open-alternatives-BFa9DgSV.js} +1 -1
- package/dist/gateway/static/root/assets/product-delivery-tRr-7IxY.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-DdBlibek.js → product-open-page-Dc9CcWdu.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BilzoCJ7.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-BoQUyacP.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-DUyUaCRF.js +1 -0
- package/dist/gateway/static/root/assets/{schema-form-BDKbpmXv.js → schema-form-B84DckWe.js} +1 -1
- package/dist/gateway/static/root/assets/{schemas-C6onAggk.js → schemas-zIBW3wiV.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Dzxlq1F0.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-TzwlZxU6.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-Dp9itvdy.js +1 -0
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-DgIp8_S6.js → settings-loading-skeleton-CCtlhoy7.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-DQmMKf8r.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-97LmwrzC.js → settings-page-layout-EQIOJa_L.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Cwi-SPja.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-BH7i3g1S.js → share-preview-page-C4_B2jvf.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-CkyuGlZK.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-BJCePQK5.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-BYWLfmJi.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-s-a5WV9j.js → skills-page.utils-Jhm24i4h.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-BxjeMT5k.js → system-settings-panel-Dpx2ags2.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-BahycnfW.js → task-detail-page-DLAdxI6e.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-BRxdsmic.js → theme-store-DnBOcGXi.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-39MjwPSq.js → typed-models-lib-DULmTHUB.js} +1 -1
- package/dist/gateway/static/root/assets/use-autosave-BrjVk5VH.js +1 -0
- package/dist/gateway/static/root/assets/user-context-page-9AAFpGAL.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-XU-7sBSg.js → voice-api-key-field-BISTPfq_.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-CJqu8UHq.js → work-discovery-overlay-Wr-uF7VA.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-page-BWds95sL.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DXtg8Qxl.js → workflow-run-setup-panel-DHqHP8_6.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-0b4_DFHr.js +11 -0
- package/dist/gateway/static/root/index.html +9 -9
- package/dist/package.js +1 -1
- package/dist/packages/endpoint-tools-protocol/src/index.js +184 -0
- package/dist/packages/gateway-contract/src/tool-activity.js +0 -36
- package/dist/packages/realtime-client/src/index.js +256 -0
- package/dist/packages/realtime-protocol/src/index.js +88 -0
- package/dist/src/agent/agent-manager.d.ts +1 -1
- package/dist/src/agent/agent-manager.js +7 -13
- package/dist/src/agent/background-review/coordinator.js +1 -1
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +3 -1
- package/dist/src/agent/background-review/run-background-review.d.ts +2 -0
- package/dist/src/agent/background-review/run-background-review.js +10 -9
- package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +0 -1
- package/dist/src/agent/bootstrap/bootstrap-cache.js +3 -4
- package/dist/src/agent/bootstrap/bootstrap-files.d.ts +0 -4
- package/dist/src/agent/bootstrap/bootstrap-files.js +3 -4
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -4
- package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +0 -1
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -14
- package/dist/src/agent/bootstrap/types.d.ts +1 -1
- package/dist/src/agent/client-error-format.d.ts +1 -1
- package/dist/src/agent/client-error-format.js +1 -1
- package/dist/src/agent/context/workspace-templates/SOUL.md +1 -1
- package/dist/src/agent/external-tools/endpoint-provider.d.ts +17 -0
- package/dist/src/agent/external-tools/endpoint-provider.js +93 -0
- package/dist/src/agent/external-tools/gateway-tools.js +1 -1
- package/dist/src/agent/external-tools/index.d.ts +4 -5
- package/dist/src/agent/external-tools/index.js +8 -2
- package/dist/src/agent/external-tools/types.d.ts +8 -1
- package/dist/src/agent/external-tools/types.js +2 -1
- package/dist/src/agent/inbound/inbound-loop.js +4 -0
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +9 -8
- package/dist/src/agent/inbound/turn-dispatcher.js +13 -11
- package/dist/src/agent/memory/builtin-provider.d.ts +2 -4
- package/dist/src/agent/memory/builtin-provider.js +35 -15
- package/dist/src/agent/memory/context/types.d.ts +3 -1
- package/dist/src/agent/memory/create-memory-manager.js +2 -0
- package/dist/src/agent/memory/index.d.ts +1 -1
- package/dist/src/agent/memory/index.js +1 -1
- package/dist/src/agent/memory/manager.d.ts +9 -1
- package/dist/src/agent/memory/manager.js +39 -9
- package/dist/src/agent/memory/memory-config.d.ts +1 -1
- package/dist/src/agent/memory/memory-config.js +1 -1
- package/dist/src/agent/memory/source-origin.js +0 -2
- package/dist/src/agent/memory/types.d.ts +5 -1
- package/dist/src/agent/memory/understanding/service.d.ts +10 -10
- package/dist/src/agent/memory/understanding/service.js +108 -176
- package/dist/src/agent/memory/understanding/types.d.ts +7 -8
- package/dist/src/agent/memory/user-context-coordinator.d.ts +2 -1
- package/dist/src/agent/memory/user-context-coordinator.js +27 -41
- package/dist/src/agent/messaging/command-handler.d.ts +2 -2
- package/dist/src/agent/messaging/command-handler.js +3 -3
- package/dist/src/agent/orchestration/agent-orchestrator.js +4 -7
- package/dist/src/agent/prompt/sections/memory-skills.js +4 -4
- package/dist/src/agent/prompt/sections/tooling.js +0 -10
- package/dist/src/agent/prompt/service-prompt-builder.d.ts +0 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +4 -33
- package/dist/src/agent/prompt/system-prompt.js +1 -2
- package/dist/src/agent/service/async-queue.d.ts +1 -1
- package/dist/src/agent/service/async-queue.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +2 -2
- package/dist/src/agent/service/process-direct-one-shot.d.ts +3 -1
- package/dist/src/agent/service/process-direct-one-shot.js +1 -1
- package/dist/src/agent/service/process-direct-streaming.d.ts +7 -5
- package/dist/src/agent/service/process-direct-streaming.js +5 -5
- package/dist/src/agent/service.d.ts +2 -3
- package/dist/src/agent/service.js +10 -21
- package/dist/src/agent/service.types.d.ts +2 -0
- package/dist/src/agent/session/index.d.ts +1 -1
- package/dist/src/agent/session/session-context.d.ts +2 -0
- package/dist/src/agent/session/session-context.js +4 -0
- package/dist/src/agent/session/session-state-bag.d.ts +4 -4
- package/dist/src/agent/session/session-state-bag.js +1 -1
- package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +1 -1
- package/dist/src/agent/streaming/reasoning-visibility.d.ts +6 -0
- package/dist/src/agent/streaming/{reasoning-visibility-sse.js → reasoning-visibility.js} +3 -6
- package/dist/src/agent/tools/dreaming-tool.d.ts +0 -2
- package/dist/src/agent/tools/dreaming-tool.js +13 -38
- package/dist/src/agent/tools/factory.d.ts +4 -3
- package/dist/src/agent/tools/factory.js +2 -10
- package/dist/src/agent/tools/index.d.ts +0 -1
- package/dist/src/agent/tools/index.js +1 -2
- package/dist/src/agent/tools/memory-tool.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.d.ts +3 -5
- package/dist/src/agent/workspace-runtime/registry.js +2 -15
- package/dist/src/agent-manifest/schema.d.ts +17 -17
- package/dist/src/agent-runtime/index.js +1 -1
- package/dist/src/agent-runtime/memory-runtime.d.ts +2 -2
- package/dist/src/agent-runtime/runtime-profile.js +1 -1
- package/dist/src/automations/domain/types.d.ts +2 -1
- package/dist/src/automations/domain/validation.d.ts +29 -29
- package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
- package/dist/src/automations/service/action-executor.js +4 -1
- package/dist/src/channels/pairing/pairing-challenge.d.ts +1 -1
- package/dist/src/channels/pairing/pairing-challenge.js +1 -1
- package/dist/src/chat-commands/builtins/understanding.js +2 -5
- package/dist/src/cli/commands/agent/stream-renderer.js +4 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/init.js +3 -22
- package/dist/src/cli/templates.js +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/paths.d.ts +0 -5
- package/dist/src/config/paths.js +2 -11
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/schema.d.ts +27 -122
- package/dist/src/config/schema.js +9 -42
- package/dist/src/config/web-patch.js +0 -1
- package/dist/src/connectors/learning-coordinator.js +75 -3
- package/dist/src/endpoint-tools/auth.d.ts +20 -0
- package/dist/src/endpoint-tools/auth.js +51 -0
- package/dist/src/endpoint-tools/index.d.ts +5 -0
- package/dist/src/endpoint-tools/index.js +6 -0
- package/dist/src/endpoint-tools/invocation-service.d.ts +68 -0
- package/dist/src/endpoint-tools/invocation-service.js +190 -0
- package/dist/src/endpoint-tools/policy.d.ts +10 -0
- package/dist/src/endpoint-tools/policy.js +18 -0
- package/dist/src/endpoint-tools/registry.d.ts +45 -0
- package/dist/src/endpoint-tools/registry.js +121 -0
- package/dist/src/endpoint-tools/runtime.d.ts +23 -0
- package/dist/src/endpoint-tools/runtime.js +86 -0
- package/dist/src/endpoint-tools/upload-service.d.ts +41 -0
- package/dist/src/endpoint-tools/upload-service.js +103 -0
- package/dist/src/extensions/types/hooks.d.ts +1 -1
- package/dist/src/extensions/update.js +1 -1
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/agent-builtin-tools.js +0 -5
- package/dist/src/gateway/agents-admin.d.ts +0 -7
- package/dist/src/gateway/agents-admin.js +3 -32
- package/dist/src/gateway/chat-stream/protocol.d.ts +0 -1
- package/dist/src/gateway/clarify-bridge.d.ts +5 -4
- package/dist/src/gateway/clarify-bridge.js +3 -4
- package/dist/src/gateway/dreaming-automation-reconciler.d.ts +3 -3
- package/dist/src/gateway/dreaming-automation-reconciler.js +48 -88
- package/dist/src/gateway/heartbeat/service.js +4 -1
- package/dist/src/gateway/hono/app.js +1 -5
- package/dist/src/gateway/hono/index.d.ts +0 -1
- package/dist/src/gateway/hono/index.js +1 -2
- package/dist/src/gateway/hono/lib/config-payload.d.ts +20 -9
- package/dist/src/gateway/hono/lib/config-payload.js +3 -2
- package/dist/src/gateway/hono/middleware/auth.js +3 -5
- package/dist/src/gateway/hono/oauth-async.d.ts +1 -0
- package/dist/src/gateway/hono/oauth-async.js +17 -2
- package/dist/src/gateway/hono/routes/agent-stream.js +49 -6
- package/dist/src/gateway/hono/routes/agents.js +1 -33
- package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +2 -2
- package/dist/src/gateway/hono/routes/config-patch/gateway.js +0 -19
- package/dist/src/gateway/hono/routes/config-patch/misc.js +17 -1
- package/dist/src/gateway/hono/routes/connectors.js +13 -12
- package/dist/src/gateway/hono/routes/deps.d.ts +0 -2
- package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +3 -0
- package/dist/src/gateway/hono/routes/endpoint-tools.js +196 -0
- package/dist/src/gateway/hono/routes/index.js +6 -2
- package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -5
- package/dist/src/gateway/hono/routes/logs.js +0 -4
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -2
- package/dist/src/gateway/hono/routes/realtime.d.ts +3 -0
- package/dist/src/gateway/hono/routes/realtime.js +35 -0
- package/dist/src/gateway/hono/routes/status.js +0 -7
- package/dist/src/gateway/hono/routes/understanding-sources.d.ts +3 -0
- package/dist/src/gateway/hono/routes/understanding-sources.js +203 -0
- package/dist/src/gateway/hono/routes/work-discovery.d.ts +2 -0
- package/dist/src/gateway/hono/routes/work-discovery.js +3 -134
- package/dist/src/gateway/hono/routes/workflows.js +1 -1
- package/dist/src/gateway/hono/routes/you.d.ts +0 -31
- package/dist/src/gateway/hono/routes/you.js +230 -1161
- package/dist/src/gateway/index.d.ts +1 -1
- package/dist/src/gateway/index.js +1 -2
- package/dist/src/gateway/protocol.d.ts +1 -7
- package/dist/src/gateway/security/index.js +1 -1
- package/dist/src/gateway/security/operator-scopes.js +1 -1
- package/dist/src/gateway/server.js +4 -4
- package/dist/src/gateway/service/agent-runner.d.ts +11 -9
- package/dist/src/gateway/service/agent-runner.js +18 -18
- package/dist/src/gateway/service/config-coordinator.d.ts +3 -3
- package/dist/src/gateway/service/run-gateway-agent.d.ts +4 -3
- package/dist/src/gateway/service/run-gateway-agent.js +15 -17
- package/dist/src/gateway/service/session-input-coordinator.d.ts +3 -0
- package/dist/src/gateway/service/session-input-coordinator.js +4 -2
- package/dist/src/gateway/service/types.d.ts +0 -5
- package/dist/src/gateway/service.d.ts +7 -6
- package/dist/src/gateway/service.js +43 -26
- package/dist/src/infra/update-runner.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js +1 -1
- package/dist/src/knowledge/connected-understanding-pipeline.d.ts +2 -4
- package/dist/src/knowledge/connected-understanding-pipeline.js +31 -81
- package/dist/src/knowledge/index.js +2 -2
- package/dist/src/knowledge/people-graph.d.ts +22 -25
- package/dist/src/knowledge/people-graph.js +76 -43
- package/dist/src/mcp/channel-bridge.d.ts +6 -9
- package/dist/src/mcp/channel-bridge.js +48 -76
- package/dist/src/mcp/channel-server.js +2 -6
- package/dist/src/proactive/execution/context.js +8 -13
- package/dist/src/realtime/broker.d.ts +31 -0
- package/dist/src/realtime/broker.js +114 -0
- package/dist/src/realtime/runtime.d.ts +20 -0
- package/dist/src/realtime/runtime.js +263 -0
- package/dist/src/realtime/tickets.d.ts +15 -0
- package/dist/src/realtime/tickets.js +38 -0
- package/dist/src/realtime/writer.d.ts +15 -0
- package/dist/src/realtime/writer.js +78 -0
- package/dist/src/share/share-config.js +0 -1
- package/dist/src/share/site-share-config.js +0 -1
- package/dist/src/storage/sqlite/connector-account-repository.js +0 -1
- package/dist/src/storage/sqlite/context-consolidation-repository.d.ts +37 -0
- package/dist/src/storage/sqlite/context-consolidation-repository.js +64 -0
- package/dist/src/storage/sqlite/endpoint-principal-repository.d.ts +17 -0
- package/dist/src/storage/sqlite/endpoint-principal-repository.js +54 -0
- package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.d.ts +25 -0
- package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.js +42 -0
- package/dist/src/storage/sqlite/fts.d.ts +2 -0
- package/dist/src/storage/sqlite/fts.js +29 -1
- package/dist/src/storage/sqlite/index.d.ts +6 -6
- package/dist/src/storage/sqlite/index.js +7 -7
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +9 -2
- package/dist/src/storage/sqlite/knowledge-repository.js +58 -10
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +7 -56
- package/dist/src/storage/sqlite/memory-records-repository.js +68 -218
- package/dist/src/storage/sqlite/migrations/109_endpoint_principals.sql +14 -0
- package/dist/src/storage/sqlite/migrations/110_session_input_origin.sql +43 -0
- package/dist/src/storage/sqlite/migrations/111_endpoint_tool_invocations.sql +18 -0
- package/dist/src/storage/sqlite/migrations/112_endpoint_instance_bindings.sql +8 -0
- package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +54 -0
- package/dist/src/storage/sqlite/migrations/114_user_context_domain.sql +193 -0
- package/dist/src/storage/sqlite/migrations/115_remove_legacy_user_context.sql +6 -0
- package/dist/src/storage/sqlite/migrations/116_structured_context_consolidation.sql +38 -0
- package/dist/src/storage/sqlite/migrations/117_unified_understanding_sources.sql +110 -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/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +0 -20
- package/dist/src/storage/sqlite/session-input-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/session-input-repository.js +5 -3
- package/dist/src/storage/sqlite/user-context-quality-repository.d.ts +34 -0
- package/dist/src/storage/sqlite/user-context-quality-repository.js +74 -0
- package/dist/src/storage/sqlite/user-context-repository.d.ts +64 -0
- package/dist/src/storage/sqlite/user-context-repository.js +383 -0
- package/dist/src/tasks/home-query-service.d.ts +1 -1
- package/dist/src/tui/backends/embedded-backend.js +5 -2
- package/dist/src/tui/backends/{gateway-sse-backend.d.ts → gateway-realtime-backend.d.ts} +13 -10
- package/dist/src/tui/backends/{gateway-sse-backend.js → gateway-realtime-backend.js} +114 -151
- package/dist/src/tui/tool-summary.js +1 -7
- package/dist/src/tui/tui-agent-events.d.ts +0 -1
- package/dist/src/tui/tui-agent-events.js +2 -15
- package/dist/src/tui/tui-backend.d.ts +4 -4
- package/dist/src/tui/tui-run-state.js +0 -4
- package/dist/src/tui/tui-startup-resources.js +1 -2
- package/dist/src/tui/tui-types.d.ts +2 -9
- package/dist/src/tui/tui-types.js +0 -1
- package/dist/src/tui/tui.js +5 -5
- package/dist/src/tunnel/gateway-lifecycle.d.ts +1 -1
- package/dist/src/tunnel/gateway-lifecycle.js +1 -1
- package/dist/src/user-context/config.d.ts +17 -210
- package/dist/src/user-context/config.js +19 -85
- package/dist/src/user-context/consolidation.d.ts +26 -0
- package/dist/src/user-context/consolidation.js +115 -0
- package/dist/src/user-context/domain.d.ts +75 -0
- package/dist/src/user-context/domain.js +4 -0
- package/dist/src/user-context/manual-understanding.d.ts +7 -14
- package/dist/src/user-context/manual-understanding.js +19 -49
- package/dist/src/{agent/memory/context → user-context}/planner.d.ts +5 -6
- package/dist/src/user-context/planner.js +311 -0
- package/dist/src/user-context/relationship-continuity.d.ts +3 -6
- package/dist/src/user-context/relationship-continuity.js +39 -32
- package/dist/src/user-context/sources/catalog.d.ts +2 -0
- package/dist/src/user-context/sources/catalog.js +149 -0
- package/dist/src/user-context/sources/index.d.ts +3 -0
- package/dist/src/user-context/sources/index.js +3 -0
- package/dist/src/user-context/sources/repository.d.ts +40 -0
- package/dist/src/user-context/sources/repository.js +164 -0
- package/dist/src/user-context/sources/types.d.ts +83 -0
- package/dist/src/user-context/understandingQuality.d.ts +5 -0
- package/dist/src/user-context/understandingQuality.js +44 -0
- package/dist/src/utils/logger/log-stream.d.ts +3 -10
- package/dist/src/utils/logger/log-stream.js +2 -73
- package/dist/src/utils/logger/pino-record.d.ts +1 -1
- package/dist/src/utils/logger/streams.js +1 -1
- package/dist/src/work-discovery/analyzer.d.ts +4 -3
- package/dist/src/work-discovery/analyzer.js +21 -16
- package/dist/src/work-discovery/incremental-repository.js +42 -40
- package/dist/src/work-discovery/index.js +3 -3
- package/dist/src/work-discovery/service.d.ts +7 -7
- package/dist/src/work-discovery/service.js +241 -190
- package/dist/src/work-discovery/source-repository.js +42 -53
- package/dist/src/work-discovery/types.d.ts +2 -14
- package/package.json +5 -7
- package/dist/gateway/static/root/assets/agents-C6OV-gMm.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-Ci14lDeO.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-Q1xmb4Rh.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-DbowrHXD.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DoZPFdKF.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-api-Dn-7MMEo.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Bt8Hnx0h.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-Bpsebsru.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-DFmdYRE5.js +0 -1
- package/dist/gateway/static/root/assets/connector-logo-TRr9ybf6.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-Tg5kl22i.js +0 -2
- package/dist/gateway/static/root/assets/cron-expression-B3B1eqnr.js +0 -2
- package/dist/gateway/static/root/assets/extension-settings-page-C9ag5tb5.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-9g8uIry9.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-fl1oC_-5.js +0 -1
- package/dist/gateway/static/root/assets/home-page-Bao9jq_z.js +0 -3
- package/dist/gateway/static/root/assets/index-Cl5n1f_U.css +0 -1
- package/dist/gateway/static/root/assets/index-OJgiMh07.js +0 -223
- package/dist/gateway/static/root/assets/local-app-workbench-page-B69NvtvH.js +0 -2
- package/dist/gateway/static/root/assets/locale-store-D6hs74o5.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-Cq3cABqg.js +0 -7
- package/dist/gateway/static/root/assets/messages-D02NNLCZ.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-BOZfJFhE.js +0 -4
- package/dist/gateway/static/root/assets/product-delivery-C8JbSj5Y.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-TSKFb2tN.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BokeBrTT.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-C56anxCX.js +0 -1
- package/dist/gateway/static/root/assets/segmented-styles-BL8oLBEp.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-C7TQADrD.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BDOPKeAX.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-zxo5ZGOu.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-BUPSIa9P.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BRg766eW.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-DhEAviQ_.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-Ct7AV8ls.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DoVuprZm.js +0 -2
- package/dist/gateway/static/root/assets/time-picker-BGk_Tbsj.js +0 -1
- package/dist/gateway/static/root/assets/use-save-bar-registration-5aVSjTjO.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-B9K41qmy.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-BBVnRHju.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-Bs_tYfst.js +0 -11
- package/dist/src/agent/code-intelligence/binary.d.ts +0 -15
- package/dist/src/agent/code-intelligence/binary.js +0 -372
- package/dist/src/agent/code-intelligence/index.d.ts +0 -4
- package/dist/src/agent/code-intelligence/index.js +0 -4
- package/dist/src/agent/code-intelligence/runtime.d.ts +0 -34
- package/dist/src/agent/code-intelligence/runtime.js +0 -280
- package/dist/src/agent/code-intelligence/tool-gating.d.ts +0 -5
- package/dist/src/agent/code-intelligence/tool-gating.js +0 -6
- package/dist/src/agent/code-intelligence/tools.d.ts +0 -6
- package/dist/src/agent/code-intelligence/tools.js +0 -266
- package/dist/src/agent/code-intelligence/types.d.ts +0 -22
- package/dist/src/agent/memory/context/planner.js +0 -286
- package/dist/src/agent/memory/dreaming/config.d.ts +0 -48
- package/dist/src/agent/memory/dreaming/config.js +0 -98
- package/dist/src/agent/memory/dreaming/constants.d.ts +0 -12
- package/dist/src/agent/memory/dreaming/constants.js +0 -18
- package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +0 -19
- package/dist/src/agent/memory/dreaming/deep-promotion.js +0 -152
- package/dist/src/agent/memory/dreaming/light-sweep.d.ts +0 -16
- package/dist/src/agent/memory/dreaming/light-sweep.js +0 -115
- package/dist/src/agent/memory/dreaming/preview.d.ts +0 -23
- package/dist/src/agent/memory/dreaming/preview.js +0 -52
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.d.ts +0 -16
- package/dist/src/agent/memory/dreaming/promotion-lifecycle.js +0 -44
- package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +0 -19
- package/dist/src/agent/memory/dreaming/rem-patterns.js +0 -150
- package/dist/src/agent/memory/dreaming/runner.d.ts +0 -10
- package/dist/src/agent/memory/dreaming/runner.js +0 -78
- package/dist/src/agent/memory/dreaming/schedule.d.ts +0 -23
- package/dist/src/agent/memory/dreaming/schedule.js +0 -38
- package/dist/src/agent/memory/dreaming/scope.d.ts +0 -11
- package/dist/src/agent/memory/dreaming/scope.js +0 -33
- package/dist/src/agent/memory/dreaming/utils.d.ts +0 -3
- package/dist/src/agent/memory/dreaming/utils.js +0 -31
- package/dist/src/agent/streaming/reasoning-visibility-sse.d.ts +0 -15
- package/dist/src/gateway/agent-run-relay.d.ts +0 -19
- package/dist/src/gateway/agent-run-relay.js +0 -169
- package/dist/src/gateway/hono/routes/memory.d.ts +0 -3
- package/dist/src/gateway/hono/routes/memory.js +0 -460
- package/dist/src/gateway/hono/sse.d.ts +0 -53
- package/dist/src/gateway/hono/sse.js +0 -207
- package/dist/src/gateway/service/sse-hub.d.ts +0 -10
- package/dist/src/gateway/service/sse-hub.js +0 -53
- package/dist/src/storage/sqlite/dreaming-repository.d.ts +0 -61
- package/dist/src/storage/sqlite/dreaming-repository.js +0 -88
- package/dist/src/storage/sqlite/memory-readiness-repository.d.ts +0 -7
- package/dist/src/storage/sqlite/memory-readiness-repository.js +0 -30
- package/dist/src/storage/sqlite/memory-reference-consent-repository.d.ts +0 -27
- package/dist/src/storage/sqlite/memory-reference-consent-repository.js +0 -107
- package/dist/src/storage/sqlite/user-claims-repository.d.ts +0 -101
- package/dist/src/storage/sqlite/user-claims-repository.js +0 -241
- package/dist/src/storage/sqlite/user-profile-setup-repository.d.ts +0 -3
- package/dist/src/storage/sqlite/user-profile-setup-repository.js +0 -32
- package/dist/src/tui/sse-consumer.d.ts +0 -15
- package/dist/src/tui/sse-consumer.js +0 -73
- package/dist/src/user-context/context-compiler.d.ts +0 -27
- package/dist/src/user-context/context-compiler.js +0 -48
- package/dist/src/user-context/import.d.ts +0 -12
- package/dist/src/user-context/import.js +0 -51
- package/dist/src/user-context/memory-episode-evaluator.d.ts +0 -32
- package/dist/src/user-context/memory-episode-evaluator.js +0 -35
- package/dist/src/user-context/memory-readiness.d.ts +0 -33
- package/dist/src/user-context/memory-readiness.js +0 -41
- package/dist/src/user-context/memory-use-audit.d.ts +0 -10
- package/dist/src/user-context/memory-use-audit.js +0 -26
- package/dist/src/user-context/personal-playbook.d.ts +0 -11
- package/dist/src/user-context/personal-playbook.js +0 -41
- package/dist/src/user-context/profile.d.ts +0 -37
- package/dist/src/user-context/profile.js +0 -163
- package/dist/src/user-context/projection.d.ts +0 -120
- package/dist/src/user-context/projection.js +0 -262
- package/dist/src/user-context/source-recommendations.d.ts +0 -13
- package/dist/src/user-context/source-recommendations.js +0 -85
- /package/dist/src/{agent/code-intelligence → user-context/sources}/types.js +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { resolveStateDir } from "../config/paths-state.js";
|
|
2
2
|
import { createLogger } from "../utils/logger/index.js";
|
|
3
3
|
import { init_logger } from "../utils/logger.js";
|
|
4
|
+
import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
|
|
4
5
|
import { getSessionConfig } from "../storage/sqlite/config-repository.js";
|
|
5
6
|
import "../storage/sqlite/index.js";
|
|
6
7
|
import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
@@ -8,7 +9,7 @@ import { applyConfigOverrides } from "../config/runtime-overrides.js";
|
|
|
8
9
|
import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
|
|
9
10
|
import { init_agent_scope, resolveAgentProfileDir } from "./agent-scope.js";
|
|
10
11
|
import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
|
|
11
|
-
import { init_paths, resolveBundledSkillsDir
|
|
12
|
+
import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
|
|
12
13
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
|
|
13
14
|
import { CredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
14
15
|
import { getApiKeySync, getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
|
|
@@ -126,6 +127,8 @@ var AgentManager = class {
|
|
|
126
127
|
getConfig: () => this.config.config,
|
|
127
128
|
isEnabledForSession: (sessionKey) => this.isUserContextEnabledForSession(sessionKey),
|
|
128
129
|
getAgentIdForSession: (sk) => this.agents.get(sk)?.effectiveProfile.agentId ?? "main",
|
|
130
|
+
getWorkspaceIdForSession: (sk) => this.getResolvedWorkspaceForSession(sk),
|
|
131
|
+
getProjectIdForSession: (sk) => getSessionMetadata(sk)?.projectId,
|
|
129
132
|
getMemoryManagerForSession: (sk) => this.getMemoryManagerForSession(sk),
|
|
130
133
|
getLastAssistantContent: (sk) => this.getLastAssistantContent(sk)
|
|
131
134
|
});
|
|
@@ -142,7 +145,7 @@ var AgentManager = class {
|
|
|
142
145
|
});
|
|
143
146
|
}
|
|
144
147
|
isUserContextEnabledForSession(sessionKey) {
|
|
145
|
-
return Boolean(this.config.config?.userContext.enabled &&
|
|
148
|
+
return Boolean(this.config.config?.userContext.enabled && getSessionConfig(sessionKey)?.userContextMode !== "off");
|
|
146
149
|
}
|
|
147
150
|
computeBaseWorkspacePath() {
|
|
148
151
|
const cfg = this.config.config;
|
|
@@ -225,6 +228,7 @@ var AgentManager = class {
|
|
|
225
228
|
return {
|
|
226
229
|
workspace: this.baseWorkspacePath,
|
|
227
230
|
extensionRegistry: this.config.extensionRegistry,
|
|
231
|
+
endpointTools: this.config.endpointTools,
|
|
228
232
|
getCurrentContext: this.config.getCurrentContext,
|
|
229
233
|
hookRunner: this.config.hookRunner,
|
|
230
234
|
bus: this.config.bus,
|
|
@@ -271,8 +275,7 @@ var AgentManager = class {
|
|
|
271
275
|
for (const n of names) if (isValidSkillEnvVarName(n)) inst.skillEnvPassthroughKeys.add(n.trim());
|
|
272
276
|
},
|
|
273
277
|
installSkillFromSource: this.config.installSkillFromSource,
|
|
274
|
-
installSkillFromMarketplace: this.config.installSkillFromMarketplace
|
|
275
|
-
getCodeIntelligenceRuntime: (workspace) => this.workspaceRuntimes.getOrCreate(workspace, resolveEffectiveAgentProfileForSession(this.config.config, this.config.getCurrentContext?.()?.sessionKey).agentId).codeIntelligence
|
|
278
|
+
installSkillFromMarketplace: this.config.installSkillFromMarketplace
|
|
276
279
|
};
|
|
277
280
|
}
|
|
278
281
|
getMemoryManager() {
|
|
@@ -281,13 +284,6 @@ var AgentManager = class {
|
|
|
281
284
|
getMemoryManagerForSession(sessionKey) {
|
|
282
285
|
return this.getWorkspaceRuntimeForSession(sessionKey).memoryManager;
|
|
283
286
|
}
|
|
284
|
-
markCodeIntelligenceDirty(sessionKey, paths) {
|
|
285
|
-
if (paths.length === 0) return;
|
|
286
|
-
const instance = this.agents.get(sessionKey);
|
|
287
|
-
const config = this.config.config?.codeIntelligence;
|
|
288
|
-
if (!instance || !config?.enabled || !config.agentIds.includes(instance.effectiveProfile.agentId)) return;
|
|
289
|
-
this.getWorkspaceRuntimeForSession(sessionKey).codeIntelligence.markDirty(paths);
|
|
290
|
-
}
|
|
291
287
|
/** Build the bounded, policy-filtered context used for this model turn. */
|
|
292
288
|
prepareUserTurnContext(userMessage, sessionKey, turnId) {
|
|
293
289
|
return this.userContext.prepare(userMessage, sessionKey, turnId);
|
|
@@ -445,7 +441,6 @@ var AgentManager = class {
|
|
|
445
441
|
const contextInjection = "always";
|
|
446
442
|
const { contextFiles } = resolveBootstrapContextSync({
|
|
447
443
|
profileDir,
|
|
448
|
-
userProfilePath: resolveUserProfilePath(),
|
|
449
444
|
config: cfg,
|
|
450
445
|
sessionKey,
|
|
451
446
|
excludeHeartbeat: excludeHeartbeat ?? !heartbeatEnabled,
|
|
@@ -860,7 +855,6 @@ var AgentManager = class {
|
|
|
860
855
|
getMemoryManager: () => rt.memoryManager,
|
|
861
856
|
getSkillManager: () => rt.skillManager
|
|
862
857
|
});
|
|
863
|
-
if (this.config.config?.codeIntelligence?.enabled && this.config.config.codeIntelligence.agentIds.includes(profile.agentId)) rt.codeIntelligence.prime().catch(() => {});
|
|
864
858
|
const registeredToolNames = tools.map((t) => t.name);
|
|
865
859
|
const thinkingLevel = profile.thinkingDefault ?? this.config.thinkingLevel ?? "medium";
|
|
866
860
|
agent = new Agent({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { summarizeUserUnderstandingQuality } from "../../storage/sqlite/
|
|
3
|
+
import { summarizeUserUnderstandingQuality } from "../../storage/sqlite/user-context-quality-repository.js";
|
|
4
4
|
import "../../storage/sqlite/index.js";
|
|
5
5
|
import { resolveAdaptiveUnderstandingCadence } from "../memory/understanding/quality.js";
|
|
6
6
|
import { isAssistantTurnAborted, isAssistantTurnFailed } from "../orchestration/llm-turn-retry.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const MEMORY_REVIEW_USER_PROMPT = "Review the conversation above and identify durable user-understanding candidates.\n\nFocus on:\n1. Has the user revealed things about themselves \u2014 persona, desires, preferences, or personal details worth remembering?\n2. Has the user expressed expectations about how you should behave, their work style, emotional-support preferences, boundaries, or how they want you to communicate?\n3. Has the user explicitly corrected a prior assumption? Prefer the correction and do not preserve the contradicted interpretation.\n\nReturn JSON only, with this shape:\n{\"candidates\":[{\"kind\":\"preference\",\"content\":\"...\",\"confidence\":0.8,\"importance\":0.7,\"durability\":\"durable\",\"sensitivity\":\"normal\",\"disclosurePolicy\":\"referenceable\",\"tags\":[\"background-review\"]}]}\n\nAllowed kinds: preference, boundary, relationship, project_context, commitment, routine, personal_logistics, open_question, milestone, current_state, task_lesson, tool_preference, long_term_goal, derived_insight.\nOnly include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {\"candidates\":[]} when nothing qualifies.";
|
|
1
|
+
export declare const MEMORY_REVIEW_USER_PROMPT = "Review the conversation above and identify durable user-understanding candidates.\n\nFocus on:\n1. Has the user revealed things about themselves \u2014 persona, desires, preferences, or personal details worth remembering?\n2. Has the user expressed expectations about how you should behave, their work style, emotional-support preferences, boundaries, or how they want you to communicate?\n3. Has the user explicitly corrected a prior assumption? Prefer the correction and do not preserve the contradicted interpretation.\n\nReturn JSON only, with this shape:\n{\"candidates\":[{\"kind\":\"preference\",\"content\":\"...\",\"confidence\":0.8,\"importance\":0.7,\"durability\":\"durable\",\"sensitivity\":\"normal\",\"disclosurePolicy\":\"referenceable\",\"tags\":[\"background-review\"]}]}\n\nAllowed kinds: preference, boundary, relationship, project_context, commitment, routine, personal_logistics, open_question, milestone, current_state, task_lesson, tool_preference, long_term_goal, derived_insight.\nOnly include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {\"candidates\":[]} when nothing qualifies.\n\nDo not turn a request about the current task into user understanding. Exclude requested outputs, follow-up instructions, project-note edits, investigations, and other one-off work. Every candidate must be a complete standalone statement about the user or an enduring pattern; never return a clause fragment beginning with a connector such as \"and\", \"also\", \"\u5E76\u4E14\", \"\u4EE5\u53CA\", or \"\u7684\u4E8B\u9879\". Use long_term_goal only when the user states an enduring personal goal, not when they ask the assistant to create, update, investigate, summarize, or track something.";
|
|
2
2
|
export declare const UNDERSTANDING_REVIEW_SYSTEM_PROMPT = "You are the user-understanding synthesis stage for the same session. You do not chat with the user and cannot write storage directly. Extract only evidence-backed, durable candidates and return strict JSON matching the requested schema.";
|
|
@@ -10,7 +10,9 @@ Return JSON only, with this shape:
|
|
|
10
10
|
{"candidates":[{"kind":"preference","content":"...","confidence":0.8,"importance":0.7,"durability":"durable","sensitivity":"normal","disclosurePolicy":"referenceable","tags":["background-review"]}]}
|
|
11
11
|
|
|
12
12
|
Allowed kinds: preference, boundary, relationship, project_context, commitment, routine, personal_logistics, open_question, milestone, current_state, task_lesson, tool_preference, long_term_goal, derived_insight.
|
|
13
|
-
Only include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {"candidates":[]} when nothing qualifies
|
|
13
|
+
Only include facts supported by the conversation and likely to matter in a future session. A temporary mood or one-off reaction is current context, not durable identity; omit it unless the user describes a recurring pattern that will matter later. Never include passwords, tokens, credentials, or speculative diagnoses. Use {"candidates":[]} when nothing qualifies.
|
|
14
|
+
|
|
15
|
+
Do not turn a request about the current task into user understanding. Exclude requested outputs, follow-up instructions, project-note edits, investigations, and other one-off work. Every candidate must be a complete standalone statement about the user or an enduring pattern; never return a clause fragment beginning with a connector such as "and", "also", "并且", "以及", or "的事项". Use long_term_goal only when the user states an enduring personal goal, not when they ask the assistant to create, update, investigate, summarize, or track something.`;
|
|
14
16
|
const UNDERSTANDING_REVIEW_SYSTEM_PROMPT = `You are the user-understanding synthesis stage for the same session. You do not chat with the user and cannot write storage directly. Extract only evidence-backed, durable candidates and return strict JSON matching the requested schema.`;
|
|
15
17
|
//#endregion
|
|
16
18
|
export { MEMORY_REVIEW_USER_PROMPT, UNDERSTANDING_REVIEW_SYSTEM_PROMPT };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Agent } from '@earendil-works/pi-agent-core';
|
|
2
2
|
import type { Config } from '../../config/schema.js';
|
|
3
3
|
import type { MemoryManager } from '../memory/manager.js';
|
|
4
|
+
import type { UnderstandingCandidate } from '../memory/understanding/types.js';
|
|
4
5
|
import type { BackgroundReviewSettings } from './settings.js';
|
|
5
6
|
export interface RunBackgroundReviewParams {
|
|
6
7
|
sessionKey: string;
|
|
@@ -9,4 +10,5 @@ export interface RunBackgroundReviewParams {
|
|
|
9
10
|
memoryManager: MemoryManager;
|
|
10
11
|
getConfig: () => Config | undefined;
|
|
11
12
|
}
|
|
13
|
+
export declare function parseUnderstandingCandidates(raw: string): UnderstandingCandidate[];
|
|
12
14
|
export declare function runBackgroundReviewTurn(params: RunBackgroundReviewParams): Promise<void>;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
|
|
4
|
+
import "../../storage/sqlite/index.js";
|
|
3
5
|
import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
|
|
4
6
|
import { getApiKeySync, init_providers } from "../../providers/index.js";
|
|
5
7
|
import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
|
|
6
8
|
import { extractTextContent } from "../context/workspace.js";
|
|
7
9
|
import { resolveAgentTurnTimeoutMs, runAgentTurnWithTimeout } from "../orchestration/run-agent-turn-with-timeout.js";
|
|
8
10
|
import { isAssistantTurnAborted, isAssistantTurnFailed } from "../orchestration/llm-turn-retry.js";
|
|
11
|
+
import { isDurableUnderstandingCandidate } from "../../user-context/understandingQuality.js";
|
|
9
12
|
import { MEMORY_REVIEW_USER_PROMPT, UNDERSTANDING_REVIEW_SYSTEM_PROMPT } from "./prompts.js";
|
|
10
13
|
import { Agent } from "@earendil-works/pi-agent-core";
|
|
11
14
|
//#region src/agent/background-review/run-background-review.ts
|
|
@@ -22,14 +25,9 @@ const ALLOWED_UNDERSTANDING_KINDS = new Set([
|
|
|
22
25
|
"boundary",
|
|
23
26
|
"relationship",
|
|
24
27
|
"project_context",
|
|
25
|
-
"commitment",
|
|
26
28
|
"routine",
|
|
27
|
-
"personal_logistics",
|
|
28
|
-
"open_question",
|
|
29
|
-
"milestone",
|
|
30
29
|
"current_state",
|
|
31
30
|
"task_lesson",
|
|
32
|
-
"tool_preference",
|
|
33
31
|
"long_term_goal",
|
|
34
32
|
"derived_insight"
|
|
35
33
|
]);
|
|
@@ -61,21 +59,22 @@ function parseUnderstandingCandidates(raw) {
|
|
|
61
59
|
const item = value;
|
|
62
60
|
if (!ALLOWED_UNDERSTANDING_KINDS.has(item.kind)) continue;
|
|
63
61
|
if (typeof item.content !== "string" || item.content.trim().length < 4) continue;
|
|
62
|
+
const kind = item.kind;
|
|
63
|
+
if (!isDurableUnderstandingCandidate(kind, item.content)) continue;
|
|
64
64
|
const confidence = typeof item.confidence === "number" ? item.confidence : .65;
|
|
65
65
|
const importance = typeof item.importance === "number" ? item.importance : .5;
|
|
66
66
|
const durability = item.durability === "ephemeral" || item.durability === "recurring" ? item.durability : "durable";
|
|
67
67
|
const sensitivity = ALLOWED_SENSITIVITIES.has(item.sensitivity) ? item.sensitivity : "personal";
|
|
68
68
|
const disclosurePolicy = item.disclosurePolicy === "silent" || item.disclosurePolicy === "ask_before_reference" ? item.disclosurePolicy : "referenceable";
|
|
69
69
|
output.push({
|
|
70
|
-
kind
|
|
70
|
+
kind,
|
|
71
71
|
content: item.content.trim(),
|
|
72
72
|
confidence: Math.max(0, Math.min(1, confidence)),
|
|
73
73
|
importance: Math.max(0, Math.min(1, importance)),
|
|
74
74
|
explicitness: "inferred",
|
|
75
75
|
durability,
|
|
76
76
|
sensitivity,
|
|
77
|
-
disclosurePolicy
|
|
78
|
-
tags: Array.isArray(item.tags) ? item.tags.filter((tag) => typeof tag === "string").slice(0, 8) : ["background-review"]
|
|
77
|
+
disclosurePolicy
|
|
79
78
|
});
|
|
80
79
|
}
|
|
81
80
|
return output;
|
|
@@ -118,9 +117,11 @@ async function runUnderstandingReview(params) {
|
|
|
118
117
|
}
|
|
119
118
|
if (isAssistantTurnAborted(reviewAgent) || isAssistantTurnFailed(reviewAgent)) return;
|
|
120
119
|
const candidates = parseUnderstandingCandidates(lastAssistantText(reviewAgent));
|
|
120
|
+
const projectId = getSessionMetadata(sessionKey)?.projectId;
|
|
121
121
|
await memoryManager.applyUnderstandingCandidates(candidates, {
|
|
122
122
|
agentId: settings.agentId,
|
|
123
123
|
sessionKey,
|
|
124
|
+
...projectId ? { projectId } : {},
|
|
124
125
|
sourceText: "Background review of the current session transcript",
|
|
125
126
|
reviewSource: "background"
|
|
126
127
|
});
|
|
@@ -133,4 +134,4 @@ async function runBackgroundReviewTurn(params) {
|
|
|
133
134
|
await runUnderstandingReview(params);
|
|
134
135
|
}
|
|
135
136
|
//#endregion
|
|
136
|
-
export { runBackgroundReviewTurn };
|
|
137
|
+
export { parseUnderstandingCandidates, runBackgroundReviewTurn };
|
|
@@ -3,7 +3,6 @@ export declare function wasBootstrapContextInjected(sessionKey: string): boolean
|
|
|
3
3
|
export declare function markBootstrapContextInjected(sessionKey: string): void;
|
|
4
4
|
export declare function getOrLoadBootstrapFiles(params: {
|
|
5
5
|
profileDir: string;
|
|
6
|
-
userProfilePath?: string;
|
|
7
6
|
sessionKey: string;
|
|
8
7
|
}): Promise<WorkspaceBootstrapFile[]>;
|
|
9
8
|
export declare function clearBootstrapSnapshot(sessionKey: string): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { loadProfileBootstrapFiles
|
|
1
|
+
import { loadProfileBootstrapFiles } from "./load-bootstrap-files.js";
|
|
2
2
|
//#region src/agent/bootstrap/bootstrap-cache.ts
|
|
3
3
|
const cache = /* @__PURE__ */ new Map();
|
|
4
4
|
const bootstrapContextInjected = /* @__PURE__ */ new Set();
|
|
@@ -17,11 +17,10 @@ function markBootstrapContextInjected(sessionKey) {
|
|
|
17
17
|
}
|
|
18
18
|
async function getOrLoadBootstrapFiles(params) {
|
|
19
19
|
const existing = cache.get(params.sessionKey);
|
|
20
|
-
const files =
|
|
21
|
-
if (existing && existing.profileDir === params.profileDir &&
|
|
20
|
+
const files = loadProfileBootstrapFiles(params.profileDir);
|
|
21
|
+
if (existing && existing.profileDir === params.profileDir && bootstrapFilesEqual(existing.files, files)) return existing.files;
|
|
22
22
|
cache.set(params.sessionKey, {
|
|
23
23
|
profileDir: params.profileDir,
|
|
24
|
-
userProfilePath: params.userProfilePath,
|
|
25
24
|
files
|
|
26
25
|
});
|
|
27
26
|
return files;
|
|
@@ -3,20 +3,17 @@ import type { EmbeddedContextFile, WorkspaceBootstrapFile } from './types.js';
|
|
|
3
3
|
export { clearAllBootstrapSnapshots, clearBootstrapSnapshot } from './bootstrap-cache.js';
|
|
4
4
|
export declare function resolveBootstrapFilesSync(params: {
|
|
5
5
|
profileDir: string;
|
|
6
|
-
userProfilePath?: string;
|
|
7
6
|
sessionKey?: string;
|
|
8
7
|
excludeHeartbeat?: boolean;
|
|
9
8
|
}): WorkspaceBootstrapFile[];
|
|
10
9
|
export declare function resolveBootstrapFilesForRun(params: {
|
|
11
10
|
profileDir: string;
|
|
12
|
-
userProfilePath?: string;
|
|
13
11
|
sessionKey?: string;
|
|
14
12
|
excludeHeartbeat?: boolean;
|
|
15
13
|
warn?: (message: string) => void;
|
|
16
14
|
}): Promise<WorkspaceBootstrapFile[]>;
|
|
17
15
|
export declare function resolveBootstrapContextSync(params: {
|
|
18
16
|
profileDir: string;
|
|
19
|
-
userProfilePath?: string;
|
|
20
17
|
config?: Config;
|
|
21
18
|
sessionKey?: string;
|
|
22
19
|
excludeHeartbeat?: boolean;
|
|
@@ -27,7 +24,6 @@ export declare function resolveBootstrapContextSync(params: {
|
|
|
27
24
|
};
|
|
28
25
|
export declare function resolveBootstrapContextForRun(params: {
|
|
29
26
|
profileDir: string;
|
|
30
|
-
userProfilePath?: string;
|
|
31
27
|
config?: Config;
|
|
32
28
|
sessionKey?: string;
|
|
33
29
|
excludeHeartbeat?: boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_HEARTBEAT_FILENAME } from "../context/workspace.js";
|
|
2
|
-
import { loadProfileBootstrapFiles
|
|
2
|
+
import { loadProfileBootstrapFiles } from "./load-bootstrap-files.js";
|
|
3
3
|
import { clearAllBootstrapSnapshots, clearBootstrapSnapshot, getOrLoadBootstrapFiles, markBootstrapContextInjected, wasBootstrapContextInjected } from "./bootstrap-cache.js";
|
|
4
4
|
import { buildBootstrapContextFiles, resolveBootstrapMaxChars, resolveBootstrapTotalMaxChars } from "./bootstrap-context.js";
|
|
5
5
|
import { filterBootstrapFilesForSession } from "./filter-bootstrap-files.js";
|
|
@@ -9,15 +9,14 @@ function filterHeartbeatBootstrapFile(files, exclude) {
|
|
|
9
9
|
return files.filter((file) => file.name !== DEFAULT_HEARTBEAT_FILENAME);
|
|
10
10
|
}
|
|
11
11
|
function resolveBootstrapFilesSync(params) {
|
|
12
|
-
return filterHeartbeatBootstrapFile(filterBootstrapFilesForSession(
|
|
12
|
+
return filterHeartbeatBootstrapFile(filterBootstrapFilesForSession(loadProfileBootstrapFiles(params.profileDir), params.sessionKey), params.excludeHeartbeat ?? false);
|
|
13
13
|
}
|
|
14
14
|
async function resolveBootstrapFilesForRun(params) {
|
|
15
15
|
const sessionKey = params.sessionKey;
|
|
16
16
|
return filterHeartbeatBootstrapFile(filterBootstrapFilesForSession(sessionKey ? await getOrLoadBootstrapFiles({
|
|
17
17
|
profileDir: params.profileDir,
|
|
18
|
-
userProfilePath: params.userProfilePath,
|
|
19
18
|
sessionKey
|
|
20
|
-
}) :
|
|
19
|
+
}) : loadProfileBootstrapFiles(params.profileDir), sessionKey), params.excludeHeartbeat ?? false);
|
|
21
20
|
}
|
|
22
21
|
function resolveBootstrapContextSync(params) {
|
|
23
22
|
const mode = params.contextInjection ?? "always";
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import { isCronSessionKey, isSubagentSessionKey } from "../../routing/session-key-utils.js";
|
|
2
2
|
import { init_session_key } from "../../routing/session-key.js";
|
|
3
|
-
import { USER_PROFILE_FILENAME, init_paths } from "../../config/paths.js";
|
|
4
3
|
import { DEFAULT_AGENTS_FILENAME, DEFAULT_IDENTITY_FILENAME, DEFAULT_SOUL_FILENAME, DEFAULT_TOOLS_FILENAME } from "../context/workspace.js";
|
|
5
4
|
//#region src/agent/bootstrap/filter-bootstrap-files.ts
|
|
6
|
-
init_paths();
|
|
7
5
|
init_session_key();
|
|
8
6
|
const MINIMAL_BOOTSTRAP_ALLOWLIST = new Set([
|
|
9
7
|
DEFAULT_AGENTS_FILENAME,
|
|
10
8
|
DEFAULT_TOOLS_FILENAME,
|
|
11
9
|
DEFAULT_SOUL_FILENAME,
|
|
12
|
-
DEFAULT_IDENTITY_FILENAME
|
|
13
|
-
USER_PROFILE_FILENAME
|
|
10
|
+
DEFAULT_IDENTITY_FILENAME
|
|
14
11
|
]);
|
|
15
12
|
/** Subagent and cron sessions load only the minimal identity and instruction profile. */
|
|
16
13
|
function filterBootstrapFilesForSession(files, sessionKey) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { WorkspaceBootstrapFile } from './types.js';
|
|
2
|
-
export declare function loadUserProfileBootstrapFile(userProfilePath: string | undefined): WorkspaceBootstrapFile[];
|
|
3
2
|
/**
|
|
4
3
|
* Load bootstrap profile Markdown from `agents/<id>/profile/`.
|
|
5
4
|
* Required files emit missing markers; optional files are omitted when absent.
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { USER_PROFILE_FILENAME, init_paths } from "../../config/paths.js";
|
|
2
1
|
import { DEFAULT_AGENTS_FILENAME, DEFAULT_HEARTBEAT_FILENAME, DEFAULT_IDENTITY_FILENAME, DEFAULT_SOUL_FILENAME, DEFAULT_TOOLS_FILENAME, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET, stripFrontMatter } from "../context/workspace.js";
|
|
3
2
|
import { join, resolve } from "node:path";
|
|
4
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
4
|
//#region src/agent/bootstrap/load-bootstrap-files.ts
|
|
6
|
-
init_paths();
|
|
7
5
|
const PROFILE_LOAD_ORDER = [
|
|
8
6
|
DEFAULT_AGENTS_FILENAME,
|
|
9
7
|
DEFAULT_SOUL_FILENAME,
|
|
@@ -19,17 +17,6 @@ function readProfileFile(filePath) {
|
|
|
19
17
|
return null;
|
|
20
18
|
}
|
|
21
19
|
}
|
|
22
|
-
function loadUserProfileBootstrapFile(userProfilePath) {
|
|
23
|
-
if (!userProfilePath) return [];
|
|
24
|
-
const filePath = resolve(userProfilePath);
|
|
25
|
-
const content = readProfileFile(filePath);
|
|
26
|
-
return content !== null ? [{
|
|
27
|
-
name: USER_PROFILE_FILENAME,
|
|
28
|
-
path: filePath,
|
|
29
|
-
content,
|
|
30
|
-
missing: false
|
|
31
|
-
}] : [];
|
|
32
|
-
}
|
|
33
20
|
/**
|
|
34
21
|
* Load bootstrap profile Markdown from `agents/<id>/profile/`.
|
|
35
22
|
* Required files emit missing markers; optional files are omitted when absent.
|
|
@@ -55,4 +42,4 @@ function loadProfileBootstrapFiles(profileDir) {
|
|
|
55
42
|
return result;
|
|
56
43
|
}
|
|
57
44
|
//#endregion
|
|
58
|
-
export { loadProfileBootstrapFiles
|
|
45
|
+
export { loadProfileBootstrapFiles };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentProfileMarkdownFilename } from '../context/workspace.js';
|
|
2
|
-
export type BootstrapFileName = AgentProfileMarkdownFilename
|
|
2
|
+
export type BootstrapFileName = AgentProfileMarkdownFilename;
|
|
3
3
|
export type WorkspaceBootstrapFile = {
|
|
4
4
|
name: BootstrapFileName;
|
|
5
5
|
path: string;
|
|
@@ -16,5 +16,5 @@ export declare function formatAgentRunErrorForClient(rawError: string, context?:
|
|
|
16
16
|
provider?: string;
|
|
17
17
|
modelRef?: string;
|
|
18
18
|
}): string;
|
|
19
|
-
/** Human-readable text for TUI/CLI when
|
|
19
|
+
/** Human-readable text for TUI/CLI when a run event carries structured JSON. */
|
|
20
20
|
export declare function formatAgentRunErrorForDisplay(content: string): string;
|
|
@@ -87,7 +87,7 @@ function formatAgentRunErrorForClient(rawError, context) {
|
|
|
87
87
|
}
|
|
88
88
|
return JSON.stringify(payload);
|
|
89
89
|
}
|
|
90
|
-
/** Human-readable text for TUI/CLI when
|
|
90
|
+
/** Human-readable text for TUI/CLI when a run event carries structured JSON. */
|
|
91
91
|
function formatAgentRunErrorForDisplay(content) {
|
|
92
92
|
const trimmed = content.trim();
|
|
93
93
|
if (trimmed.startsWith("Error: ")) return trimmed.slice(7);
|
|
@@ -34,7 +34,7 @@ Be the assistant you'd actually want to talk to. Concise when needed, thorough w
|
|
|
34
34
|
|
|
35
35
|
## Continuity
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
These files define your identity and operating principles. Durable user context is provided separately by xopc.
|
|
38
38
|
|
|
39
39
|
If you change this file, tell the user — it's your soul, and they should know.
|
|
40
40
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AgentToolResult } from '@earendil-works/pi-agent-core';
|
|
2
|
+
import type { EndpointToolRuntime } from '../../endpoint-tools/index.js';
|
|
3
|
+
import type { ExternalToolDescriptor, ExternalToolExecutionContext, ExternalToolProvider, ExternalToolSearchHit, ExternalToolTurnContext } from './types.js';
|
|
4
|
+
export interface EndpointToolProviderDeps {
|
|
5
|
+
runtime: EndpointToolRuntime;
|
|
6
|
+
getCurrentContext: () => ExternalToolTurnContext | null;
|
|
7
|
+
}
|
|
8
|
+
export declare class EndpointToolProvider implements ExternalToolProvider {
|
|
9
|
+
private readonly deps;
|
|
10
|
+
readonly source: "endpoint";
|
|
11
|
+
constructor(deps: EndpointToolProviderDeps);
|
|
12
|
+
search(_query: string): Promise<ExternalToolSearchHit[]>;
|
|
13
|
+
describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
|
|
14
|
+
execute(toolRef: string, args: Record<string, unknown>, _approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<AgentToolResult<Record<string, unknown>>>;
|
|
15
|
+
private currentEndpoint;
|
|
16
|
+
private resolve;
|
|
17
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { externalToolRef, parseExternalToolRef } from "./refs.js";
|
|
2
|
+
//#region src/agent/external-tools/endpoint-provider.ts
|
|
3
|
+
function contentText(content) {
|
|
4
|
+
if (content.type === "text") return content.text;
|
|
5
|
+
if (content.type === "json") return JSON.stringify(content.value, null, 2);
|
|
6
|
+
return `[File: ${content.name}, ${content.mimeType}, ${content.size} bytes, id=${content.fileId}]`;
|
|
7
|
+
}
|
|
8
|
+
var EndpointToolProvider = class {
|
|
9
|
+
source = "endpoint";
|
|
10
|
+
constructor(deps) {
|
|
11
|
+
this.deps = deps;
|
|
12
|
+
}
|
|
13
|
+
async search(_query) {
|
|
14
|
+
const endpoint = this.currentEndpoint();
|
|
15
|
+
if (!endpoint) return [];
|
|
16
|
+
return endpoint.tools.map(({ descriptor }) => ({
|
|
17
|
+
toolRef: externalToolRef(this.source, endpoint.endpointId, descriptor.name),
|
|
18
|
+
source: this.source,
|
|
19
|
+
namespace: endpoint.endpointId,
|
|
20
|
+
title: descriptor.title,
|
|
21
|
+
summary: `${descriptor.description} (${endpoint.displayName})`
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
async describe(toolRef) {
|
|
25
|
+
const resolved = this.resolve(toolRef);
|
|
26
|
+
if (!resolved) return void 0;
|
|
27
|
+
return {
|
|
28
|
+
toolRef,
|
|
29
|
+
source: this.source,
|
|
30
|
+
namespace: resolved.endpointId,
|
|
31
|
+
title: resolved.tool.descriptor.title,
|
|
32
|
+
summary: `${resolved.tool.descriptor.description} (${resolved.displayName})`,
|
|
33
|
+
description: resolved.tool.descriptor.description,
|
|
34
|
+
inputSchema: resolved.tool.descriptor.inputSchema
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async execute(toolRef, args, _approvalId, context) {
|
|
38
|
+
const resolved = this.resolve(toolRef);
|
|
39
|
+
if (!resolved) throw new Error(`Endpoint tool is unavailable for this turn: ${toolRef}`);
|
|
40
|
+
const result = await this.deps.runtime.invocations.invoke({
|
|
41
|
+
endpointId: resolved.endpointId,
|
|
42
|
+
toolCallId: context.toolCallId,
|
|
43
|
+
toolName: resolved.tool.descriptor.name,
|
|
44
|
+
arguments: args,
|
|
45
|
+
descriptorRevision: resolved.tool.revision,
|
|
46
|
+
signal: context.signal,
|
|
47
|
+
onProgress: (progress) => {
|
|
48
|
+
context.onUpdate?.({
|
|
49
|
+
content: [{
|
|
50
|
+
type: "text",
|
|
51
|
+
text: progress.message ?? "Endpoint tool is running"
|
|
52
|
+
}],
|
|
53
|
+
details: {
|
|
54
|
+
endpointId: resolved.endpointId,
|
|
55
|
+
...progress.percent === void 0 ? {} : { percent: progress.percent }
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
const files = result.content.filter((item) => item.type === "file");
|
|
61
|
+
return {
|
|
62
|
+
content: result.content.map((item) => ({
|
|
63
|
+
type: "text",
|
|
64
|
+
text: contentText(item)
|
|
65
|
+
})),
|
|
66
|
+
details: {
|
|
67
|
+
endpointId: resolved.endpointId,
|
|
68
|
+
endpointToolName: resolved.tool.descriptor.name,
|
|
69
|
+
...result.details ?? {},
|
|
70
|
+
...files.length === 0 ? {} : { endpointFiles: files }
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
currentEndpoint() {
|
|
75
|
+
const origin = this.deps.getCurrentContext()?.origin;
|
|
76
|
+
if (origin?.type !== "endpoint") return void 0;
|
|
77
|
+
return this.deps.runtime.registry.get(origin.endpointId);
|
|
78
|
+
}
|
|
79
|
+
resolve(toolRef) {
|
|
80
|
+
const parsed = parseExternalToolRef(toolRef, this.source);
|
|
81
|
+
if (!parsed) return void 0;
|
|
82
|
+
const endpoint = this.currentEndpoint();
|
|
83
|
+
if (!endpoint || endpoint.endpointId !== parsed.namespace) return void 0;
|
|
84
|
+
const tool = this.deps.runtime.registry.getTool(endpoint.endpointId, parsed.toolName);
|
|
85
|
+
return tool ? {
|
|
86
|
+
endpointId: endpoint.endpointId,
|
|
87
|
+
displayName: endpoint.displayName,
|
|
88
|
+
tool
|
|
89
|
+
} : void 0;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
//#endregion
|
|
93
|
+
export { EndpointToolProvider };
|
|
@@ -44,7 +44,7 @@ function createExternalToolGatewayTools(providers) {
|
|
|
44
44
|
{
|
|
45
45
|
name: EXTERNAL_TOOL_NAMES.search,
|
|
46
46
|
label: "🔎 External Tool Search",
|
|
47
|
-
description: "Search MCP, connected-app, extension,
|
|
47
|
+
description: "Search MCP, connected-app, extension, remote-memory, and current-endpoint tools. Use concise English capability keywords. Returns compact references only; call xopc_tool_describe before execution.",
|
|
48
48
|
parameters: ToolSearchSchema,
|
|
49
49
|
async execute(_toolCallId, params) {
|
|
50
50
|
return textResult(await service.search(params));
|
|
@@ -2,15 +2,14 @@ import type { Config } from '../../config/schema.js';
|
|
|
2
2
|
import type { ExtensionHookRunner } from '../../extensions/index.js';
|
|
3
3
|
import type { ExtensionRegistry } from '../../extensions/types/index.js';
|
|
4
4
|
import type { MemoryManager } from '../memory/manager.js';
|
|
5
|
+
import type { EndpointToolRuntime } from '../../endpoint-tools/index.js';
|
|
5
6
|
import type { ToolExecutorConfig } from '../tools/executor.js';
|
|
7
|
+
import type { ExternalToolTurnContext } from './types.js';
|
|
6
8
|
export interface DefaultExternalToolGatewayDeps {
|
|
7
9
|
workspace: string;
|
|
8
10
|
getConfig: () => Config | undefined;
|
|
9
|
-
getCurrentContext: () =>
|
|
10
|
-
|
|
11
|
-
chatId: string;
|
|
12
|
-
sessionKey: string;
|
|
13
|
-
} | null;
|
|
11
|
+
getCurrentContext: () => ExternalToolTurnContext | null;
|
|
12
|
+
endpointTools?: EndpointToolRuntime;
|
|
14
13
|
agentId?: string;
|
|
15
14
|
extensionRegistry?: ExtensionRegistry;
|
|
16
15
|
disabledTools?: Set<string>;
|
|
@@ -4,9 +4,10 @@ import { ExternalToolService } from "./service.js";
|
|
|
4
4
|
import { EXTERNAL_TOOL_NAMES, createExternalToolGatewayTools } from "./gateway-tools.js";
|
|
5
5
|
import { McpToolProvider } from "./mcp-provider.js";
|
|
6
6
|
import { MemoryToolProvider } from "./memory-provider.js";
|
|
7
|
+
import { EndpointToolProvider } from "./endpoint-provider.js";
|
|
7
8
|
//#region src/agent/external-tools/index.ts
|
|
8
9
|
function createDefaultExternalToolGatewayTools(deps) {
|
|
9
|
-
|
|
10
|
+
const providers = [
|
|
10
11
|
new McpToolProvider({
|
|
11
12
|
workspace: deps.workspace,
|
|
12
13
|
getConfig: deps.getConfig,
|
|
@@ -34,7 +35,12 @@ function createDefaultExternalToolGatewayTools(deps) {
|
|
|
34
35
|
hookRunner: deps.hookRunner,
|
|
35
36
|
toolExecutorConfig: deps.toolExecutorConfig
|
|
36
37
|
})
|
|
37
|
-
]
|
|
38
|
+
];
|
|
39
|
+
if (deps.endpointTools) providers.push(new EndpointToolProvider({
|
|
40
|
+
runtime: deps.endpointTools,
|
|
41
|
+
getCurrentContext: deps.getCurrentContext
|
|
42
|
+
}));
|
|
43
|
+
return createExternalToolGatewayTools(providers);
|
|
38
44
|
}
|
|
39
45
|
//#endregion
|
|
40
46
|
export { EXTERNAL_TOOL_NAMES, ExternalToolService, createDefaultExternalToolGatewayTools };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AgentToolResult, AgentToolUpdateCallback } from '@earendil-works/pi-agent-core';
|
|
2
|
-
|
|
2
|
+
import type { TurnOrigin } from '@xopcai/endpoint-tools-protocol';
|
|
3
|
+
export declare const EXTERNAL_TOOL_SOURCES: readonly ["mcp", "composio", "extension", "memory", "endpoint"];
|
|
3
4
|
export type ExternalToolSource = (typeof EXTERNAL_TOOL_SOURCES)[number];
|
|
4
5
|
export interface ExternalToolSearchHit {
|
|
5
6
|
toolRef: string;
|
|
@@ -20,6 +21,12 @@ export interface ExternalToolExecutionContext {
|
|
|
20
21
|
signal?: AbortSignal;
|
|
21
22
|
onUpdate?: AgentToolUpdateCallback<Record<string, unknown>>;
|
|
22
23
|
}
|
|
24
|
+
export interface ExternalToolTurnContext {
|
|
25
|
+
channel: string;
|
|
26
|
+
chatId: string;
|
|
27
|
+
sessionKey: string;
|
|
28
|
+
origin: TurnOrigin;
|
|
29
|
+
}
|
|
23
30
|
export interface ExternalToolProvider {
|
|
24
31
|
readonly source: ExternalToolSource;
|
|
25
32
|
search(query: string): Promise<ExternalToolSearchHit[]>;
|
|
@@ -83,6 +83,10 @@ var InboundLoop = class {
|
|
|
83
83
|
chatId: context.chatId,
|
|
84
84
|
senderId: context.senderId || "",
|
|
85
85
|
isGroup: context.isGroup || false,
|
|
86
|
+
origin: {
|
|
87
|
+
type: "channel",
|
|
88
|
+
channel: context.channel
|
|
89
|
+
},
|
|
86
90
|
metadata: { transcribedVoice: msg.metadata?.transcribedVoice === true }
|
|
87
91
|
};
|
|
88
92
|
const sessionMetadata = await this.cfg.sessionStore.getMetadata(sessionContext.sessionKey).catch(() => null);
|