@deepseek-ai/dsh-session-query-sqlite 0.0.1-rc.2 → 0.0.1-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/session-query/session-query-sqlite/README.md
5
- README.md: 8784f1b2c2a3c9291b761c0a6e68201286b9e306
6
- README.zh.md: 5b69c054a0e17a49e9c709b27e497b006a024a91
5
+ README.md: 846f79bd8383a8114a6d1329e7dbe931a67d98d0
6
+ README.zh.md: e84e521dd5f392dbcede1e1dd957e4ce0a9bc50f
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- Concrete `ctx.sessionQuery` provider. `SessionQuerySqlite` inherits exact reads, traces, and provider-independent filters from the Service Definition package and implements its two full-text methods with SQLite FTS5. Search uses the live-preferred logical session corpus and groups cross-session results by their strongest event.
5
+ Concrete `ctx.sessionQuery` provider. `SqliteSessionQueryEngine` inherits exact reads, traces, and provider-independent filters from the Service Definition package and implements its two full-text methods with SQLite FTS5. Search uses the live-preferred logical session corpus and groups cross-session results by their strongest event.
6
6
 
7
7
  ## Search contract
8
8
 
package/README.zh.md CHANGED
@@ -2,25 +2,25 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- 具体 `ctx.sessionQuery` 提供方。`SessionQuerySqlite` 从 Service Definition 包继承精确读取、跟踪和提供方无关的过滤,并使用 SQLite FTS5 实现其两个全文方法。搜索使用实时优先的逻辑会话语料库,并按每个会话中匹配度最高的事件对跨会话结果分组。
5
+ 具体 `ctx.sessionQuery` 提供方。`SqliteSessionQueryEngine` 从 Service Definition 包继承精确读取、跟踪和提供方无关的过滤,并使用 SQLite FTS5 实现其两个全文方法。搜索使用实时优先的逻辑会话语料库,并按每个会话中匹配度最高的事件对跨会话结果分组。
6
6
 
7
7
  ## 搜索约定
8
8
 
9
- `searchSessions(request, exec?)` 返回跨语料库的 `SessionSearchHit` 分页结果;`searchEvents(request, exec?)` 返回单个会话内的 `SessionEventSearchHit` 分页结果。查询不得省略,首尾空白会被移除,内部空白会被规范化,并按字面短语处理。引号、`OR`、`NEAR` 和 `*` 等 FTS5 语法被视为数据,而非可执行 MATCH 语法。元数据过滤器是在排名前应用的参数化 SQL 谓词。为使 SQLite FTS5 MATCH 保持在受支持的外层谓词上下文中,跨会话请求最多可编译 14 个组合会话与事件过滤谓词;会话内请求最多可编译 13 个过滤谓词,因为固定目标会话谓词占用一个槽位。每个范围端点编译为一个谓词。请求超过任一谓词预算,或超过 SQLite 可移植的 32,766 总绑定上限(包括固定查询和分页值)时,会在准备语句前以 `SESSION_QUERY_INVALID_FILTER` 失败。
9
+ `searchSessions(request, exec?)` 返回跨语料库的 `SessionSearchHit` 分页结果;`searchEvents(request, exec?)` 返回单个会话内的 `SessionEventSearchHit` 分页结果。查询不得省略,首尾空白会被移除,内部空白会被规范化,并按字面短语处理。引号、`OR`、`NEAR` 和 `*` 等 FTS5 语法被视为数据,而非可执行 MATCH 语法。元数据过滤器是在排名前应用的参数化 SQL 谓词。为使 SQLite FTS5 MATCH 保持在受支持的外层谓词上下文中,跨会话请求最多可编译 14 个组合会话与事件过滤谓词;会话内请求最多可编译 13 个过滤谓词,因为固定目标会话谓词占用一个 slot。每个范围端点编译为一个谓词。请求超过任一谓词预算,或超过 SQLite 可移植的 32,766 总绑定上限(包括固定查询和分页值)时,会在准备语句前以 `SESSION_QUERY_INVALID_FILTER` 失败。
10
10
 
