@oh-my-pi/pi-coding-agent 16.1.22 → 16.2.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 (276) hide show
  1. package/CHANGELOG.md +99 -1
  2. package/dist/cli.js +4387 -4164
  3. package/dist/types/advisor/__tests__/emission-guard.test.d.ts +1 -0
  4. package/dist/types/advisor/emission-guard.d.ts +73 -0
  5. package/dist/types/advisor/index.d.ts +1 -0
  6. package/dist/types/advisor/runtime.d.ts +7 -0
  7. package/dist/types/advisor/watchdog.d.ts +2 -0
  8. package/dist/types/cli/flag-tables.d.ts +1 -0
  9. package/dist/types/cli/gallery-fixtures/search.d.ts +1 -1
  10. package/dist/types/cli/gc-cli.d.ts +58 -0
  11. package/dist/types/collab/display-name.d.ts +3 -0
  12. package/dist/types/collab/host.d.ts +0 -2
  13. package/dist/types/commands/gc.d.ts +37 -0
  14. package/dist/types/commands/worktree.d.ts +0 -3
  15. package/dist/types/config/inline-tool-descriptors-mode.d.ts +13 -0
  16. package/dist/types/config/model-discovery.d.ts +6 -1
  17. package/dist/types/config/model-registry.d.ts +6 -2
  18. package/dist/types/config/model-resolver.d.ts +12 -0
  19. package/dist/types/config/models-config-schema.d.ts +29 -2
  20. package/dist/types/config/models-config.d.ts +22 -1
  21. package/dist/types/config/settings-schema.d.ts +145 -21
  22. package/dist/types/config/settings.d.ts +13 -0
  23. package/dist/types/dap/config.d.ts +1 -1
  24. package/dist/types/edit/hashline/filesystem.d.ts +4 -2
  25. package/dist/types/edit/renderer.d.ts +4 -0
  26. package/dist/types/extensibility/extensions/types.d.ts +17 -17
  27. package/dist/types/extensibility/hooks/types.d.ts +10 -10
  28. package/dist/types/extensibility/plugins/marketplace/types.d.ts +1 -0
  29. package/dist/types/internal-urls/__tests__/ssh-protocol.test.d.ts +1 -0
  30. package/dist/types/internal-urls/index.d.ts +1 -0
  31. package/dist/types/internal-urls/registry-helpers.d.ts +2 -0
  32. package/dist/types/internal-urls/router.d.ts +1 -1
  33. package/dist/types/internal-urls/ssh-protocol.d.ts +10 -0
  34. package/dist/types/internal-urls/types.d.ts +19 -2
  35. package/dist/types/irc/bus.d.ts +6 -0
  36. package/dist/types/mcp/transports/stdio.d.ts +25 -1
  37. package/dist/types/modes/components/__tests__/move-overlay.test.d.ts +1 -0
  38. package/dist/types/modes/components/custom-editor.d.ts +7 -0
  39. package/dist/types/modes/components/move-overlay.d.ts +23 -0
  40. package/dist/types/modes/components/plugin-selector.d.ts +2 -1
  41. package/dist/types/modes/components/queue-mode-selector.d.ts +2 -1
  42. package/dist/types/modes/components/select-list-mouse-routing.d.ts +2 -0
  43. package/dist/types/modes/components/settings-defs.d.ts +4 -1
  44. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  45. package/dist/types/modes/components/show-images-selector.d.ts +2 -1
  46. package/dist/types/modes/components/status-line/component.d.ts +2 -0
  47. package/dist/types/modes/components/status-line/types.d.ts +2 -0
  48. package/dist/types/modes/components/theme-selector.d.ts +2 -1
  49. package/dist/types/modes/components/thinking-selector.d.ts +2 -1
  50. package/dist/types/modes/controllers/command-controller.d.ts +10 -1
  51. package/dist/types/modes/controllers/streaming-reveal.d.ts +6 -0
  52. package/dist/types/modes/interactive-mode.d.ts +10 -1
  53. package/dist/types/modes/internal-url-autocomplete.d.ts +1 -1
  54. package/dist/types/modes/running-subagent-badge.d.ts +6 -0
  55. package/dist/types/modes/theme/mermaid-rendering.test.d.ts +1 -0
  56. package/dist/types/modes/theme/theme.d.ts +2 -1
  57. package/dist/types/modes/types.d.ts +9 -1
  58. package/dist/types/sdk.d.ts +2 -2
  59. package/dist/types/session/agent-session.d.ts +2 -1
  60. package/dist/types/session/session-listing.d.ts +10 -1
  61. package/dist/types/session/session-manager.d.ts +13 -0
  62. package/dist/types/slash-commands/builtin-registry.d.ts +1 -1
  63. package/dist/types/ssh/__tests__/connection-manager-args.test.d.ts +1 -0
  64. package/dist/types/ssh/__tests__/file-transfer-posix-guard.test.d.ts +1 -0
  65. package/dist/types/ssh/connection-manager.d.ts +2 -0
  66. package/dist/types/ssh/file-transfer.d.ts +79 -0
  67. package/dist/types/ssh/utils.d.ts +6 -0
  68. package/dist/types/system-prompt.d.ts +5 -0
  69. package/dist/types/task/executor.d.ts +16 -0
  70. package/dist/types/tiny/text.d.ts +1 -1
  71. package/dist/types/tools/builtin-names.d.ts +5 -1
  72. package/dist/types/tools/{find.d.ts → glob.d.ts} +15 -15
  73. package/dist/types/tools/{search.d.ts → grep.d.ts} +14 -14
  74. package/dist/types/tools/index.d.ts +3 -3
  75. package/dist/types/tools/path-utils.d.ts +29 -0
  76. package/dist/types/tools/plan-mode-guard.d.ts +7 -0
  77. package/dist/types/tools/read.d.ts +2 -2
  78. package/dist/types/tools/render-utils.d.ts +8 -0
  79. package/dist/types/tools/renderers.d.ts +11 -0
  80. package/dist/types/tools/ssh.d.ts +2 -0
  81. package/dist/types/tools/todo.d.ts +0 -16
  82. package/dist/types/tools/write.d.ts +2 -2
  83. package/dist/types/utils/active-repo-context.d.ts +8 -0
  84. package/dist/types/utils/image-resize.d.ts +1 -0
  85. package/dist/types/utils/markit-cache.d.ts +23 -0
  86. package/dist/types/utils/markit.d.ts +5 -1
  87. package/dist/types/utils/prompt-path.d.ts +1 -0
  88. package/dist/types/web/search/providers/duckduckgo.d.ts +14 -0
  89. package/dist/types/web/search/providers/firecrawl.d.ts +28 -0
  90. package/dist/types/web/search/providers/tinyfish.d.ts +29 -0
  91. package/dist/types/web/search/providers/xai.d.ts +13 -0
  92. package/dist/types/web/search/types.d.ts +18 -2
  93. package/package.json +30 -15
  94. package/scripts/bench-guard.ts +1 -1
  95. package/scripts/build-binary.ts +9 -9
  96. package/scripts/bundle-dist.ts +2 -2
  97. package/src/advisor/__tests__/advisor.test.ts +40 -4
  98. package/src/advisor/__tests__/emission-guard.test.ts +147 -0
  99. package/src/advisor/advise-tool.ts +1 -1
  100. package/src/advisor/emission-guard.ts +172 -0
  101. package/src/advisor/index.ts +1 -0
  102. package/src/advisor/runtime.ts +11 -0
  103. package/src/advisor/watchdog.ts +12 -1
  104. package/src/cli/args.ts +5 -2
  105. package/src/cli/auth-broker-cli.ts +17 -0
  106. package/src/cli/config-cli.ts +4 -0
  107. package/src/cli/flag-tables.ts +7 -4
  108. package/src/cli/gallery-cli.ts +14 -2
  109. package/src/cli/gallery-fixtures/edit.ts +60 -0
  110. package/src/cli/gallery-fixtures/fs.ts +17 -17
  111. package/src/cli/gallery-fixtures/search.ts +4 -4
  112. package/src/cli/gc-cli.ts +939 -0
  113. package/src/cli/usage-cli.ts +20 -1
  114. package/src/cli/web-search-cli.ts +1 -1
  115. package/src/cli-commands.ts +1 -0
  116. package/src/collab/display-name.ts +13 -0
  117. package/src/collab/guest.ts +5 -1
  118. package/src/collab/host.ts +2 -13
  119. package/src/commands/gc.ts +46 -0
  120. package/src/commands/worktree.ts +6 -0
  121. package/src/config/inline-tool-descriptors-mode.ts +27 -0
  122. package/src/config/model-discovery.ts +77 -8
  123. package/src/config/model-registry.ts +89 -11
  124. package/src/config/model-resolver.ts +39 -1
  125. package/src/config/models-config-schema.ts +41 -5
  126. package/src/config/models-config.ts +4 -1
  127. package/src/config/settings-schema.ts +130 -27
  128. package/src/config/settings.ts +216 -7
  129. package/src/cursor.ts +1 -1
  130. package/src/dap/config.ts +152 -8
  131. package/src/dap/session.ts +1 -1
  132. package/src/discovery/helpers.ts +3 -1
  133. package/src/edit/hashline/diff.ts +14 -3
  134. package/src/edit/hashline/execute.ts +42 -6
  135. package/src/edit/hashline/filesystem.ts +49 -8
  136. package/src/edit/index.ts +1 -0
  137. package/src/edit/modes/patch.ts +11 -1
  138. package/src/edit/renderer.ts +140 -13
  139. package/src/eval/__tests__/agent-bridge.test.ts +101 -0
  140. package/src/eval/__tests__/julia-prelude.test.ts +18 -0
  141. package/src/eval/agent-bridge.ts +26 -3
  142. package/src/eval/jl/runner.jl +7 -1
  143. package/src/eval/js/tool-bridge.ts +2 -2
  144. package/src/export/html/index.ts +1 -1
  145. package/src/export/html/template.js +3 -1
  146. package/src/export/html/tool-views.generated.js +20 -20
  147. package/src/extensibility/extensions/types.ts +22 -22
  148. package/src/extensibility/hooks/types.ts +11 -11
  149. package/src/extensibility/plugins/legacy-pi-bundled-keys.ts +10 -3
  150. package/src/extensibility/plugins/legacy-pi-bundled-registry.ts +31 -10
  151. package/src/extensibility/plugins/marketplace/manager.ts +22 -0
  152. package/src/extensibility/plugins/marketplace/types.ts +1 -0
  153. package/src/internal-urls/__tests__/ssh-protocol.test.ts +331 -0
  154. package/src/internal-urls/docs-index.generated.txt +2 -2
  155. package/src/internal-urls/docs-index.ts +2 -3
  156. package/src/internal-urls/index.ts +1 -0
  157. package/src/internal-urls/registry-helpers.ts +19 -4
  158. package/src/internal-urls/router.ts +5 -3
  159. package/src/internal-urls/ssh-protocol.ts +367 -0
  160. package/src/internal-urls/types.ts +19 -2
  161. package/src/irc/bus.ts +11 -3
  162. package/src/lsp/index.ts +8 -1
  163. package/src/mcp/oauth-discovery.ts +20 -20
  164. package/src/mcp/tool-bridge.ts +32 -2
  165. package/src/mcp/transports/stdio.test.ts +20 -3
  166. package/src/mcp/transports/stdio.ts +45 -14
  167. package/src/memories/index.ts +1 -1
  168. package/src/modes/acp/acp-event-mapper.ts +2 -2
  169. package/src/modes/components/__tests__/move-overlay.test.ts +166 -0
  170. package/src/modes/components/agent-hub.ts +3 -0
  171. package/src/modes/components/agent-transcript-viewer.ts +9 -7
  172. package/src/modes/components/custom-editor.ts +90 -5
  173. package/src/modes/components/move-overlay.ts +282 -0
  174. package/src/modes/components/plan-review-overlay.ts +35 -35
  175. package/src/modes/components/plugin-selector.ts +6 -1
  176. package/src/modes/components/queue-mode-selector.ts +6 -1
  177. package/src/modes/components/select-list-mouse-routing.ts +35 -0
  178. package/src/modes/components/session-selector.ts +11 -10
  179. package/src/modes/components/settings-defs.ts +14 -1
  180. package/src/modes/components/settings-selector.ts +196 -29
  181. package/src/modes/components/show-images-selector.ts +6 -1
  182. package/src/modes/components/status-line/component.ts +108 -28
  183. package/src/modes/components/status-line/segments.ts +5 -1
  184. package/src/modes/components/status-line/types.ts +2 -0
  185. package/src/modes/components/theme-selector.ts +6 -1
  186. package/src/modes/components/thinking-selector.ts +6 -1
  187. package/src/modes/components/tool-execution.ts +25 -9
  188. package/src/modes/components/tree-selector.ts +5 -5
  189. package/src/modes/controllers/command-controller.ts +140 -47
  190. package/src/modes/controllers/event-controller.ts +59 -3
  191. package/src/modes/controllers/input-controller.ts +70 -4
  192. package/src/modes/controllers/selector-controller.ts +15 -2
  193. package/src/modes/controllers/streaming-reveal.ts +17 -0
  194. package/src/modes/controllers/tool-args-reveal.ts +1 -1
  195. package/src/modes/interactive-mode.ts +142 -59
  196. package/src/modes/internal-url-autocomplete.ts +17 -2
  197. package/src/modes/prompt-action-autocomplete.ts +3 -1
  198. package/src/modes/running-subagent-badge.ts +13 -0
  199. package/src/modes/setup-wizard/scenes/glyph.ts +2 -13
  200. package/src/modes/setup-wizard/scenes/providers.ts +2 -1
  201. package/src/modes/setup-wizard/scenes/theme.ts +6 -12
  202. package/src/modes/setup-wizard/scenes/web-search.ts +8 -13
  203. package/src/modes/setup-wizard/wizard-overlay.ts +6 -5
  204. package/src/modes/theme/mermaid-rendering.test.ts +53 -0
  205. package/src/modes/theme/theme.ts +42 -15
  206. package/src/modes/types.ts +9 -1
  207. package/src/modes/utils/interactive-context-helpers.ts +1 -1
  208. package/src/priority.json +15 -0
  209. package/src/prompts/advisor/active-repo-watchdog.md +6 -0
  210. package/src/prompts/advisor/system.md +21 -7
  211. package/src/prompts/agents/designer.md +1 -1
  212. package/src/prompts/agents/explore.md +1 -1
  213. package/src/prompts/agents/librarian.md +2 -2
  214. package/src/prompts/agents/plan.md +2 -2
  215. package/src/prompts/agents/reviewer.md +1 -1
  216. package/src/prompts/agents/task.md +2 -2
  217. package/src/prompts/system/active-repo-context.md +4 -0
  218. package/src/prompts/system/gemini-tool-call-reminder.md +9 -0
  219. package/src/prompts/system/plan-mode-active.md +12 -3
  220. package/src/prompts/system/project-prompt.md +2 -2
  221. package/src/prompts/system/system-prompt.md +8 -6
  222. package/src/prompts/tools/bash.md +2 -2
  223. package/src/prompts/tools/checkpoint.md +1 -1
  224. package/src/prompts/tools/{find.md → glob.md} +1 -1
  225. package/src/prompts/tools/{search.md → grep.md} +3 -3
  226. package/src/prompts/tools/read.md +4 -2
  227. package/src/sdk.ts +98 -29
  228. package/src/session/agent-session.ts +828 -191
  229. package/src/session/session-history-format.ts +2 -2
  230. package/src/session/session-listing.ts +35 -2
  231. package/src/session/session-manager.ts +46 -0
  232. package/src/slash-commands/builtin-registry.ts +158 -22
  233. package/src/slash-commands/helpers/usage-report.ts +23 -2
  234. package/src/ssh/__tests__/connection-manager-args.test.ts +69 -0
  235. package/src/ssh/__tests__/file-transfer-posix-guard.test.ts +68 -0
  236. package/src/ssh/connection-manager.ts +12 -15
  237. package/src/ssh/file-transfer.ts +209 -0
  238. package/src/ssh/utils.ts +24 -0
  239. package/src/system-prompt.ts +60 -28
  240. package/src/task/executor.ts +96 -36
  241. package/src/task/index.ts +3 -3
  242. package/src/task/render.ts +14 -13
  243. package/src/task/worktree.ts +38 -1
  244. package/src/tiny/text.ts +49 -4
  245. package/src/tiny/worker.ts +3 -3
  246. package/src/tools/acp-bridge.ts +6 -1
  247. package/src/tools/bash.ts +2 -2
  248. package/src/tools/builtin-names.ts +26 -2
  249. package/src/tools/{find.ts → glob.ts} +48 -42
  250. package/src/tools/{search.ts → grep.ts} +311 -129
  251. package/src/tools/index.ts +13 -14
  252. package/src/tools/irc.ts +6 -2
  253. package/src/tools/path-utils.ts +64 -1
  254. package/src/tools/plan-mode-guard.ts +26 -13
  255. package/src/tools/read.ts +35 -6
  256. package/src/tools/render-utils.ts +14 -0
  257. package/src/tools/renderers.ts +15 -4
  258. package/src/tools/ssh.ts +17 -2
  259. package/src/tools/todo.ts +4 -26
  260. package/src/tools/write.ts +25 -9
  261. package/src/utils/active-repo-context.ts +143 -0
  262. package/src/utils/edit-mode.ts +19 -2
  263. package/src/utils/image-resize.ts +88 -7
  264. package/src/utils/lang-from-path.ts +3 -3
  265. package/src/utils/markit-cache.ts +166 -0
  266. package/src/utils/markit.ts +86 -18
  267. package/src/utils/prompt-path.ts +3 -0
  268. package/src/utils/shell-snapshot.ts +1 -1
  269. package/src/utils/title-generator.ts +1 -1
  270. package/src/web/search/provider.ts +54 -34
  271. package/src/web/search/providers/duckduckgo.ts +140 -0
  272. package/src/web/search/providers/firecrawl.ts +144 -0
  273. package/src/web/search/providers/tinyfish.ts +159 -0
  274. package/src/web/search/providers/xai.ts +292 -0
  275. package/src/web/search/providers/zai.ts +142 -56
  276. package/src/web/search/types.ts +6 -2
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Per-session policy gate for advisor `advise()` calls.
3
+ *
4
+ * The advisor system prompt tells the watcher model:
5
+ *
6
+ * > at most one `advise` per update
7
+ * > NEVER repeat advice you already gave, and NEVER send the same advice twice
8
+ *
9
+ * Real advisor models violate this. Issue #3520 captured a session where
10
+ * `__advisor.jsonl` recorded 309 `advise` calls covering 92 unique notes —
11
+ * 114× `Stop.`, 52× `No issue; continue.`, 41× `Done.` — flooding the primary
12
+ * transcript with `<advisory severity="blocker">Stop.</advisory>` after the
13
+ * task was already complete. The fix is to make the rules load-bearing in code
14
+ * instead of prose: silently drop duplicates, content-free self-talk, and
15
+ * over-budget calls at the `enqueueAdvice` boundary so the primary stays
16
+ * clean even when the advisor misbehaves.
17
+ *
18
+ * The gate is intentionally invisible to the advisor model — `AdviseTool`
19
+ * still returns `Recorded.` for a suppressed call. Surfacing "suppressed"
20
+ * back into advisor context risks the model rephrasing the same useless note
21
+ * to bypass the dedupe ("Stop.", then "Halt." then "Stop now.").
22
+ */
23
+ /**
24
+ * Case-insensitive, punctuation-folded normalization. Collapses every run of
25
+ * non-letter / non-digit characters into a single space and trims, so
26
+ * `"Stop."`, `"*Stop*"`, and `" stop "` all key to `stop`, while
27
+ * `"No issue; continue."` keys to `no issue continue`.
28
+ *
29
+ * Exported for tests.
30
+ */
31
+ export declare function normalizeAdvisorNote(note: string): string;
32
+ /**
33
+ * Decides whether an advisor `advise()` call should reach the primary agent.
34
+ *
35
+ * Enforces — in this order — the noise filter, session-scoped exact-text
36
+ * dedupe (FIFO-evicted at {@link DEFAULT_HISTORY_CAPACITY}), and a per-update
37
+ * rate limit of one accepted note per advisor model prompt. Suppressed calls
38
+ * never consume the per-update budget — a noise call doesn't burn the slot
39
+ * for a real concern that follows in the same update.
40
+ *
41
+ * Reset on advisor reset (compaction, session switch, `/new`) via
42
+ * {@link reset}. Per-update gate is cleared at the start of every advisor
43
+ * `agent.prompt()` cycle via {@link beginUpdate}.
44
+ */
45
+ export declare class AdvisorEmissionGuard {
46
+ #private;
47
+ constructor(opts?: {
48
+ capacity?: number;
49
+ });
50
+ /**
51
+ * Drop all dedupe and per-update state. Called from
52
+ * `AgentSession#resetAdvisorSessionState()` whenever the advisor runtime is
53
+ * reset — same boundary as `yieldQueue.clear("advisor")`, so a re-primed
54
+ * advisor can re-raise old issues (the primary transcript was rewritten).
55
+ */
56
+ reset(): void;
57
+ /**
58
+ * Clear the per-update rate-limit gate. Called by `AdvisorRuntime` right
59
+ * before each `agent.prompt(batch)` invocation so the next advisor model
60
+ * cycle starts with a fresh budget of one advise.
61
+ */
62
+ beginUpdate(): void;
63
+ /**
64
+ * Whether the proposed note should reach the primary. On `true` the gate
65
+ * has already recorded the note (consumed the per-update budget and added
66
+ * it to the dedupe history) — caller delivers the note. On `false` the
67
+ * caller drops it.
68
+ *
69
+ * Empty / whitespace-only notes are suppressed; the model's
70
+ * tool-args contract still requires a non-empty string but defense-in-depth.
71
+ */
72
+ accept(note: string): boolean;
73
+ }
@@ -1,4 +1,5 @@
1
1
  export * from "./advise-tool";
