@yandy0725/memory-core 1.0.0 → 2.0.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.
Files changed (53) hide show
  1. package/README.md +77 -11
  2. package/README.zh.md +66 -10
  3. package/dist/config.d.ts +40 -22
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +36 -36
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.d.ts +10 -9
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +5 -5
  10. package/dist/index.js.map +1 -1
  11. package/dist/injection.d.ts +9 -1
  12. package/dist/injection.d.ts.map +1 -1
  13. package/dist/injection.js +10 -3
  14. package/dist/injection.js.map +1 -1
  15. package/dist/orchestration/conversation.d.ts +1 -1
  16. package/dist/orchestration/dream.d.ts +3 -30
  17. package/dist/orchestration/dream.d.ts.map +1 -1
  18. package/dist/orchestration/dream.js +32 -57
  19. package/dist/orchestration/dream.js.map +1 -1
  20. package/dist/orchestration/extract.d.ts +8 -38
  21. package/dist/orchestration/extract.d.ts.map +1 -1
  22. package/dist/orchestration/extract.js +43 -31
  23. package/dist/orchestration/extract.js.map +1 -1
  24. package/dist/orchestration/ports.d.ts +41 -4
  25. package/dist/orchestration/ports.d.ts.map +1 -1
  26. package/dist/orchestration/status.d.ts +19 -0
  27. package/dist/orchestration/status.d.ts.map +1 -0
  28. package/dist/orchestration/status.js +23 -0
  29. package/dist/orchestration/status.js.map +1 -0
  30. package/dist/orchestration/surfacing.d.ts +9 -21
  31. package/dist/orchestration/surfacing.d.ts.map +1 -1
  32. package/dist/orchestration/surfacing.js +31 -35
  33. package/dist/orchestration/surfacing.js.map +1 -1
  34. package/dist/orchestration/task.d.ts +84 -0
  35. package/dist/orchestration/task.d.ts.map +1 -0
  36. package/dist/orchestration/task.js +145 -0
  37. package/dist/orchestration/task.js.map +1 -0
  38. package/dist/orchestration/tasks.d.ts +18 -0
  39. package/dist/orchestration/tasks.d.ts.map +1 -0
  40. package/dist/orchestration/tasks.js +16 -0
  41. package/dist/orchestration/tasks.js.map +1 -0
  42. package/package.json +1 -1
  43. package/src/config.ts +58 -46
  44. package/src/index.ts +19 -9
  45. package/src/injection.ts +18 -4
  46. package/src/orchestration/conversation.ts +1 -1
  47. package/src/orchestration/dream.ts +33 -75
  48. package/src/orchestration/extract.ts +50 -65
  49. package/src/orchestration/ports.ts +29 -4
  50. package/src/orchestration/status.ts +37 -0
  51. package/src/orchestration/surfacing.ts +45 -45
  52. package/src/orchestration/task.ts +236 -0
  53. package/src/orchestration/tasks.ts +22 -0
package/README.md CHANGED
@@ -17,10 +17,10 @@ machine share one memory.
17
17
  | **Store** | `MemoryStore` — `listEntries` / `readEntry` / `readIndex` / `searchEntries` / `addEntry` / `replaceEntry` / `removeEntry` / `renameEntry` / `rebuildIndex`, plus the logical-lock API |
18
18
  | **Concurrency & recovery** | a cross-process `.lock` held for milliseconds and never auto-reclaimed; an in-process logical lock per primitive call or per whole dream round; transient-error retry; `.backups/<ts>-<label>/` rollback points |
19
19
  | **Paths & safety** | git-remote normalisation to a single legal directory component, directory-escape assertion, injection sanitising, Windows reserved-name handling |
20
- | **Orchestration** | `runDream`, `runExtract`, `runSideQuery` and their prompt text, over the two ports below |
20
+ | **Orchestration** | the three task descriptors in `TASKS` (`autoSurfacing`, `extractMemories`, `dream`) and the `runTask` entry point, with their prompt text, over the two ports below |
21
21
  | **Injection policy** | index windowing (newest N lines / bytes), entry truncation, capacity reporting, `scanEntries`, `renderSurfacedBlock` — pure functions that return strings |
22
22
  | **Tool contract** | the action sets, the JSON Schema, the model-facing text, and `createMemoryActionHandler` |
23
- | **Config** | defaults, deep-merge over an explicit file list, `~` expansion, model-config validation, `defaultMemoryRoot()` |
23
+ | **Config** | defaults, `mergeConfig` deep-merge, `~` expansion, model-config validation, `defaultMemoryRoot()` — no file IO: adapters read files and call `mergeConfig` |
24
24
 
25
25
  No LLM call, no UI, no host API: `src/**` imports only `node:*` and relative paths, and
26
26
  `tests/neutrality.test.ts` fails the build if that ever changes.
@@ -48,7 +48,6 @@ path when there is none), so clones and worktrees of one repository share memory
48
48
  Test-command.md — one file per memory
49
49
  .lock — cross-process write lock (held for milliseconds, never auto-reclaimed)
50
50
  .backups/ — rollback points: <ISO-ts>-<label>/ (plus migrate-<ts>/ whole-directory snapshots from earlier 1.x migrations)
51
- .dream-meta.json — last dream timestamp + session count (drives the nudge)
52
51
  sessions/ — persisted headless sessions, only when sessionPersistence is enabled
53
52
  ```
54
53
 
@@ -137,8 +136,8 @@ export interface HeadlessRunRequest {
137
136
  }
138
137
 
139
138
  export interface HeadlessAgentPort {
140
- /** null = the round did not run (host declined or timed out). */
141
- run(req: HeadlessRunRequest): Promise<string | null>;
139
+ /** completed / no-output / incomplete / not-run — see `HeadlessOutcome`. */
140
+ run(req: HeadlessRunRequest): Promise<HeadlessOutcome>;
142
141
  }
143
142
 
144
143
  export interface HostTranscriptPort {
@@ -148,8 +147,33 @@ export interface HostTranscriptPort {
148
147
  }
149
148
  ```
150
149
 