11
11
  持久表和 TEMP 表之间的相关性排名可直接比较:先按实际 FTS5 高亮匹配 span 数降序,再按已存储文档码点长度升序。事件时间、适用时的会话 id 和 seq 打破其余平局。跨会话结果将所选事件公开为 `bestMatch`;两种范围都从 FTS5 高亮位置派生空白规范化的纯文本,并按 Unicode 码点限制长度。游标是带品牌类型的不透明值,绑定到规范化请求和服务实例,并在相关世代变更时失败。会话内游标可在不相关会话变更后延续使用;跨会话游标则不能。
12
12
 
13
- 默认可搜索全部三种接口(`current`、`shadowed` 和 `log-only`)。传入接口过滤器可缩小范围。
13
+ 默认可搜索全部三种表层(`current`、`shadowed` 和 `log-only`)。传入表层过滤器可缩小范围。
14
14
 
15
15
  ## 来源与索引生命周期
16
16
 
17
- 该服务需要 `ctx.sessions`,并动态观察可选的 `ctx.sessionPersistence`。一个串行化状态机比较来源限定的轻量持久化快照修订,仅以不修改日志的方式检查新日志或已更改日志,提取共享语义文档,以事务方式对账变更,然后运行查询。会话查询绝不会调用持久化后端会修复崩溃的 `load()`;检查期间接入的活动所有者无法修改其日志,稳定观察重试使结果优先使用实时来源。TEMP 实时行仍会记录持久化可用性,而持久基库会在该活动所有者脱离后刷新。重复查询和未变的同存储重新打开不会执行完整持久化日志检查;切换存储,或观察到新增、已更改、已删除或经外部 load 修复的来源时,会在下次稳定观察时对账。来源或事务失败不会提交任何内容,下一次搜索会重试。
17
+ 该服务需要 `ctx.sessions`,并动态观察可选的 `ctx.sessionPersistence`。一个串行化状态机比较来源限定的轻量持久化快照修订,仅以不修改日志的方式检查新日志或已更改日志,提取共享语义文档,以事务方式对账变更,然后运行查询。会话查询绝不会调用持久化后端会修复崩溃的 `load()`;检查期间接入的活动所有者无法修改其日志,稳定观察重试使结果优先使用实时来源。TEMP 实时行仍会记录持久化可用性,而持久基库会在该活动所有者脱离后刷新。重复查询以及同一存储未发生变化的重新打开操作不会执行完整持久化日志检查;切换存储,或观察到新增、已更改、已删除或经外部 load 修复的来源时,会在下次稳定观察时对账。来源或事务失败不会提交任何内容,下一次搜索会重试。
18
18
 
19
- `openAt: startup` 是默认值:服务激活会导入 `node:sqlite` 并打开句柄;如果索引无效,则会在服务发布前失败。`openAt: first-search` 会将服务以 ACTIVE 状态发布,同时不导入 SQLite 模块也不打开句柄;首批并发搜索共享同一个就绪 promise,在任何搜索前处置服务时也不会导入模块或打开句柄。此模式通过把 SQLite 的实验性警告推迟到首次实际搜索,支持需要干净 Node 22 启动输出的组合;它不会抑制届时的警告。无效数据库同样会使首次搜索失败,而不是服务激活失败。
19
+ `openAt: startup` 是默认值:服务激活会导入 `node:sqlite` 并打开句柄;如果索引无效,则会在服务发布前失败。`openAt: first-search` 会将服务以 ACTIVE 状态发布,同时不导入 SQLite 模块也不打开句柄;首批并发搜索共享同一个就绪 promise,在任何搜索前 dispose(资源释放)服务时也不会导入模块或打开句柄。此模式通过把 SQLite 的实验性警告推迟到首次实际搜索,支持需要干净 Node 22 启动输出的组合;它不会抑制届时的警告。无效数据库同样会使首次搜索失败,而不是服务激活失败。
20
20
 
21
21
  持久化 FTS 行位于专用派生数据库中。连接本地 TEMP 表保存实时行,这些行会遮蔽同一会话的持久化基库,并在实时所有者消失后使其重新可见。卸载持久化会隐藏持久行,但不会丢弃缓存;重新挂载会对账缓存。关闭或重新打开数据库会删除全部实时覆盖层,但保留持久行。
