@xopcai/xopc 0.0.173 → 0.0.175
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-ByVA0N5n.js → activity-store-CM6mQUS2.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CJ5HvqE7.js → agent-avatar-dicebear-eckyE9AY.js} +1 -1
- package/dist/gateway/static/root/assets/agents-D-OIB_r0.js +2 -0
- package/dist/gateway/static/root/assets/api-2SLLStKp.js +1 -0
- package/dist/gateway/static/root/assets/{api-BZtCKzg4.js → api-BfMRS6FX.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-B0oNNcFn.js → app-management-settings-panel-DYkzZQzZ.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DbIj4NQ1.js → appearance-settings-CDXXN57j.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-CuvFyvuu.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-BICLQFWJ.js → archive-plugin-k909a76t.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-DV3PteSU.js → attachment-load-CqNzyhdJ.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CZUImis0.js → automation-suggestion-card-snNG6u0v.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-DetGVTjI.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-D6zkab6N.js → binary-plugins-PfQ9ZHDF.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-zCzoQI-g.js → block-editor-Xrw-DnE_.js} +6 -6
- package/dist/gateway/static/root/assets/browser-settings-page-G92AdEnX.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-CY3X83xQ.js → browser-workflow-inputs-DJPF2lUY.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-DDRtZLuM.js → browser-workflows-page-BoXs4pgc.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-nS_AMN1K.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-pYLW6P7g.js → capability-presets-api-BgY-Ysmi.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-DIO8ZNHW.js +1 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-DxyOH3BO.js → channel-recipient-api-D32T1EJM.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-4Im3vtnO.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CMctpuqb.js +1 -0
- package/dist/gateway/static/root/assets/{connector-logo-BgANwjt-.js → connector-logo-C-l8haIK.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-vL3SjHSc.js +2 -0
- package/dist/gateway/static/root/assets/copy-VueTIC2x.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-BPjQbPeA.js → desktop-pet-CwOI_Hei.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-8CaU1Mhm.js → desktop-pet-settings-Cldo_pA3.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BtNRUvzM.js → directory-picker-path-field-CMASXbgJ.js} +1 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BnMx02w0.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-DFjTfx6f.js → extension-debug-page-mUFs3ign.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-NyEYtWWg.js → extension-page-BsFBOZ5N.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BynTCfgf.js → extension-settings-page-CTEoovnV.js} +1 -1
- package/dist/gateway/static/root/assets/focus-detail-page-CCaZthpU.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-config-api-BzOWImvU.js → gateway-config-api-Bwx-EetD.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-DXepE_Jw.js → gateway-settings-CvgyqhR_.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-C2JXXtwg.js → gateway-startup-retry-C8f5KwkT.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-create-dialog-ClOZyG52.js → goal-create-dialog-Bhynl9LN.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-ChS2rU0w.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-CU3JR9MI.js → goals-config-api-CUnfbgHa.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-BAS_liXl.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-DSZguLEx.js → goals-settings-Bkk-tOcf.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-KRkYziEF.js → heartbeat-settings-D9Pldf5E.js} +1 -1
- package/dist/gateway/static/root/assets/{image-generation-api-Y-n6TaZ_.js → image-generation-api-D7aCMgOv.js} +1 -1
- package/dist/gateway/static/root/assets/index-DJ5vdaHk.css +1 -0
- package/dist/gateway/static/root/assets/index-TnouSpay.js +212 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CwrQv952.js → keyboard-shortcuts-settings-CBhtXhHb.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-HQeu_F1C.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-DtITcS4K.js → local-apps-page-BtJGF3M8.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-Ccv7tH8B.js → locale-store-DO-u1yS7.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-0lvwfLAA.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-D1oZlq1m.js → markdown-split-BGPaeTch.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BKz5V32t.js → media-plugins-C_Cx8v6u.js} +1 -1
- package/dist/gateway/static/root/assets/messages-BP8aQX-5.js +3 -0
- package/dist/gateway/static/root/assets/{notes-page-DLekBQPa.js → notes-page-CIYy5BKF.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-_FgNPlOx.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-pT4nLfqS.js → page-tabs-C2vsdfJO.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-OtAiaJm2.js → preview-open-alternatives-D_VT83bW.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-CfryBKD9.js → product-open-page-BNP9kZ3Q.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-MNi-3mZU.js +1 -0
- package/dist/gateway/static/root/assets/{projects-page-3ubcbqHr.js → projects-page-xx8nUKZO.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-H5DSn2bR.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-nP1SB3Lf.js → save-bar-controls-BJL6Xb-F.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-OEQTsUNz.js → schedule-field-CxCPSLbu.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DIcAa7CJ.js → schema-form-Cao1wGbk.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-CMQsupwM.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-OBUdG6bV.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-BxNcTbYO.js → settings-form-section-9pgClEud.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-Dpdxu4sf.js → settings-loading-skeleton-CQz0gEUK.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-DwPeOm1c.js → settings-page-DgsMzZLm.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-CqirFmMn.js → settings-page-layout-BhqupMfG.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-B7BsWxJt.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-D72gYeux.js → share-preview-page-CC4dQsQN.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Bhz21P05.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CBP-UB88.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-A0rNObNB.js +2 -0
- package/dist/gateway/static/root/assets/skills-page.utils-CF4AYPQg.js +1 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-U0tBgW46.js → system-settings-panel-CzZHWI4u.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-DCKDVPFF.js → theme-store-BZWNdSZC.js} +1 -1
- package/dist/gateway/static/root/assets/time-picker-BC922Mdg.js +1 -0
- package/dist/gateway/static/root/assets/{typed-models-lib-D0XCOCAM.js → typed-models-lib-C1S-B1pk.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-mq_Inao2.js → use-channel-catalog-DTiLxcLF.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-8XdpiAyP.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-CKaDitO6.js → voice-api-key-field-CtIYRNfI.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-page-DBer86NF.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-BUPyfYaq.js +1 -0
- package/dist/gateway/static/root/assets/work-page-G8phwwI1.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-s_kS_FYA.js → workflow-run-setup-panel-IKxqDAXw.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-CNls7g6v.js +11 -0
- package/dist/gateway/static/root/index.html +7 -7
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/service.js +1 -1
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/skills/index.d.ts +2 -0
- package/dist/src/agent/skills/index.js +14 -5
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/skills/test-framework.js +1 -1
- package/dist/src/automations/domain/defaults.d.ts +1 -0
- package/dist/src/automations/domain/defaults.js +4 -0
- package/dist/src/automations/domain/index.d.ts +1 -0
- package/dist/src/automations/domain/index.js +2 -1
- package/dist/src/automations/index.js +2 -1
- package/dist/src/automations/service/action-executor.js +2 -2
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/skills.js +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/focuses/candidate-repository.d.ts +15 -0
- package/dist/src/focuses/candidate-repository.js +91 -0
- package/dist/src/focuses/index.d.ts +7 -0
- package/dist/src/focuses/index.js +7 -0
- package/dist/src/focuses/insight-repository.d.ts +22 -0
- package/dist/src/focuses/insight-repository.js +77 -0
- package/dist/src/focuses/prompts.d.ts +2 -0
- package/dist/src/focuses/prompts.js +18 -0
- package/dist/src/focuses/reconciler.d.ts +5 -0
- package/dist/src/focuses/reconciler.js +26 -0
- package/dist/src/focuses/repository.d.ts +61 -0
- package/dist/src/focuses/repository.js +214 -0
- package/dist/src/focuses/run-processor.d.ts +18 -0
- package/dist/src/focuses/run-processor.js +162 -0
- package/dist/src/focuses/service.d.ts +42 -0
- package/dist/src/focuses/service.js +241 -0
- package/dist/src/focuses/types.d.ts +89 -0
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/routes/focuses.d.ts +3 -0
- package/dist/src/gateway/hono/routes/focuses.js +319 -0
- package/dist/src/gateway/hono/routes/home.d.ts +16 -3
- package/dist/src/gateway/hono/routes/home.js +113 -42
- package/dist/src/gateway/hono/routes/index.js +4 -0
- package/dist/src/gateway/hono/routes/local-apps.js +1 -1
- package/dist/src/gateway/hono/routes/project-skills.d.ts +3 -0
- package/dist/src/gateway/hono/routes/project-skills.js +119 -0
- package/dist/src/gateway/hono/routes/projects.js +2 -103
- package/dist/src/gateway/hono/routes/work-discovery.js +0 -239
- package/dist/src/gateway/service.d.ts +1 -1
- package/dist/src/gateway/service.js +17 -13
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/projects/index.d.ts +1 -0
- package/dist/src/projects/index.js +2 -1
- package/dist/src/projects/project-skill-service.d.ts +67 -0
- package/dist/src/projects/project-skill-service.js +131 -0
- package/dist/src/storage/sqlite/home-attention-repository.d.ts +3 -0
- package/dist/src/storage/sqlite/home-attention-repository.js +21 -0
- package/dist/src/storage/sqlite/index.d.ts +1 -0
- package/dist/src/storage/sqlite/index.js +2 -1
- package/dist/src/storage/sqlite/migrations/066_first_class_focuses.sql +126 -0
- package/dist/src/storage/sqlite/migrations/067_home_attention_acknowledgements.sql +9 -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 +10 -0
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/work-discovery/index.d.ts +0 -2
- package/dist/src/work-discovery/index.js +1 -3
- package/dist/src/work-discovery/service.d.ts +0 -30
- package/dist/src/work-discovery/service.js +1 -35
- package/dist/src/work-discovery/thread-service.d.ts +5 -0
- package/dist/src/work-discovery/thread-service.js +36 -88
- package/dist/src/workflows/service/workflow-run-service.js +1 -1
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/agents--TQ9jM_1.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-BDsoZDEn.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-CHrNcppN.js +0 -6
- package/dist/gateway/static/root/assets/browser-settings-page-BQoRuQzH.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BOcU0qeM.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CJ1F_hlX.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-C4vDwRil.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-B0Pgq5x2.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-D6JEqDEj.js +0 -2
- package/dist/gateway/static/root/assets/dreaming-settings-Byv-h8XZ.js +0 -3
- package/dist/gateway/static/root/assets/goal-detail-page-UbZB77De.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-GMqV8Fwv.js +0 -2
- package/dist/gateway/static/root/assets/index-BCkNJ5cR.css +0 -1
- package/dist/gateway/static/root/assets/index-CAZ9343h.js +0 -212
- package/dist/gateway/static/root/assets/local-app-workbench-page-m5HEyrHT.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-Bf_nk75f.js +0 -7
- package/dist/gateway/static/root/assets/messages-DWrg3c4K.js +0 -3
- package/dist/gateway/static/root/assets/notes-workbench-BTDmprHM.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-C7kntu4H.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DoUkN3ik.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-ElAAlZ-R.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CQn_KBqr.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-DX_LdcTN.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-nSfe-5xK.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-1tYpZrJf.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BUJl8LJG.js +0 -2
- package/dist/gateway/static/root/assets/time-picker-BpiBF5-d.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-BOC6Hn19.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-DWGYp5yV.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-CpeWcpSp.js +0 -1
- package/dist/gateway/static/root/assets/work-page-MsEKzmSt.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-ByhHaUHB.js +0 -11
- package/dist/src/proactive/calendar-signals.d.ts +0 -4
- package/dist/src/proactive/calendar-signals.js +0 -120
- package/dist/src/proactive/focus-service.d.ts +0 -62
- package/dist/src/proactive/focus-service.js +0 -173
- package/dist/src/proactive/index.d.ts +0 -7
- package/dist/src/proactive/index.js +0 -7
- package/dist/src/proactive/insight-repository.d.ts +0 -21
- package/dist/src/proactive/insight-repository.js +0 -109
- package/dist/src/proactive/run-processor.d.ts +0 -19
- package/dist/src/proactive/run-processor.js +0 -146
- package/dist/src/proactive/trial-expiry-reconciler.d.ts +0 -5
- package/dist/src/proactive/trial-expiry-reconciler.js +0 -30
- package/dist/src/proactive/types.d.ts +0 -66
- package/dist/src/proactive/value-score.d.ts +0 -13
- package/dist/src/proactive/value-score.js +0 -30
- package/dist/src/proactive/watch-repository.d.ts +0 -28
- package/dist/src/proactive/watch-repository.js +0 -129
- package/dist/src/work-discovery/governance.d.ts +0 -25
- package/dist/src/work-discovery/governance.js +0 -96
- package/dist/src/work-discovery/thread-repository.d.ts +0 -34
- package/dist/src/work-discovery/thread-repository.js +0 -112
- /package/dist/src/{proactive → focuses}/types.js +0 -0
|
@@ -6,6 +6,7 @@ import { XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, applyPendingMi
|
|
|
6
6
|
import { ensureXopcDatabaseSchema } from "./schema.js";
|
|
7
7
|
import { closeXopcDatabase, getXopcDatabase, isXopcDatabaseOpen, openXopcDatabase, requireXopcDatabase, resetXopcDatabaseSingletonForTest } from "./connection.js";
|
|
8
8
|
import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
|
|
9
|
+
import { acknowledgeHomeAttention, isHomeAttentionAcknowledged } from "./home-attention-repository.js";
|
|
9
10
|
import { getUserClaim, linkUserClaimMemoryRecord, listUserClaimEvidence, listUserClaimStatsBySource, listUserClaims, listUserPeopleGraphRows, reinforceUserClaim, removeUserClaimEvidenceForSource, resolveUserEntity, setUserClaimDecision } from "./user-claims-repository.js";
|
|
10
11
|
import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "./connector-learning-repository.js";
|
|
11
12
|
import { COMPOSER_INPUT_HISTORY_LIMIT, appendComposerInputHistory, clearComposerInputHistory, listComposerInputHistory } from "./composer-input-history-repository.js";
|
|
@@ -27,4 +28,4 @@ import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeC
|
|
|
27
28
|
import { getUserTrustPolicy, setUserTrustPolicy } from "./user-trust-repository.js";
|
|
28
29
|
import { consumeMemoryReferenceConsent, decideMemoryReferenceConsent, ensureMemoryReferenceConsentRequest, hasMemoryReferenceConsent, listMemoryReferenceConsents, revokeMemoryReferenceConsent } from "./memory-reference-consent-repository.js";
|
|
29
30
|
import { getUserProfilePromptState, setUserProfilePromptState } from "./user-profile-setup-repository.js";
|
|
30
|
-
export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendCompactionBoundary, appendComposerInputHistory, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRelationshipPrompt, claimConnectorWebhookDelivery, claimKnowledgeSourceItems, claimNextConnectorLearningJob, classifyStoredRow, clearComposerInputHistory, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, completeTaskOutcome, consumeConnectorApproval, consumeMemoryReferenceConsent, createConnectorApproval, createObjectLinkRecord, decideConnectorApproval, decideMemoryReferenceConsent, deleteConnectorConnection, deleteConnectorInstallation, deleteMemoryEvidenceForRecord, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureMemoryReferenceConsentRequest, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, findTaskOutcomeForAssistant, finishKnowledgeSyncRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getCurrentSessionId, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getRelationshipSettings, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getTaskOutcome, getUserClaim, getUserProfilePromptState, getUserTrustPolicy, getXopcDatabase, hasMemoryReferenceConsent, hasSessionConfig, hasUnresolvedMemoryConflict, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isProactiveSupportAllowed, isXopcDatabaseOpen, linkUserClaimMemoryRecord, listActivityRecords, listCachedConnectorCatalogEntries, listCompactionBoundaries, listComposerInputHistory, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemoryReferenceConsents, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTaskOutcomes, listUserClaimEvidence, listUserClaimStatsBySource, listUserClaims, listUserPeopleGraphRows, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, markMemoryRecordsConflicted, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, recoverStaleConnectorLearningJobs, reinforceUserClaim, releaseConnectorWebhookDelivery, removeUserClaimEvidenceForSource, replaceConnectorCatalogEntries, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveMigrationsDir, resolveSessionAgentId, resolveUserEntity, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeMemoryReferenceConsent, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setConnectorLearningPaused, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, setTaskOutcomeFeedback, setUserClaimDecision, setUserProfilePromptState, setUserTrustPolicy, startKnowledgeSyncRun, startTaskOutcome, summarizeMemoryRecallFeedback, summarizeTaskOutcomes, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateTaskOutcome, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
31
|
+
export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundary, appendComposerInputHistory, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRelationshipPrompt, claimConnectorWebhookDelivery, claimKnowledgeSourceItems, claimNextConnectorLearningJob, classifyStoredRow, clearComposerInputHistory, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, completeTaskOutcome, consumeConnectorApproval, consumeMemoryReferenceConsent, createConnectorApproval, createObjectLinkRecord, decideConnectorApproval, decideMemoryReferenceConsent, deleteConnectorConnection, deleteConnectorInstallation, deleteMemoryEvidenceForRecord, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureMemoryReferenceConsentRequest, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, findTaskOutcomeForAssistant, finishKnowledgeSyncRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getCurrentSessionId, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getRelationshipSettings, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getTaskOutcome, getUserClaim, getUserProfilePromptState, getUserTrustPolicy, getXopcDatabase, hasMemoryReferenceConsent, hasSessionConfig, hasUnresolvedMemoryConflict, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isXopcDatabaseOpen, linkUserClaimMemoryRecord, listActivityRecords, listCachedConnectorCatalogEntries, listCompactionBoundaries, listComposerInputHistory, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemoryReferenceConsents, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTaskOutcomes, listUserClaimEvidence, listUserClaimStatsBySource, listUserClaims, listUserPeopleGraphRows, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, markMemoryRecordsConflicted, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, recoverStaleConnectorLearningJobs, reinforceUserClaim, releaseConnectorWebhookDelivery, removeUserClaimEvidenceForSource, replaceConnectorCatalogEntries, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveMigrationsDir, resolveSessionAgentId, resolveUserEntity, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeMemoryReferenceConsent, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setConnectorLearningPaused, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, setTaskOutcomeFeedback, setUserClaimDecision, setUserProfilePromptState, setUserTrustPolicy, startKnowledgeSyncRun, startTaskOutcome, summarizeMemoryRecallFeedback, summarizeTaskOutcomes, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateTaskOutcome, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
DROP TABLE IF EXISTS proactive_insights;
|
|
2
|
+
DROP TABLE IF EXISTS focus_watches;
|
|
3
|
+
DROP TABLE IF EXISTS work_understanding_thread_feedback;
|
|
4
|
+
DROP TABLE IF EXISTS work_understanding_thread_evidence;
|
|
5
|
+
DROP TABLE IF EXISTS work_understanding_thread_projects;
|
|
6
|
+
DROP TABLE IF EXISTS work_understanding_threads;
|
|
7
|
+
|
|
8
|
+
CREATE TABLE focus_candidates (
|
|
9
|
+
candidate_id TEXT PRIMARY KEY,
|
|
10
|
+
canonical_key TEXT NOT NULL UNIQUE,
|
|
11
|
+
title TEXT NOT NULL,
|
|
12
|
+
summary TEXT NOT NULL,
|
|
13
|
+
confidence REAL NOT NULL CHECK (confidence >= 0 AND confidence <= 1),
|
|
14
|
+
evidence_json TEXT NOT NULL DEFAULT '[]',
|
|
15
|
+
status TEXT NOT NULL CHECK (status IN ('pending', 'accepted', 'dismissed')),
|
|
16
|
+
discovered_at INTEGER NOT NULL,
|
|
17
|
+
updated_at INTEGER NOT NULL
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
CREATE TABLE focus_candidate_projects (
|
|
21
|
+
candidate_id TEXT NOT NULL,
|
|
22
|
+
project_id TEXT NOT NULL,
|
|
23
|
+
created_at INTEGER NOT NULL,
|
|
24
|
+
PRIMARY KEY (candidate_id, project_id),
|
|
25
|
+
FOREIGN KEY (candidate_id) REFERENCES focus_candidates(candidate_id) ON DELETE CASCADE,
|
|
26
|
+
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE focuses (
|
|
30
|
+
focus_id TEXT PRIMARY KEY,
|
|
31
|
+
title TEXT NOT NULL,
|
|
32
|
+
summary TEXT NOT NULL,
|
|
33
|
+
status TEXT NOT NULL CHECK (status IN ('active', 'paused', 'completed')),
|
|
34
|
+
source TEXT NOT NULL CHECK (source IN ('user', 'discovery')),
|
|
35
|
+
source_candidate_id TEXT,
|
|
36
|
+
goal_id TEXT,
|
|
37
|
+
created_at INTEGER NOT NULL,
|
|
38
|
+
updated_at INTEGER NOT NULL,
|
|
39
|
+
completed_at INTEGER,
|
|
40
|
+
last_activity_at INTEGER,
|
|
41
|
+
FOREIGN KEY (source_candidate_id) REFERENCES focus_candidates(candidate_id) ON DELETE SET NULL,
|
|
42
|
+
FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE SET NULL
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE TABLE focus_projects (
|
|
46
|
+
focus_id TEXT NOT NULL,
|
|
47
|
+
project_id TEXT NOT NULL,
|
|
48
|
+
created_at INTEGER NOT NULL,
|
|
49
|
+
PRIMARY KEY (focus_id, project_id),
|
|
50
|
+
FOREIGN KEY (focus_id) REFERENCES focuses(focus_id) ON DELETE CASCADE,
|
|
51
|
+
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
CREATE TABLE focus_monitors (
|
|
55
|
+
monitor_id TEXT PRIMARY KEY,
|
|
56
|
+
focus_id TEXT NOT NULL,
|
|
57
|
+
kind TEXT NOT NULL CHECK (kind IN ('progress', 'external_changes')),
|
|
58
|
+
enabled INTEGER NOT NULL DEFAULT 0 CHECK (enabled IN (0, 1)),
|
|
59
|
+
run_state TEXT NOT NULL DEFAULT 'idle' CHECK (run_state IN ('idle', 'queued', 'running', 'failed')),
|
|
60
|
+
cadence_json TEXT NOT NULL,
|
|
61
|
+
automation_id TEXT,
|
|
62
|
+
last_run_id TEXT,
|
|
63
|
+
last_run_at INTEGER,
|
|
64
|
+
next_run_at INTEGER,
|
|
65
|
+
last_meaningful_result_at INTEGER,
|
|
66
|
+
last_error TEXT,
|
|
67
|
+
consecutive_failures INTEGER NOT NULL DEFAULT 0,
|
|
68
|
+
created_at INTEGER NOT NULL,
|
|
69
|
+
updated_at INTEGER NOT NULL,
|
|
70
|
+
UNIQUE (focus_id, kind),
|
|
71
|
+
FOREIGN KEY (focus_id) REFERENCES focuses(focus_id) ON DELETE CASCADE,
|
|
72
|
+
FOREIGN KEY (automation_id) REFERENCES automations(automation_id) ON DELETE SET NULL
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
CREATE TABLE focus_activities (
|
|
76
|
+
activity_id TEXT PRIMARY KEY,
|
|
77
|
+
focus_id TEXT NOT NULL,
|
|
78
|
+
monitor_id TEXT,
|
|
79
|
+
type TEXT NOT NULL CHECK (type IN (
|
|
80
|
+
'created', 'updated', 'paused', 'resumed', 'completed',
|
|
81
|
+
'monitor_enabled', 'monitor_disabled', 'run_started', 'run_no_change',
|
|
82
|
+
'run_failed', 'insight_created', 'insight_dismissed', 'insight_approved'
|
|
83
|
+
)),
|
|
84
|
+
summary TEXT NOT NULL,
|
|
85
|
+
details_json TEXT NOT NULL DEFAULT '{}',
|
|
86
|
+
created_at INTEGER NOT NULL,
|
|
87
|
+
FOREIGN KEY (focus_id) REFERENCES focuses(focus_id) ON DELETE CASCADE,
|
|
88
|
+
FOREIGN KEY (monitor_id) REFERENCES focus_monitors(monitor_id) ON DELETE SET NULL
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
CREATE TABLE focus_insights (
|
|
92
|
+
insight_id TEXT PRIMARY KEY,
|
|
93
|
+
focus_id TEXT NOT NULL,
|
|
94
|
+
monitor_id TEXT NOT NULL,
|
|
95
|
+
run_id TEXT NOT NULL,
|
|
96
|
+
kind TEXT NOT NULL CHECK (kind IN ('progress', 'external_changes')),
|
|
97
|
+
title TEXT NOT NULL,
|
|
98
|
+
summary TEXT NOT NULL,
|
|
99
|
+
why_it_matters TEXT NOT NULL,
|
|
100
|
+
next_action TEXT NOT NULL,
|
|
101
|
+
evidence_json TEXT NOT NULL,
|
|
102
|
+
content_hash TEXT NOT NULL,
|
|
103
|
+
status TEXT NOT NULL CHECK (status IN ('unread', 'dismissed', 'approved')),
|
|
104
|
+
value_score REAL NOT NULL DEFAULT 0,
|
|
105
|
+
value_reasons_json TEXT NOT NULL DEFAULT '[]',
|
|
106
|
+
created_at INTEGER NOT NULL,
|
|
107
|
+
updated_at INTEGER NOT NULL,
|
|
108
|
+
UNIQUE (monitor_id, content_hash),
|
|
109
|
+
FOREIGN KEY (focus_id) REFERENCES focuses(focus_id) ON DELETE CASCADE,
|
|
110
|
+
FOREIGN KEY (monitor_id) REFERENCES focus_monitors(monitor_id) ON DELETE CASCADE
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
CREATE INDEX idx_focus_candidates_status
|
|
114
|
+
ON focus_candidates(status, updated_at DESC);
|
|
115
|
+
CREATE INDEX idx_focuses_status_activity
|
|
116
|
+
ON focuses(status, last_activity_at DESC, updated_at DESC);
|
|
117
|
+
CREATE UNIQUE INDEX idx_focuses_source_candidate
|
|
118
|
+
ON focuses(source_candidate_id) WHERE source_candidate_id IS NOT NULL;
|
|
119
|
+
CREATE INDEX idx_focus_monitors_focus
|
|
120
|
+
ON focus_monitors(focus_id, enabled, updated_at DESC);
|
|
121
|
+
CREATE INDEX idx_focus_monitors_automation
|
|
122
|
+
ON focus_monitors(automation_id);
|
|
123
|
+
CREATE INDEX idx_focus_activities_focus
|
|
124
|
+
ON focus_activities(focus_id, created_at DESC);
|
|
125
|
+
CREATE INDEX idx_focus_insights_focus
|
|
126
|
+
ON focus_insights(focus_id, status, created_at DESC);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS home_attention_acknowledgements (
|
|
2
|
+
subject_kind TEXT NOT NULL CHECK (subject_kind IN ('automation_run', 'workflow_run')),
|
|
3
|
+
subject_id TEXT NOT NULL,
|
|
4
|
+
acknowledged_at INTEGER NOT NULL,
|
|
5
|
+
PRIMARY KEY (subject_kind, subject_id)
|
|
6
|
+
);
|
|
7
|
+
|
|
8
|
+
CREATE INDEX IF NOT EXISTS idx_home_attention_acknowledged_at
|
|
9
|
+
ON home_attention_acknowledgements(acknowledged_at DESC);
|
|
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
|
|
|
3
3
|
/** Baseline schema version applied from schema.sql on first open. */
|
|
4
4
|
export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
5
5
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
6
|
-
export declare const XOPC_DB_SCHEMA_VERSION =
|
|
6
|
+
export declare const XOPC_DB_SCHEMA_VERSION = 67;
|
|
7
7
|
export declare function resolveMigrationsDir(override?: string): string;
|
|
8
8
|
/**
|
|
9
9
|
* Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
|
|
@@ -12,7 +12,7 @@ const log = createLogger("Sqlite:Migrations");
|
|
|
12
12
|
/** Baseline schema version applied from schema.sql on first open. */
|
|
13
13
|
const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
14
14
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
15
|
-
const XOPC_DB_SCHEMA_VERSION =
|
|
15
|
+
const XOPC_DB_SCHEMA_VERSION = 67;
|
|
16
16
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
17
17
|
function resolveMigrationsDir(override) {
|
|
18
18
|
if (override) return override;
|
|
@@ -46,7 +46,7 @@ function applySingleMigration(db, migration) {
|
|
|
46
46
|
* Each step runs in its own transaction and updates schema_meta on success.
|
|
47
47
|
*/
|
|
48
48
|
function applyPendingMigrations(db, options = {}) {
|
|
49
|
-
const targetVersion = options.targetVersion ??
|
|
49
|
+
const targetVersion = options.targetVersion ?? 67;
|
|
50
50
|
let currentVersion = readSchemaVersion(db);
|
|
51
51
|
if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
|
|
52
52
|
if (currentVersion >= targetVersion) return currentVersion;
|
|
@@ -62,7 +62,7 @@ function applyPendingMigrations(db, options = {}) {
|
|
|
62
62
|
}
|
|
63
63
|
/** Inspect schema version without mutating the database. */
|
|
64
64
|
function inspectSchemaMigrationStatus(db, options = {}) {
|
|
65
|
-
const appVersion = options.targetVersion ??
|
|
65
|
+
const appVersion = options.targetVersion ?? 67;
|
|
66
66
|
const dbVersion = readSchemaVersion(db);
|
|
67
67
|
if (dbVersion > appVersion) return {
|
|
68
68
|
dbVersion,
|
|
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
|
|
|
19
19
|
export const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
20
20
|
|
|
21
21
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
22
|
-
export const XOPC_DB_SCHEMA_VERSION =
|
|
22
|
+
export const XOPC_DB_SCHEMA_VERSION = 67;
|
|
23
23
|
|
|
24
24
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
25
25
|
|
|
@@ -31,7 +31,7 @@ function ensureXopcDatabaseSchema(db) {
|
|
|
31
31
|
bootstrapFreshDatabase(db);
|
|
32
32
|
currentVersion = 11;
|
|
33
33
|
}
|
|
34
|
-
applyPendingMigrations(db, { targetVersion:
|
|
34
|
+
applyPendingMigrations(db, { targetVersion: 67 });
|
|
35
35
|
}
|
|
36
36
|
//#endregion
|
|
37
37
|
export { SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, ensureSchemaMetaTable, ensureXopcDatabaseSchema, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion };
|
|
@@ -189,6 +189,16 @@ CREATE INDEX IF NOT EXISTS idx_workflow_runs_definition_created
|
|
|
189
189
|
CREATE INDEX IF NOT EXISTS idx_workflow_runs_created
|
|
190
190
|
ON workflow_runs(agent_id, created_at_ms DESC);
|
|
191
191
|
|
|
192
|
+
CREATE TABLE IF NOT EXISTS home_attention_acknowledgements (
|
|
193
|
+
subject_kind TEXT NOT NULL CHECK (subject_kind IN ('automation_run', 'workflow_run')),
|
|
194
|
+
subject_id TEXT NOT NULL,
|
|
195
|
+
acknowledged_at INTEGER NOT NULL,
|
|
196
|
+
PRIMARY KEY (subject_kind, subject_id)
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
CREATE INDEX IF NOT EXISTS idx_home_attention_acknowledged_at
|
|
200
|
+
ON home_attention_acknowledgements(acknowledged_at DESC);
|
|
201
|
+
|
|
192
202
|
CREATE TABLE IF NOT EXISTS notes (
|
|
193
203
|
note_id TEXT PRIMARY KEY,
|
|
194
204
|
title TEXT,
|
|
@@ -3,8 +3,8 @@ import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.
|
|
|
3
3
|
import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir, resolveUserProfilePath } from "../config/paths.js";
|
|
4
4
|
import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
|
|
5
5
|
import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
|
|
6
|
-
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
7
6
|
import { loadSkills } from "../agent/skills/index.js";
|
|
7
|
+
import { createWorkflowCatalog } from "../agent/workflow/catalog.js";
|
|
8
8
|
import { listConnectorInstances } from "../connectors/instances.js";
|
|
9
9
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
10
10
|
import "../config/index.js";
|
|
@@ -9,7 +9,5 @@ export * from './investigation-repository.js';
|
|
|
9
9
|
export * from './investigator.js';
|
|
10
10
|
export * from './incremental.js';
|
|
11
11
|
export * from './incremental-repository.js';
|
|
12
|
-
export * from './governance.js';
|
|
13
12
|
export * from './evaluation.js';
|
|
14
|
-
export * from './thread-repository.js';
|
|
15
13
|
export * from './thread-service.js';
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { addWorkUnderstandingThreadFeedback, attachWorkUnderstandingThreadEvidence, getWorkUnderstandingThread, getWorkUnderstandingThreadByCanonicalKey, listWorkUnderstandingThreads, upsertWorkUnderstandingThread } from "./thread-repository.js";
|
|
2
1
|
import { WORK_DISCOVERY_SCAN_POLICY_VERSION, canonicalWorkDiscoveryRoot, previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, readWorkDiscoveryTextExcerpt, searchWorkDiscoveryText, summarizeWorkContextSnapshot } from "./probe.js";
|
|
3
2
|
import { analyzePersonalContext, analyzeWorkContext, workDiscoveryResultMarkdown } from "./analyzer.js";
|
|
4
3
|
import { discoverWorkCandidates } from "./candidate-discovery.js";
|
|
5
|
-
import { deleteWorkUnderstandingDerivedData, getWorkUnderstandingMetrics, getWorkUnderstandingSourceLineage } from "./governance.js";
|
|
6
4
|
import { workDiscoveryFingerprintsEqual } from "./incremental.js";
|
|
7
5
|
import { findActiveWorkDiscoverySourceRefresh, listWorkDiscoverySourceRefreshes, recordWorkDiscoverySourceRefresh, updateWorkDiscoverySourceRefreshForRun } from "./incremental-repository.js";
|
|
8
6
|
import { appendWorkUnderstandingEvidence, createWorkUnderstandingInvestigation, getWorkUnderstandingInvestigation, getWorkUnderstandingInvestigationForRun, listWorkUnderstandingEvidence, resetWorkUnderstandingInvestigation, updateWorkUnderstandingEvidenceObservation, updateWorkUnderstandingInvestigation } from "./investigation-repository.js";
|
|
@@ -12,4 +10,4 @@ import { createWorkDiscoveryRun, getWorkDiscoveryOnboardingState, getWorkDiscove
|
|
|
12
10
|
import { getWorkDiscoveryDirectorySource, listWorkDiscoveryDirectorySources, revokeWorkDiscoveryDirectorySource, upsertWorkDiscoveryDirectorySource } from "./source-repository.js";
|
|
13
11
|
import { WorkDiscoveryService } from "./service.js";
|
|
14
12
|
import { evaluateWorkUnderstandingCase } from "./evaluation.js";
|
|
15
|
-
export { DEFAULT_WORK_INVESTIGATION_BUDGET, WORK_DISCOVERY_SCAN_POLICY_VERSION, WorkDiscoveryService,
|
|
13
|
+
export { DEFAULT_WORK_INVESTIGATION_BUDGET, WORK_DISCOVERY_SCAN_POLICY_VERSION, WorkDiscoveryService, analyzePersonalContext, analyzeWorkContext, appendWorkUnderstandingEvidence, canonicalWorkDiscoveryRoot, createWorkDiscoveryRun, createWorkUnderstandingInvestigation, discoverWorkCandidates, evaluateWorkUnderstandingCase, findActiveWorkDiscoverySourceRefresh, getWorkDiscoveryDirectorySource, getWorkDiscoveryOnboardingState, getWorkDiscoveryRun, getWorkDiscoveryRunByIdempotencyKey, getWorkUnderstandingInvestigation, getWorkUnderstandingInvestigationForRun, investigateWorkContext, listWorkDiscoveryDirectorySources, listWorkDiscoverySourceRefreshes, listWorkUnderstandingEvidence, persistWorkThreadsFromDiscovery, previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, readWorkDiscoveryTextExcerpt, recordWorkDiscoverySourceRefresh, resetWorkUnderstandingInvestigation, revokeWorkDiscoveryDirectorySource, searchWorkDiscoveryText, setWorkDiscoveryFeedback, setWorkDiscoveryOnboardingState, summarizeWorkContextSnapshot, updateWorkDiscoveryRun, updateWorkDiscoverySourceRefreshForRun, updateWorkUnderstandingEvidenceObservation, updateWorkUnderstandingInvestigation, upsertWorkDiscoveryDirectorySource, workDiscoveryFingerprintsEqual, workDiscoveryResultMarkdown };
|
|
@@ -22,36 +22,6 @@ export declare class WorkDiscoveryService {
|
|
|
22
22
|
investigation: import("./types.js").WorkUnderstandingInvestigation;
|
|
23
23
|
evidence: import("./types.js").WorkUnderstandingEvidenceItem[];
|
|
24
24
|
};
|
|
25
|
-
listWorkThreads(options?: {
|
|
26
|
-
projectId?: string;
|
|
27
|
-
includeRejected?: boolean;
|
|
28
|
-
limit?: number;
|
|
29
|
-
}): import("./types.js").WorkUnderstandingThread[];
|
|
30
|
-
getWorkThread(id: string): import("./types.js").WorkUnderstandingThread;
|
|
31
|
-
getSourceLineage(sourceId: string): import("./governance.js").WorkUnderstandingSourceLineage;
|
|
32
|
-
deleteSourceDerivedData(sourceId: string): {
|
|
33
|
-
deletedMemoryRecords: number;
|
|
34
|
-
evidenceCount: number | bigint;
|
|
35
|
-
deletedThreads: number;
|
|
36
|
-
retainedThreads: number;
|
|
37
|
-
};
|
|
38
|
-
getUnderstandingMetrics(): {
|
|
39
|
-
completedInvestigations: number;
|
|
40
|
-
averageToolCalls: number;
|
|
41
|
-
activeThreads: number;
|
|
42
|
-
confirmedThreads: number;
|
|
43
|
-
recognitionConfirmationRate: number;
|
|
44
|
-
evidenceBySource: {
|
|
45
|
-
sourceType: string;
|
|
46
|
-
count: number;
|
|
47
|
-
}[];
|
|
48
|
-
};
|
|
49
|
-
updateWorkThread(input: {
|
|
50
|
-
id: string;
|
|
51
|
-
decision: 'confirmed' | 'corrected' | 'rejected' | 'paused' | 'completed';
|
|
52
|
-
correctedTitle?: string;
|
|
53
|
-
correctedSummary?: string;
|
|
54
|
-
}): import("./types.js").WorkUnderstandingThread;
|
|
55
25
|
discoverCandidates(signal?: AbortSignal): Promise<WorkDiscoveryCandidate[]>;
|
|
56
26
|
listDirectorySources(): import("./types.js").WorkDiscoveryDirectorySource[];
|
|
57
27
|
grantDirectorySource(rootPath: string): Promise<import("./types.js").WorkDiscoveryDirectorySource>;
|
|
@@ -8,11 +8,9 @@ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
|
|
|
8
8
|
import { buildSessionKey, init_session_key } from "../routing/session-key.js";
|
|
9
9
|
import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
10
10
|
import { nextMemoryReviewAt } from "../agent/memory/lifecycle.js";
|
|
11
|
-
import { addWorkUnderstandingThreadFeedback, attachWorkUnderstandingThreadEvidence, getWorkUnderstandingThread, listWorkUnderstandingThreads } from "./thread-repository.js";
|
|
12
11
|
import { previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, summarizeWorkContextSnapshot } from "./probe.js";
|
|
13
12
|
import { analyzePersonalContext, analyzeWorkContext, workDiscoveryResultMarkdown } from "./analyzer.js";
|
|
14
13
|
import { discoverWorkCandidates } from "./candidate-discovery.js";
|
|
15
|
-
import { deleteWorkUnderstandingDerivedData, getWorkUnderstandingMetrics, getWorkUnderstandingSourceLineage } from "./governance.js";
|
|
16
14
|
import { workDiscoveryFingerprintsEqual } from "./incremental.js";
|
|
17
15
|
import { findActiveWorkDiscoverySourceRefresh, recordWorkDiscoverySourceRefresh, updateWorkDiscoverySourceRefreshForRun } from "./incremental-repository.js";
|
|
18
16
|
import { appendWorkUnderstandingEvidence, getWorkUnderstandingInvestigationForRun, listWorkUnderstandingEvidence } from "./investigation-repository.js";
|
|
@@ -99,29 +97,6 @@ var WorkDiscoveryService = class {
|
|
|
99
97
|
evidence: listWorkUnderstandingEvidence(investigation.id)
|
|
100
98
|
} : null;
|
|
101
99
|
}
|
|
102
|
-
listWorkThreads(options = {}) {
|
|
103
|
-
return listWorkUnderstandingThreads(options);
|
|
104
|
-
}
|
|
105
|
-
getWorkThread(id) {
|
|
106
|
-
return getWorkUnderstandingThread(id);
|
|
107
|
-
}
|
|
108
|
-
getSourceLineage(sourceId) {
|
|
109
|
-
return getWorkUnderstandingSourceLineage(sourceId);
|
|
110
|
-
}
|
|
111
|
-
deleteSourceDerivedData(sourceId) {
|
|
112
|
-
return deleteWorkUnderstandingDerivedData(sourceId);
|
|
113
|
-
}
|
|
114
|
-
getUnderstandingMetrics() {
|
|
115
|
-
return getWorkUnderstandingMetrics();
|
|
116
|
-
}
|
|
117
|
-
updateWorkThread(input) {
|
|
118
|
-
return addWorkUnderstandingThreadFeedback({
|
|
119
|
-
threadId: input.id,
|
|
120
|
-
decision: input.decision,
|
|
121
|
-
correctedTitle: input.correctedTitle,
|
|
122
|
-
correctedSummary: input.correctedSummary
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
100
|
async discoverCandidates(signal) {
|
|
126
101
|
return discoverWorkCandidates({
|
|
127
102
|
existingProjects: this.options.projects.list({
|
|
@@ -903,7 +878,7 @@ var WorkDiscoveryService = class {
|
|
|
903
878
|
const investigation = getWorkUnderstandingInvestigationForRun(run.id);
|
|
904
879
|
if (investigation && input.decision !== "dismissed") {
|
|
905
880
|
const observation = correctedIntent ? `The user explicitly stated their current intent: ${correctedIntent}` : "The user explicitly confirmed the inferred current work understanding.";
|
|
906
|
-
|
|
881
|
+
appendWorkUnderstandingEvidence({
|
|
907
882
|
investigationId: investigation.id,
|
|
908
883
|
projectId: run.projectId,
|
|
909
884
|
sourceType: "user_statement",
|
|
@@ -913,15 +888,6 @@ var WorkDiscoveryService = class {
|
|
|
913
888
|
observedAt: Date.now(),
|
|
914
889
|
sensitivity: "normal"
|
|
915
890
|
});
|
|
916
|
-
const currentThreads = listWorkUnderstandingThreads({
|
|
917
|
-
projectId: run.projectId,
|
|
918
|
-
limit: 50
|
|
919
|
-
}).filter((thread) => thread.horizon === "current").slice(0, 3);
|
|
920
|
-
for (const thread of currentThreads) attachWorkUnderstandingThreadEvidence({
|
|
921
|
-
threadId: thread.id,
|
|
922
|
-
evidenceId: evidence.id,
|
|
923
|
-
projectId: run.projectId
|
|
924
|
-
});
|
|
925
891
|
}
|
|
926
892
|
if (run.source === "onboarding_selected_directory") setWorkDiscoveryOnboardingState({
|
|
927
893
|
status: input.decision === "dismissed" ? "dismissed" : "completed",
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { WorkContextSnapshot, WorkDiscoveryResult, WorkUnderstandingEvidenceItem, WorkUnderstandingThread } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Discovery produces suggestions only. The user turns a suggestion into a Focus explicitly.
|
|
4
|
+
* The legacy thread-shaped return value remains local to the discovery result renderer; it is
|
|
5
|
+
* not a second persisted domain model.
|
|
6
|
+
*/
|
|
2
7
|
export declare function persistWorkThreadsFromDiscovery(input: {
|
|
3
8
|
projectId: string;
|
|
4
9
|
result: WorkDiscoveryResult;
|
|
@@ -1,104 +1,52 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { upsertFocusCandidate } from "../focuses/candidate-repository.js";
|
|
2
2
|
//#region src/work-discovery/thread-service.ts
|
|
3
3
|
function confidenceValue(value) {
|
|
4
4
|
return value === "high" ? .9 : value === "medium" ? .72 : .55;
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (days <= 14) return 24;
|
|
12
|
-
if (days <= 30) return 14;
|
|
13
|
-
return 5;
|
|
14
|
-
}
|
|
15
|
-
function focusScore(input) {
|
|
16
|
-
const latest = input.evidence.reduce((value, item) => item.observedAt != null && (value == null || item.observedAt > value) ? item.observedAt : value, void 0);
|
|
17
|
-
const commitDays = new Set((input.snapshot.git?.recentCommits ?? []).flatMap((commit) => commit.committedAt ? [new Date(commit.committedAt).toISOString().slice(0, 10)] : []));
|
|
18
|
-
const sourceTypes = new Set(input.evidence.map((item) => item.sourceType));
|
|
19
|
-
const continuity = Math.min(20, commitDays.size * 5);
|
|
20
|
-
const corroboration = Math.min(15, input.evidence.length * 3 + Math.max(0, sourceTypes.size - 1) * 5);
|
|
21
|
-
const unfinished = input.candidate.status === "active" ? 15 : input.candidate.status === "blocked" ? 12 : 3;
|
|
22
|
-
const confidence = Math.round(confidenceValue(input.candidate.confidence) * 10);
|
|
23
|
-
const horizonAdjustment = input.candidate.horizon === "current" ? 0 : input.candidate.horizon === "ongoing" ? -4 : -8;
|
|
24
|
-
return Math.max(0, Math.min(100, Math.round(recencyPoints(latest, input.nowMs) + continuity + corroboration + unfinished + confidence + horizonAdjustment)));
|
|
25
|
-
}
|
|
26
|
-
function fallbackCandidate(result, evidence) {
|
|
27
|
-
return {
|
|
28
|
-
topicKey: "current-project-work",
|
|
29
|
-
title: result.projectSummary.slice(0, 200),
|
|
30
|
-
summary: result.currentState.slice(0, 2e3),
|
|
31
|
-
status: result.lowConfidence ? "uncertain" : "active",
|
|
32
|
-
horizon: "current",
|
|
33
|
-
confidence: result.lowConfidence ? "low" : "medium",
|
|
34
|
-
evidenceRefs: evidence.slice(0, 6).map((item) => item.sourceRef)
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function titleTokens(value) {
|
|
38
|
-
return new Set(value.toLocaleLowerCase().match(/[\p{L}\p{N}]{2,}/gu)?.filter((token) => ![
|
|
39
|
-
"the",
|
|
40
|
-
"and",
|
|
41
|
-
"for",
|
|
42
|
-
"with",
|
|
43
|
-
"from",
|
|
44
|
-
"this",
|
|
45
|
-
"that"
|
|
46
|
-
].includes(token)).slice(0, 30) ?? []);
|
|
47
|
-
}
|
|
48
|
-
function titleSimilarity(left, right) {
|
|
49
|
-
const leftTokens = titleTokens(left);
|
|
50
|
-
const rightTokens = titleTokens(right);
|
|
51
|
-
if (!leftTokens.size || !rightTokens.size) return 0;
|
|
52
|
-
return [...leftTokens].filter((token) => rightTokens.has(token)).length / Math.max(leftTokens.size, rightTokens.size);
|
|
53
|
-
}
|
|
54
|
-
function canonicalKeyForCandidate(input) {
|
|
55
|
-
const proposed = `${input.projectId}:${input.candidate.horizon}:${input.candidate.topicKey}`.slice(0, 300);
|
|
56
|
-
const existing = listWorkUnderstandingThreads({
|
|
57
|
-
projectId: input.projectId,
|
|
58
|
-
includeRejected: true,
|
|
59
|
-
limit: 100
|
|
60
|
-
});
|
|
61
|
-
const exact = existing.find((thread) => thread.canonicalKey === proposed);
|
|
62
|
-
if (exact) return exact.canonicalKey;
|
|
63
|
-
return existing.filter((thread) => thread.horizon === input.candidate.horizon && thread.userStatus !== "rejected").map((thread) => ({
|
|
64
|
-
thread,
|
|
65
|
-
similarity: titleSimilarity(thread.title, input.candidate.title)
|
|
66
|
-
})).filter((item) => item.similarity >= .5).sort((left, right) => right.similarity - left.similarity)[0]?.thread.canonicalKey ?? proposed;
|
|
67
|
-
}
|
|
6
|
+
/**
|
|
7
|
+
* Discovery produces suggestions only. The user turns a suggestion into a Focus explicitly.
|
|
8
|
+
* The legacy thread-shaped return value remains local to the discovery result renderer; it is
|
|
9
|
+
* not a second persisted domain model.
|
|
10
|
+
*/
|
|
68
11
|
function persistWorkThreadsFromDiscovery(input) {
|
|
69
12
|
const nowMs = input.nowMs ?? Date.now();
|
|
70
|
-
|
|
71
|
-
const persist = (candidate) => {
|
|
13
|
+
return (input.result.workThreadCandidates ?? []).flatMap((candidate) => {
|
|
72
14
|
const evidence = candidate.evidenceRefs.flatMap((ref) => {
|
|
73
|
-
const
|
|
74
|
-
return
|
|
15
|
+
const item = input.evidence.find((entry) => entry.sourceRef === ref);
|
|
16
|
+
return item ? [{
|
|
17
|
+
label: item.observation.slice(0, 300),
|
|
18
|
+
source: item.sourceRef
|
|
19
|
+
}] : [];
|
|
75
20
|
});
|
|
76
|
-
if (
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
candidate
|
|
81
|
-
}),
|
|
21
|
+
if (evidence.length === 0) return [];
|
|
22
|
+
const canonicalKey = `${input.projectId}:${candidate.horizon}:${candidate.topicKey}`.slice(0, 300);
|
|
23
|
+
const stored = upsertFocusCandidate({
|
|
24
|
+
canonicalKey,
|
|
82
25
|
title: candidate.title,
|
|
83
26
|
summary: candidate.summary,
|
|
84
|
-
status: candidate.status,
|
|
85
|
-
horizon: candidate.horizon,
|
|
86
|
-
focusScore: focusScore({
|
|
87
|
-
candidate,
|
|
88
|
-
evidence,
|
|
89
|
-
snapshot: input.snapshot,
|
|
90
|
-
nowMs
|
|
91
|
-
}),
|
|
92
27
|
confidence: confidenceValue(candidate.confidence),
|
|
28
|
+
evidence,
|
|
93
29
|
projectIds: [input.projectId],
|
|
94
|
-
evidenceIds: evidence.map((item) => item.id),
|
|
95
|
-
observedAt: evidence.reduce((latest, item) => Math.max(latest, item.observedAt ?? nowMs), 0) || nowMs,
|
|
96
30
|
nowMs
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
31
|
+
});
|
|
32
|
+
return [{
|
|
33
|
+
id: stored.id,
|
|
34
|
+
canonicalKey,
|
|
35
|
+
title: stored.title,
|
|
36
|
+
summary: stored.summary,
|
|
37
|
+
status: candidate.status,
|
|
38
|
+
horizon: candidate.horizon,
|
|
39
|
+
focusScore: Math.round(stored.confidence * 100),
|
|
40
|
+
confidence: stored.confidence,
|
|
41
|
+
userStatus: "unreviewed",
|
|
42
|
+
projectIds: stored.projectIds,
|
|
43
|
+
evidenceIds: [],
|
|
44
|
+
firstObservedAt: stored.discoveredAt,
|
|
45
|
+
lastObservedAt: stored.updatedAt,
|
|
46
|
+
createdAt: stored.discoveredAt,
|
|
47
|
+
updatedAt: stored.updatedAt
|
|
48
|
+
}];
|
|
49
|
+
});
|
|
102
50
|
}
|
|
103
51
|
//#endregion
|
|
104
52
|
export { persistWorkThreadsFromDiscovery };
|
|
@@ -4,8 +4,8 @@ import { publishAutomationProductEvent } from "../../automations/product-events.
|
|
|
4
4
|
import { GoalService } from "../../goals/goal-service.js";
|
|
5
5
|
import "../../goals/index.js";
|
|
6
6
|
import { DelegateSubagentRunner } from "../../agent/workflow/subagent-runner.js";
|
|
7
|
-
import { resolveModelRef } from "../../config/agent-typed-models.js";
|
|
8
7
|
import { preflightWorkflowConnectors } from "../../connectors/workflow-preflight.js";
|
|
8
|
+
import { resolveModelRef } from "../../config/agent-typed-models.js";
|
|
9
9
|
import { CatalogWorkflowDefinitionRegistry } from "../registry/catalog-workflow-definition-registry.js";
|
|
10
10
|
import { validateWorkflowJsonSchema } from "../domain/schema-validation.js";
|
|
11
11
|
import { isTerminalWorkflowRunStatus } from "../domain/run.js";
|
package/package.json
CHANGED