151
- `runDream(opts, { headless })`, `runExtract(opts, { headless, transcript })` and
152
- `runSideQuery(opts, { headless })` take the ports explicitly — there is no module-level singleton.
150
+ `HeadlessOutcome` is the result your `run` must return. It is a four-arm union:
151
+
152
+ ```ts
153
+ type HeadlessOutcome =
154
+ | { status: "completed"; text: string }
155
+ | { status: "no-output" }
156
+ | { status: "incomplete"; cause: "max-tokens" | "turn-limit" | "aborted" }
157
+ | { status: "not-run"; cause: "host-refused" | "unavailable" | "timeout" | "aborted"; detail?: string };
158
+ ```
159
+
160
+ **Discriminate by when the run ended: finished before the request was issued → `not-run`; issued
161
+ without a complete answer → `incomplete`.** (`no-output` is the "ran, produced no text" case; an
162
+ empty completed reply is `{ status: "completed", text: "" }`, not `no-output`.)
163
+
164
+ The tasks translate each arm as follows:
165
+
166
+ - **extract**: `not-run` → `{ skipped: true }`; `incomplete` → ran-with-partial (`{ skipped: false }`);
167
+ `no-output` → `{ skipped: false, result: "" }`.
168
+ - **dream**: throws on every non-`completed` outcome (it is fail-closed).
169
+ - **surfacing**: returns an empty result (`{ files: [], content: "" }`).
170
+
171
+ This is the shape a new `HeadlessAgentPort` must return — `runTask` is built on top of it and does
172
+ not fall back to a plain string.
173
+
174
+ `runTask(TASKS.autoSurfacing, input, ctx)`, `runTask(TASKS.extractMemories, input, ctx)` and
175
+ `runTask(TASKS.dream, input, ctx)` take the ports explicitly through `ctx.ports` — there is no
176
+ module-level singleton.
153
177
 
154
178
  **Watch the allowlist trap.** If your harness's `tools` option is an allowlist that also filters
155
179
  custom tools, then "no builtin tools, only the `memory` tool" must be expressed some other way.
@@ -164,17 +188,59 @@ can call nothing yet still "succeeds".
164
188
  | Prompt-cache optimisations (recording/replaying the frozen value) | pure host machinery |
165
189
  | Tool schema conversion, UI rendering, notifications | host-specific schema DSL and UI channels |
166
190
  | Model resolution and validation | host-specific registry; `model`/`effort` are opaque strings here |
167
- | Where config files live, and whether the project is trusted | host knowledge; `loadConfigFrom(files)` takes an explicit list |
168
- | Counting sessions to decide when to nudge | needs the host's session store |
191
+ | Where config files live, and whether the project is trusted | host knowledge; the adapter reads its own files and hands the parsed object to `mergeConfig` |
192
+ | Deciding when to remind the user to consolidate | needs the host's session store and reminder thresholds |
193
+
194
+ ### Config helpers new in 1.1.0
195
+
196
+ - `mergeConfig(base, overlay)` deep-merges an in-memory object into a `MemoryConfig`. Use it when the
197
+ host's config is **not a file** — a cordis row's `config:` object handed to the plugin at activation,
198
+ for example. There is exactly one merge implementation; adapters that do read files parse them and
199
+ hand the result to `mergeConfig`.
200
+ - `EffortLevel` is the type of every thinking/reasoning level in the config. It is an **opaque string**:
201
+ core passes it through without interpreting or validating it. Legal values are per-host data (in dsh,
202
+ per-provider-route), which is why a closed enum was the wrong shape. `ThinkLevel` remains as a
203
+ deprecated alias so existing adapters' type re-exports do not break.
204
+ - `modelConfigErrors(cfg, resolve, tasks?)` and `requiredModels(cfg, tasks?)` take an optional `tasks`
205
+ argument so an adapter can declare **which tasks it actually implements** — it is no longer forced to
206
+ demand a model for a task it does not have (for example an adapter with no dream support). Omitting
207
+ `tasks` keeps the previous behaviour: dream is always in the required set and the other two are gated
208
+ by `enabled`.
209
+
210
+ ## What changed in 2.0.0
211
+
212
+ **Config file IO moved to the adapters.** Core no longer reads files. **`loadConfigFrom` was removed in
213
+ 2.0.0**, and `LoadConfigFromOptions`, the options type it took, went with it — if your build now fails
214
+ with "`loadConfigFrom` is not exported" ("does not provide an export named 'loadConfigFrom'"), that
215
+ removal is the explanation, and there is no compatibility shell to fall back on. Core still owns the
216
+ config *semantics*: `DEFAULT_CONFIG`, `mergeConfig`, `defaultMemoryRoot` and `expandTilde`. An adapter
217
+ reads its own config file(s) and then calls `mergeConfig` on the parsed object — pi reads its two
218
+ `memory.json` files that way, and dsh merges its cordis row `config:` object the same way. Where files
219
+ live, and whether a project is trusted, is host knowledge and stays in the adapter.
220
+
221
+ **The three model tasks are now first-class.** `autoSurfacing`, `extractMemories` and `dream` are task
222
+ descriptors declared once in `TASKS`; the single entry point is `runTask(task, input, ctx)`, which reads
223
+ the config, builds the prompt, applies the task's lock/snapshot plan and runs the port. The three legacy
224
+ `run*` functions are gone, along with their option types `RunSideQueryOpts`, `RunExtractOpts`,
225
+ `RunDreamOpts`, and the `ExtractPorts` interface. `HeadlessAgentPort.run` now returns a `HeadlessOutcome` (`completed` /
226
+ `no-output` / `incomplete` / `not-run`) instead of `string | null`, so a port can tell "ran but produced
227
+ nothing" apart from "never ran". Each adapter declares the tasks it implements in `IMPLEMENTED_TASKS`,
228
+ and `/memory`'s module line is derived from core's `moduleStatusRows(cfg, tasks)` — core supplies the
229
+ rows, the adapter keeps its own wording and ordering.
230
+
231
+ **The dream-nudge keys left the shared config.** The `memory.json` keys are unchanged and still live
232
+ under `dream`, but core no longer owns them: pi reads them into its own `PiHostConfig` (defaults
233
+ 5 / 24), and they are no longer part of `MemoryConfig`. The reminder policy is a single-host concern,
234
+ so it belongs to the adapter, not the shared core.
169
235
 