22
22
 
23
- 该数据库虽可丢弃重建,但 reset 操作受到保护:每个已识别 schema 版本都会在修改 journal mode 前拒绝未知用户表;只有包含派生表的已识别不兼容 schema 才会原地重建。不相关数据库或规范数据库将被拒绝。绝不能将 `path` 指向 session-persistence 数据库。在具有 POSIX mode 的文件系统上,缺失的目录和数据库会以仅所有者可访问的方式创建(进程 umask 前为 `0700` 和 `0600`),SQLite sidecar 继承数据库 mode;现有 mode 保持不变。每个派生索引路径在一个进程中只能由一个服务拥有;不支持外部写入者或第二个进程,因为世代和 TEMP 遮蔽状态由连接持有。
23
+ 该数据库虽可丢弃重建,但 reset 操作受到保护:每个已识别 schema 版本都会在修改 journal mode 前拒绝未知用户表;只有包含派生表的已识别不兼容 schema 才会原地重建。不相关数据库或规范数据库将被拒绝。绝不能将 `path` 指向 session-persistence 数据库。在支持 POSIX 权限模式的文件系统上,缺失的目录和数据库会以仅所有者可访问的方式创建(进程 umask 前为 `0700` 和 `0600`),SQLite 伴随文件继承数据库的权限模式;现有权限模式保持不变。每个派生索引路径在一个进程中只能由一个服务拥有;不支持外部写入者或第二个进程,因为世代和 TEMP 遮蔽状态由连接持有。
24
24
 
25
25
  ## 配置
26
26
 
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
2
  import { Service } from "@deepseek-ai/cordis";
3
3
  import z from "@deepseek-ai/schemastery";
4
- import SessionQueryService, { SESSION_QUERY_DEFAULT_PERSISTED_INSPECT_CONCURRENCY, SESSION_QUERY_READ_WINDOW_MAX, SessionQueryError, SessionSearchCursor, assertSessionHeadersCompatible, buildSessionEventSearchDocuments, materializeSessionEventResultFilters, materializeSessionResultFilters } from "@deepseek-ai/dsh-session-query";
4
+ import SessionQueryEngine, { SESSION_QUERY_DEFAULT_PERSISTED_INSPECT_CONCURRENCY, SESSION_QUERY_READ_WINDOW_MAX, SessionQueryError, SessionSearchCursor, assertSessionHeadersCompatible, buildSessionEventSearchDocuments, materializeSessionEventResultFilters, materializeSessionResultFilters } from "@deepseek-ai/dsh-session-query";
5
5
  import { mkdir, open } from "node:fs/promises";
6
6
  import { dirname, resolve } from "node:path";
7
7
  //#region lib/types/schema.js
@@ -472,7 +472,7 @@ const SESSION_QUERY_SQLITE_MAX_LIMIT = 100;
472
472
  const SESSION_QUERY_SQLITE_SNIPPET_CHARS = 240;
473
473
  const STABLE_OBSERVATION_ATTEMPTS = 2;
474
474
  /** Concrete SQLite owner of the combined `ctx.sessionQuery` service. */
