@xopcai/xopc 0.0.218 → 0.0.220
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-DF2dYXG1.js → activity-store-DeKZ36Jy.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Dw9rF5o1.js → agent-avatar-dicebear-D0hZfdkn.js} +1 -1
- package/dist/gateway/static/root/assets/agents-Bu0NfWuh.js +68 -0
- package/dist/gateway/static/root/assets/{api-_H0Bam-t.js → api-yLnYUedB.js} +1 -1
- package/dist/gateway/static/root/assets/app-management-settings-panel-C2kZNEHz.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-DQ7H35sN.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-Tty2xaUG.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-DZCOhXch.js → archive-plugin-CBArbTPH.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-Bjb0FH2B.js → attachment-load-oc6DRj4G.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-D4N3ZDhu.js → automations-page-CHPEUpz8.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-9uYkHmdI.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-uXPt0s47.js → binary-plugins-BRBd0X7_.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-gukkIEro.js → block-editor-ZgM-Z4Qv.js} +47 -47
- package/dist/gateway/static/root/assets/browser-settings-page-BT3mEm00.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-DAhdS-XZ.js → browser-workflow-inputs-DxD74a4c.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-LKjYzXS_.js → browser-workflows-page-Dpc7NqZf.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DHlfRj4M.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-BBUkH833.js → capability-presets-api-B9ID97j6.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-D2FkREUX.js +3 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-E5mo8M3a.js → channel-recipient-api-DCNn6MWL.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-D4YcKMtf.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-B8XWrzKM.js +1 -0
- package/dist/gateway/static/root/assets/chat-terminal-dock-MvNpjcUs.js +36 -0
- package/dist/gateway/static/root/assets/connectors-page-Bd6K9bDk.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-BGNuaqvI.js → cron-expression-BSXX9uY0.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-k7mkklMU.js → date-picker-CiHNkkIS.js} +1 -1
- package/dist/gateway/static/root/assets/dependency-picker-DQyh2ZXE.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-p9EZyGzV.js → desktop-pet-DnAHU-zA.js} +1 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-DUdhIBBB.js +1 -0
- package/dist/gateway/static/root/assets/directory-picker-path-field-B3gFQt8x.js +1 -0
- package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Cd4BMKm_.js → extension-debug-page-Lq-gRApw.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CzEGCkOa.js → extension-page-D0ROxJmY.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-B2tS6mFy.js +1 -0
- package/dist/gateway/static/root/assets/eye-CABVeTq0.js +1 -0
- package/dist/gateway/static/root/assets/eye-off-DEAzt3g1.js +1 -0
- package/dist/gateway/static/root/assets/file-code-corner-byQA1VfD.js +1 -0
- package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-DJqWfVi6.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-swr-DNrttVr2.js → gateway-config-swr-CnwF9Vso.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-B3thenPX.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-B1vD3vRb.js → gateway-startup-retry-DdJJZR8M.js} +1 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-C_g-ZGSE.js +1 -0
- package/dist/gateway/static/root/assets/home-page-Cgwx66kc.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-BTR0Wk_k.js → image-generation-api-Dtt9M5qz.js} +1 -1
- package/dist/gateway/static/root/assets/index-Cf0qTkBK.css +2 -0
- package/dist/gateway/static/root/assets/index-V9g9-SWT.js +108 -0
- package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +1 -0
- package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CYlS4RGA.js → keyboard-shortcuts-settings-cJqkmQdP.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-CmjLMdly.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CNppYVew.js → local-apps-page-BiuP2pkl.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-gf9Bg2gb.js → locale-store-D3Q2yEAb.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-BTlxGPho.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-IYk9xLgt.js → management-settings-Z1gJUwP_.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-D8e6pRMH.js → markdown-split-DuOmpGgE.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-D0fiJjBQ.js → markdown-view-WYArkdrc.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-CCq6TtEf.js → media-plugins-DKPh3Mud.js} +1 -1
- package/dist/gateway/static/root/assets/messages-BQHpB4VI.js +3 -0
- package/dist/gateway/static/root/assets/{notes-api-BBtWnlUU.js → notes-api-DMEon7Zv.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-BKe1xa3U.js → notes-page-BG4gV8WG.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-D3LMBO2X.js +4 -0
- package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-CsNVTKC0.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-DXe5iWI6.js → product-open-page-BjJf4QOB.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-C59tYJG-.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-Di7W-Fg8.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-xj5gOva_.js → registry-api-DRyvynb5.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BYOKveWT.js +1 -0
- package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BJTvmBCA.js → runtime-tools-settings-panel-DC6t_-db.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-DvGBa_7R.js → schema-form-DSTWtpjp.js} +1 -1
- package/dist/gateway/static/root/assets/search-DA7gz22f.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-CJMNQsxK.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-FJxZw08y.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-ZzEMNLYS.js +1 -0
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-sbef7GTm.js → settings-loading-skeleton-D7-bkbcW.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-BNGxxXZe.js → settings-page-PaTpLbmi.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Bnpim6NY.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-C1523ij3.js → share-preview-page-Cxcw0ksa.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-DBqmV7ZY.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-UgLQaWoz.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Dby4iAYe.js +2 -0
- package/dist/gateway/static/root/assets/{skills-page.utils-Ditgz7Vo.js → skills-page.utils-nlzJ5Y1V.js} +1 -1
- package/dist/gateway/static/root/assets/system-settings-panel-vOsgnzDl.js +1 -0
- package/dist/gateway/static/root/assets/task-detail-page-CRy8Wl5g.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-DgSjes3O.js → theme-store-CvnEHGyP.js} +1 -1
- package/dist/gateway/static/root/assets/typed-models-lib-q5-Vfqd8.js +1 -0
- package/dist/gateway/static/root/assets/{use-autosave-Bp_qFZkl.js → use-autosave-BTNZHulv.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-BT8F4mh5.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-hbzDfErG.js → voice-api-key-field-DDJ2-3Tx.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-DZVib-04.js → work-discovery-overlay-DV_qiKSD.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C2RKay1p.js → workflow-run-setup-panel--AcvRw1w.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-CwvskVvU.js +5 -0
- package/dist/gateway/static/root/index.html +21 -12
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/new-session.js +99 -0
- package/dist/packages/gateway-contract/src/tasks.js +5 -0
- package/dist/packages/gateway-contract/src/user-message-display.js +55 -0
- package/dist/src/agent/agent-manager.js +5 -4
- package/dist/src/agent/background-review/prompts.d.ts +1 -1
- package/dist/src/agent/background-review/prompts.js +2 -2
- package/dist/src/agent/background-review/run-background-review.js +144 -16
- package/dist/src/agent/embedded/model-runtime.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +3 -1
- package/dist/src/agent/inbound/turn-dispatcher.js +2 -1
- package/dist/src/agent/ipc/inbox.js +1 -1
- package/dist/src/agent/memory/context/types.d.ts +1 -1
- package/dist/src/agent/memory/manager.d.ts +2 -1
- package/dist/src/agent/memory/manager.js +2 -6
- package/dist/src/agent/memory/understanding/service.d.ts +1 -0
- package/dist/src/agent/memory/understanding/service.js +179 -36
- package/dist/src/agent/memory/understanding/types.d.ts +6 -0
- package/dist/src/agent/messaging/command-handler.d.ts +2 -0
- package/dist/src/agent/messaging/command-handler.js +3 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -0
- package/dist/src/agent/service/direct-turn-helpers.js +13 -3
- package/dist/src/agent/service/process-direct-streaming.d.ts +2 -1
- package/dist/src/agent/service/process-direct-streaming.js +12 -11
- package/dist/src/agent/service.js +2 -2
- package/dist/src/agent/session/session-config-service.d.ts +1 -0
- package/dist/src/agent/session/session-config-service.js +11 -0
- package/dist/src/agent/session/session-inspector.d.ts +1 -0
- package/dist/src/agent/session/session-inspector.js +2 -1
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/source-context/budget.d.ts +3 -0
- package/dist/src/agent/source-context/budget.js +21 -0
- package/dist/src/agent/source-context/index.js +3 -3
- package/dist/src/agent/source-context/injector.d.ts +2 -2
- package/dist/src/agent/source-context/injector.js +19 -9
- package/dist/src/agent/source-context/types.d.ts +16 -0
- package/dist/src/agent/source-context/types.js +25 -1
- package/dist/src/agent/tasks/task-judge-service.js +3 -3
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +19 -2
- package/dist/src/agent/tools/xopc-use-tool.js +62 -2
- package/dist/src/ai-assist/text-assist.js +1 -1
- package/dist/src/auth/credentials.js +2 -2
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +2 -2
- package/dist/src/browser/backend-from-config.d.ts +8 -0
- package/dist/src/browser/backend-from-config.js +16 -1
- package/dist/src/browser/providers/browser-ext-install.d.ts +3 -2
- package/dist/src/browser/providers/browser-ext-install.js +5 -3
- package/dist/src/chat-commands/builtins/review.js +11 -2
- package/dist/src/chat-commands/builtins/understanding.js +11 -4
- package/dist/src/chat-commands/types.d.ts +4 -0
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.d.ts +20 -20
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
- package/dist/src/connectors/connected-source-understanding.js +87 -38
- package/dist/src/connectors/learning-coordinator.js +68 -13
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/chat-stream/mapper.js +18 -0
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/routes/agent-stream.js +12 -2
- package/dist/src/gateway/hono/routes/commands-skills.js +1 -0
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +46 -2
- package/dist/src/gateway/hono/routes/session-input-handler.js +23 -3
- package/dist/src/gateway/hono/routes/sessions.js +17 -20
- package/dist/src/gateway/hono/routes/tasks.js +25 -0
- package/dist/src/gateway/hono/routes/understanding-sources.d.ts +18 -0
- package/dist/src/gateway/hono/routes/understanding-sources.js +165 -36
- package/dist/src/gateway/hono/routes/work-discovery.js +13 -3
- package/dist/src/gateway/hono/routes/workflows.js +2 -2
- package/dist/src/gateway/hono/routes/you.js +71 -4
- package/dist/src/gateway/service/agent-runner.d.ts +11 -2
- package/dist/src/gateway/service/agent-runner.js +27 -1
- package/dist/src/gateway/service/config-coordinator.js +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -0
- package/dist/src/gateway/service/run-gateway-agent.js +15 -9
- package/dist/src/gateway/service/session-input-coordinator.d.ts +8 -2
- package/dist/src/gateway/service/session-input-coordinator.js +62 -3
- package/dist/src/gateway/service/sessions-api.d.ts +10 -0
- package/dist/src/gateway/service/sessions-api.js +3 -0
- package/dist/src/gateway/service.d.ts +3 -2
- package/dist/src/gateway/service.js +27 -16
- package/dist/src/gateway/user-turn-input.d.ts +2 -0
- package/dist/src/gateway/xopc-cloud-capability-setup.d.ts +3 -2
- package/dist/src/gateway/xopc-cloud-capability-setup.js +16 -3
- package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +6 -0
- package/dist/src/knowledge/connected-knowledge-pipeline.js +35 -4
- package/dist/src/knowledge/connected-understanding-pipeline.d.ts +1 -1
- package/dist/src/knowledge/connected-understanding-pipeline.js +4 -2
- package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
- package/dist/src/providers/index.js +2 -2
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/register-runtime-providers.js +1 -1
- package/dist/src/retrieval/queryProfile.d.ts +3 -0
- package/dist/src/retrieval/queryProfile.js +20 -2
- package/dist/src/session/client-history.d.ts +11 -0
- package/dist/src/session/client-history.js +24 -2
- package/dist/src/session/config-types.d.ts +1 -1
- package/dist/src/session/session-title.js +2 -3
- package/dist/src/session/store.js +1 -0
- package/dist/src/session/transcript-outline.js +5 -2
- package/dist/src/session/types.d.ts +1 -0
- package/dist/src/session/user-message-display.d.ts +4 -0
- package/dist/src/session/user-message-display.js +22 -0
- package/dist/src/storage/sqlite/context-extraction-repository.d.ts +57 -0
- package/dist/src/storage/sqlite/context-extraction-repository.js +119 -0
- package/dist/src/storage/sqlite/context-relation-repository.d.ts +50 -0
- package/dist/src/storage/sqlite/context-relation-repository.js +97 -0
- package/dist/src/storage/sqlite/index.d.ts +6 -4
- package/dist/src/storage/sqlite/index.js +7 -5
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +5 -1
- package/dist/src/storage/sqlite/knowledge-repository.js +16 -1
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +2 -0
- package/dist/src/storage/sqlite/memory-records-repository.js +21 -1
- package/dist/src/storage/sqlite/migrations/126_focus_context_governance.sql +72 -0
- package/dist/src/storage/sqlite/migrations/127_context_object_origin.sql +36 -0
- package/dist/src/storage/sqlite/migrations/128_context_extraction.sql +73 -0
- package/dist/src/storage/sqlite/migrations/129_focus_versions.sql +51 -0
- package/dist/src/storage/sqlite/migrations/130_context_evidence_provenance.sql +18 -0
- package/dist/src/storage/sqlite/migrations/131_session_input_contexts.sql +2 -0
- package/dist/src/storage/sqlite/migrations/132_transcript_source_context_metadata.sql +34 -0
- package/dist/src/storage/sqlite/migrations/133_archive_legacy_work_discovery_profile_facts.sql +11 -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/session-input-repository.d.ts +8 -0
- package/dist/src/storage/sqlite/session-input-repository.js +19 -7
- package/dist/src/storage/sqlite/session-repository.js +2 -2
- package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/session-turn-replace-repository.js +3 -2
- package/dist/src/storage/sqlite/transcript-repository.js +29 -3
- package/dist/src/storage/sqlite/user-context-repository.d.ts +4 -1
- package/dist/src/storage/sqlite/user-context-repository.js +65 -29
- package/dist/src/tasks/home-query-service.d.ts +14 -0
- package/dist/src/tasks/home-query-service.js +19 -2
- package/dist/src/tasks/index.d.ts +1 -0
- package/dist/src/tasks/index.js +2 -1
- package/dist/src/tasks/task-deletion-service.d.ts +21 -0
- package/dist/src/tasks/task-deletion-service.js +35 -0
- package/dist/src/tasks/task-repository.js +22 -1
- package/dist/src/tui/backends/embedded-backend.js +5 -3
- package/dist/src/tui/backends/gateway-realtime-backend.js +5 -3
- package/dist/src/tui/chat-history.js +2 -1
- package/dist/src/tui/tui-agent-events.js +4 -2
- package/dist/src/tui/tui-commands.d.ts +1 -0
- package/dist/src/tui/tui-commands.js +8 -3
- package/dist/src/tui/tui-empty-session-cleanup.d.ts +0 -1
- package/dist/src/tui/tui-empty-session-cleanup.js +1 -11
- package/dist/src/tui/tui-new-session-preferences.d.ts +10 -0
- package/dist/src/tui/tui-new-session-preferences.js +32 -0
- package/dist/src/tui/tui-session-actions.d.ts +1 -0
- package/dist/src/tui/tui-session-actions.js +2 -1
- package/dist/src/tui/tui-settings.d.ts +2 -0
- package/dist/src/tui/tui-settings.js +4 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui-types.d.ts +1 -0
- package/dist/src/tui/tui.js +58 -5
- package/dist/src/tunnel/frpc-process.js +3 -0
- package/dist/src/tunnel/tunnel-service.d.ts +2 -0
- package/dist/src/tunnel/tunnel-service.js +40 -28
- package/dist/src/user-context/consolidation.d.ts +1 -0
- package/dist/src/user-context/consolidation.js +62 -2
- package/dist/src/user-context/context-objects.d.ts +17 -0
- package/dist/src/user-context/context-objects.js +99 -0
- package/dist/src/user-context/domain.d.ts +13 -1
- package/dist/src/user-context/evaluation/harness.d.ts +13 -0
- package/dist/src/user-context/evaluation/harness.js +31 -0
- package/dist/src/user-context/extraction/registry.d.ts +26 -0
- package/dist/src/user-context/extraction/registry.js +113 -0
- package/dist/src/user-context/extraction/repair.d.ts +19 -0
- package/dist/src/user-context/extraction/repair.js +68 -0
- package/dist/src/user-context/focus-lifecycle.d.ts +2 -0
- package/dist/src/user-context/focus-lifecycle.js +26 -0
- package/dist/src/user-context/planner.js +252 -62
- package/dist/src/user-context/retriever.js +69 -9
- package/dist/src/user-context/sources/index.js +2 -2
- package/dist/src/user-context/sources/processing-policy.d.ts +2 -0
- package/dist/src/user-context/sources/processing-policy.js +7 -0
- package/dist/src/user-context/sources/repository.d.ts +23 -4
- package/dist/src/user-context/sources/repository.js +122 -12
- package/dist/src/user-context/sources/types.d.ts +10 -1
- package/dist/src/user-context/understanding.js +1 -1
- package/dist/src/work-discovery/analyzer.js +6 -4
- package/dist/src/work-discovery/index.js +2 -2
- package/dist/src/work-discovery/service.d.ts +12 -3
- package/dist/src/work-discovery/service.js +183 -86
- package/dist/src/work-discovery/source-repository.d.ts +1 -0
- package/dist/src/work-discovery/source-repository.js +10 -4
- package/dist/src/work-discovery/types.d.ts +2 -1
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agents-Dj86bHkl.js +0 -68
- package/dist/gateway/static/root/assets/app-management-settings-panel-D-M6GN-8.js +0 -1
- package/dist/gateway/static/root/assets/appearance-settings-XDhmzdIc.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-sfO835uz.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-PptuZgoo.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BoCmzMFV.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DhkJsU8Z.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-Dm7T61fE.js +0 -3
- package/dist/gateway/static/root/assets/channels-settings-dG6UFVqt.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-DgJxfNyK.js +0 -1
- package/dist/gateway/static/root/assets/chat-terminal-dock-CT5yoSMD.js +0 -36
- package/dist/gateway/static/root/assets/connectors-page-BC6Ft9SU.js +0 -2
- package/dist/gateway/static/root/assets/dependency-picker-DZVSgLXH.js +0 -1
- package/dist/gateway/static/root/assets/desktop-pet-settings-Bw4cCFzI.js +0 -1
- package/dist/gateway/static/root/assets/directory-picker-path-field-Cbst7IXR.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-C1PAKSy2.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-Bch9vO6t.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DkDxZFGG.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-DXNMxy5b.js +0 -1
- package/dist/gateway/static/root/assets/home-page-CYcpVFNT.js +0 -1
- package/dist/gateway/static/root/assets/index-Dgb1R07E.css +0 -2
- package/dist/gateway/static/root/assets/index-DlOYwVFK.js +0 -108
- package/dist/gateway/static/root/assets/local-app-workbench-page-BFrgPwGE.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-CPweLw3k.js +0 -2
- package/dist/gateway/static/root/assets/messages-B9WQcZ1V.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-wieRAd1y.js +0 -4
- package/dist/gateway/static/root/assets/page-tabs-Bsluqyfb.js +0 -1
- package/dist/gateway/static/root/assets/preview-open-alternatives-BrpTWv44.js +0 -1
- package/dist/gateway/static/root/assets/project-detail-page-Cww6V7HJ.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-D0LKhCCw.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-Sf4Pde6Z.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-S5gvgfu5.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-B3XvdEy8.js +0 -1
- package/dist/gateway/static/root/assets/settings-form-section-CiGFtdD8.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-CGU_Mxjr.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-k0UQ8WxO.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DQ1GvL1w.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-OuHd9GcN.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-CERqCsz2.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-BnRNL2sn.js +0 -1
- package/dist/gateway/static/root/assets/typed-models-lib-abEJNkCO.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-Cnkaiky5.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-B_VlcKiK.js +0 -5
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getSqliteDatabase, runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
|
|
2
|
+
import "../domain.js";
|
|
2
3
|
import { randomUUID } from "node:crypto";
|
|
3
4
|
//#region src/user-context/sources/repository.ts
|
|
4
5
|
function record(value) {
|
|
@@ -53,19 +54,82 @@ function runFromRow(row) {
|
|
|
53
54
|
function focusFromRow(row) {
|
|
54
55
|
return {
|
|
55
56
|
id: row.focus_id,
|
|
57
|
+
versionId: row.current_version_id,
|
|
58
|
+
principalId: row.principal_id,
|
|
56
59
|
canonicalKey: row.canonical_key,
|
|
57
60
|
title: row.title,
|
|
58
61
|
summary: row.summary,
|
|
59
62
|
horizon: row.horizon,
|
|
60
63
|
status: row.status,
|
|
61
64
|
confidence: row.confidence,
|
|
62
|
-
|
|
65
|
+
scope: {
|
|
66
|
+
type: row.scope_type,
|
|
67
|
+
...row.scope_id ? { id: row.scope_id } : {}
|
|
68
|
+
},
|
|
69
|
+
explicitness: row.explicitness,
|
|
70
|
+
sensitivity: row.sensitivity,
|
|
71
|
+
disclosurePolicy: row.disclosure_policy,
|
|
72
|
+
...row.valid_from == null ? {} : { validFrom: row.valid_from },
|
|
73
|
+
...row.valid_to == null ? {} : { validTo: row.valid_to },
|
|
74
|
+
...row.review_at == null ? {} : { reviewAt: row.review_at },
|
|
63
75
|
evidenceRefs: strings(row.evidence_refs_json),
|
|
64
76
|
...row.source_run_id ? { sourceRunId: row.source_run_id } : {},
|
|
65
77
|
createdAt: row.created_at,
|
|
66
78
|
updatedAt: row.updated_at
|
|
67
79
|
};
|
|
68
80
|
}
|
|
81
|
+
function focusSnapshot(row) {
|
|
82
|
+
return {
|
|
83
|
+
horizon: row.horizon,
|
|
84
|
+
status: row.status,
|
|
85
|
+
confidence: row.confidence,
|
|
86
|
+
scopeType: row.scope_type,
|
|
87
|
+
scopeId: row.scope_id,
|
|
88
|
+
explicitness: row.explicitness,
|
|
89
|
+
sensitivity: row.sensitivity,
|
|
90
|
+
disclosurePolicy: row.disclosure_policy,
|
|
91
|
+
validFrom: row.valid_from,
|
|
92
|
+
validTo: row.valid_to,
|
|
93
|
+
reviewAt: row.review_at,
|
|
94
|
+
evidenceRefs: strings(row.evidence_refs_json)
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function sameFocusVersion(left, right) {
|
|
98
|
+
return Boolean(left && left.title === right.title && left.summary === right.summary && JSON.stringify(focusSnapshot(left)) === JSON.stringify(focusSnapshot(right)));
|
|
99
|
+
}
|
|
100
|
+
function linkFocusEvidence(versionId, evidenceRefs, confidence) {
|
|
101
|
+
if (!evidenceRefs.length) return;
|
|
102
|
+
const placeholders = evidenceRefs.map(() => "?").join(", ");
|
|
103
|
+
getSqliteDatabase().prepare(`INSERT OR IGNORE INTO user_focus_evidence_links (
|
|
104
|
+
version_id, evidence_id, relation, confidence
|
|
105
|
+
) SELECT ?, evidence_id, 'supports', ? FROM context_evidence WHERE source_ref IN (${placeholders})`).run(versionId, confidence, ...evidenceRefs);
|
|
106
|
+
}
|
|
107
|
+
function listUserFocusEvidence(focusId) {
|
|
108
|
+
return getSqliteDatabase().prepare(`SELECT DISTINCT e.* FROM context_evidence e
|
|
109
|
+
JOIN user_focus_evidence_links l ON l.evidence_id = e.evidence_id
|
|
110
|
+
JOIN user_focus_versions v ON v.version_id = l.version_id
|
|
111
|
+
WHERE v.focus_id = ? ORDER BY e.observed_at DESC`).all(focusId).map((row) => ({
|
|
112
|
+
id: row.evidence_id,
|
|
113
|
+
sourceType: row.source_type,
|
|
114
|
+
...row.source_instance_id ? { sourceInstanceId: row.source_instance_id } : {},
|
|
115
|
+
sourceRef: row.source_ref,
|
|
116
|
+
...row.source_run_id ? { sourceRunId: row.source_run_id } : {},
|
|
117
|
+
...row.source_item_id ? { sourceItemId: row.source_item_id } : {},
|
|
118
|
+
...row.session_id ? { sessionId: row.session_id } : {},
|
|
119
|
+
...row.turn_id ? { turnId: row.turn_id } : {},
|
|
120
|
+
...row.message_id ? { messageId: row.message_id } : {},
|
|
121
|
+
...row.content_hash ? { contentHash: row.content_hash } : {},
|
|
122
|
+
...row.retention_policy ? { retentionPolicy: row.retention_policy } : {},
|
|
123
|
+
...row.processing_policy ? { processingPolicy: row.processing_policy } : {},
|
|
124
|
+
...row.extractor_id ? { extractorId: row.extractor_id } : {},
|
|
125
|
+
...row.extractor_version ? { extractorVersion: row.extractor_version } : {},
|
|
126
|
+
...row.redacted_excerpt ? { redactedExcerpt: row.redacted_excerpt } : {},
|
|
127
|
+
trustLevel: row.trust_level,
|
|
128
|
+
observedAt: row.observed_at,
|
|
129
|
+
ingestedAt: row.ingested_at ?? row.created_at,
|
|
130
|
+
createdAt: row.created_at
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
69
133
|
function listUnderstandingSourceGrants(options = {}) {
|
|
70
134
|
return getSqliteDatabase().prepare(`SELECT * FROM understanding_source_grants ${options.includeRevoked ? "" : "WHERE status = 'active'"} ORDER BY updated_at DESC`).all().map(grantFromRow);
|
|
71
135
|
}
|
|
@@ -85,8 +149,7 @@ function upsertUnderstandingSourceGrant(input) {
|
|
|
85
149
|
) VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?, ?, ?, ?, ?)
|
|
86
150
|
ON CONFLICT(source_key) DO UPDATE SET
|
|
87
151
|
adapter_id = excluded.adapter_id, category = excluded.category, platform = excluded.platform,
|
|
88
|
-
display_name = excluded.display_name, status = 'active',
|
|
89
|
-
retention_policy = excluded.retention_policy, processing_policy = excluded.processing_policy,
|
|
152
|
+
display_name = excluded.display_name, status = 'active',
|
|
90
153
|
config_json = excluded.config_json, checkpoint_json = excluded.checkpoint_json,
|
|
91
154
|
last_collected_at = COALESCE(excluded.last_collected_at, understanding_source_grants.last_collected_at),
|
|
92
155
|
updated_at = excluded.updated_at
|
|
@@ -104,6 +167,16 @@ function updateUnderstandingSourceGrantCheckpoint(id, input) {
|
|
|
104
167
|
`).run(JSON.stringify(input.checkpoint ?? current.checkpoint), input.lastCollectedAt ?? current.lastCollectedAt ?? null, now, id));
|
|
105
168
|
return getUnderstandingSourceGrant(id);
|
|
106
169
|
}
|
|
170
|
+
function updateUnderstandingSourceGrantPolicies(id, patch) {
|
|
171
|
+
const current = getUnderstandingSourceGrant(id);
|
|
172
|
+
if (!current) return null;
|
|
173
|
+
runSqliteWriteTransaction((db) => db.prepare(`
|
|
174
|
+
UPDATE understanding_source_grants
|
|
175
|
+
SET access_mode = ?, retention_policy = ?, processing_policy = ?, updated_at = ?
|
|
176
|
+
WHERE grant_id = ?
|
|
177
|
+
`).run(patch.accessMode ?? current.accessMode, patch.retentionPolicy ?? current.retentionPolicy, patch.processingPolicy ?? current.processingPolicy, patch.nowMs ?? Date.now(), id));
|
|
178
|
+
return getUnderstandingSourceGrant(id);
|
|
179
|
+
}
|
|
107
180
|
function revokeUnderstandingSourceGrant(id, nowMs = Date.now()) {
|
|
108
181
|
runSqliteWriteTransaction((db) => db.prepare("UPDATE understanding_source_grants SET status = 'revoked', updated_at = ? WHERE grant_id = ?").run(nowMs, id));
|
|
109
182
|
return getUnderstandingSourceGrant(id);
|
|
@@ -138,11 +211,20 @@ function updateUnderstandingSourceRun(id, patch) {
|
|
|
138
211
|
function upsertUserFocus(input) {
|
|
139
212
|
const id = randomUUID();
|
|
140
213
|
const now = input.nowMs ?? Date.now();
|
|
141
|
-
|
|
214
|
+
const scope = input.scope ?? { type: "global" };
|
|
215
|
+
const explicitness = input.explicitness ?? "inferred";
|
|
216
|
+
const sensitivity = input.sensitivity ?? "normal";
|
|
217
|
+
const disclosurePolicy = input.disclosurePolicy ?? "referenceable";
|
|
218
|
+
const existingRow = getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE canonical_key = ?").get(input.canonicalKey);
|
|
219
|
+
if (existingRow?.explicitness === "explicit" && explicitness !== "explicit") return focusFromRow(existingRow);
|
|
220
|
+
let currentVersionId = existingRow?.current_version_id;
|
|
221
|
+
runSqliteWriteTransaction((db) => {
|
|
222
|
+
db.prepare(`
|
|
142
223
|
INSERT INTO user_focuses (
|
|
143
|
-
focus_id, canonical_key, title, summary, horizon, status, confidence,
|
|
144
|
-
|
|
145
|
-
|
|
224
|
+
focus_id, principal_id, canonical_key, title, summary, horizon, status, confidence,
|
|
225
|
+
scope_type, scope_id, explicitness, sensitivity, disclosure_policy,
|
|
226
|
+
valid_from, valid_to, review_at, evidence_refs_json, source_run_id, created_at, updated_at
|
|
227
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
146
228
|
ON CONFLICT(canonical_key) DO UPDATE SET title = excluded.title, summary = excluded.summary,
|
|
147
229
|
horizon = excluded.horizon,
|
|
148
230
|
status = CASE
|
|
@@ -151,9 +233,23 @@ function upsertUserFocus(input) {
|
|
|
151
233
|
ELSE excluded.status
|
|
152
234
|
END,
|
|
153
235
|
confidence = excluded.confidence,
|
|
154
|
-
|
|
236
|
+
scope_type = excluded.scope_type, scope_id = excluded.scope_id,
|
|
237
|
+
explicitness = excluded.explicitness, sensitivity = excluded.sensitivity,
|
|
238
|
+
disclosure_policy = excluded.disclosure_policy, valid_from = excluded.valid_from,
|
|
239
|
+
valid_to = excluded.valid_to, review_at = excluded.review_at,
|
|
240
|
+
evidence_refs_json = excluded.evidence_refs_json,
|
|
155
241
|
source_run_id = excluded.source_run_id, updated_at = excluded.updated_at
|
|
156
|
-
`).run(id, input.canonicalKey, input.title, input.summary, input.horizon, input.status, input.confidence, input.
|
|
242
|
+
`).run(id, input.principalId ?? "local-owner", input.canonicalKey, input.title, input.summary, input.horizon, input.status, input.confidence, scope.type, scope.id ?? null, explicitness, sensitivity, disclosurePolicy, input.validFrom ?? null, input.validTo ?? null, input.reviewAt ?? null, JSON.stringify(input.evidenceRefs), input.sourceRunId ?? null, now, now);
|
|
243
|
+
const nextRow = db.prepare("SELECT * FROM user_focuses WHERE canonical_key = ?").get(input.canonicalKey);
|
|
244
|
+
if (!sameFocusVersion(existingRow, nextRow)) {
|
|
245
|
+
currentVersionId = randomUUID();
|
|
246
|
+
db.prepare(`INSERT INTO user_focus_versions (
|
|
247
|
+
version_id, focus_id, title, summary, snapshot_json, created_by, change_reason, created_at
|
|
248
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(currentVersionId, nextRow.focus_id, nextRow.title, nextRow.summary, JSON.stringify(focusSnapshot(nextRow)), explicitness === "explicit" ? "user" : input.sourceRunId ? "connector" : "runtime", input.changeReason ?? (existingRow ? "Focus updated" : "Focus created"), now);
|
|
249
|
+
db.prepare("UPDATE user_focuses SET current_version_id = ? WHERE focus_id = ?").run(currentVersionId, nextRow.focus_id);
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
if (currentVersionId) linkFocusEvidence(currentVersionId, input.evidenceRefs, input.confidence);
|
|
157
253
|
return focusFromRow(getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE canonical_key = ?").get(input.canonicalKey));
|
|
158
254
|
}
|
|
159
255
|
function listUserFocuses(statuses) {
|
|
@@ -161,8 +257,22 @@ function listUserFocuses(statuses) {
|
|
|
161
257
|
const placeholders = statuses.map(() => "?").join(", ");
|
|
162
258
|
return getSqliteDatabase().prepare(`SELECT * FROM user_focuses WHERE status IN (${placeholders}) ORDER BY updated_at DESC`).all(...statuses).map(focusFromRow);
|
|
163
259
|
}
|
|
164
|
-
function
|
|
165
|
-
|
|
260
|
+
function updateUserFocus(id, patch, nowMs = Date.now()) {
|
|
261
|
+
const currentRow = getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE focus_id = ?").get(id);
|
|
262
|
+
if (!currentRow) return null;
|
|
263
|
+
const current = focusFromRow(currentRow);
|
|
264
|
+
if ((patch.title ?? current.title) === current.title && (patch.summary ?? current.summary) === current.summary && (patch.status ?? current.status) === current.status) return current;
|
|
265
|
+
const versionId = randomUUID();
|
|
266
|
+
runSqliteWriteTransaction((db) => {
|
|
267
|
+
db.prepare(`UPDATE user_focuses
|
|
268
|
+
SET title = ?, summary = ?, status = ?, updated_at = ? WHERE focus_id = ?`).run(patch.title ?? current.title, patch.summary ?? current.summary, patch.status ?? current.status, nowMs, id);
|
|
269
|
+
const nextRow = db.prepare("SELECT * FROM user_focuses WHERE focus_id = ?").get(id);
|
|
270
|
+
db.prepare(`INSERT INTO user_focus_versions (
|
|
271
|
+
version_id, focus_id, title, summary, snapshot_json, created_by, change_reason, created_at
|
|
272
|
+
) VALUES (?, ?, ?, ?, ?, ?, 'Focus updated', ?)`).run(versionId, id, nextRow.title, nextRow.summary, JSON.stringify(focusSnapshot(nextRow)), current.explicitness === "explicit" ? "user" : "runtime", nowMs);
|
|
273
|
+
db.prepare("UPDATE user_focuses SET current_version_id = ? WHERE focus_id = ?").run(versionId, id);
|
|
274
|
+
});
|
|
275
|
+
linkFocusEvidence(versionId, current.evidenceRefs, current.confidence);
|
|
166
276
|
const row = getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE focus_id = ?").get(id);
|
|
167
277
|
return row ? focusFromRow(row) : null;
|
|
168
278
|
}
|
|
@@ -170,4 +280,4 @@ function deleteUserFocus(id) {
|
|
|
170
280
|
return Number(getSqliteDatabase().prepare("DELETE FROM user_focuses WHERE focus_id = ?").run(id).changes) > 0;
|
|
171
281
|
}
|
|
172
282
|
//#endregion
|
|
173
|
-
export { createUnderstandingSourceRun, deleteUserFocus, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, listUserFocuses, revokeUnderstandingSourceGrant,
|
|
283
|
+
export { createUnderstandingSourceRun, deleteUserFocus, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, listUserFocusEvidence, listUserFocuses, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, updateUserFocus, upsertUnderstandingSourceGrant, upsertUserFocus };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { UserContextScope, UserUnderstanding } from '../domain.js';
|
|
1
2
|
export type UnderstandingSourcePlatform = 'darwin' | 'win32' | 'linux' | 'all';
|
|
2
3
|
export type UnderstandingSourceCategory = 'files' | 'recent_documents' | 'calendar' | 'tasks' | 'notes' | 'mail' | 'messages' | 'code_activity';
|
|
3
4
|
export type UnderstandingSourceAccessMode = 'once' | 'continuous';
|
|
@@ -75,13 +76,21 @@ export interface UnderstandingSourceRun {
|
|
|
75
76
|
}
|
|
76
77
|
export interface UserFocus {
|
|
77
78
|
id: string;
|
|
79
|
+
versionId: string;
|
|
80
|
+
principalId: string;
|
|
78
81
|
canonicalKey: string;
|
|
79
82
|
title: string;
|
|
80
83
|
summary: string;
|
|
81
84
|
horizon: 'current' | 'ongoing' | 'long_term';
|
|
82
85
|
status: 'candidate' | 'active' | 'paused' | 'completed' | 'rejected';
|
|
83
86
|
confidence: number;
|
|
84
|
-
|
|
87
|
+
scope: UserContextScope;
|
|
88
|
+
explicitness: UserUnderstanding['explicitness'];
|
|
89
|
+
sensitivity: UserUnderstanding['sensitivity'];
|
|
90
|
+
disclosurePolicy: UserUnderstanding['disclosurePolicy'];
|
|
91
|
+
validFrom?: number;
|
|
92
|
+
validTo?: number;
|
|
93
|
+
reviewAt?: number;
|
|
85
94
|
evidenceRefs: string[];
|
|
86
95
|
sourceRunId?: string;
|
|
87
96
|
createdAt: number;
|
|
@@ -8,7 +8,7 @@ function canonicalUnderstandingKey(kind, statement) {
|
|
|
8
8
|
function isSameUserContextScope(left, right) {
|
|
9
9
|
return left.type === right.type && left.id === right.id;
|
|
10
10
|
}
|
|
11
|
-
const NEGATION = /\b(?:do not|don't|never|avoid|without)\b|(?:不要|不用|无需|从不|避免|禁止)/i;
|
|
11
|
+
const NEGATION = /\b(?:do not|don't|not|never|avoid|without)\b|(?:不要|不用|无需|从不|避免|禁止)/i;
|
|
12
12
|
function withoutNegation(statement) {
|
|
13
13
|
return statement.replace(NEGATION, "").replace(/\s+/g, " ").trim();
|
|
14
14
|
}
|
|
@@ -82,7 +82,7 @@ function validateSuggestion(value, allowedPaths) {
|
|
|
82
82
|
function validateProfileCandidate(value, allowedRefs) {
|
|
83
83
|
if (!value || typeof value !== "object") return null;
|
|
84
84
|
const item = value;
|
|
85
|
-
const category = item.category === "role" || item.category === "
|
|
85
|
+
const category = item.category === "role" || item.category === "responsibility" || item.category === "preference" || item.category === "routine" ? item.category : void 0;
|
|
86
86
|
if (!category || typeof item.statement !== "string") return null;
|
|
87
87
|
const statement = item.statement.trim().slice(0, 500);
|
|
88
88
|
if (statement.length < 4) return null;
|
|
@@ -181,8 +181,9 @@ async function analyzeWorkContext(input) {
|
|
|
181
181
|
"You help a user resume real work in one explicitly selected local folder.",
|
|
182
182
|
"Analyze only the supplied bounded snapshot. Never claim that you ran commands, tests, or inspected anything absent from it.",
|
|
183
183
|
"Return only one JSON object with projectSummary, currentState, uncertainties, suggestions, profileCandidates, workThreads, conversationStarter, lowConfidence, and contextQuestion.",
|
|
184
|
-
"profileCandidates contains
|
|
185
|
-
"
|
|
184
|
+
"profileCandidates contains only user-specific role, responsibility, preference, or routine facts that are directly supported and would remain useful outside this repository snapshot.",
|
|
185
|
+
"Do not put the project stack, packages, architecture, deployment setup, repository conventions, or current task in profileCandidates. Put project facts in projectSummary/currentState and current work in workThreads.",
|
|
186
|
+
"Each profile candidate has category (role, responsibility, preference, or routine), statement, confidence, and evidence.",
|
|
186
187
|
USER_FACING_UNDERSTANDING_WRITING_GUIDANCE,
|
|
187
188
|
"Do not infer sensitive traits, identity, health, finances, political views, or anything not directly supported by the work evidence.",
|
|
188
189
|
"workThreads contains every distinct evidence-backed work stream with topicKey, title, summary, horizon, status, confidence, and evidenceRefs. Do not merge unrelated streams to force a fixed count.",
|
|
@@ -286,7 +287,8 @@ async function analyzeUnderstandingBatch(input) {
|
|
|
286
287
|
"Analyze one bounded batch from a source the user explicitly chose to connect.",
|
|
287
288
|
"Return only one JSON object with profileCandidates and workThreads.",
|
|
288
289
|
"Return at most 8 profileCandidates and at most 8 workThreads. Prefer the strongest distinct findings.",
|
|
289
|
-
"
|
|
290
|
+
"profileCandidates contains only user-specific role, responsibility, preference, or routine facts with direct support. Current tasks belong in workThreads; project technologies, packages, architecture, and repository conventions are not user facts.",
|
|
291
|
+
"Each profile candidate has category (role, responsibility, preference, or routine), statement, confidence, evidence, and evidenceRefs.",
|
|
290
292
|
USER_FACING_UNDERSTANDING_WRITING_GUIDANCE,
|
|
291
293
|
"Each work thread has topicKey, title, summary, status, horizon, confidence, and evidenceRefs.",
|
|
292
294
|
"Every evidenceRefs value must be one of the supplied refs. Omit anything without direct support.",
|
|
@@ -8,6 +8,6 @@ import { appendWorkUnderstandingEvidence, createWorkUnderstandingInvestigation,
|
|
|
8
8
|
import { DEFAULT_WORK_INVESTIGATION_BUDGET, investigateWorkContext } from "./investigator.js";
|
|
9
9
|
import { persistWorkThreadsFromDiscovery } from "./thread-service.js";
|
|
10
10
|
import { getWorkDiscoveryDirectorySource, listWorkDiscoveryDirectorySources, revokeWorkDiscoveryDirectorySource, upsertWorkDiscoveryDirectorySource } from "./source-repository.js";
|
|
11
|
-
import { WorkDiscoveryService } from "./service.js";
|
|
11
|
+
import { WorkDiscoveryService, normalizeUnderstandingSourceItems } from "./service.js";
|
|
12
12
|
import { evaluateQuickUnderstandingCase, evaluateWorkUnderstandingCase, meetsQuickUnderstandingGate } from "./evaluation.js";
|
|
13
|
-
export { DEFAULT_WORK_INVESTIGATION_BUDGET, WORK_DISCOVERY_SCAN_POLICY_VERSION, WorkDiscoveryService, analyzeUnderstandingSources, analyzeWorkContext, appendWorkUnderstandingEvidence, canonicalWorkDiscoveryRoot, createWorkDiscoveryRun, createWorkUnderstandingInvestigation, discoverWorkCandidates, evaluateQuickUnderstandingCase, evaluateWorkUnderstandingCase, findActiveWorkDiscoverySourceRefresh, getWorkDiscoveryDirectorySource, getWorkDiscoveryOnboardingState, getWorkDiscoveryRun, getWorkDiscoveryRunByIdempotencyKey, getWorkUnderstandingInvestigation, getWorkUnderstandingInvestigationForRun, investigateWorkContext, listWorkDiscoveryDirectorySources, listWorkDiscoverySourceRefreshes, listWorkUnderstandingEvidence, meetsQuickUnderstandingGate, persistWorkThreadsFromDiscovery, previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, readWorkDiscoveryTextExcerpt, recordWorkDiscoverySourceRefresh, resetWorkUnderstandingInvestigation, resolvePersonalWorkRoots, revokeWorkDiscoveryDirectorySource, searchWorkDiscoveryText, setWorkDiscoveryFeedback, setWorkDiscoveryOnboardingState, summarizeWorkContextSnapshot, updateWorkDiscoveryRun, updateWorkDiscoverySourceRefreshForRun, updateWorkUnderstandingEvidenceObservation, updateWorkUnderstandingInvestigation, upsertWorkDiscoveryDirectorySource, workDiscoveryFingerprintsEqual, workDiscoveryResultMarkdown };
|
|
13
|
+
export { DEFAULT_WORK_INVESTIGATION_BUDGET, WORK_DISCOVERY_SCAN_POLICY_VERSION, WorkDiscoveryService, analyzeUnderstandingSources, analyzeWorkContext, appendWorkUnderstandingEvidence, canonicalWorkDiscoveryRoot, createWorkDiscoveryRun, createWorkUnderstandingInvestigation, discoverWorkCandidates, evaluateQuickUnderstandingCase, evaluateWorkUnderstandingCase, findActiveWorkDiscoverySourceRefresh, getWorkDiscoveryDirectorySource, getWorkDiscoveryOnboardingState, getWorkDiscoveryRun, getWorkDiscoveryRunByIdempotencyKey, getWorkUnderstandingInvestigation, getWorkUnderstandingInvestigationForRun, investigateWorkContext, listWorkDiscoveryDirectorySources, listWorkDiscoverySourceRefreshes, listWorkUnderstandingEvidence, meetsQuickUnderstandingGate, normalizeUnderstandingSourceItems, persistWorkThreadsFromDiscovery, previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, readWorkDiscoveryTextExcerpt, recordWorkDiscoverySourceRefresh, resetWorkUnderstandingInvestigation, resolvePersonalWorkRoots, revokeWorkDiscoveryDirectorySource, searchWorkDiscoveryText, setWorkDiscoveryFeedback, setWorkDiscoveryOnboardingState, summarizeWorkContextSnapshot, updateWorkDiscoveryRun, updateWorkDiscoverySourceRefreshForRun, updateWorkUnderstandingEvidenceObservation, updateWorkUnderstandingInvestigation, upsertWorkDiscoveryDirectorySource, workDiscoveryFingerprintsEqual, workDiscoveryResultMarkdown };
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { Config } from '../config/schema.js';
|
|
2
2
|
import type { ProjectService } from '../projects/project-service.js';
|
|
3
3
|
import type { SessionIndex } from '../session/manager.js';
|
|
4
|
+
import type { UnderstandingSourceItem } from '../user-context/sources/types.js';
|
|
4
5
|
import type { WorkDiscoveryCandidate, WorkDiscoveryOnboardingState, WorkDiscoveryRecognitionDecision, WorkDiscoveryRun, WorkDiscoverySource } from './types.js';
|
|
6
|
+
export type ModelProcessingPolicy = 'local_only' | 'remote_allowed';
|
|
7
|
+
/** Sanitize and round-robin local sources so one verbose source cannot starve the rest. */
|
|
8
|
+
export declare function normalizeUnderstandingSourceItems(rawItems: unknown[]): UnderstandingSourceItem[];
|
|
5
9
|
export interface WorkDiscoveryServiceOptions {
|
|
6
10
|
projects: ProjectService;
|
|
7
11
|
sessions: SessionIndex;
|
|
@@ -24,7 +28,11 @@ export declare class WorkDiscoveryService {
|
|
|
24
28
|
};
|
|
25
29
|
discoverCandidates(signal?: AbortSignal): Promise<WorkDiscoveryCandidate[]>;
|
|
26
30
|
listDirectorySources(): import("./types.js").WorkDiscoveryDirectorySource[];
|
|
27
|
-
|
|
31
|
+
getModelProcessingTarget(): {
|
|
32
|
+
provider: string;
|
|
33
|
+
remoteModel: boolean;
|
|
34
|
+
};
|
|
35
|
+
grantDirectorySource(rootPath: string, processingPolicy: ModelProcessingPolicy): Promise<import("./types.js").WorkDiscoveryDirectorySource>;
|
|
28
36
|
checkDirectorySources(): Promise<any[]>;
|
|
29
37
|
refreshDirectorySourceIfChanged(input: {
|
|
30
38
|
id: string;
|
|
@@ -46,7 +54,7 @@ export declare class WorkDiscoveryService {
|
|
|
46
54
|
reused?: undefined;
|
|
47
55
|
}>;
|
|
48
56
|
revokeDirectorySource(id: string): import("./types.js").WorkDiscoveryDirectorySource;
|
|
49
|
-
importUnderstandingSources(rawItems: unknown[], signal?: AbortSignal, runId?: string, rawCheckpoints?: Record<string, unknown>): Promise<{
|
|
57
|
+
importUnderstandingSources(rawItems: unknown[], processingPolicy: ModelProcessingPolicy, signal?: AbortSignal, runId?: string, rawCheckpoints?: Record<string, unknown>): Promise<{
|
|
50
58
|
profileCandidates: any[];
|
|
51
59
|
workThreads: any[];
|
|
52
60
|
focuses: any[];
|
|
@@ -59,7 +67,7 @@ export declare class WorkDiscoveryService {
|
|
|
59
67
|
status: "rejected" | "pending";
|
|
60
68
|
understandingId: string;
|
|
61
69
|
id: string;
|
|
62
|
-
category: "role" | "
|
|
70
|
+
category: "role" | "responsibility" | "preference" | "routine";
|
|
63
71
|
statement: string;
|
|
64
72
|
confidence: "high" | "medium" | "low";
|
|
65
73
|
evidence: string[];
|
|
@@ -86,6 +94,7 @@ export declare class WorkDiscoveryService {
|
|
|
86
94
|
}): Promise<WorkDiscoveryRun>;
|
|
87
95
|
startQuickRun(input: {
|
|
88
96
|
idempotencyKey: string;
|
|
97
|
+
processingPolicy: ModelProcessingPolicy;
|
|
89
98
|
}): Promise<WorkDiscoveryRun>;
|
|
90
99
|
startRun(input: {
|
|
91
100
|
rootPath: string;
|