170
236
  ### Mapping used by the pi adapter
171
237
 
172
238
  | Need | core | pi |
173
239
  |---|---|---|
174
240
  | Index into the system prompt | `buildIndexSection`, `truncateIndexForInjection`, `indexInjectionCapacity` | `systemPromptOptions.sections["memory_index"]` + transcript replay |
175
- | Per-turn surfaced memories | `scanEntries`, `runSideQuery`, `renderSurfacedBlock` | message injection, per-session dedupe |
241
+ | Per-turn surfaced memories | `scanEntries`, `runTask(TASKS.autoSurfacing, …)` | message injection, per-session dedupe |
176
242
  | The `memory` tool | `memoryToolSchema`, `MEMORY_TOOL_*`, `createMemoryActionHandler` | typebox + `ToolDefinition` + pi-tui rendering + `ctx.ui.notify` |
177
- | dream / extract rounds | `runDream`, `runExtract`, prompts | `createAgentSession` via `createPiHeadlessAgent` |
243
+ | dream / extract rounds | `runTask(TASKS.dream, …)`, `runTask(TASKS.extractMemories, …)`, prompts | `createAgentSession` via `createPiHeadlessAgent` |
178
244
  | Past-session search | `HostTranscriptPort.searchSessions` | `SessionManager` |
179
245
 
180
246
  ## Windows
package/README.zh.md CHANGED
@@ -15,10 +15,10 @@
15
15
  | **读写门面** | `MemoryStore` —— `listEntries` / `readEntry` / `readIndex` / `searchEntries` / `addEntry` / `replaceEntry` / `removeEntry` / `renameEntry` / `rebuildIndex`,外加逻辑锁 API |
16
16
  | **并发与恢复** | 只持毫秒、永不自动回收的跨进程 `.lock`;按「一次原语调用」或「一整轮 dream」持有的进程内逻辑锁;瞬时错误重试;`.backups/<ts>-<label>/` 回滚点 |
17
17
  | **路径与安全** | git remote 归一化成单个合法目录名、目录逃逸断言、注入净化、Windows 保留设备名处理 |
18
- | **LLM 编排** | `runDream`、`runExtract`、`runSideQuery` 及其 prompt 文本,跑在下面两个端口之上 |
18
+ | **LLM 编排** | `TASKS` 里的三个任务描述符(`autoSurfacing` / `extractMemories` / `dream`)与 `runTask` 入口,及其 prompt 文本,跑在下面两个端口之上 |
19
19
  | **注入策略** | 索引窗口(最新 N 行 / N 字节)、正文截断、容量口径、`scanEntries`、`renderSurfacedBlock` —— 全是返回字符串的纯函数 |
20
20
  | **工具契约** | action 集合、JSON Schema、模型可见文案、`createMemoryActionHandler` |
21
- | **配置** | 默认值、按显式文件列表 deep-merge、`~` 展开、模型配置校验、`defaultMemoryRoot()` |
21
+ | **配置** | 默认值、`mergeConfig` deep-merge、`~` 展开、模型配置校验、`defaultMemoryRoot()` —— 不读文件:适配层自己读文件后调 `mergeConfig` |
22
22
 
23
23
  没有 LLM 调用、没有 UI、没有宿主 API:`src/**` 只 import `node:*` 与相对路径,
24
24
  `tests/neutrality.test.ts` 会在这一点被破坏时让构建变红。
@@ -45,7 +45,6 @@ clone 与 worktree 共享记忆。
45
45
  Test-command.md — 一条记忆一个文件
46
46
  .lock — 跨进程写锁(只持毫秒,永不自动回收)
47
47
  .backups/ — 回滚点:<ISO-ts>-<label>/(以及旧版 1.x 迁移留下的 migrate-<ts>/ 整目录快照)
48
- .dream-meta.json — 上次 dream 的时间与会话数(提醒逻辑用它)
49
48
  sessions/ — headless 会话落盘目录,仅在开启 sessionPersistence 时使用
50
49
  ```
51
50
 
@@ -133,8 +132,8 @@ export interface HeadlessRunRequest {
133
132
  }
134
133
 
135
134
  export interface HeadlessAgentPort {
136
- /** null = 本轮没跑(宿主拒绝或超时)。 */
137
- run(req: HeadlessRunRequest): Promise<string | null>;
135
+ /** completed / no-output / incomplete / not-run —— 见 `HeadlessOutcome`。 */
136
+ run(req: HeadlessRunRequest): Promise<HeadlessOutcome>;
138
137
  }
139
138
 
140
139
  export interface HostTranscriptPort {
@@ -144,8 +143,30 @@ export interface HostTranscriptPort {
144
143
  }
145
144
  ```
146
145
 
147
- `runDream(opts, { headless })`、`runExtract(opts, { headless, transcript })`、
148
- `runSideQuery(opts, { headless })` 都显式收端口 —— 没有模块级单例。
146
+ `HeadlessOutcome` 是 `run` 必须返回的结果,它是一个四分支 union:
147
+
148
+ ```ts
149
+ type HeadlessOutcome =
150
+ | { status: "completed"; text: string }
151
+ | { status: "no-output" }
152
+ | { status: "incomplete"; cause: "max-tokens" | "turn-limit" | "aborted" }
153
+ | { status: "not-run"; cause: "host-refused" | "unavailable" | "timeout" | "aborted"; detail?: string };
154
+ ```
155
+
156
+ **判别规则:请求发出之前就结束 → `not-run`;发出之后没拿到完整答案 → `incomplete`。**
157
+ (`no-output` 是「跑了但没有任何文本」;空回复是 `{ status: "completed", text: "" }`,不是 `no-output`。)
158
+
159
+ 各任务的后果:
160
+
161
+ - **extract**:`not-run` → `{ skipped: true }`;`incomplete` → 跑过一部分(`{ skipped: false }`);
162
+ `no-output` → `{ skipped: false, result: "" }`。
163
+ - **dream**:任何非 `completed` 结果都会抛错(fail-closed)。
164
+ - **surfacing**:返回空结果(`{ files: [], content: "" }`)。
165
+
166
+ 注意:这是新的 `HeadlessAgentPort` 必须返回的形状 —— `runTask` 建在它之上,不会退回到纯字符串。
167
+
168
+ `runTask(TASKS.autoSurfacing, input, ctx)`、`runTask(TASKS.extractMemories, input, ctx)`、
169
+ `runTask(TASKS.dream, input, ctx)` 都通过 `ctx.ports` 显式收端口 —— 没有模块级单例。
149
170
 