475
- var SessionQuerySqlite = class extends SessionQueryService {
475
+ var SqliteSessionQueryEngine = class extends SessionQueryEngine {
476
476
  static inject = ["sessions"];
477
477
  static Config = z.object({
478
478
  path: z.string().required(),
@@ -1126,4 +1126,4 @@ function isRuntimeArray(value) {
1126
1126
  return Array.isArray(value);
1127
1127
  }
1128
1128
  //#endregion
1129
- export { SESSION_QUERY_SQLITE_APPLICATION_ID, SESSION_QUERY_SQLITE_DEFAULT_LIMIT, SESSION_QUERY_SQLITE_MAX_LIMIT, SESSION_QUERY_SQLITE_PATH_KEY, SESSION_QUERY_SQLITE_SCHEMA_VERSION, SESSION_QUERY_SQLITE_SNIPPET_CHARS, SessionQuerySqlite, SessionQuerySqlite as default };
1129
+ export { SESSION_QUERY_SQLITE_APPLICATION_ID, SESSION_QUERY_SQLITE_DEFAULT_LIMIT, SESSION_QUERY_SQLITE_MAX_LIMIT, SESSION_QUERY_SQLITE_PATH_KEY, SESSION_QUERY_SQLITE_SCHEMA_VERSION, SESSION_QUERY_SQLITE_SNIPPET_CHARS, SqliteSessionQueryEngine, SqliteSessionQueryEngine as default };
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Context, Service } from '@deepseek-ai/cordis';
7
7
  import z from '@deepseek-ai/schemastery';
8
- import SessionQueryService from '@deepseek-ai/dsh-session-query';
8
+ import SessionQueryEngine from '@deepseek-ai/dsh-session-query';
9
9
  import type { Config as SessionQueryConfig, SessionEventSearchPage, SessionEventSearchRequest, SessionSearchExecContext, SessionSearchHit, SessionSearchPage, SessionSearchRequest } from '@deepseek-ai/dsh-session-query';
10
10
  import { type JournalMode } from './schema.ts';
11
11
  export { SESSION_QUERY_SQLITE_APPLICATION_ID, SESSION_QUERY_SQLITE_SCHEMA_VERSION, type JournalMode, } from './schema.ts';
@@ -57,7 +57,7 @@ interface ResolvedConfig {
57
57
  persistedInspectConcurrency: number;
58
58
  }
59
59
  /** Concrete SQLite owner of the combined `ctx.sessionQuery` service. */
60
- export declare class SessionQuerySqlite extends SessionQueryService {
60
+ export declare class SqliteSessionQueryEngine extends SessionQueryEngine {
61
61
  static inject: string[];
62
62
  static Config: z<Config>;
63
63
  /** Validated and defaulted backend configuration. */
@@ -99,5 +99,5 @@ export declare class SessionQuerySqlite extends SessionQueryService {
99
99
  private _requireDb;
100
100
  private _isClosed;
101
101
  }
102
- export default SessionQuerySqlite;
102
+ export default SqliteSessionQueryEngine;
103
103
  //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-session-query-sqlite",
3
3
  "description": "Concrete ctx.sessionQuery backend with SQLite FTS5 search",
4
- "version": "0.0.1-rc.2",
4
+ "version": "0.0.1-rc.3",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -32,10 +32,10 @@
32
32
  ],
33
33
  "license": "BSD-3-Clause",
34
34
  "peerDependencies": {
35
- "@deepseek-ai/dsh-session": "^0.0.1-rc.2",
36
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
37
- "@deepseek-ai/dsh-session-persistence": "^0.0.1-rc.2",
38
- "@deepseek-ai/dsh-session-query": "^0.0.1-rc.2",
35
+ "@deepseek-ai/dsh-session-persistence": "^0.0.1-rc.3",
36
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
37
+ "@deepseek-ai/dsh-session": "^0.0.1-rc.3",
38
+ "@deepseek-ai/dsh-session-query": "^0.0.1-rc.3",
39
39
  "@deepseek-ai/cordis": "^4.0.1-rc.1"
40
40
  },
41
41
  "peerDependenciesMeta": {
@@ -48,11 +48,11 @@
48
48
  },
49
49
  "devDependencies": {
50
50
  "@deepseek-ai/cordis-plugin-loader": "^1.0.1-rc.1",
51
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
52
- "@deepseek-ai/dsh-session": "^0.0.1-rc.2",
53
- "@deepseek-ai/dsh-session-persistence": "^0.0.1-rc.2",
54
- "@deepseek-ai/dsh-session-query": "^0.0.1-rc.2",
55
- "@deepseek-ai/dsh-session-persistence-sqlite": "^0.0.1-rc.2",
51
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
52
+ "@deepseek-ai/dsh-session": "^0.0.1-rc.3",
53
+ "@deepseek-ai/dsh-session-persistence": "^0.0.1-rc.3",
54
+ "@deepseek-ai/dsh-session-persistence-sqlite": "^0.0.1-rc.3",
55
+ "@deepseek-ai/dsh-session-query": "^0.0.1-rc.3",
56
56
  "@deepseek-ai/cordis": "^4.0.1-rc.1"
57
57
  }
58
58
  }