@wirecat/cli-core 0.279.0 → 0.281.0
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/background/schedules.d.ts +1 -1
- package/dist/background/schedules.d.ts.map +1 -1
- package/dist/background/schedules.js +3 -1
- package/dist/background/schedules.js.map +1 -1
- package/dist/cli/app.d.ts +2 -0
- package/dist/cli/app.d.ts.map +1 -1
- package/dist/cli/app.js +6 -0
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/author.d.ts +6 -0
- package/dist/cli/author.d.ts.map +1 -1
- package/dist/cli/author.js +12 -0
- package/dist/cli/author.js.map +1 -1
- package/dist/cli/bot/command.js +6 -6
- package/dist/cli/bot/command.js.map +1 -1
- package/dist/cli/bot/moderation.js +3 -3
- package/dist/cli/bot/moderation.js.map +1 -1
- package/dist/cli/bot/people.d.ts.map +1 -1
- package/dist/cli/bot/people.js +6 -8
- package/dist/cli/bot/people.js.map +1 -1
- package/dist/cli/config-command.d.ts.map +1 -1
- package/dist/cli/config-command.js +10 -6
- package/dist/cli/config-command.js.map +1 -1
- package/dist/cli/effects.d.ts +7 -0
- package/dist/cli/effects.d.ts.map +1 -1
- package/dist/cli/effects.js +11 -0
- package/dist/cli/effects.js.map +1 -1
- package/dist/cli/envelope.d.ts +6 -1
- package/dist/cli/envelope.d.ts.map +1 -1
- package/dist/cli/envelope.js +22 -8
- package/dist/cli/envelope.js.map +1 -1
- package/dist/cli/index.d.ts +5 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/meeting-preparation-command.d.ts.map +1 -1
- package/dist/cli/meeting-preparation-command.js +13 -8
- package/dist/cli/meeting-preparation-command.js.map +1 -1
- package/dist/cli/messenger/admin-moderation-command.js +3 -3
- package/dist/cli/messenger/admin-moderation-command.js.map +1 -1
- package/dist/cli/messenger/conversations-command.d.ts.map +1 -1
- package/dist/cli/messenger/conversations-command.js +0 -3
- package/dist/cli/messenger/conversations-command.js.map +1 -1
- package/dist/cli/messenger/download-command.d.ts +15 -0
- package/dist/cli/messenger/download-command.d.ts.map +1 -1
- package/dist/cli/messenger/download-command.js +4 -6
- package/dist/cli/messenger/download-command.js.map +1 -1
- package/dist/cli/messenger/export-folder.d.ts.map +1 -1
- package/dist/cli/messenger/export-folder.js +3 -7
- package/dist/cli/messenger/export-folder.js.map +1 -1
- package/dist/cli/messenger/flood-command.js +2 -2
- package/dist/cli/messenger/flood-command.js.map +1 -1
- package/dist/cli/messenger/guard-commands.js +4 -4
- package/dist/cli/messenger/guard-commands.js.map +1 -1
- package/dist/cli/messenger/mcp-command.js +2 -2
- package/dist/cli/messenger/mcp-command.js.map +1 -1
- package/dist/cli/messenger/messages-search-command.d.ts +0 -1
- package/dist/cli/messenger/messages-search-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-search-command.js +6 -31
- package/dist/cli/messenger/messages-search-command.js.map +1 -1
- package/dist/cli/messenger/messages-stats-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-stats-command.js +0 -4
- package/dist/cli/messenger/messages-stats-command.js.map +1 -1
- package/dist/cli/messenger/models-command.js +3 -3
- package/dist/cli/messenger/models-command.js.map +1 -1
- package/dist/cli/messenger/rankings-command.d.ts.map +1 -1
- package/dist/cli/messenger/rankings-command.js +2 -3
- package/dist/cli/messenger/rankings-command.js.map +1 -1
- package/dist/cli/messenger/replies-command.js +3 -3
- package/dist/cli/messenger/replies-command.js.map +1 -1
- package/dist/cli/messenger/replies-consents-command.js +3 -3
- package/dist/cli/messenger/replies-consents-command.js.map +1 -1
- package/dist/cli/messenger/replies-edit-command.js +5 -5
- package/dist/cli/messenger/replies-edit-command.js.map +1 -1
- package/dist/cli/messenger/schedule-command.d.ts.map +1 -1
- package/dist/cli/messenger/schedule-command.js +8 -4
- package/dist/cli/messenger/schedule-command.js.map +1 -1
- package/dist/cli/messenger/search-answers.js +1 -1
- package/dist/cli/messenger/search-answers.js.map +1 -1
- package/dist/cli/messenger/searches-command.d.ts.map +1 -1
- package/dist/cli/messenger/searches-command.js +1 -4
- package/dist/cli/messenger/searches-command.js.map +1 -1
- package/dist/cli/messenger/server-command.js +3 -3
- package/dist/cli/messenger/server-command.js.map +1 -1
- package/dist/cli/messenger/tags-command.d.ts.map +1 -1
- package/dist/cli/messenger/tags-command.js +10 -7
- package/dist/cli/messenger/tags-command.js.map +1 -1
- package/dist/cli/messenger/tasks-command.d.ts.map +1 -1
- package/dist/cli/messenger/tasks-command.js +56 -10
- package/dist/cli/messenger/tasks-command.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +6 -2
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/reasons.d.ts.map +1 -1
- package/dist/cli/reasons.js +2 -0
- package/dist/cli/reasons.js.map +1 -1
- package/dist/cli/settings.d.ts.map +1 -1
- package/dist/cli/settings.js +2 -3
- package/dist/cli/settings.js.map +1 -1
- package/dist/cli/skill-command.d.ts.map +1 -1
- package/dist/cli/skill-command.js +8 -3
- package/dist/cli/skill-command.js.map +1 -1
- package/dist/cli/store-settings.js +4 -4
- package/dist/cli/store-settings.js.map +1 -1
- package/dist/cli/upgrade-command.js +2 -2
- package/dist/cli/upgrade-command.js.map +1 -1
- package/dist/domain/tags.d.ts +1 -1
- package/dist/domain/tags.d.ts.map +1 -1
- package/dist/domain/tags.js +1 -1
- package/dist/domain/tags.js.map +1 -1
- package/dist/entities/agenda.d.ts +4 -0
- package/dist/entities/agenda.d.ts.map +1 -1
- package/dist/entities/agenda.js +4 -0
- package/dist/entities/agenda.js.map +1 -1
- package/dist/entities/hit.d.ts +1 -1
- package/dist/entities/hit.js +1 -1
- package/dist/entities/hit.js.map +1 -1
- package/dist/entities/index.d.ts +55 -15
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/note.d.ts +17 -1
- package/dist/entities/note.d.ts.map +1 -1
- package/dist/entities/note.js +19 -8
- package/dist/entities/note.js.map +1 -1
- package/dist/entities/tagging.d.ts +1 -1
- package/dist/entities/task.d.ts +7 -0
- package/dist/entities/task.d.ts.map +1 -1
- package/dist/entities/task.js +7 -0
- package/dist/entities/task.js.map +1 -1
- package/dist/mcp/tools/messages-send.d.ts.map +1 -1
- package/dist/mcp/tools/messages-send.js +3 -2
- package/dist/mcp/tools/messages-send.js.map +1 -1
- package/dist/mcp/tools/rankings.d.ts.map +1 -1
- package/dist/mcp/tools/rankings.js +2 -3
- package/dist/mcp/tools/rankings.js.map +1 -1
- package/dist/mcp/tools/search.d.ts +2 -3
- package/dist/mcp/tools/search.d.ts.map +1 -1
- package/dist/mcp/tools/search.js +4 -11
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/searches.d.ts.map +1 -1
- package/dist/mcp/tools/searches.js +1 -3
- package/dist/mcp/tools/searches.js.map +1 -1
- package/dist/mcp/tools/tags.d.ts.map +1 -1
- package/dist/mcp/tools/tags.js +9 -7
- package/dist/mcp/tools/tags.js.map +1 -1
- package/dist/mcp/tools/tasks.d.ts.map +1 -1
- package/dist/mcp/tools/tasks.js +19 -6
- package/dist/mcp/tools/tasks.js.map +1 -1
- package/dist/search/account-list.d.ts +3 -1
- package/dist/search/account-list.d.ts.map +1 -1
- package/dist/search/account-list.js +4 -2
- package/dist/search/account-list.js.map +1 -1
- package/dist/search/lucene/registry.d.ts +1 -1
- package/dist/search/lucene/registry.d.ts.map +1 -1
- package/dist/search/lucene/registry.js +2 -2
- package/dist/search/lucene/registry.js.map +1 -1
- package/dist/search/query.d.ts +0 -28
- package/dist/search/query.d.ts.map +1 -1
- package/dist/search/query.js +0 -100
- package/dist/search/query.js.map +1 -1
- package/dist/search/task-signature.d.ts +19 -0
- package/dist/search/task-signature.d.ts.map +1 -0
- package/dist/search/task-signature.js +105 -0
- package/dist/search/task-signature.js.map +1 -0
- package/dist/search/task-similarity.d.ts +168 -0
- package/dist/search/task-similarity.d.ts.map +1 -0
- package/dist/search/task-similarity.js +177 -0
- package/dist/search/task-similarity.js.map +1 -0
- package/dist/sends/index.d.ts +1 -1
- package/dist/sends/index.d.ts.map +1 -1
- package/dist/sends/index.js +1 -1
- package/dist/sends/index.js.map +1 -1
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js +2 -0
- package/dist/sends/permissions.js.map +1 -1
- package/dist/sends/upload.d.ts +1 -1
- package/dist/sends/upload.d.ts.map +1 -1
- package/dist/sends/upload.js +87 -15
- package/dist/sends/upload.js.map +1 -1
- package/dist/services/admin-statistics.d.ts.map +1 -1
- package/dist/services/admin-statistics.js +5 -12
- package/dist/services/admin-statistics.js.map +1 -1
- package/dist/services/agenda.d.ts +5 -1
- package/dist/services/agenda.d.ts.map +1 -1
- package/dist/services/agenda.js +8 -1
- package/dist/services/agenda.js.map +1 -1
- package/dist/services/attachments.d.ts.map +1 -1
- package/dist/services/attachments.js +1 -1
- package/dist/services/attachments.js.map +1 -1
- package/dist/services/counters.d.ts.map +1 -1
- package/dist/services/counters.js +4 -8
- package/dist/services/counters.js.map +1 -1
- package/dist/services/embeddings-maintenance.d.ts +4 -6
- package/dist/services/embeddings-maintenance.d.ts.map +1 -1
- package/dist/services/embeddings-maintenance.js +14 -15
- package/dist/services/embeddings-maintenance.js.map +1 -1
- package/dist/services/embeddings-search.d.ts.map +1 -1
- package/dist/services/embeddings-search.js +1 -6
- package/dist/services/embeddings-search.js.map +1 -1
- package/dist/services/embeddings.d.ts +0 -2
- package/dist/services/embeddings.d.ts.map +1 -1
- package/dist/services/embeddings.js.map +1 -1
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +0 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/message-resolution.d.ts +1 -10
- package/dist/services/message-resolution.d.ts.map +1 -1
- package/dist/services/message-resolution.js +0 -59
- package/dist/services/message-resolution.js.map +1 -1
- package/dist/services/messages-archive-search.d.ts +1 -1
- package/dist/services/messages-archive-search.d.ts.map +1 -1
- package/dist/services/messages-archive-search.js +4 -50
- package/dist/services/messages-archive-search.js.map +1 -1
- package/dist/services/messages-combined.d.ts.map +1 -1
- package/dist/services/messages-combined.js +1 -5
- package/dist/services/messages-combined.js.map +1 -1
- package/dist/services/messages-discovery.js +1 -1
- package/dist/services/messages-discovery.js.map +1 -1
- package/dist/services/messages-search.d.ts.map +1 -1
- package/dist/services/messages-search.js +2 -6
- package/dist/services/messages-search.js.map +1 -1
- package/dist/services/messages.d.ts +2 -6
- package/dist/services/messages.d.ts.map +1 -1
- package/dist/services/messages.js +8 -20
- package/dist/services/messages.js.map +1 -1
- package/dist/services/notes-search.d.ts +1 -1
- package/dist/services/notes-search.d.ts.map +1 -1
- package/dist/services/notes-search.js +24 -8
- package/dist/services/notes-search.js.map +1 -1
- package/dist/services/notes-title-tier.d.ts +13 -0
- package/dist/services/notes-title-tier.d.ts.map +1 -0
- package/dist/services/notes-title-tier.js +41 -0
- package/dist/services/notes-title-tier.js.map +1 -0
- package/dist/services/pictures.js +1 -1
- package/dist/services/pictures.js.map +1 -1
- package/dist/services/rankings.d.ts.map +1 -1
- package/dist/services/rankings.js +5 -11
- package/dist/services/rankings.js.map +1 -1
- package/dist/services/retention.d.ts.map +1 -1
- package/dist/services/retention.js +1 -4
- package/dist/services/retention.js.map +1 -1
- package/dist/services/search-all.d.ts +1 -1
- package/dist/services/search-all.d.ts.map +1 -1
- package/dist/services/search-all.js +0 -1
- package/dist/services/search-all.js.map +1 -1
- package/dist/services/search-catchup.d.ts.map +1 -1
- package/dist/services/search-catchup.js +0 -1
- package/dist/services/search-catchup.js.map +1 -1
- package/dist/services/search-record.d.ts +0 -4
- package/dist/services/search-record.d.ts.map +1 -1
- package/dist/services/search-record.js +2 -3
- package/dist/services/search-record.js.map +1 -1
- package/dist/services/search-refresh.d.ts.map +1 -1
- package/dist/services/search-refresh.js +3 -9
- package/dist/services/search-refresh.js.map +1 -1
- package/dist/services/searches.d.ts +0 -1
- package/dist/services/searches.d.ts.map +1 -1
- package/dist/services/searches.js +13 -35
- package/dist/services/searches.js.map +1 -1
- package/dist/services/server-search.d.ts +1 -1
- package/dist/services/server-search.d.ts.map +1 -1
- package/dist/services/server-search.js +0 -3
- package/dist/services/server-search.js.map +1 -1
- package/dist/services/tags.d.ts +3 -0
- package/dist/services/tags.d.ts.map +1 -1
- package/dist/services/tags.js +13 -5
- package/dist/services/tags.js.map +1 -1
- package/dist/services/task-categories.d.ts +17 -0
- package/dist/services/task-categories.d.ts.map +1 -0
- package/dist/services/task-categories.js +113 -0
- package/dist/services/task-categories.js.map +1 -0
- package/dist/services/task-rules.d.ts.map +1 -1
- package/dist/services/task-rules.js +3 -0
- package/dist/services/task-rules.js.map +1 -1
- package/dist/services/tasks.d.ts +14 -3
- package/dist/services/tasks.d.ts.map +1 -1
- package/dist/services/tasks.js +58 -6
- package/dist/services/tasks.js.map +1 -1
- package/dist/services/thread-context.d.ts +1 -1
- package/dist/services/thread-context.d.ts.map +1 -1
- package/dist/services/thread-context.js +3 -9
- package/dist/services/thread-context.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/migrations.d.ts +2 -1
- package/dist/store/migrations.d.ts.map +1 -1
- package/dist/store/migrations.js +5 -2
- package/dist/store/migrations.js.map +1 -1
- package/dist/store/sqlite/attachment-texts.js +2 -2
- package/dist/store/sqlite/attachment-texts.js.map +1 -1
- package/dist/store/sqlite/backfill.d.ts.map +1 -1
- package/dist/store/sqlite/backfill.js +6 -11
- package/dist/store/sqlite/backfill.js.map +1 -1
- package/dist/store/sqlite/catalog.d.ts.map +1 -1
- package/dist/store/sqlite/catalog.js +3 -3
- package/dist/store/sqlite/catalog.js.map +1 -1
- package/dist/store/sqlite/conversations.d.ts.map +1 -1
- package/dist/store/sqlite/conversations.js +3 -8
- package/dist/store/sqlite/conversations.js.map +1 -1
- package/dist/store/sqlite/document-pictures.d.ts.map +1 -1
- package/dist/store/sqlite/document-pictures.js +3 -3
- package/dist/store/sqlite/document-pictures.js.map +1 -1
- package/dist/store/sqlite/email-index.js +4 -4
- package/dist/store/sqlite/email-index.js.map +1 -1
- package/dist/store/sqlite/emails.js +5 -5
- package/dist/store/sqlite/emails.js.map +1 -1
- package/dist/store/sqlite/facts.d.ts.map +1 -1
- package/dist/store/sqlite/facts.js +3 -3
- package/dist/store/sqlite/facts.js.map +1 -1
- package/dist/store/sqlite/folded.d.ts.map +1 -1
- package/dist/store/sqlite/folded.js +7 -12
- package/dist/store/sqlite/folded.js.map +1 -1
- package/dist/store/sqlite/index-state.d.ts +4 -0
- package/dist/store/sqlite/index-state.d.ts.map +1 -0
- package/dist/store/sqlite/index-state.js +8 -0
- package/dist/store/sqlite/index-state.js.map +1 -0
- package/dist/store/sqlite/involvement-queue.d.ts +1 -1
- package/dist/store/sqlite/involvement-queue.js +1 -1
- package/dist/store/sqlite/involvements.js +3 -3
- package/dist/store/sqlite/involvements.js.map +1 -1
- package/dist/store/sqlite/knowledge.d.ts.map +1 -1
- package/dist/store/sqlite/knowledge.js +15 -10
- package/dist/store/sqlite/knowledge.js.map +1 -1
- package/dist/store/sqlite/log-pruning.d.ts.map +1 -1
- package/dist/store/sqlite/log-pruning.js +3 -8
- package/dist/store/sqlite/log-pruning.js.map +1 -1
- package/dist/store/sqlite/lucene.d.ts.map +1 -1
- package/dist/store/sqlite/lucene.js +3 -8
- package/dist/store/sqlite/lucene.js.map +1 -1
- package/dist/store/sqlite/mail-rules.js +3 -3
- package/dist/store/sqlite/mail-rules.js.map +1 -1
- package/dist/store/sqlite/manifest.d.ts.map +1 -1
- package/dist/store/sqlite/manifest.js +1 -0
- package/dist/store/sqlite/manifest.js.map +1 -1
- package/dist/store/sqlite/meeting-context-links.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-context-links.js +8 -7
- package/dist/store/sqlite/meeting-context-links.js.map +1 -1
- package/dist/store/sqlite/meeting-hit-index.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-hit-index.js +4 -3
- package/dist/store/sqlite/meeting-hit-index.js.map +1 -1
- package/dist/store/sqlite/meeting-hit-search.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-hit-search.js +3 -2
- package/dist/store/sqlite/meeting-hit-search.js.map +1 -1
- package/dist/store/sqlite/meeting-operation.d.ts +0 -2
- package/dist/store/sqlite/meeting-operation.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-operation.js +0 -15
- package/dist/store/sqlite/meeting-operation.js.map +1 -1
- package/dist/store/sqlite/meeting-participant-search.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-participant-search.js +2 -2
- package/dist/store/sqlite/meeting-participant-search.js.map +1 -1
- package/dist/store/sqlite/meeting-preparation-context.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-preparation-context.js +2 -2
- package/dist/store/sqlite/meeting-preparation-context.js.map +1 -1
- package/dist/store/sqlite/meeting-projects.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-projects.js +2 -2
- package/dist/store/sqlite/meeting-projects.js.map +1 -1
- package/dist/store/sqlite/meeting-reads.d.ts +0 -3
- package/dist/store/sqlite/meeting-reads.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-reads.js +6 -18
- package/dist/store/sqlite/meeting-reads.js.map +1 -1
- package/dist/store/sqlite/meeting-series-history.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-series-history.js +2 -2
- package/dist/store/sqlite/meeting-series-history.js.map +1 -1
- package/dist/store/sqlite/meeting-vectors.d.ts.map +1 -1
- package/dist/store/sqlite/meeting-vectors.js +6 -6
- package/dist/store/sqlite/meeting-vectors.js.map +1 -1
- package/dist/store/sqlite/meetings.d.ts.map +1 -1
- package/dist/store/sqlite/meetings.js +6 -6
- package/dist/store/sqlite/meetings.js.map +1 -1
- package/dist/store/sqlite/memories.d.ts.map +1 -1
- package/dist/store/sqlite/memories.js +2 -2
- package/dist/store/sqlite/memories.js.map +1 -1
- package/dist/store/sqlite/mention-drain.d.ts +39 -0
- package/dist/store/sqlite/mention-drain.d.ts.map +1 -0
- package/dist/store/sqlite/mention-drain.js +147 -0
- package/dist/store/sqlite/mention-drain.js.map +1 -0
- package/dist/store/sqlite/mentions.d.ts +0 -4
- package/dist/store/sqlite/mentions.d.ts.map +1 -1
- package/dist/store/sqlite/mentions.js +7 -154
- package/dist/store/sqlite/mentions.js.map +1 -1
- package/dist/store/sqlite/migrations.generated.d.ts.map +1 -1
- package/dist/store/sqlite/migrations.generated.js +9 -0
- package/dist/store/sqlite/migrations.generated.js.map +1 -1
- package/dist/store/sqlite/note-index.d.ts.map +1 -1
- package/dist/store/sqlite/note-index.js +5 -4
- package/dist/store/sqlite/note-index.js.map +1 -1
- package/dist/store/sqlite/note-search.d.ts.map +1 -1
- package/dist/store/sqlite/note-search.js +3 -6
- package/dist/store/sqlite/note-search.js.map +1 -1
- package/dist/store/sqlite/notes.d.ts.map +1 -1
- package/dist/store/sqlite/notes.js +13 -14
- package/dist/store/sqlite/notes.js.map +1 -1
- package/dist/store/sqlite/proposed-actions.d.ts.map +1 -1
- package/dist/store/sqlite/proposed-actions.js +3 -3
- package/dist/store/sqlite/proposed-actions.js.map +1 -1
- package/dist/store/sqlite/schema.d.ts +87 -0
- package/dist/store/sqlite/schema.d.ts.map +1 -1
- package/dist/store/sqlite/schema.js +7 -0
- package/dist/store/sqlite/schema.js.map +1 -1
- package/dist/store/sqlite/search-index.d.ts +0 -3
- package/dist/store/sqlite/search-index.d.ts.map +1 -1
- package/dist/store/sqlite/search-index.js +10 -29
- package/dist/store/sqlite/search-index.js.map +1 -1
- package/dist/store/sqlite/search.d.ts +1 -1
- package/dist/store/sqlite/search.d.ts.map +1 -1
- package/dist/store/sqlite/search.js +4 -8
- package/dist/store/sqlite/search.js.map +1 -1
- package/dist/store/sqlite/searches.d.ts +1 -1
- package/dist/store/sqlite/searches.d.ts.map +1 -1
- package/dist/store/sqlite/stems-fill.d.ts +30 -0
- package/dist/store/sqlite/stems-fill.d.ts.map +1 -0
- package/dist/store/sqlite/stems-fill.js +119 -0
- package/dist/store/sqlite/stems-fill.js.map +1 -0
- package/dist/store/sqlite/stems.d.ts +14 -28
- package/dist/store/sqlite/stems.d.ts.map +1 -1
- package/dist/store/sqlite/stems.js +8 -123
- package/dist/store/sqlite/stems.js.map +1 -1
- package/dist/store/sqlite/tags.d.ts +10 -2
- package/dist/store/sqlite/tags.d.ts.map +1 -1
- package/dist/store/sqlite/tags.js +25 -7
- package/dist/store/sqlite/tags.js.map +1 -1
- package/dist/store/sqlite/task-keys.d.ts +16 -0
- package/dist/store/sqlite/task-keys.d.ts.map +1 -0
- package/dist/store/sqlite/task-keys.js +40 -0
- package/dist/store/sqlite/task-keys.js.map +1 -0
- package/dist/store/sqlite/task-relations.d.ts +1 -1
- package/dist/store/sqlite/task-relations.d.ts.map +1 -1
- package/dist/store/sqlite/task-relations.js +14 -9
- package/dist/store/sqlite/task-relations.js.map +1 -1
- package/dist/store/sqlite/tasks.d.ts +1 -7
- package/dist/store/sqlite/tasks.d.ts.map +1 -1
- package/dist/store/sqlite/tasks.js +23 -28
- package/dist/store/sqlite/tasks.js.map +1 -1
- package/dist/store/sqlite/transaction.d.ts +19 -0
- package/dist/store/sqlite/transaction.d.ts.map +1 -0
- package/dist/store/sqlite/transaction.js +77 -0
- package/dist/store/sqlite/transaction.js.map +1 -0
- package/dist/store/sqlite/vocabulary.d.ts.map +1 -1
- package/dist/store/sqlite/vocabulary.js +6 -18
- package/dist/store/sqlite/vocabulary.js.map +1 -1
- package/dist/store/sqlite/words.d.ts +1 -61
- package/dist/store/sqlite/words.d.ts.map +1 -1
- package/dist/store/sqlite/words.js +0 -225
- package/dist/store/sqlite/words.js.map +1 -1
- package/dist/store/sqlite/work-tasks.d.ts +15 -1
- package/dist/store/sqlite/work-tasks.d.ts.map +1 -1
- package/dist/store/sqlite/work-tasks.js +49 -5
- package/dist/store/sqlite/work-tasks.js.map +1 -1
- package/dist/store/store.d.ts +21 -41
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +52 -117
- package/dist/store/store.js.map +1 -1
- package/dist/tasks/model.d.ts +7 -0
- package/dist/tasks/model.d.ts.map +1 -1
- package/dist/tasks/model.js +2 -1
- package/dist/tasks/model.js.map +1 -1
- package/dist/tasks/service.d.ts +1 -0
- package/dist/tasks/service.d.ts.map +1 -1
- package/dist/tasks/service.js.map +1 -1
- package/package.json +1 -1
- package/parity.json +51 -23
- package/skills/follow-ups/SKILL.md +4 -2
- package/dist/embeddings/pool.d.ts +0 -17
- package/dist/embeddings/pool.d.ts.map +0 -1
- package/dist/embeddings/pool.js +0 -22
- package/dist/embeddings/pool.js.map +0 -1
- package/dist/embeddings/worker.d.ts +0 -2
- package/dist/embeddings/worker.d.ts.map +0 -1
- package/dist/embeddings/worker.js +0 -22
- package/dist/embeddings/worker.js.map +0 -1
- package/dist/embeddings/workers.d.ts +0 -8
- package/dist/embeddings/workers.d.ts.map +0 -1
- package/dist/embeddings/workers.js +0 -51
- package/dist/embeddings/workers.js.map +0 -1
- package/dist/search/legacy-regex.d.ts +0 -7
- package/dist/search/legacy-regex.d.ts.map +0 -1
- package/dist/search/legacy-regex.js +0 -48
- package/dist/search/legacy-regex.js.map +0 -1
- package/dist/search/lucene/migration.d.ts +0 -21
- package/dist/search/lucene/migration.d.ts.map +0 -1
- package/dist/search/lucene/migration.js +0 -31
- package/dist/search/lucene/migration.js.map +0 -1
- package/dist/search/search.d.ts +0 -27
- package/dist/search/search.d.ts.map +0 -1
- package/dist/search/search.js +0 -66
- package/dist/search/search.js.map +0 -1
- package/dist/services/message-query-validation.d.ts +0 -3
- package/dist/services/message-query-validation.d.ts.map +0 -1
- package/dist/services/message-query-validation.js +0 -14
- package/dist/services/message-query-validation.js.map +0 -1
- package/dist/store/sqlite/atomic.d.ts +0 -8
- package/dist/store/sqlite/atomic.d.ts.map +0 -1
- package/dist/store/sqlite/atomic.js +0 -28
- package/dist/store/sqlite/atomic.js.map +0 -1
- package/dist/store/sqlite/legacy-regex.d.ts +0 -7
- package/dist/store/sqlite/legacy-regex.d.ts.map +0 -1
- package/dist/store/sqlite/legacy-regex.js +0 -42
- package/dist/store/sqlite/legacy-regex.js.map +0 -1
- package/dist/store/sqlite/read-snapshot.d.ts +0 -4
- package/dist/store/sqlite/read-snapshot.d.ts.map +0 -1
- package/dist/store/sqlite/read-snapshot.js +0 -14
- package/dist/store/sqlite/read-snapshot.js.map +0 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
import { analyzerIdentity, createStemmer, DEFAULT_STEMMERS, DEFAULT_STEMMERS_VERSION, SNOWBALL_VERSION, } from "../../search/stem.js";
|
|
3
|
+
import { claim, INDEX, nextQueued, savedStemmers, saveStoreStemmers, stemmersOrigin, stemsState, stemWriter, storeStemmers, } from "./stems.js";
|
|
4
|
+
import { writeBatch } from "./transaction.js";
|
|
5
|
+
/**
|
|
6
|
+
* Brings the stems towards "ready" in short write transactions: the messages up to the watermark, then
|
|
7
|
+
* the queue. One stemmer per run, so its cache serves every batch. Never rebuilds: a row built by other
|
|
8
|
+
* choices is left for `store migrate` or `store reindex`.
|
|
9
|
+
*/
|
|
10
|
+
export const fillStems = (database, { batch = 5_000, until = () => false, onBatch, now = Date.now, } = {}) => {
|
|
11
|
+
const filled = { stemmed: 0, drained: 0 };
|
|
12
|
+
const before = stemsState(database);
|
|
13
|
+
// Every search asks; when all is built, or the row waits for a rebuild, it must not take the write lock.
|
|
14
|
+
const stemmers = storeStemmers(database);
|
|
15
|
+
if (!before || before.ready || before.cause !== "building" || !stemmers)
|
|
16
|
+
return filled;
|
|
17
|
+
const identity = analyzerIdentity(stemmers);
|
|
18
|
+
const stemmer = createStemmer(stemmers);
|
|
19
|
+
const writer = stemWriter(database, stemmer);
|
|
20
|
+
const advance = database.prepare("UPDATE search_index_state SET filled_through = ? WHERE name = ?");
|
|
21
|
+
for (;;) {
|
|
22
|
+
const state = stemsState(database);
|
|
23
|
+
if (!state || state.filledThrough >= state.watermark || until())
|
|
24
|
+
break;
|
|
25
|
+
const to = Math.min(state.filledThrough + batch, state.watermark);
|
|
26
|
+
const done = writeBatch(database, () => {
|
|
27
|
+
if (!claim(database, identity))
|
|
28
|
+
return undefined;
|
|
29
|
+
const count = writer.range(state.filledThrough, to);
|
|
30
|
+
advance.run(to, INDEX);
|
|
31
|
+
return count;
|
|
32
|
+
});
|
|
33
|
+
if (done === undefined)
|
|
34
|
+
return filled;
|
|
35
|
+
filled.stemmed += done;
|
|
36
|
+
onBatch?.("stemmed", filled.stemmed);
|
|
37
|
+
}
|
|
38
|
+
for (;;) {
|
|
39
|
+
if (until())
|
|
40
|
+
break;
|
|
41
|
+
const done = writeBatch(database, () => {
|
|
42
|
+
const pks = nextQueued(database, batch);
|
|
43
|
+
return pks.length === 0 || !claim(database, identity) ? 0 : writer.queued(pks);
|
|
44
|
+
});
|
|
45
|
+
if (done === 0)
|
|
46
|
+
break;
|
|
47
|
+
filled.drained += done;
|
|
48
|
+
onBatch?.("drained", filled.drained);
|
|
49
|
+
}
|
|
50
|
+
const state = stemsState(database);
|
|
51
|
+
if (state && state.filledThrough >= state.watermark && state.builtAt === null && state.built === identity) {
|
|
52
|
+
database.prepare("UPDATE search_index_state SET built_at = ? WHERE name = ?").run(now(), INDEX);
|
|
53
|
+
}
|
|
54
|
+
return filled;
|
|
55
|
+
};
|
|
56
|
+
const snowballOf = (identity) => (/^snowball-(\d+)\.(\d+)\.(\d+)/.exec(identity)?.slice(1) ?? []).map(Number);
|
|
57
|
+
const newer = (a, b) => {
|
|
58
|
+
for (let i = 0; i < 3; i++)
|
|
59
|
+
if ((a[i] ?? 0) !== (b[i] ?? 0))
|
|
60
|
+
return (a[i] ?? 0) > (b[i] ?? 0);
|
|
61
|
+
return false;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Empties the stems and starts them again from the newest message, claimed by the store's setting —
|
|
65
|
+
* for `store reindex`, and for `store migrate` when the stems were built by other choices. A row built
|
|
66
|
+
* by a newer Snowball than this binary has is refused: rebuilding it would downgrade every newer tool.
|
|
67
|
+
*/
|
|
68
|
+
export const resetStems = (database, { force = false, now = Date.now } = {}) => {
|
|
69
|
+
const state = stemsState(database);
|
|
70
|
+
if (!state)
|
|
71
|
+
return false;
|
|
72
|
+
if (!force && state.cause !== "stemmer_changed" && state.cause !== "stemmer_unknown")
|
|
73
|
+
return false;
|
|
74
|
+
if (state.cause === "stemmer_unknown") {
|
|
75
|
+
throw new CliError("validation_error", "the store asks for stemmers this tool does not know — upgrade this tool, or choose again with config set search_stemmers.*", { reason: "stemmer.unknown" });
|
|
76
|
+
}
|
|
77
|
+
if (state.built !== null && newer(snowballOf(state.built), snowballOf(`snowball-${SNOWBALL_VERSION}`))) {
|
|
78
|
+
throw new CliError("validation_error", `the stems were built by Snowball ${snowballOf(state.built).join(".")}, newer than this tool's ${SNOWBALL_VERSION} — upgrade this tool`, { reason: "stemmer.newer", built: state.built, wanted: state.wanted });
|
|
79
|
+
}
|
|
80
|
+
writeBatch(database, () => {
|
|
81
|
+
// Saved, not defaulted: an older tool with another default then refuses as "unknown" instead of
|
|
82
|
+
// rebuilding the stems back to its own choice on its next reindex.
|
|
83
|
+
if (savedStemmers(database) === undefined)
|
|
84
|
+
saveStoreStemmers(database, DEFAULT_STEMMERS, now(), "default");
|
|
85
|
+
database.exec(`INSERT INTO ${INDEX} (${INDEX}) VALUES ('delete-all')`);
|
|
86
|
+
database.exec("DELETE FROM message_stems_pending");
|
|
87
|
+
database
|
|
88
|
+
.prepare(`UPDATE search_index_state SET watermark = (SELECT coalesce(max(id), 0) FROM messages),
|
|
89
|
+
filled_through = 0, built_at = NULL, analyzer = ? WHERE name = ?`)
|
|
90
|
+
.run(state.wanted, INDEX);
|
|
91
|
+
});
|
|
92
|
+
return true;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Stems an older tool built with its own default, while nobody chose stemmers, start again with this
|
|
96
|
+
* build's default: nobody chose the old one, so it waits for no `store reindex`. Like a first fill
|
|
97
|
+
* from then on. A saved default is replaced only by newer defaults, so two versions never rebuild each
|
|
98
|
+
* other's. A row a newer Snowball built is left for an upgrade.
|
|
99
|
+
*/
|
|
100
|
+
export const followDefaultStemmers = (database, now = Date.now) => {
|
|
101
|
+
const saved = stemmersOrigin(database);
|
|
102
|
+
if (saved?.origin === "owner")
|
|
103
|
+
return false;
|
|
104
|
+
if (saved?.origin === "default") {
|
|
105
|
+
if (saved.defaults >= DEFAULT_STEMMERS_VERSION || savedStemmers(database) === null)
|
|
106
|
+
return false;
|
|
107
|
+
const built = stemsState(database)?.built;
|
|
108
|
+
if (built && newer(snowballOf(built), snowballOf(`snowball-${SNOWBALL_VERSION}`)))
|
|
109
|
+
return false;
|
|
110
|
+
saveStoreStemmers(database, DEFAULT_STEMMERS, now(), "default");
|
|
111
|
+
}
|
|
112
|
+
const state = stemsState(database);
|
|
113
|
+
if (state?.cause !== "stemmer_changed" || state.built === null)
|
|
114
|
+
return false;
|
|
115
|
+
if (newer(snowballOf(state.built), snowballOf(`snowball-${SNOWBALL_VERSION}`)))
|
|
116
|
+
return false;
|
|
117
|
+
return resetStems(database, { now });
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=stems-fill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stems-fill.js","sourceRoot":"","sources":["../../../src/store/sqlite/stems-fill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EACL,KAAK,EACL,KAAK,EACL,UAAU,EAEV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,UAAU,EACV,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAuB,EACvB,EACE,KAAK,GAAG,KAAK,EACb,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,EACnB,OAAO,EACP,GAAG,GAAG,IAAI,CAAC,GAAG,GACf,GAAkH,EAAE,EAC1G,EAAE;IACb,MAAM,MAAM,GAAc,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;IACpD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACnC,yGAAyG;IACzG,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAA;IACtF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAA;IACnG,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE;YAAE,MAAK;QACtE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;QACjE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAAE,OAAO,SAAS,CAAA;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YACtB,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QACF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAA;QACrC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAA;QACtB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IACD,SAAS,CAAC;QACR,IAAI,KAAK,EAAE;YAAE,MAAK;QAClB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE;YACrC,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YACvC,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChF,CAAC,CAAC,CAAA;QACF,IAAI,IAAI,KAAK,CAAC;YAAE,MAAK;QACrB,MAAM,CAAC,OAAO,IAAI,IAAI,CAAA;QACtB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1G,QAAQ,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;IACjG,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAY,EAAE,CAChD,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAE9E,MAAM,KAAK,GAAG,CAAC,CAAW,EAAE,CAAW,EAAW,EAAE;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7F,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAAuB,EACvB,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAA4C,EAAE,EACtE,EAAE;IACX,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB;QAAE,OAAO,KAAK,CAAA;IAClG,IAAI,KAAK,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;QACtC,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,4HAA4H,EAC5H,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAC9B,CAAA;IACH,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,YAAY,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC;QACvG,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,oCAAoC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,4BAA4B,gBAAgB,sBAAsB,EACvI,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CACtE,CAAA;IACH,CAAC;IACD,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,gGAAgG;QAChG,mEAAmE;QACnE,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS;YAAE,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA;QAC1G,QAAQ,CAAC,IAAI,CAAC,eAAe,KAAK,KAAK,KAAK,yBAAyB,CAAC,CAAA;QACtE,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;QAClD,QAAQ;aACL,OAAO,CACN;4EACoE,CACrE;aACA,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAuB,EAAE,GAAG,GAAiB,IAAI,CAAC,GAAG,EAAW,EAAE;IACtG,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,KAAK,EAAE,MAAM,KAAK,OAAO;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,QAAQ,IAAI,wBAAwB,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QAChG,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,YAAY,gBAAgB,EAAE,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QAC/F,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAA;IACjE,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,KAAK,EAAE,KAAK,KAAK,iBAAiB,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC5E,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,YAAY,gBAAgB,EAAE,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5F,OAAO,UAAU,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Stemmer, type Stemmers } from "../../search/stem.js";
|
|
2
2
|
import type { CacheDatabase } from "../driver.js";
|
|
3
|
+
export declare const INDEX = "message_stems";
|
|
3
4
|
/** Stems a store write leaves for the next fill: an older binary may have left thousands queued. */
|
|
4
5
|
export declare const DRAIN_ON_WRITE = 500;
|
|
5
6
|
export interface StemsState {
|
|
@@ -25,10 +26,12 @@ export interface StemsFill {
|
|
|
25
26
|
drained: number;
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
|
-
* The choices `config set
|
|
29
|
+
* The choices `config set search_stemmers.*` saved; `undefined` while the defaults apply, `null` when a
|
|
29
30
|
* newer tool saved one this build does not know. Never throws: every open and write reads it.
|
|
30
31
|
*/
|
|
31
32
|
export declare const savedStemmers: (database: CacheDatabase) => Stemmers | null | undefined;
|
|
33
|
+
/** The store-wide choices every fill, drain and readiness check uses; `null` stems nothing. */
|
|
34
|
+
export declare const storeStemmers: (database: CacheDatabase) => Stemmers | null;
|
|
32
35
|
/**
|
|
33
36
|
* `default` is saved beside the defaults' version; older builds read only `cyrillic` and `latin`, and take
|
|
34
37
|
* any saved value as the owner's choice. A setting without `origin` is the owner's, or a default saved by
|
|
@@ -44,6 +47,16 @@ export declare const stemmersOrigin: (database: CacheDatabase) => {
|
|
|
44
47
|
} | undefined;
|
|
45
48
|
/** `undefined` on a file before version 15. */
|
|
46
49
|
export declare const stemsState: (database: CacheDatabase) => StemsState | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Whether this binary may write stems, decided inside the write transaction: an unbuilt row is claimed
|
|
52
|
+
* with its analyzer, a row built by other choices is left alone — so the index never mixes two stemmers.
|
|
53
|
+
*/
|
|
54
|
+
export declare const claim: (database: CacheDatabase, identity: string) => boolean;
|
|
55
|
+
export declare const stemWriter: (database: CacheDatabase, stemmer: Stemmer) => {
|
|
56
|
+
range: (from: number, to: number) => number;
|
|
57
|
+
queued: (pks: number[]) => number;
|
|
58
|
+
};
|
|
59
|
+
export declare const nextQueued: (database: CacheDatabase, limit: number) => number[];
|
|
47
60
|
/**
|
|
48
61
|
* Stems the messages a store write queued, inside that write's transaction. `stemmerFor` is the store's,
|
|
49
62
|
* so one cache serves every write while the setting stays the same.
|
|
@@ -51,31 +64,4 @@ export declare const stemsState: (database: CacheDatabase) => StemsState | undef
|
|
|
51
64
|
export declare const drainStems: (database: CacheDatabase, stemmerFor: (stemmers: Stemmers) => Stemmer, limit?: number) => number;
|
|
52
65
|
/** Keeps one stemmer while the setting stays the same, and starts a fresh cache when it changes. */
|
|
53
66
|
export declare const stemmerCache: () => ((stemmers: Stemmers) => Stemmer);
|
|
54
|
-
/**
|
|
55
|
-
* Brings the stems towards "ready" in short write transactions: the messages up to the watermark, then
|
|
56
|
-
* the queue. One stemmer per run, so its cache serves every batch. Never rebuilds: a row built by other
|
|
57
|
-
* choices is left for `store migrate` or `store reindex`.
|
|
58
|
-
*/
|
|
59
|
-
export declare const fillStems: (database: CacheDatabase, { batch, until, onBatch, now, }?: {
|
|
60
|
-
batch?: number;
|
|
61
|
-
until?: () => boolean;
|
|
62
|
-
onBatch?: (step: string, done: number) => void;
|
|
63
|
-
now?: () => number;
|
|
64
|
-
}) => StemsFill;
|
|
65
|
-
/**
|
|
66
|
-
* Empties the stems and starts them again from the newest message, claimed by the store's setting —
|
|
67
|
-
* for `store reindex`, and for `store migrate` when the stems were built by other choices. A row built
|
|
68
|
-
* by a newer Snowball than this binary has is refused: rebuilding it would downgrade every newer tool.
|
|
69
|
-
*/
|
|
70
|
-
export declare const resetStems: (database: CacheDatabase, { force, now }?: {
|
|
71
|
-
force?: boolean;
|
|
72
|
-
now?: () => number;
|
|
73
|
-
}) => boolean;
|
|
74
|
-
/**
|
|
75
|
-
* Stems an older tool built with its own default, while nobody chose stemmers, start again with this
|
|
76
|
-
* build's default: nobody chose the old one, so it waits for no `store reindex`. Like a first fill
|
|
77
|
-
* from then on. A saved default is replaced only by newer defaults, so two versions never rebuild each
|
|
78
|
-
* other's. A row a newer Snowball built is left for an upgrade.
|
|
79
|
-
*/
|
|
80
|
-
export declare const followDefaultStemmers: (database: CacheDatabase, now?: () => number) => boolean;
|
|
81
67
|
//# sourceMappingURL=stems.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stems.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/stems.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stems.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/stems.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,OAAO,EACZ,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,eAAO,MAAM,KAAK,kBAAkB,CAAA;AAGpC,oGAAoG;AACpG,eAAO,MAAM,cAAc,MAAM,CAAA;AAEjC,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,KAAK,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;IAC1D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,aAAc,aAAa,KAAG,QAAQ,GAAG,IAAI,GAAG,SAQzE,CAAA;AAED,+FAA+F;AAC/F,eAAO,MAAM,aAAa,aAAc,aAAa,KAAG,QAAQ,GAAG,IAGlE,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,aAClB,aAAa,YACb,QAAQ,OACb,MAAM,WACH,OAAO,GAAG,SAAS,KAC1B,IAQF,CAAA;AAED,2GAA2G;AAC3G,eAAO,MAAM,cAAc,aACf,aAAa,KACtB;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAWlE,CAAA;AAED,+CAA+C;AAC/C,eAAO,MAAM,UAAU,aAAc,aAAa,KAAG,UAAU,GAAG,SAsBjE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,aAAc,aAAa,YAAY,MAAM,KAAG,OASjE,CAAA;AAED,eAAO,MAAM,UAAU,aAAc,aAAa,WAAW,OAAO;IAiBhE,KAAK,SAAS,MAAM,MAAM,MAAM;IAKhC,MAAM,QAAQ,MAAM,EAAE;CAQzB,CAAA;AAED,eAAO,MAAM,UAAU,aAAc,aAAa,SAAS,MAAM,KAAG,MAAM,EAIzC,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,UAAU,aACX,aAAa,cACX,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,qBAE1C,MAOF,CAAA;AAED,oGAAoG;AACpG,eAAO,MAAM,YAAY,QAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAM/D,CAAA"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
const INDEX = "message_stems";
|
|
1
|
+
import { analyzerIdentity, createStemmer, DEFAULT_STEMMERS, DEFAULT_STEMMERS_VERSION, parseStemmers, } from "../../search/stem.js";
|
|
2
|
+
import { indexRow } from "./index-state.js";
|
|
3
|
+
export const INDEX = "message_stems";
|
|
5
4
|
const SETTING = "searchStemmers";
|
|
6
5
|
/** Stems a store write leaves for the next fill: an older binary may have left thousands queued. */
|
|
7
6
|
export const DRAIN_ON_WRITE = 500;
|
|
8
7
|
/**
|
|
9
|
-
* The choices `config set
|
|
8
|
+
* The choices `config set search_stemmers.*` saved; `undefined` while the defaults apply, `null` when a
|
|
10
9
|
* newer tool saved one this build does not know. Never throws: every open and write reads it.
|
|
11
10
|
*/
|
|
12
11
|
export const savedStemmers = (database) => {
|
|
@@ -21,7 +20,7 @@ export const savedStemmers = (database) => {
|
|
|
21
20
|
}
|
|
22
21
|
};
|
|
23
22
|
/** The store-wide choices every fill, drain and readiness check uses; `null` stems nothing. */
|
|
24
|
-
const storeStemmers = (database) => {
|
|
23
|
+
export const storeStemmers = (database) => {
|
|
25
24
|
const saved = savedStemmers(database);
|
|
26
25
|
return saved === undefined ? DEFAULT_STEMMERS : saved;
|
|
27
26
|
};
|
|
@@ -84,7 +83,7 @@ export const stemsState = (database) => {
|
|
|
84
83
|
* Whether this binary may write stems, decided inside the write transaction: an unbuilt row is claimed
|
|
85
84
|
* with its analyzer, a row built by other choices is left alone — so the index never mixes two stemmers.
|
|
86
85
|
*/
|
|
87
|
-
const claim = (database, identity) => {
|
|
86
|
+
export const claim = (database, identity) => {
|
|
88
87
|
const built = indexRow(database, INDEX)?.analyzer;
|
|
89
88
|
if (built === undefined)
|
|
90
89
|
return false;
|
|
@@ -96,7 +95,7 @@ const claim = (database, identity) => {
|
|
|
96
95
|
}
|
|
97
96
|
return built === identity;
|
|
98
97
|
};
|
|
99
|
-
const stemWriter = (database, stemmer) => {
|
|
98
|
+
export const stemWriter = (database, stemmer) => {
|
|
100
99
|
const read = database.prepare(`SELECT id AS pk, text, 'c' || chat_id || coalesce(' s' || sender_identity_id, '') AS scope
|
|
101
100
|
FROM messages WHERE id > ? AND id <= ?`);
|
|
102
101
|
const one = database.prepare("SELECT text, 'c' || chat_id || coalesce(' s' || sender_identity_id, '') AS scope FROM messages WHERE id = ?");
|
|
@@ -126,7 +125,7 @@ const stemWriter = (database, stemmer) => {
|
|
|
126
125
|
},
|
|
127
126
|
};
|
|
128
127
|
};
|
|
129
|
-
const nextQueued = (database, limit) => database
|
|
128
|
+
export const nextQueued = (database, limit) => database
|
|
130
129
|
.prepare("SELECT id AS pk FROM message_stems_pending ORDER BY id LIMIT ?")
|
|
131
130
|
.all(limit)
|
|
132
131
|
.map((row) => Number(row.pk));
|
|
@@ -153,118 +152,4 @@ export const stemmerCache = () => {
|
|
|
153
152
|
return stemmer;
|
|
154
153
|
};
|
|
155
154
|
};
|
|
156
|
-
/**
|
|
157
|
-
* Brings the stems towards "ready" in short write transactions: the messages up to the watermark, then
|
|
158
|
-
* the queue. One stemmer per run, so its cache serves every batch. Never rebuilds: a row built by other
|
|
159
|
-
* choices is left for `store migrate` or `store reindex`.
|
|
160
|
-
*/
|
|
161
|
-
export const fillStems = (database, { batch = 5_000, until = () => false, onBatch, now = Date.now, } = {}) => {
|
|
162
|
-
const filled = { stemmed: 0, drained: 0 };
|
|
163
|
-
const before = stemsState(database);
|
|
164
|
-
// Every search asks; when all is built, or the row waits for a rebuild, it must not take the write lock.
|
|
165
|
-
const stemmers = storeStemmers(database);
|
|
166
|
-
if (!before || before.ready || before.cause !== "building" || !stemmers)
|
|
167
|
-
return filled;
|
|
168
|
-
const identity = analyzerIdentity(stemmers);
|
|
169
|
-
const stemmer = createStemmer(stemmers);
|
|
170
|
-
const writer = stemWriter(database, stemmer);
|
|
171
|
-
const advance = database.prepare("UPDATE search_index_state SET filled_through = ? WHERE name = ?");
|
|
172
|
-
for (;;) {
|
|
173
|
-
const state = stemsState(database);
|
|
174
|
-
if (!state || state.filledThrough >= state.watermark || until())
|
|
175
|
-
break;
|
|
176
|
-
const to = Math.min(state.filledThrough + batch, state.watermark);
|
|
177
|
-
const done = inBatch(database, () => {
|
|
178
|
-
if (!claim(database, identity))
|
|
179
|
-
return undefined;
|
|
180
|
-
const count = writer.range(state.filledThrough, to);
|
|
181
|
-
advance.run(to, INDEX);
|
|
182
|
-
return count;
|
|
183
|
-
});
|
|
184
|
-
if (done === undefined)
|
|
185
|
-
return filled;
|
|
186
|
-
filled.stemmed += done;
|
|
187
|
-
onBatch?.("stemmed", filled.stemmed);
|
|
188
|
-
}
|
|
189
|
-
for (;;) {
|
|
190
|
-
if (until())
|
|
191
|
-
break;
|
|
192
|
-
const done = inBatch(database, () => {
|
|
193
|
-
const pks = nextQueued(database, batch);
|
|
194
|
-
return pks.length === 0 || !claim(database, identity) ? 0 : writer.queued(pks);
|
|
195
|
-
});
|
|
196
|
-
if (done === 0)
|
|
197
|
-
break;
|
|
198
|
-
filled.drained += done;
|
|
199
|
-
onBatch?.("drained", filled.drained);
|
|
200
|
-
}
|
|
201
|
-
const state = stemsState(database);
|
|
202
|
-
if (state && state.filledThrough >= state.watermark && state.builtAt === null && state.built === identity) {
|
|
203
|
-
database.prepare("UPDATE search_index_state SET built_at = ? WHERE name = ?").run(now(), INDEX);
|
|
204
|
-
}
|
|
205
|
-
return filled;
|
|
206
|
-
};
|
|
207
|
-
const snowballOf = (identity) => (/^snowball-(\d+)\.(\d+)\.(\d+)/.exec(identity)?.slice(1) ?? []).map(Number);
|
|
208
|
-
const newer = (a, b) => {
|
|
209
|
-
for (let i = 0; i < 3; i++)
|
|
210
|
-
if ((a[i] ?? 0) !== (b[i] ?? 0))
|
|
211
|
-
return (a[i] ?? 0) > (b[i] ?? 0);
|
|
212
|
-
return false;
|
|
213
|
-
};
|
|
214
|
-
/**
|
|
215
|
-
* Empties the stems and starts them again from the newest message, claimed by the store's setting —
|
|
216
|
-
* for `store reindex`, and for `store migrate` when the stems were built by other choices. A row built
|
|
217
|
-
* by a newer Snowball than this binary has is refused: rebuilding it would downgrade every newer tool.
|
|
218
|
-
*/
|
|
219
|
-
export const resetStems = (database, { force = false, now = Date.now } = {}) => {
|
|
220
|
-
const state = stemsState(database);
|
|
221
|
-
if (!state)
|
|
222
|
-
return false;
|
|
223
|
-
if (!force && state.cause !== "stemmer_changed" && state.cause !== "stemmer_unknown")
|
|
224
|
-
return false;
|
|
225
|
-
if (state.cause === "stemmer_unknown") {
|
|
226
|
-
throw new CliError("validation_error", "the store asks for stemmers this tool does not know — upgrade this tool, or choose again with config set searchStemmers.*", { reason: "stemmer.unknown" });
|
|
227
|
-
}
|
|
228
|
-
if (state.built !== null && newer(snowballOf(state.built), snowballOf(`snowball-${SNOWBALL_VERSION}`))) {
|
|
229
|
-
throw new CliError("validation_error", `the stems were built by Snowball ${snowballOf(state.built).join(".")}, newer than this tool's ${SNOWBALL_VERSION} — upgrade this tool`, { reason: "stemmer.newer", built: state.built, wanted: state.wanted });
|
|
230
|
-
}
|
|
231
|
-
inBatch(database, () => {
|
|
232
|
-
// Saved, not defaulted: an older tool with another default then refuses as "unknown" instead of
|
|
233
|
-
// rebuilding the stems back to its own choice on its next reindex.
|
|
234
|
-
if (savedStemmers(database) === undefined)
|
|
235
|
-
saveStoreStemmers(database, DEFAULT_STEMMERS, now(), "default");
|
|
236
|
-
database.exec(`INSERT INTO ${INDEX} (${INDEX}) VALUES ('delete-all')`);
|
|
237
|
-
database.exec("DELETE FROM message_stems_pending");
|
|
238
|
-
database
|
|
239
|
-
.prepare(`UPDATE search_index_state SET watermark = (SELECT coalesce(max(id), 0) FROM messages),
|
|
240
|
-
filled_through = 0, built_at = NULL, analyzer = ? WHERE name = ?`)
|
|
241
|
-
.run(state.wanted, INDEX);
|
|
242
|
-
});
|
|
243
|
-
return true;
|
|
244
|
-
};
|
|
245
|
-
/**
|
|
246
|
-
* Stems an older tool built with its own default, while nobody chose stemmers, start again with this
|
|
247
|
-
* build's default: nobody chose the old one, so it waits for no `store reindex`. Like a first fill
|
|
248
|
-
* from then on. A saved default is replaced only by newer defaults, so two versions never rebuild each
|
|
249
|
-
* other's. A row a newer Snowball built is left for an upgrade.
|
|
250
|
-
*/
|
|
251
|
-
export const followDefaultStemmers = (database, now = Date.now) => {
|
|
252
|
-
const saved = stemmersOrigin(database);
|
|
253
|
-
if (saved?.origin === "owner")
|
|
254
|
-
return false;
|
|
255
|
-
if (saved?.origin === "default") {
|
|
256
|
-
if (saved.defaults >= DEFAULT_STEMMERS_VERSION || savedStemmers(database) === null)
|
|
257
|
-
return false;
|
|
258
|
-
const built = stemsState(database)?.built;
|
|
259
|
-
if (built && newer(snowballOf(built), snowballOf(`snowball-${SNOWBALL_VERSION}`)))
|
|
260
|
-
return false;
|
|
261
|
-
saveStoreStemmers(database, DEFAULT_STEMMERS, now(), "default");
|
|
262
|
-
}
|
|
263
|
-
const state = stemsState(database);
|
|
264
|
-
if (state?.cause !== "stemmer_changed" || state.built === null)
|
|
265
|
-
return false;
|
|
266
|
-
if (newer(snowballOf(state.built), snowballOf(`snowball-${SNOWBALL_VERSION}`)))
|
|
267
|
-
return false;
|
|
268
|
-
return resetStems(database, { now });
|
|
269
|
-
};
|
|
270
155
|
//# sourceMappingURL=stems.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stems.js","sourceRoot":"","sources":["../../../src/store/sqlite/stems.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stems.js","sourceRoot":"","sources":["../../../src/store/sqlite/stems.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import type { StoreContext } from "./open.js";
|
|
|
7
7
|
import type { Where } from "./query-filter.js";
|
|
8
8
|
import { type TagCreationOptions } from "./tag-creation.js";
|
|
9
9
|
import { type Thing } from "./things.js";
|
|
10
|
-
/** What a tag labels: a chat or a message of the account, or a person of its messenger. */
|
|
10
|
+
/** What a messenger tag labels: a chat or a message of the account, or a person of its messenger. */
|
|
11
11
|
export type TagTarget = {
|
|
12
12
|
type: "chat";
|
|
13
13
|
chatId: Id;
|
|
@@ -19,6 +19,12 @@ export type TagTarget = {
|
|
|
19
19
|
chatId: Id;
|
|
20
20
|
messageId: Id;
|
|
21
21
|
};
|
|
22
|
+
/** A task of the account; apart from `TagTarget`, so code that narrows a messenger target keeps compiling. */
|
|
23
|
+
export type TaskTagTarget = {
|
|
24
|
+
type: "task";
|
|
25
|
+
taskId: string;
|
|
26
|
+
};
|
|
27
|
+
export type AnyTagTarget = TagTarget | TaskTagTarget;
|
|
22
28
|
export interface StoredTag {
|
|
23
29
|
tag: string;
|
|
24
30
|
type: TagType;
|
|
@@ -28,6 +34,8 @@ export interface StoredTag {
|
|
|
28
34
|
name?: string | null;
|
|
29
35
|
messageId?: Id;
|
|
30
36
|
locator?: string;
|
|
37
|
+
/** The task's id, as `task:` takes it. */
|
|
38
|
+
taskId?: string;
|
|
31
39
|
sources?: ("manual" | "auto")[];
|
|
32
40
|
createdAt: string;
|
|
33
41
|
}
|
|
@@ -49,7 +57,7 @@ export type TagKind = (typeof TAG_KINDS)[number];
|
|
|
49
57
|
* `auto` what the keyword rules claimed for a chat, `agent` what an agent added.
|
|
50
58
|
*/
|
|
51
59
|
export type TaggingSource = "owner" | "file" | "auto" | "agent";
|
|
52
|
-
export declare const targetThing: ({ database }: StoreContext, key: AccountKey, target: TagTarget) => Thing;
|
|
60
|
+
export declare const targetThing: ({ database }: StoreContext, key: AccountKey, target: TagTarget | TaskTagTarget) => Thing;
|
|
53
61
|
export interface TagRow {
|
|
54
62
|
id: number;
|
|
55
63
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/tags.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,cAAc,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,19 +2,27 @@ import { CliError } from "@wirecat/cli-base";
|
|
|
2
2
|
import { formatLocator } from "../../domain/locator.js";
|
|
3
3
|
import { normalizeVocabularyName } from "../../domain/vocabulary.js";
|
|
4
4
|
import { guardTagCreation } from "./tag-creation.js";
|
|
5
|
-
import {
|
|
5
|
+
import { inboxKey, taskAccountOf } from "./task-keys.js";
|
|
6
|
+
import { emailOf, emailThreadOf, taskRowOf } from "./things.js";
|
|
6
7
|
import { toIso } from "./values.js";
|
|
7
8
|
export const TAG_KINDS = ["tag", "topic"];
|
|
8
9
|
/** A messenger tag target's polymorphic type: a contact is an `identity` row. */
|
|
9
|
-
const TAGGABLE = { chat: "chat", contact: "identity", message: "message" };
|
|
10
|
+
const TAGGABLE = { chat: "chat", contact: "identity", message: "message", task: "task" };
|
|
10
11
|
const TAG_TYPE = {
|
|
11
12
|
chat: "chat",
|
|
12
13
|
identity: "contact",
|
|
13
14
|
message: "message",
|
|
14
15
|
email_thread: "chat",
|
|
15
16
|
email: "message",
|
|
17
|
+
task: "task",
|
|
16
18
|
};
|
|
17
19
|
export const targetThing = ({ database }, key, target) => {
|
|
20
|
+
if (target.type === "task") {
|
|
21
|
+
const row = taskRowOf(database, target.taskId);
|
|
22
|
+
if (row === undefined || taskAccountOf(database, row) !== `${key.provider}:${key.account}`)
|
|
23
|
+
throw new CliError("not_found", `no task ${target.taskId} for this account — tasks list shows the ids`);
|
|
24
|
+
return { type: "task", id: row };
|
|
25
|
+
}
|
|
18
26
|
const mail = key.provider !== "email" || target.type === "contact"
|
|
19
27
|
? undefined
|
|
20
28
|
: target.type === "chat"
|
|
@@ -167,7 +175,7 @@ export const tagsOf = ({ database }, key, filter) => {
|
|
|
167
175
|
{
|
|
168
176
|
type: "chat",
|
|
169
177
|
sql: "SELECT t.name AS tag, g.taggable_type AS type, g.created_at, c.external_id AS chat_id, c.title AS chat_title, " +
|
|
170
|
-
"NULL AS person_id, NULL AS name, NULL AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id " +
|
|
178
|
+
"NULL AS person_id, NULL AS name, NULL AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id, NULL AS task_id " +
|
|
171
179
|
"FROM taggings g JOIN tags t ON t.id=g.tag_id JOIN chats c ON c.id=g.taggable_id " +
|
|
172
180
|
"JOIN accounts a ON a.id=c.account_id WHERE g.taggable_type='chat' AND a.provider=? AND a.external_id=?",
|
|
173
181
|
params: [key.provider, key.account],
|
|
@@ -175,7 +183,7 @@ export const tagsOf = ({ database }, key, filter) => {
|
|
|
175
183
|
{
|
|
176
184
|
type: "contact",
|
|
177
185
|
sql: "SELECT t.name AS tag, g.taggable_type AS type, g.created_at, NULL AS chat_id, NULL AS chat_title, " +
|
|
178
|
-
"i.external_id AS person_id, i.name AS name, NULL AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id " +
|
|
186
|
+
"i.external_id AS person_id, i.name AS name, NULL AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id, NULL AS task_id " +
|
|
179
187
|
"FROM taggings g JOIN tags t ON t.id=g.tag_id JOIN identities i ON i.id=g.taggable_id " +
|
|
180
188
|
"WHERE g.taggable_type='identity' AND i.provider=?",
|
|
181
189
|
params: [key.provider],
|
|
@@ -183,7 +191,7 @@ export const tagsOf = ({ database }, key, filter) => {
|
|
|
183
191
|
{
|
|
184
192
|
type: "message",
|
|
185
193
|
sql: "SELECT t.name AS tag, g.taggable_type AS type, g.created_at, c.external_id AS chat_id, c.title AS chat_title, " +
|
|
186
|
-
"NULL AS person_id, NULL AS name, m.external_id AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id " +
|
|
194
|
+
"NULL AS person_id, NULL AS name, m.external_id AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id, NULL AS task_id " +
|
|
187
195
|
"FROM taggings g JOIN tags t ON t.id=g.tag_id JOIN messages m ON m.id=g.taggable_id JOIN chats c ON c.id=m.chat_id " +
|
|
188
196
|
"JOIN accounts a ON a.id=c.account_id WHERE g.taggable_type='message' AND a.provider=? AND a.external_id=?",
|
|
189
197
|
params: [key.provider, key.account],
|
|
@@ -191,7 +199,7 @@ export const tagsOf = ({ database }, key, filter) => {
|
|
|
191
199
|
{
|
|
192
200
|
type: "chat",
|
|
193
201
|
sql: "SELECT t.name AS tag, g.taggable_type AS type, g.created_at, th.external_id AS chat_id, th.subject AS chat_title, " +
|
|
194
|
-
"NULL AS person_id, NULL AS name, NULL AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id " +
|
|
202
|
+
"NULL AS person_id, NULL AS name, NULL AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id, NULL AS task_id " +
|
|
195
203
|
"FROM taggings g JOIN tags t ON t.id=g.tag_id JOIN email_threads th ON th.id=g.taggable_id " +
|
|
196
204
|
"JOIN accounts a ON a.id=th.account_id WHERE g.taggable_type='email_thread' AND a.provider=? AND a.external_id=?",
|
|
197
205
|
params: [key.provider, key.account],
|
|
@@ -199,12 +207,21 @@ export const tagsOf = ({ database }, key, filter) => {
|
|
|
199
207
|
{
|
|
200
208
|
type: "message",
|
|
201
209
|
sql: "SELECT t.name AS tag, g.taggable_type AS type, g.created_at, th.external_id AS chat_id, th.subject AS chat_title, " +
|
|
202
|
-
"NULL AS person_id, NULL AS name, e.external_id AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id " +
|
|
210
|
+
"NULL AS person_id, NULL AS name, e.external_id AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id, NULL AS task_id " +
|
|
203
211
|
"FROM taggings g JOIN tags t ON t.id=g.tag_id JOIN emails e ON e.id=g.taggable_id " +
|
|
204
212
|
"JOIN email_threads th ON th.id=e.email_thread_id JOIN accounts a ON a.id=e.account_id " +
|
|
205
213
|
"WHERE g.taggable_type='email' AND e.deleted_at IS NULL AND a.provider=? AND a.external_id=?",
|
|
206
214
|
params: [key.provider, key.account],
|
|
207
215
|
},
|
|
216
|
+
{
|
|
217
|
+
type: "task",
|
|
218
|
+
sql: "SELECT t.name AS tag, g.taggable_type AS type, g.created_at, NULL AS chat_id, k.title AS chat_title, " +
|
|
219
|
+
"NULL AS person_id, NULL AS name, NULL AS message_id, g.source, g.taggable_id AS target_id, t.id AS tag_id, " +
|
|
220
|
+
"COALESCE(k.package_id, k.key) AS task_id " +
|
|
221
|
+
"FROM taggings g JOIN tags t ON t.id=g.tag_id JOIN tasks k ON k.id=g.taggable_id JOIN projects p ON p.id=k.project_id " +
|
|
222
|
+
"WHERE g.taggable_type='task' AND k.deleted_at IS NULL AND p.key=?",
|
|
223
|
+
params: [inboxKey(`${key.provider}:${key.account}`)],
|
|
224
|
+
},
|
|
208
225
|
];
|
|
209
226
|
const chosen = parts.filter(({ type }) => filter.type === undefined || filter.type === type);
|
|
210
227
|
const union = chosen.map(({ sql }) => sql + tagged).join(" UNION ALL ");
|
|
@@ -236,6 +253,7 @@ export const tagsOf = ({ database }, key, filter) => {
|
|
|
236
253
|
...(type === "contact"
|
|
237
254
|
? { personId: String(row.person_id), name: row.name == null ? null : String(row.name) }
|
|
238
255
|
: { chatId, chatTitle: row.chat_title == null ? null : String(row.chat_title) }),
|
|
256
|
+
...(type === "task" ? { taskId: String(row.task_id) } : {}),
|
|
239
257
|
...(type === "message" && chatId !== undefined && messageId !== undefined
|
|
240
258
|
? { messageId, locator: formatLocator({ ...key, chat: chatId, message: messageId }) }
|
|
241
259
|
: {}),
|