150
171
  **注意白名单陷阱。** 如果宿主的 `tools` 选项是一个连 custom tools 一起过滤的白名单,那么
151
172
  「关掉 builtin、只留 `memory` 工具」必须用别的方式表达。pi 的方式是 `noTools: "builtin"`;
@@ -159,17 +180,52 @@ export interface HostTranscriptPort {
159
180
  | prompt cache 优化(录制/重放冻结值) | 纯宿主机制 |
160
181
  | 工具 schema 转换、UI 渲染、通知 | 宿主自己的 schema DSL 与 UI 通道 |
161
182
  | 模型解析与校验 | 宿主自己的注册表;这里 `model` / `effort` 是不透明字符串 |
162
- | 配置文件在哪、项目是否受信任 | 宿主知识;`loadConfigFrom(files)` 收显式的文件列表 |
183
+ | 配置文件在哪、项目是否受信任 | 宿主知识;适配层自己读文件,把解析结果交给 `mergeConfig` |
163
184
  | 数会话数以决定何时提示 consolidate | 需要宿主的会话存储 |
164
185
 
186
+ ### 1.1.0 新增的配置辅助
187
+
188
+ - `mergeConfig(base, overlay)` 把一个内存里的对象深合并进 `MemoryConfig`。宿主的配置**不是文件**时用它
189
+ —— 比如 cordis 行在激活插件时递进来的 `config:` 对象。合并实现只有这一份;要读文件的适配层自己
190
+ 解析后把结果交给 `mergeConfig`。
191
+ - `EffortLevel` 是配置里所有思考/推理档位的类型。它是**不透明字符串**:core 原样透传,不解释、不校验。
192
+ 合法值属于宿主数据(dsh 里按 provider 路线而异),所以闭枚举是错的形状。`ThinkLevel` 作为 deprecated
193
+ 别名保留,已有适配层的类型重导出不会破。
194
+ - `modelConfigErrors(cfg, resolve, tasks?)` 与 `requiredModels(cfg, tasks?)` 多了一个可选 `tasks`,
195
+ 让适配层声明**自己真正实现了哪些任务** —— 不再被迫为它没有的任务索要模型(例如没有 dream 支持的
196
+ 适配层)。省略 `tasks` 保持旧行为:dream 恒在必需集合内,另两个按 `enabled` 决定。
197
+
198
+ ## 2.0.0 有什么变化
199
+
200
+ **配置文件 IO 下放给适配层。** core 不再读文件:**`loadConfigFrom` 已在 2.0.0 移除**,它收的那个
201
+ `LoadConfigFromOptions` 选项类型也一并删掉。如果你的代码报「`loadConfigFrom` is not exported」
202
+ (`does not provide an export named 'loadConfigFrom'`),原因就是这个删除,而且没有兼容壳可退。
203
+ 它仍保留配置的**语义**:`DEFAULT_CONFIG`、`mergeConfig`、`defaultMemoryRoot` 与 `expandTilde`。
204
+ 适配层自己读自己的配置文件,再把解析出的对象交给 `mergeConfig` ——
205
+ pi 就这么读它的两个 `memory.json`,dsh 也这么合并它的 cordis 行 `config:` 对象。文件在哪、项目
206
+ 是否受信任,是宿主知识,留在适配层。
207
+
208
+ **三个模型任务现在是一等对象。** `autoSurfacing`、`extractMemories`、`dream` 是声明在 `TASKS` 里的
209
+ 任务描述符,唯一的入口是 `runTask(task, input, ctx)`:它自己读 config、造 prompt、施加该任务的
210
+ 锁/快照计划、再跑端口。旧的三个 `run*` 函数删掉了,一起删掉的还有它们的选项类型 `RunSideQueryOpts`、`RunExtractOpts`、
211
+ `RunDreamOpts`,以及 `ExtractPorts` 接口。`HeadlessAgentPort.run` 现在返回
212
+ `HeadlessOutcome`(`completed` / `no-output` / `incomplete` / `not-run`)而不是 `string | null`,
213
+ 端口因此能区分「跑了但没写出东西」与「根本没跑」。每个适配层用 `IMPLEMENTED_TASKS` 声明自己实现了
214
+ 哪些任务,`/memory` 的模块行由 core 的 `moduleStatusRows(cfg, tasks)` 派生 —— core 给行数据,措辞与
215
+ 顺序仍是适配层自己的事。
216
+
217
+ **dream 的 nudge 键移出共享配置。** `memory.json` 的键名不变、仍挂在 `dream` 下,但 core 不再拥有
218
+ 它们:pi 把它们读进自己的 `PiHostConfig`(默认值 5 / 24),它们不再是 `MemoryConfig` 的一部分。
219
+ 提醒策略是单宿主的关切,属于适配层而不是共享的 core。
220
+
165
221
  ### pi 适配层的对应关系
166
222
 
167
223
  | 需要 | core | pi |
168
224
  |---|---|---|
169
225
  | 索引进 system prompt | `buildIndexSection`、`truncateIndexForInjection`、`indexInjectionCapacity` | `systemPromptOptions.sections["memory_index"]` + transcript 重放 |
170
- | 每轮浮现的记忆 | `scanEntries`、`runSideQuery`、`renderSurfacedBlock` | message 注入、session 内去重 |
226
+ | 每轮浮现的记忆 | `scanEntries`、`runTask(TASKS.autoSurfacing, …)` | message 注入、session 内去重 |
171
227
  | `memory` 工具 | `memoryToolSchema`、`MEMORY_TOOL_*`、`createMemoryActionHandler` | typebox + `ToolDefinition` + pi-tui 渲染 + `ctx.ui.notify` |
172
- | dream / extract 轮次 | `runDream`、`runExtract`、prompt 文本 | `createPiHeadlessAgent` 里的 `createAgentSession` |
228
+ | dream / extract 轮次 | `runTask(TASKS.dream, …)`、`runTask(TASKS.extractMemories, …)`、prompt 文本 | `createPiHeadlessAgent` 里的 `createAgentSession` |
173
229
  | 搜历史会话 | `HostTranscriptPort.searchSessions` | `SessionManager` |
174
230
 
175
231
  ## Windows
package/dist/config.d.ts CHANGED
@@ -1,4 +1,12 @@
1
- export type ThinkLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
1
+ /**
2
+ * 宿主的思考/推理档位,**不透明字符串**:core 原样透传,不解释、不校验。
3
+ * pi 的合法值是 `off|minimal|low|medium|high|xhigh`;dsh 的合法值按 provider 路线是数据
4
+ * (DeepSeek 路线 `off|low|high|max`),所以 core 不能把它写成闭枚举。
5
+ * 合法性由适配层在启动期用宿主的 resolve 接口校验。
6
+ */
7
+ export type EffortLevel = string;
8
+ /** @deprecated pi 词汇,等价于 `EffortLevel`;保留是为了已发布适配层的类型重导出不破。 */
9
+ export type ThinkLevel = EffortLevel;
2
10
  /** Session persistence configuration for headless memory-agent sub-sessions. */
3
11
  export interface SessionPersistenceConfig {
4
12
  /** Enable disk persistence (default: false = in-memory). */
@@ -15,7 +23,7 @@ export interface DefaultsConfig {
15
23
  export interface AutoSurfacingConfig {
16
24
  enabled: boolean;
17
25
  model?: string;
18
- thinkLevel: ThinkLevel;
26
+ thinkLevel: EffortLevel;
19
27
  maxFiles: number;
20
28
  /**
21
29
  * 单条 entry 注入正文的字节上限。
@@ -29,7 +37,7 @@ export interface ExtractMemoriesConfig {
29
37
  /** 每轮自动提取。opt-in:默认 `false` —— 开启后每轮结束都会跑一次 headless 模型调用。 */
30
38
  enabled: boolean;
31
39
  model?: string;
32
- thinkLevel: ThinkLevel;
40
+ thinkLevel: EffortLevel;
33
41
  maxContextTokens: number;
34
42
  /** 渲染进 extract prompt 时,单条 tool_result 的字符上限。 */
35
43
  maxToolResultChars: number;
@@ -62,11 +70,14 @@ export interface MemoryConfig {
62
70
  timeoutMs: number;
63
71
  snapshotKeep: number;
64
72
  };
73
+ /**
74
+ * dream 任务本身:模型、思考档位、会话落盘。
75
+ * 触发它的**策略**(隔多少个会话 / 多少小时后提醒)是宿主知识,**不**在这里 —— 需要它的适配层
76
+ * 自己持有(pi 的 `PiHostConfig`),dsh 没有这套策略。
77
+ */
65
78
  dream: {
66
- nudgeAfterSessions: number;
67
- nudgeAfterHours: number;
68
79
  model?: string;
69
- thinkLevel: ThinkLevel;
80
+ thinkLevel: EffortLevel;
70
81
  sessionPersistence?: SessionPersistenceConfig;
71
82
  };
72
83
  sessionSearch: {
@@ -85,8 +96,21 @@ export declare const DEFAULT_CONFIG: MemoryConfig;
85
96
  export type ModelTask = "dream" | "extractMemories" | "autoSurfacing";
86
97
  /** 某任务的模型值:per-task 优先,其次共享的 defaults.model。宿主的状态命令也用它。 */
87
98
  export declare function taskModel(cfg: MemoryConfig, task: ModelTask): string | undefined;
88
- /** 会执行的任务及其模型值。dream 恒在执行集合内(没有包级开关可以让它不跑)。 */
89
- export declare function requiredModels(cfg: MemoryConfig): Array<{
99
+ /**
100
+ * 会执行的任务及其模型值。
101
+ *
102
+ * `tasks`:适配层声明自己实现了哪些任务(如 dsh 本轮不实现 dream,就传 `["autoSurfacing"]`)。
103
+ * 省略 = 既有行为不变(dream 恒在执行集合内,另两个按 `enabled`);给定则**只**考虑这些任务,
104
+ * dream 不再被强制加入,另两个仍按 `enabled` 过滤。顺序与调用方列举顺序无关,恒为
105
+ * dream → extractMemories → autoSurfacing。
106
+ *
107
+ * 缺省路径上**不是**逐字不变,唯一的例外(实现期已裁定):`deepMerge` 会把用户写的
108
+ * `"extractMemories": null` / `"autoSurfacing": null` 原样带进来,旧实现直接读 `.enabled` 会抛
109
+ * `TypeError`,现在按 falsy 跳过该任务。这与 `taskModel` 对 `"dream": null` 的既有防御同一取向:
110
+ * 配置读不懂时应给出「该任务关闭 / 没有模型」这种可读结果,而不是把启动校验变成一句看不懂的
111
+ * 初始化失败。
112
+ */
113
+ export declare function requiredModels(cfg: MemoryConfig, tasks?: readonly ModelTask[]): Array<{
90
114
  task: ModelTask;
91
115
  value: string | undefined;
92
116
  }>;
@@ -94,11 +118,18 @@ export declare function requiredModels(cfg: MemoryConfig): Array<{
94
118
  * 启动校验:空数组 = 通过。
95
119
  * `resolve` 由调用方注入(生产时是 `(v) => resolveModel(v, ctx.modelRegistry) !== undefined`),
96
120
  * 因此本函数不依赖 SDK 的 registry 类型,可用假 resolve 单测。
121
+ * `tasks`:原样透传给 `requiredModels`(只校验列出的任务;`null` 子树跳过那个例外同上)。
97
122
  */
98
- export declare function modelConfigErrors(cfg: MemoryConfig, resolve: (value: string) => boolean): string[];
123
+ export declare function modelConfigErrors(cfg: MemoryConfig, resolve: (value: string) => boolean, tasks?: readonly ModelTask[]): string[];
99
124
  /** 已通过启动校验的模型值;缺失时抛错(真正的守卫在适配层的会话启动路径上,这里是防御)。 */
100
125
  export declare function requiredModel(cfg: MemoryConfig, task: ModelTask): string;
101
126
  export declare function expandTilde(p: string, platform?: NodeJS.Platform): string;
127
+ /**
128
+ * 把 `overlay` 深合并到 `base` 上:`undefined` 跳过、plain object 递归、数组整体替换、`null` 子树原样带入。
129
+ * 返回**新对象**,不改 `base` —— 这是合并语义的**唯一**一份实现:适配层读文件、读行 config、
130
+ * 读任何宿主侧的 overlay,都把它交给这里。core 不读任何配置文件。
131
+ */
132
+ export declare function mergeConfig(base: MemoryConfig, overlay: unknown): MemoryConfig;
102
133
  /**
103
134
  * 共享数据根。
104
135
  *
@@ -109,17 +140,4 @@ export declare function expandTilde(p: string, platform?: NodeJS.Platform): stri
109
140
  * `env` 与 `home` 做成参数是为了可单测(沿用 `store/paths.ts` 的注入缝风格)。
110
141
  */
111
142
  export declare function defaultMemoryRoot(env?: NodeJS.ProcessEnv, home?: string): string;
112
- export interface LoadConfigFromOptions {
113
- /** 命名/展开规则跟随的平台。默认 `process.platform`。 */
114
- platform?: NodeJS.Platform;
115
- /** 覆盖共享数据根(测试注入缝)。默认 `defaultMemoryRoot()`。 */
116
- memoryRoot?: string;
117
- }
118
- /**
119
- * 把 `files` 里存在且可解析的 JSON 按顺序 deep-merge 到默认值上,最后展开 `memoryDir` 的 `~`。
120
- *
121
- * core **不认识任何宿主的配置文件路径**:`files` 由适配层组装(全局配置在哪、项目配置在哪、
122
- * 项目不受信任时该不该读,全都是宿主的事)。不存在与 JSON 损坏的文件都跳过。
123
- */
124
- export declare function loadConfigFrom(files: string[], opts?: LoadConfigFromOptions): Promise<MemoryConfig>;
125
143
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC;AAErC,gFAAgF;AAChF,MAAM,WAAW,wBAAwB;IACxC,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,qIAAqI;IACrI,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC9B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,WAAW,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACrC,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,WAAW,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,sBAAsB,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD;;;;OAIG;IACH,KAAK,EAAE;QACN,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,WAAW,CAAC;QACxB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;KAC9C,CAAC;IACF,aAAa,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,aAAa,EAAE,mBAAmB,GAAG;QACpC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;KAC9C,CAAC;IACF,eAAe,EAAE,qBAAqB,GAAG;QACxC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;KAC9C,CAAC;CACF;AAED,eAAO,MAAM,cAAc,EAAE,YA6B5B,CAAC;AAEF,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAEtE,2DAA2D;AAC3D,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAIhF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,YAAY,EACjB,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,GAC1B,KAAK,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAUvD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,EACnC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,GAC1B,MAAM,EAAE,CAUV;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAMxE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAO3F;AAoBD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,CAE9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAIxG"}
package/dist/config.js CHANGED
@@ -1,4 +1,3 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
1
  import { homedir } from "node:os";
3
2
  import { isAbsolute, join } from "node:path";
4
3
  export const DEFAULT_CONFIG = {
@@ -13,7 +12,7 @@ export const DEFAULT_CONFIG = {
13
12
  memIndexInjectMaxLines: 50,
14
13
  memIndexInjectMaxBytes: 16384,
15
14
  lock: { timeoutMs: 5000, snapshotKeep: 5 },
16
- dream: { nudgeAfterSessions: 5, nudgeAfterHours: 24, thinkLevel: "high" },
15
+ dream: { thinkLevel: "high" },
17
16
  sessionSearch: { maxSessions: 10, maxMatches: 5 },
18
17
  autoSurfacing: {
19
18
  enabled: true,
@@ -37,25 +36,42 @@ export function taskModel(cfg, task) {
37
36
  // 而不是抛 TypeError,把启动校验变成一句看不懂的初始化失败。
38
37
  return cfg[task]?.model ?? cfg.defaults?.model;
39
38
  }
40
- /** 会执行的任务及其模型值。dream 恒在执行集合内(没有包级开关可以让它不跑)。 */
41
- export function requiredModels(cfg) {
42
- const out = [
43
- { task: "dream", value: taskModel(cfg, "dream") },
44
- ];
45
- if (cfg.extractMemories.enabled)
46
- out.push({ task: "extractMemories", value: taskModel(cfg, "extractMemories") });
47
- if (cfg.autoSurfacing.enabled)
48
- out.push({ task: "autoSurfacing", value: taskModel(cfg, "autoSurfacing") });
39
+ /**
40
+ * 会执行的任务及其模型值。
41
+ *
42
+ * `tasks`:适配层声明自己实现了哪些任务(如 dsh 本轮不实现 dream,就传 `["autoSurfacing"]`)。
43
+ * 省略 = 既有行为不变(dream 恒在执行集合内,另两个按 `enabled`);给定则**只**考虑这些任务,
44
+ * dream 不再被强制加入,另两个仍按 `enabled` 过滤。顺序与调用方列举顺序无关,恒为
45
+ * dream → extractMemories → autoSurfacing。
46
+ *
47
+ * 缺省路径上**不是**逐字不变,唯一的例外(实现期已裁定):`deepMerge` 会把用户写的
48
+ * `"extractMemories": null` / `"autoSurfacing": null` 原样带进来,旧实现直接读 `.enabled` 会抛
49
+ * `TypeError`,现在按 falsy 跳过该任务。这与 `taskModel` 对 `"dream": null` 的既有防御同一取向:
50
+ * 配置读不懂时应给出「该任务关闭 / 没有模型」这种可读结果,而不是把启动校验变成一句看不懂的
51
+ * 初始化失败。
52
+ */
53
+ export function requiredModels(cfg, tasks) {
54
+ const order = ["dream", "extractMemories", "autoSurfacing"];
55
+ const out = [];
56
+ for (const task of order) {
57
+ if (tasks !== undefined && !tasks.includes(task))
58
+ continue;
59
+ // dream 没有包级开关:进了候选即在执行集合内(省略 `tasks` 时它恒是候选)。另两个看 `enabled`。
60
+ // 这里用 `?.`,与 `taskModel` 同理:`deepMerge` 会把用户写的 `"extractMemories": null` 原样带进来。
61
+ if (task === "dream" || cfg[task]?.enabled)
62
+ out.push({ task, value: taskModel(cfg, task) });
63
+ }
49
64
  return out;
50
65
  }
51
66
  /**
52
67
  * 启动校验:空数组 = 通过。
53
68
  * `resolve` 由调用方注入(生产时是 `(v) => resolveModel(v, ctx.modelRegistry) !== undefined`),
54
69
  * 因此本函数不依赖 SDK 的 registry 类型,可用假 resolve 单测。
70
+ * `tasks`:原样透传给 `requiredModels`(只校验列出的任务;`null` 子树跳过那个例外同上)。
55
71
  */
56
- export function modelConfigErrors(cfg, resolve) {
72
+ export function modelConfigErrors(cfg, resolve, tasks) {
57
73
  const errors = [];
58
- for (const { task, value } of requiredModels(cfg)) {
74
+ for (const { task, value } of requiredModels(cfg, tasks)) {
59
75
  if (value === undefined) {
60
76
  errors.push(`no model for ${task} — set "${task}.model" or "defaults.model" in memory.json`);
61
77
  }
@@ -102,15 +118,13 @@ function deepMerge(base, over) {
102
118
  }
103
119
  return out;
104
120
  }
105
- function readJsonSafe(path) {
106
- try {
107
- if (existsSync(path))
108
- return JSON.parse(readFileSync(path, "utf-8"));
109
- }
110
- catch {
111
- // ignore malformed
112
- }
113
- return {};
121
+ /**
122
+ * 把 `overlay` 深合并到 `base` 上:`undefined` 跳过、plain object 递归、数组整体替换、`null` 子树原样带入。
123
+ * 返回**新对象**,不改 `base` —— 这是合并语义的**唯一**一份实现:适配层读文件、读行 config、
124
+ * 读任何宿主侧的 overlay,都把它交给这里。core 不读任何配置文件。
125
+ */
126
+ export function mergeConfig(base, overlay) {
127
+ return deepMerge(base, (overlay ?? {}));
114
128
  }
115
129
  /**
116
130
  * 共享数据根。
@@ -126,18 +140,4 @@ export function defaultMemoryRoot(env = process.env, home = homedir()) {
126
140
  const base = xdg && isAbsolute(xdg) ? xdg : join(home, ".local", "share");
127
141
  return join(base, "simple-memory");
128
142
  }
129
- /**
130
- * 把 `files` 里存在且可解析的 JSON 按顺序 deep-merge 到默认值上,最后展开 `memoryDir` 的 `~`。
131
- *
132
- * core **不认识任何宿主的配置文件路径**:`files` 由适配层组装(全局配置在哪、项目配置在哪、
133
- * 项目不受信任时该不该读,全都是宿主的事)。不存在与 JSON 损坏的文件都跳过。
134
- */
135
- export async function loadConfigFrom(files, opts = {}) {
136
- let cfg = { ...DEFAULT_CONFIG, memoryDir: opts.memoryRoot ?? defaultMemoryRoot() };
137
- for (const file of files) {
138
- cfg = deepMerge(cfg, readJsonSafe(file));
139
- }
140
- cfg.memoryDir = expandTilde(cfg.memoryDir, opts.platform ?? process.platform);
141
- return cfg;
142
- }
143
143
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -27,22 +27,23 @@ export { assertInsideRoot, normalizeRemoteUrl, projectDirName, projectIdentity,
27
27
  export type { NamingOptions, ProjectIdentity, ProjectKind } from "./store/paths.js";
28
28
  export { sanitizeForInjection, stripInvisibleChars } from "./store/sanitize.js";
29
29
  export { escapeWindowsTrailing, isReservedWindowsName, windowsSafeName } from "./store/windows-names.js";
30
- export { DEFAULT_CONFIG, defaultMemoryRoot, expandTilde, loadConfigFrom, modelConfigErrors, requiredModel, requiredModels, taskModel, } from "./config.js";
31
- export type { AutoSurfacingConfig, DefaultsConfig, ExtractMemoriesConfig, LoadConfigFromOptions, MemoryConfig, ModelTask, SessionPersistenceConfig, ThinkLevel, } from "./config.js";
30
+ export { DEFAULT_CONFIG, defaultMemoryRoot, expandTilde, mergeConfig, modelConfigErrors, requiredModel, requiredModels, taskModel, } from "./config.js";
31
+ export type { AutoSurfacingConfig, DefaultsConfig, EffortLevel, ExtractMemoriesConfig, MemoryConfig, ModelTask, SessionPersistenceConfig, ThinkLevel, } from "./config.js";
32
32
  export { DREAM_ACTIONS, MAIN_AGENT_ACTIONS } from "./tool/actions.js";
33
33
  export type { MemoryAction } from "./tool/actions.js";
34
34
  export { ENTRY_TRUNCATION_MARKER, INDEX_TRUNCATION_MARKER, SIDE_QUERY_MANIFEST_CHARS, SIDE_QUERY_MAX_ENTRIES, SIDE_QUERY_MIN_DESC_CHARS, buildIndexSection, buildSideQueryTask, indexInjectionCapacity, renderSurfacedBlock, scanEntries, truncateForInjection, truncateIndexForInjection, } from "./injection.js";
35
35
  export type { EntryManifest } from "./injection.js";
36
- export { runDream } from "./orchestration/dream.js";
37
- export type { RunDreamOpts } from "./orchestration/dream.js";
38
- export { runExtract } from "./orchestration/extract.js";
39
- export type { ExtractPorts, RunExtractOpts } from "./orchestration/extract.js";
36
+ export { runTask } from "./orchestration/task.js";
37
+ export { TASKS } from "./orchestration/tasks.js";
38
+ export { moduleStatusRows } from "./orchestration/status.js";
39
+ export type { ModuleStatusRow } from "./orchestration/status.js";
40
+ export type { Incomplete, MemoryTask, MemoryToolOnWrite, TaskContext, TaskDeps, TaskPlan, } from "./orchestration/task.js";
41
+ export type { ExtractInput, ExtractResult } from "./orchestration/extract.js";
40
42
  export { renderConversation } from "./orchestration/conversation.js";
41
43
  export type { ConversationLimits } from "./orchestration/conversation.js";
42
- export { runSideQuery } from "./orchestration/surfacing.js";
43
- export type { RunSideQueryOpts } from "./orchestration/surfacing.js";
44
+ export type { SurfacingInput, SurfacingResult } from "./orchestration/surfacing.js";
44
45
  export { buildDreamTask, buildExtractTask } from "./orchestration/prompts.js";
45
- export type { ExtractMessage, HeadlessAgentPort, HeadlessRunRequest, HostTranscriptPort, OrchestrationPorts, } from "./orchestration/ports.js";
46
+ export type { ExtractMessage, HeadlessAgentPort, HeadlessOutcome, HeadlessRunRequest, HostTranscriptPort, IncompleteOutcome, OrchestrationPorts, } from "./orchestration/ports.js";
46
47
  export { memoryToolSchema } from "./tool/schema.js";
47
48
  export type { MemoryToolField, MemoryToolJsonSchema } from "./tool/schema.js";
48
49
  export { MEMORY_TOOL_DESCRIPTION, MEMORY_TOOL_GUIDELINES, MEMORY_TOOL_LABEL, MEMORY_TOOL_NAME, MEMORY_TOOL_SNIPPET, } from "./tool/texts.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -25,8 +25,8 @@ export { assertInsideRoot, normalizeRemoteUrl, projectDirName, projectIdentity,
25
25
  export { sanitizeForInjection, stripInvisibleChars } from "./store/sanitize.js";
26
26
  export { escapeWindowsTrailing, isReservedWindowsName, windowsSafeName } from "./store/windows-names.js";
27
27
  // ── 配置(默认值、合并语义、模型校验、共享数据根)──────────────────────────────
28
- // 配置文件**在哪**是宿主知识,由适配层组装成 `loadConfigFrom` 的 `files` 入参。
29
- export { DEFAULT_CONFIG, defaultMemoryRoot, expandTilde, loadConfigFrom, modelConfigErrors, requiredModel, requiredModels, taskModel, } from "./config.js";
28
+ // core 只给默认值与合并语义;配置文件在哪、读不读,是适配层的事。
29
+ export { DEFAULT_CONFIG, defaultMemoryRoot, expandTilde, mergeConfig, modelConfigErrors, requiredModel, requiredModels, taskModel, } from "./config.js";
30
30
  // ── tool/ 中立工具契约 ────────────────────────────────────────────────────────
31
31
  // schema 是纯 JSON Schema,文案是纯字符串,handler 是纯函数:适配层把它们包成宿主的工具对象
32
32
  // (pi → typebox + ToolDefinition + pi-tui 渲染;dsh → schemastery + defineTool)。
@@ -38,10 +38,10 @@ export { ENTRY_TRUNCATION_MARKER, INDEX_TRUNCATION_MARKER, SIDE_QUERY_MANIFEST_C
38
38
  // ── orchestration/ LLM 编排 ───────────────────────────────────────────────────
39
39
  // 适配层实现 `HeadlessAgentPort` 与 `HostTranscriptPort` 两个端口,就能拿到与 pi 完全相同的
40
40
  // dream / extract / 侧查询行为(prompt 文本、锁与快照边界、截断预算、错误语义)。
41
- export { runDream } from "./orchestration/dream.js";
42
- export { runExtract } from "./orchestration/extract.js";
41
+ export { runTask } from "./orchestration/task.js";
42
+ export { TASKS } from "./orchestration/tasks.js";
43
+ export { moduleStatusRows } from "./orchestration/status.js";
43
44
  export { renderConversation } from "./orchestration/conversation.js";
44
- export { runSideQuery } from "./orchestration/surfacing.js";
45
45
  export { buildDreamTask, buildExtractTask } from "./orchestration/prompts.js";
46
46
  export { memoryToolSchema } from "./tool/schema.js";
47
47
  export { MEMORY_TOOL_DESCRIPTION, MEMORY_TOOL_GUIDELINES, MEMORY_TOOL_LABEL, MEMORY_TOOL_NAME, MEMORY_TOOL_SNIPPET, } from "./tool/texts.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8EAA8E;AAC9E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3G,OAAO,EACN,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,UAAU,EACV,eAAe,GACf,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEtF,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG7E,6EAA6E;AAC7E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE5H,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,6EAA6E;AAC7E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAG3H,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEzG,2DAA2D;AAC3D,yDAAyD;AACzD,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,SAAS,GACT,MAAM,aAAa,CAAC;AAYrB,2EAA2E;AAC3E,6DAA6D;AAC7D,8EAA8E;AAC9E,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGtE,2EAA2E;AAC3E,0DAA0D;AAC1D,8DAA8D;AAC9D,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,yBAAyB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,+EAA+E;AAC/E,uEAAuE;AACvE,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAQ9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8EAA8E;AAC9E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3G,OAAO,EACN,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,UAAU,EACV,eAAe,GACf,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEtF,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG7E,6EAA6E;AAC7E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE5H,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,6EAA6E;AAC7E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAG3H,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEzG,2DAA2D;AAC3D,qCAAqC;AACrC,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,SAAS,GACT,MAAM,aAAa,CAAC;AAYrB,2EAA2E;AAC3E,6DAA6D;AAC7D,8EAA8E;AAC9E,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGtE,2EAA2E;AAC3E,0DAA0D;AAC1D,8DAA8D;AAC9D,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,yBAAyB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,+EAA+E;AAC/E,uEAAuE;AACvE,uDAAuD;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAW7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAU9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}