2
+ export * from "./emission-guard";
2
3
  export * from "./runtime";
3
4
  export * from "./transcript-recorder";
4
5
  export * from "./watchdog";
@@ -26,6 +26,13 @@ export interface AdvisorRuntimeHost {
26
26
  * the primary's next compaction triggers {@link AdvisorRuntime.reset}).
27
27
  */
28
28
  maintainContext?(incomingTokens: number): Promise<boolean>;
29
+ /**
30
+ * Called immediately before each `agent.prompt(batch)` cycle. Lets the host
31
+ * clear per-update advisor state — currently the one-advise-per-update gate
32
+ * in {@link AdvisorEmissionGuard}, which the host owns because it is the
33
+ * one that routes `advise()` results back to the primary.
34
+ */
35
+ beginAdvisorUpdate?(): void;
29
36
  }
30
37
  export declare class AdvisorRuntime {
31
38
  #private;
@@ -1,3 +1,5 @@
1
+ import type { ActiveRepoContext } from "../utils/active-repo-context";
2
+ export declare function formatActiveRepoWatchdogPrompt(activeRepoContext: ActiveRepoContext): string;
1
3
  /**
2
4
  * Discover and load WATCHDOG.md files walking up from cwd, project .omp folder, and user agent dir.
3
5
  * Returns formatted watchdog file blocks ready to be appended to the advisor system prompt.
@@ -46,6 +46,7 @@ export interface ParseDeps {
46
46
  };
47
47
  parseThinking: (value: string | null | undefined) => ConfiguredThinkingLevel | undefined;
48
48
  builtinToolNames: readonly string[];
49
+ normalizeToolNames: (values: Iterable<string>) => string[];
49
50
  thinkingEfforts: readonly string[];
50
51
  }
51
52
  export type StringSetter = (result: Args, value: string, deps: ParseDeps) => void;
@@ -1,3 +1,3 @@
1
- /** Gallery fixtures for the search tools (search, search_tool_bm25, ast_grep). */
1
+ /** Gallery fixtures for the search tools (grep, search_tool_bm25, ast_grep). */
2
2
  import type { GalleryFixture } from "./types";
3
3
  export declare const searchFixtures: Record<string, GalleryFixture>;
@@ -0,0 +1,58 @@
1
+ export interface GcCommandFlags {
2
+ apply?: boolean;
3
+ json?: boolean;
4
+ agentDir?: string;
5
+ blobs?: boolean;
6
+ archive?: boolean;
7
+ wal?: boolean;
8
+ coldArchiveAfterDays?: number;
9
+ retainNewestGlobal?: number;
10
+ retainNewestPerCwd?: number;
11
+ }
12
+ export interface GcCommandArgs {
13
+ flags: GcCommandFlags;
14
+ }
15
+ export interface BlobGcResult {
16
+ referenced: number;
17
+ candidates: number;
18
+ wouldDelete: number;
19
+ deleted: number;
20
+ bytes: number;
21
+ errors: string[];
22
+ }
23
+ export interface ArchiveGcResult {
24
+ scanned: number;
25
+ skippedActive: number;
26
+ keptNewestGlobal: number;
27
+ keptNewestPerCwd: number;
28
+ wouldArchive: number;
29
+ archived: number;
30
+ historyRowsDeleted: number;
31
+ ftsRebuilt: boolean;
32
+ errors: string[];
33
+ }
34
+ export interface WalCheckpointResult {
35
+ dbPath: string;
36
+ walBytes: number;
37
+ wouldCheckpoint: boolean;
38
+ checkpointed: boolean;
39
+ busy: number;
40
+ log: number;
41
+ checkpointedFrames: number;
42
+ }
43
+ export interface WalGcResult {
44
+ databases: WalCheckpointResult[];
45
+ walBytes: number;
46
+ wouldCheckpoint: boolean;
47
+ checkpointed: boolean;
48
+ }
49
+ export interface GcResult {
50
+ agentDir: string;
51
+ apply: boolean;
52
+ blobs?: BlobGcResult;
53
+ archive?: ArchiveGcResult;
54
+ wal?: WalGcResult;
55
+ lockPath: string;
56
+ }
57
+ export declare function collectGcErrors(result: GcResult): string[];
58
+ export declare function runGcCommand(args: GcCommandArgs): Promise<GcResult>;
@@ -0,0 +1,3 @@
1
+ import type { InteractiveModeContext } from "../modes/types";
2
+ /** Display name for this process's user in collab sessions. */
3
+ export declare function collabDisplayName(ctx: InteractiveModeContext): string;
@@ -10,8 +10,6 @@
10
10
  */
11
11
  import type { InteractiveModeContext } from "../modes/types";
12
12
  import { type CollabParticipant } from "./protocol";
13
- /** Display name for this process's user in collab sessions. */
14
- export declare function collabDisplayName(ctx: InteractiveModeContext): string;
15
13
  export declare class CollabHost {
16
14
  #private;
17
15
  constructor(ctx: InteractiveModeContext);
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Run on-disk storage maintenance.
3
+ */
4
+ import { Command } from "@oh-my-pi/pi-utils/cli";
5
+ export default class Gc extends Command {
6
+ static description: string;
7
+ static flags: {
8
+ apply: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
9
+ description: string;
10
+ };
11
+ json: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
12
+ description: string;
13
+ };
14
+ "agent-dir": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
15
+ description: string;
16
+ };
17
+ blobs: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
18
+ description: string;
19
+ };
20
+ archive: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
21
+ description: string;
22
+ };
23
+ wal: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
24
+ description: string;
25
+ };
26
+ "cold-archive-after-days": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
27
+ description: string;
28
+ };
29
+ "retain-newest-global": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
30
+ description: string;
31
+ };
32
+ "retain-newest-per-cwd": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
33
+ description: string;
34
+ };
35
+ };
36
+ run(): Promise<void>;
37
+ }
@@ -1,6 +1,3 @@
1
- /**
2
- * List and clean up agent-managed git worktrees under `~/.omp/wt`.
3
- */
4
1
  import { Command } from "@oh-my-pi/pi-utils/cli";
5
2
  export default class Worktree extends Command {
6
3
  static description: string;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Resolves whether full tool descriptors should be inlined into the system
3
+ * prompt (and stripped from provider tool schemas) for a given model and
4
+ * setting.
5
+ *
6
+ * `auto` enforces a per-model policy: inline for Gemini models, off otherwise.
7
+ * Gemini benefits from descriptors in-prompt; other providers keep them in the
8
+ * tool schemas. `on`/`off` are explicit user overrides.
9
+ *
10
+ * @param modelId Canonical model id (e.g. `gemini-3-pro`); resolve aliases via
11
+ * `ModelRegistry.getCanonicalId` before calling so `auto` classifies correctly.
12
+ */
13
+ export declare function shouldInlineToolDescriptors(setting: "auto" | "on" | "off" | undefined, modelId: string | undefined): boolean;
@@ -6,9 +6,10 @@
6
6
  * discovery lives in pi-catalog's provider-models.
7
7
  */
8
8
  import { type ApiKey, type FetchImpl } from "@oh-my-pi/pi-ai";
9
- import type { Api, Model } from "@oh-my-pi/pi-ai/types";
9
+ import type { Api, Model, RemoteCompactionConfig } from "@oh-my-pi/pi-ai/types";
10
10
  import type { ModelSpec } from "@oh-my-pi/pi-catalog/types";
11
11
  import type { ProviderDiscovery } from "./models-config-schema";
12
+ export declare const DISCOVERY_DEFAULT_CONTEXT_WINDOW = 128000;
12
13
  export declare const DISCOVERY_DEFAULT_MAX_TOKENS = 32768;
13
14
  export declare function getImplicitOllamaBaseUrl(): string;
14
15
  export declare function getOllamaContextLengthOverride(): number | undefined;
@@ -20,6 +21,7 @@ export interface DiscoveryProviderConfig {
20
21
  baseUrl?: string;
21
22
  headers?: Record<string, string>;
22
23
  compat?: ModelSpec<Api>["compat"];
24
+ remoteCompaction?: RemoteCompactionConfig<Api>;
23
25
  discovery: ProviderDiscovery;
24
26
  optional?: boolean;
25
27
  }
@@ -40,6 +42,7 @@ export declare function discoverOllamaModels(providerConfig: DiscoveryProviderCo
40
42
  export declare function discoverLlamaCppModels(providerConfig: DiscoveryProviderConfig, ctx: DiscoveryContext): Promise<Model<Api>[]>;
41
43
  export declare function discoverLlamaCppModelContextWindow(model: Pick<Model<Api>, "provider" | "id" | "baseUrl" | "headers">, ctx: DiscoveryContext): Promise<number | undefined>;
42
44
  export declare function discoverOpenAIModelsList(providerConfig: DiscoveryProviderConfig, ctx: DiscoveryContext): Promise<Model<Api>[]>;
45
+ export declare function discoverLiteLLMModels(providerConfig: DiscoveryProviderConfig, ctx: DiscoveryContext): Promise<Model<Api>[]>;
43
46
  /**
44
47
  * Discover models from an Anthropic+OpenAI-compatible reseller proxy that
45
48
  * exposes both `/v1/messages` and `/v1/chat/completions`, advertising each
@@ -56,3 +59,5 @@ export declare function discoverOpenAIModelsList(providerConfig: DiscoveryProvid
56
59
  * URL (which ends in `/v1`) round-trips correctly.
57
60
  */
58
61
  export declare function discoverProxyModels(providerConfig: DiscoveryProviderConfig, ctx: DiscoveryContext): Promise<Model<Api>[]>;
62
+ export declare function normalizeLiteLLMDiscoveryBaseUrl(baseUrl?: string): string;
63
+ export declare function normalizeOpenAIModelsListBaseUrl(baseUrl?: string): string;
@@ -1,4 +1,4 @@
1
- import type { Api, Context, Model, ModelSpec, SimpleStreamOptions, ThinkingConfig } from "@oh-my-pi/pi-ai/types";
1
+ import type { Api, Context, Model, ModelSpec, RemoteCompactionConfig, SimpleStreamOptions, ThinkingConfig } from "@oh-my-pi/pi-ai/types";
2
2
  import type { AssistantMessageEventStream } from "@oh-my-pi/pi-ai/utils/event-stream";
3
3
  import { type ModelRefreshStrategy } from "@oh-my-pi/pi-catalog/model-manager";
4
4
  import type { ApiKeyResolver, FetchImpl } from "@oh-my-pi/pi-ai";
@@ -17,6 +17,7 @@ interface ProviderOverride {
17
17
  apiKey?: string;
18
18
  authHeader?: boolean;
19
19
  compat?: ModelSpec<Api>["compat"];
20
+ remoteCompaction?: RemoteCompactionConfig<Api>;
20
21
  transport?: Model<Api>["transport"];
21
22
  }
22
23
  /**
@@ -45,7 +46,7 @@ interface ProviderOverride {
45
46
  * See `xiaomi-tp-discovery-merge.test.ts` and the `refresh()` baseUrl-override
46
47
  * regression in `model-registry.test.ts`.
47
48
  */
48
- export declare function mergeDiscoveredModel<TApi extends Api>(model: Model<TApi>, existing: Model<Api> | undefined, providerOverride?: Pick<ProviderOverride, "baseUrl" | "headers" | "transport">): Model<TApi>;
49
+ export declare function mergeDiscoveredModel<TApi extends Api>(model: Model<TApi>, existing: Model<Api> | undefined, providerOverride?: Pick<ProviderOverride, "baseUrl" | "headers" | "remoteCompaction" | "transport">): Model<TApi>;
49
50
  export type ProviderDiscoveryStatus = "idle" | "ok" | "empty" | "cached" | "unavailable" | "unauthenticated";
50
51
  export interface ProviderDiscoveryState {
51
52
  provider: string;
@@ -227,6 +228,7 @@ export interface ProviderConfigInput {
227
228
  streamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
228
229
  headers?: Record<string, string>;
229
230
  compat?: ModelSpec<Api>["compat"];
231
+ remoteCompaction?: RemoteCompactionConfig<Api>;
230
232
  authHeader?: boolean;
231
233
  /** Streaming transport override — see {@link Model.transport}. */
232
234
  transport?: Model<Api>["transport"];
@@ -264,6 +266,8 @@ export interface ProviderConfigInput {
264
266
  headers?: Record<string, string>;
265
267
  compat?: ModelSpec<Api>["compat"];
266
268
  contextPromotionTarget?: string;
269
+ compactionModel?: string;
270
+ remoteCompaction?: RemoteCompactionConfig<Api>;
267
271
  premiumMultiplier?: number;
268
272
  }>;
269
273
  }
@@ -181,6 +181,18 @@ export declare function resolveRoleSelection(roles: readonly string[], settings:
181
181
  model: Model<Api>;
182
182
  thinkingLevel?: ThinkingLevel;
183
183
  } | undefined;
184
+ /**
185
+ * Resolve the model for the `advisor` role. A configured `modelRoles.advisor`
186
+ * wins outright (a bad override surfaces as no model rather than silently
187
+ * running something else); when unset it falls back to the `slow` priority
188
+ * chain via {@link ROLE_PRIORITY_ALIAS} — a strong reasoning model that, unlike
189
+ * the `slow` role itself, never inherits the primary's model. Returns undefined
190
+ * only when no candidate in the resolved chain is available.
191
+ */
192
+ export declare function resolveAdvisorRoleSelection(settings: Settings, availableModels: Model<Api>[], modelRegistry?: CanonicalModelRegistry): {
193
+ model: Model<Api>;
194
+ thinkingLevel?: ThinkingLevel;
195
+ } | undefined;
184
196
  /**
185
197
  * Resolve model patterns to actual Model objects with optional thinking levels
186
198
  * Format: "pattern:level" where :level is optional
@@ -239,10 +239,17 @@ export declare const ModelOverrideSchema: import("arktype/internal/variants/obje
239
239
  } | undefined;
240
240
  } | undefined;
241
241
  contextPromotionTarget?: string | undefined;
242
+ compactionModel?: string | undefined;
243
+ remoteCompaction?: {
244
+ enabled?: boolean | undefined;
245
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
246
+ endpoint?: string | undefined;
247
+ model?: string | undefined;
248
+ } | undefined;
242
249
  }, {}>;
243
250
  export type ModelOverride = typeof ModelOverrideSchema.infer;
244
251
  export declare const ProviderDiscoverySchema: import("arktype/internal/variants/object.ts").ObjectType<{
245
- type: "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
252
+ type: "litellm" | "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
246
253
  }, {}>;
247
254
  export declare const ProviderAuthSchema: import("arktype/internal/variants/string.ts").StringType<"apiKey" | "none" | "oauth", {}>;
248
255
  export type ProviderAuthMode = typeof ProviderAuthSchema.infer;
@@ -356,10 +363,16 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
356
363
  replayUnsignedThinking?: boolean | undefined;
357
364
  } | undefined;
358
365
  } | undefined;
366
+ remoteCompaction?: {
367
+ enabled?: boolean | undefined;
368
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
369
+ endpoint?: string | undefined;
370
+ model?: string | undefined;
371
+ } | undefined;
359
372
  authHeader?: boolean | undefined;
360
373
  auth?: "apiKey" | "none" | "oauth" | undefined;
361
374
  discovery?: {
362
- type: "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
375
+ type: "litellm" | "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
363
376
  } | undefined;
364
377
  models?: {
365
378
  id: string;
@@ -505,6 +518,13 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
505
518
  } | undefined;
506
519
  } | undefined;
507
520
  contextPromotionTarget?: string | undefined;
521
+ compactionModel?: string | undefined;
522
+ remoteCompaction?: {
523
+ enabled?: boolean | undefined;
524
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
525
+ endpoint?: string | undefined;
526
+ model?: string | undefined;
527
+ } | undefined;
508
528
  }[] | undefined;
509
529
  modelOverrides?: {
510
530
  [x: string]: {
@@ -648,6 +668,13 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
648
668
  } | undefined;
649
669
  } | undefined;
650
670
  contextPromotionTarget?: string | undefined;
671
+ compactionModel?: string | undefined;
672
+ remoteCompaction?: {
673
+ enabled?: boolean | undefined;
674
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
675
+ endpoint?: string | undefined;
676
+ model?: string | undefined;
677
+ } | undefined;
651
678
  };
652
679
  } | undefined;
653
680
  disableStrictTools?: boolean | undefined;
@@ -21,6 +21,7 @@ export interface ProviderValidationConfig {
21
21
  oauthConfigured?: boolean;
22
22
  discovery?: ProviderDiscovery;
23
23
  compat?: ModelSpec<Api>["compat"];
24
+ remoteCompaction?: unknown;
24
25
  disableStrictTools?: boolean;
25
26
  modelOverrides?: Record<string, unknown>;
26
27
  models: ProviderValidationModel[];
@@ -135,10 +136,16 @@ export declare const ModelsConfigFile: ConfigFile<{
135
136
  replayUnsignedThinking?: boolean | undefined;
136
137
  } | undefined;
137
138
  } | undefined;
139
+ remoteCompaction?: {
140
+ enabled?: boolean | undefined;
141
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
142
+ endpoint?: string | undefined;
143
+ model?: string | undefined;
144
+ } | undefined;
138
145
  authHeader?: boolean | undefined;
139
146
  auth?: "apiKey" | "none" | "oauth" | undefined;
140
147
  discovery?: {
141
- type: "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
148
+ type: "litellm" | "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list" | "proxy";
142
149
  } | undefined;
143
150
  models?: {
144
151
  id: string;
@@ -269,6 +276,13 @@ export declare const ModelsConfigFile: ConfigFile<{
269
276
  } | undefined;
270
277
  } | undefined;
271
278
  contextPromotionTarget?: string | undefined;
279
+ compactionModel?: string | undefined;
280
+ remoteCompaction?: {
281
+ enabled?: boolean | undefined;
282
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
283
+ endpoint?: string | undefined;
284
+ model?: string | undefined;
285
+ } | undefined;
272
286
  }[] | undefined;
273
287
  modelOverrides?: {
274
288
  [x: string]: {
@@ -397,6 +411,13 @@ export declare const ModelsConfigFile: ConfigFile<{
397
411
  } | undefined;
398
412
  } | undefined;
399
413
  contextPromotionTarget?: string | undefined;
414
+ compactionModel?: string | undefined;
415
+ remoteCompaction?: {
416
+ enabled?: boolean | undefined;
417
+ api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
418
+ endpoint?: string | undefined;
419
+ model?: string | undefined;
420
+ } | undefined;
400
421
  };
401
422
  } | undefined;
402
423
  disableStrictTools?: boolean | undefined;