@oh-my-pi/pi-coding-agent 17.0.9 → 17.1.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 (285) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +1 -1
  3. package/dist/cli.js +4659 -4261
  4. package/dist/types/async/job-manager.d.ts +37 -1
  5. package/dist/types/cli/args.d.ts +2 -0
  6. package/dist/types/cli/bench-cli.d.ts +41 -0
  7. package/dist/types/commands/bench.d.ts +15 -3
  8. package/dist/types/commands/launch.d.ts +4 -0
  9. package/dist/types/config/model-registry.d.ts +3 -1
  10. package/dist/types/config/models-config-schema.d.ts +18 -6
  11. package/dist/types/config/models-config.d.ts +14 -5
  12. package/dist/types/config/provider-globals.d.ts +2 -2
  13. package/dist/types/config/service-tier.d.ts +5 -1
  14. package/dist/types/config/settings-schema.d.ts +316 -47
  15. package/dist/types/config/settings.d.ts +7 -0
  16. package/dist/types/dap/client.d.ts +20 -0
  17. package/dist/types/exec/bash-executor.d.ts +38 -0
  18. package/dist/types/exec/direnv.d.ts +33 -0
  19. package/dist/types/export/html/args.d.ts +15 -0
  20. package/dist/types/export/html/index.d.ts +11 -26
  21. package/dist/types/export/html/web-palette.d.ts +55 -116
  22. package/dist/types/extensibility/extensions/loader.d.ts +3 -0
  23. package/dist/types/extensibility/extensions/types.d.ts +17 -2
  24. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +13 -0
  25. package/dist/types/live/controller.d.ts +40 -0
  26. package/dist/types/live/protocol.d.ts +85 -0
  27. package/dist/types/live/protocol.test.d.ts +1 -0
  28. package/dist/types/live/transport.d.ts +48 -0
  29. package/dist/types/live/visualizer.d.ts +33 -0
  30. package/dist/types/lsp/client.d.ts +16 -1
  31. package/dist/types/mcp/config-writer.test.d.ts +1 -0
  32. package/dist/types/mcp/oauth-discovery.d.ts +2 -0
  33. package/dist/types/mcp/smithery-auth.d.ts +1 -1
  34. package/dist/types/mcp/smithery-auth.test.d.ts +1 -0
  35. package/dist/types/memory-backend/tool-names.d.ts +2 -0
  36. package/dist/types/modes/components/login-dialog.d.ts +2 -2
  37. package/dist/types/modes/components/plan-review-overlay.d.ts +26 -0
  38. package/dist/types/modes/components/settings-defs.d.ts +7 -1
  39. package/dist/types/modes/components/status-line/component.jj-cache.test.d.ts +1 -0
  40. package/dist/types/modes/components/tool-execution.d.ts +9 -1
  41. package/dist/types/modes/controllers/command-controller.d.ts +1 -1
  42. package/dist/types/modes/controllers/event-controller.d.ts +6 -1
  43. package/dist/types/modes/controllers/live-command-controller.d.ts +14 -0
  44. package/dist/types/modes/interactive-mode.d.ts +5 -0
  45. package/dist/types/modes/theme/theme.d.ts +1 -1
  46. package/dist/types/modes/types.d.ts +3 -1
  47. package/dist/types/modes/utils/context-usage.d.ts +12 -2
  48. package/dist/types/plan-mode/plan-files.d.ts +10 -0
  49. package/dist/types/registry/agent-lifecycle.d.ts +21 -9
  50. package/dist/types/registry/agent-registry.d.ts +11 -4
  51. package/dist/types/sdk.d.ts +15 -1
  52. package/dist/types/secrets/index.d.ts +15 -2
  53. package/dist/types/secrets/obfuscator.d.ts +113 -15
  54. package/dist/types/session/acp-permission-gate.d.ts +19 -0
  55. package/dist/types/session/agent-session-events.d.ts +84 -0
  56. package/dist/types/session/agent-session-types.d.ts +314 -0
  57. package/dist/types/session/agent-session.d.ts +118 -755
  58. package/dist/types/session/async-job-delivery.d.ts +28 -0
  59. package/dist/types/session/bash-runner.d.ts +75 -0
  60. package/dist/types/session/blob-store.d.ts +11 -1
  61. package/dist/types/session/blob-store.test.d.ts +1 -0
  62. package/dist/types/session/checkpoint-entries.d.ts +28 -0
  63. package/dist/types/session/eval-runner.d.ts +49 -0
  64. package/dist/types/session/irc-bridge.d.ts +46 -0
  65. package/dist/types/session/messages.d.ts +22 -0
  66. package/dist/types/session/model-controls.d.ts +180 -0
  67. package/dist/types/session/prewalk.d.ts +46 -0
  68. package/dist/types/session/queued-messages.d.ts +22 -0
  69. package/dist/types/session/redis-session-storage.d.ts +1 -0
  70. package/dist/types/session/retry-fallback-chains.d.ts +74 -0
  71. package/dist/types/session/role-models.d.ts +15 -0
  72. package/dist/types/session/session-advisors.d.ts +228 -0
  73. package/dist/types/session/session-entries.d.ts +8 -0
  74. package/dist/types/session/session-handoff.d.ts +70 -0
  75. package/dist/types/session/session-history-format.d.ts +6 -1
  76. package/dist/types/session/session-maintenance.d.ts +246 -0
  77. package/dist/types/session/session-manager.d.ts +41 -0
  78. package/dist/types/session/session-memory.d.ts +56 -0
  79. package/dist/types/session/session-provider-boundary.d.ts +62 -0
  80. package/dist/types/session/session-stats.d.ts +48 -0
  81. package/dist/types/session/session-tools.d.ts +143 -0
  82. package/dist/types/session/session-workspace.d.ts +32 -0
  83. package/dist/types/session/stream-guards.d.ts +44 -0
  84. package/dist/types/session/todo-tracker.d.ts +56 -0
  85. package/dist/types/session/ttsr-coordinator.d.ts +51 -0
  86. package/dist/types/session/turn-recovery.d.ts +225 -0
  87. package/dist/types/system-prompt.d.ts +2 -0
  88. package/dist/types/task/executor.d.ts +4 -1
  89. package/dist/types/task/output-manager.d.ts +3 -1
  90. package/dist/types/tools/approval.d.ts +1 -0
  91. package/dist/types/tools/browser/launch.d.ts +5 -0
  92. package/dist/types/tools/image-gen.d.ts +4 -4
  93. package/dist/types/tools/image-providers.d.ts +38 -0
  94. package/dist/types/tools/index.d.ts +5 -0
  95. package/dist/types/tools/path-utils.d.ts +8 -0
  96. package/dist/types/tools/todo.d.ts +10 -4
  97. package/dist/types/tools/xdev.d.ts +5 -1
  98. package/dist/types/tts/streaming-player.d.ts +14 -0
  99. package/dist/types/tts/vocalizer.d.ts +5 -0
  100. package/dist/types/utils/jj.d.ts +29 -0
  101. package/dist/types/utils/lang-from-path.d.ts +1 -0
  102. package/dist/types/utils/title-generator.d.ts +30 -0
  103. package/dist/types/vibe/runtime.d.ts +36 -8
  104. package/dist/types/web/search/index.d.ts +1 -1
  105. package/dist/types/web/search/provider.d.ts +15 -5
  106. package/dist/types/web/search/types.d.ts +94 -0
  107. package/package.json +12 -12
  108. package/scripts/generate-share-viewer.ts +4 -6
  109. package/src/advisor/__tests__/advisor.test.ts +643 -0
  110. package/src/advisor/runtime.ts +144 -43
  111. package/src/async/job-manager.ts +90 -2
  112. package/src/cli/args.ts +2 -0
  113. package/src/cli/auth-gateway-cli.ts +18 -3
  114. package/src/cli/bench-cli.ts +395 -29
  115. package/src/cli/flag-tables.ts +3 -0
  116. package/src/cli/gc-cli.ts +2 -2
  117. package/src/cli/usage-cli.ts +10 -1
  118. package/src/collab/host.ts +3 -2
  119. package/src/commands/bench.ts +18 -4
  120. package/src/commands/launch.ts +4 -0
  121. package/src/config/model-registry.ts +10 -2
  122. package/src/config/models-config-schema.ts +15 -4
  123. package/src/config/provider-globals.ts +9 -9
  124. package/src/config/service-tier.ts +26 -1
  125. package/src/config/settings-schema.ts +209 -51
  126. package/src/config/settings.ts +81 -2
  127. package/src/dap/client.ts +37 -4
  128. package/src/edit/index.ts +49 -12
  129. package/src/eval/py/executor.ts +103 -33
  130. package/src/exec/bash-executor.ts +89 -6
  131. package/src/exec/direnv.ts +145 -0
  132. package/src/export/html/args.ts +20 -0
  133. package/src/export/html/index.ts +45 -47
  134. package/src/export/html/template.css +19 -1
  135. package/src/export/html/template.html +6 -0
  136. package/src/export/html/template.js +21 -0
  137. package/src/export/html/tool-views.generated.js +31 -31
  138. package/src/export/html/web-palette.ts +116 -132
  139. package/src/export/share.ts +249 -49
  140. package/src/extensibility/extensions/loader.ts +29 -1
  141. package/src/extensibility/extensions/runner.ts +6 -0
  142. package/src/extensibility/extensions/types.ts +33 -2
  143. package/src/extensibility/plugins/legacy-pi-compat.ts +19 -1
  144. package/src/hindsight/state.ts +64 -6
  145. package/src/internal-urls/local-protocol.ts +2 -1
  146. package/src/internal-urls/memory-protocol.ts +2 -2
  147. package/src/internal-urls/skill-protocol.ts +2 -2
  148. package/src/internal-urls/ssh-protocol.ts +2 -1
  149. package/src/internal-urls/vault-protocol.ts +2 -1
  150. package/src/live/audio-worklet.txt +59 -0
  151. package/src/live/browser-runtime.txt +221 -0
  152. package/src/live/controller.ts +464 -0
  153. package/src/live/prompts/agent-final-message.md +3 -0
  154. package/src/live/prompts/live-instructions.md +23 -0
  155. package/src/live/protocol.test.ts +140 -0
  156. package/src/live/protocol.ts +233 -0
  157. package/src/live/transport.ts +490 -0
  158. package/src/live/visualizer.ts +234 -0
  159. package/src/lsp/client.ts +29 -9
  160. package/src/lsp/index.ts +19 -4
  161. package/src/main.ts +8 -1
  162. package/src/mcp/config-writer.test.ts +43 -0
  163. package/src/mcp/config-writer.ts +109 -82
  164. package/src/mcp/oauth-discovery.ts +10 -2
  165. package/src/mcp/smithery-auth.test.ts +29 -0
  166. package/src/mcp/smithery-auth.ts +3 -2
  167. package/src/memories/index.ts +40 -20
  168. package/src/memory-backend/tool-names.ts +2 -0
  169. package/src/mnemopi/backend.ts +24 -7
  170. package/src/modes/acp/acp-agent.ts +56 -10
  171. package/src/modes/acp/acp-event-mapper.ts +8 -1
  172. package/src/modes/components/agent-hub.ts +1 -1
  173. package/src/modes/components/login-dialog.ts +14 -4
  174. package/src/modes/components/plan-review-overlay.ts +350 -35
  175. package/src/modes/components/settings-defs.ts +23 -1
  176. package/src/modes/components/settings-selector.ts +169 -1
  177. package/src/modes/components/status-line/component.jj-cache.test.ts +229 -0
  178. package/src/modes/components/status-line/component.ts +123 -2
  179. package/src/modes/components/tool-execution.ts +11 -2
  180. package/src/modes/controllers/command-controller.ts +56 -15
  181. package/src/modes/controllers/event-controller.ts +111 -16
  182. package/src/modes/controllers/extension-ui-controller.test.ts +1 -0
  183. package/src/modes/controllers/extension-ui-controller.ts +20 -4
  184. package/src/modes/controllers/live-command-controller.ts +178 -0
  185. package/src/modes/controllers/mcp-command-controller.ts +10 -1
  186. package/src/modes/controllers/omfg-controller.ts +44 -40
  187. package/src/modes/controllers/selector-controller.ts +18 -10
  188. package/src/modes/controllers/session-focus-controller.ts +6 -1
  189. package/src/modes/interactive-mode.ts +157 -38
  190. package/src/modes/runtime-init.ts +2 -0
  191. package/src/modes/setup-wizard/scenes/web-search.ts +17 -9
  192. package/src/modes/theme/theme.ts +1 -1
  193. package/src/modes/types.ts +3 -1
  194. package/src/modes/utils/context-usage.ts +23 -7
  195. package/src/modes/utils/ui-helpers.ts +10 -5
  196. package/src/plan-mode/plan-files.ts +40 -0
  197. package/src/prompts/bench/cache-prefix-chunk.md +1 -0
  198. package/src/prompts/bench/cache-prefix.md +3 -0
  199. package/src/prompts/bench/cache-suffix.md +1 -0
  200. package/src/prompts/system/custom-system-prompt.md +1 -1
  201. package/src/prompts/system/project-prompt.md +8 -1
  202. package/src/prompts/system/subagent-async-pending.md +6 -0
  203. package/src/prompts/system/system-prompt.md +1 -1
  204. package/src/prompts/system/workflow-notice.md +48 -40
  205. package/src/prompts/system/xdev-mount-notice.md +4 -0
  206. package/src/prompts/tools/todo.md +3 -1
  207. package/src/registry/agent-lifecycle.ts +116 -46
  208. package/src/registry/agent-registry.ts +35 -8
  209. package/src/registry/persisted-agents.ts +26 -2
  210. package/src/sdk.ts +210 -136
  211. package/src/secrets/index.ts +127 -4
  212. package/src/secrets/obfuscator.ts +2328 -105
  213. package/src/session/acp-permission-gate.ts +165 -0
  214. package/src/session/agent-session-error-log.test.ts +1 -1
  215. package/src/session/agent-session-events.ts +66 -0
  216. package/src/session/agent-session-types.ts +334 -0
  217. package/src/session/agent-session.ts +1892 -12226
  218. package/src/session/artifacts.ts +6 -5
  219. package/src/session/async-job-delivery.ts +74 -0
  220. package/src/session/bash-runner.ts +326 -0
  221. package/src/session/blob-store.test.ts +56 -0
  222. package/src/session/blob-store.ts +18 -2
  223. package/src/session/checkpoint-entries.ts +81 -0
  224. package/src/session/eval-runner.ts +212 -0
  225. package/src/session/indexed-session-storage.ts +9 -2
  226. package/src/session/irc-bridge.ts +203 -0
  227. package/src/session/messages.ts +263 -1
  228. package/src/session/model-controls.ts +714 -0
  229. package/src/session/prewalk.ts +252 -0
  230. package/src/session/queued-messages.ts +93 -0
  231. package/src/session/redis-session-storage.ts +51 -11
  232. package/src/session/retry-fallback-chains.ts +455 -0
  233. package/src/session/role-models.ts +85 -0
  234. package/src/session/session-advisors.ts +1679 -0
  235. package/src/session/session-context.ts +6 -3
  236. package/src/session/session-entries.ts +8 -0
  237. package/src/session/session-handoff.ts +308 -0
  238. package/src/session/session-history-format.ts +20 -9
  239. package/src/session/session-loader.ts +0 -46
  240. package/src/session/session-maintenance.ts +2983 -0
  241. package/src/session/session-manager.ts +390 -30
  242. package/src/session/session-memory.ts +222 -0
  243. package/src/session/session-provider-boundary.ts +307 -0
  244. package/src/session/session-stats.ts +293 -0
  245. package/src/session/session-tools.ts +943 -0
  246. package/src/session/session-workspace.ts +53 -0
  247. package/src/session/stream-guards.ts +417 -0
  248. package/src/session/todo-tracker.ts +380 -0
  249. package/src/session/ttsr-coordinator.ts +496 -0
  250. package/src/session/turn-recovery.ts +1629 -0
  251. package/src/slash-commands/builtin-registry.ts +92 -11
  252. package/src/slash-commands/helpers/usage-report.ts +22 -3
  253. package/src/system-prompt.ts +41 -17
  254. package/src/task/executor.ts +285 -70
  255. package/src/task/index.ts +98 -105
  256. package/src/task/output-manager.ts +25 -3
  257. package/src/task/persisted-revive.ts +4 -3
  258. package/src/task/structured-subagent.ts +1 -0
  259. package/src/tools/approval.ts +55 -10
  260. package/src/tools/bash-interactive.ts +26 -0
  261. package/src/tools/bash-skill-urls.ts +28 -2
  262. package/src/tools/bash.ts +339 -123
  263. package/src/tools/browser/launch.ts +9 -1
  264. package/src/tools/browser/tab-supervisor.ts +8 -5
  265. package/src/tools/browser.ts +94 -47
  266. package/src/tools/image-gen.ts +20 -28
  267. package/src/tools/image-providers.ts +50 -0
  268. package/src/tools/index.ts +9 -0
  269. package/src/tools/path-utils.ts +49 -2
  270. package/src/tools/read.ts +156 -88
  271. package/src/tools/renderers.ts +7 -1
  272. package/src/tools/todo.ts +101 -11
  273. package/src/tools/vibe.ts +1 -2
  274. package/src/tools/write.ts +51 -1
  275. package/src/tools/xdev.ts +67 -3
  276. package/src/tts/streaming-player.ts +62 -4
  277. package/src/tts/vocalizer.ts +18 -1
  278. package/src/utils/jj.ts +125 -4
  279. package/src/utils/lang-from-path.ts +7 -0
  280. package/src/utils/title-generator.ts +137 -1
  281. package/src/vibe/runtime.ts +852 -72
  282. package/src/web/search/index.ts +3 -6
  283. package/src/web/search/provider.ts +31 -16
  284. package/src/web/search/providers/xai.ts +7 -1
  285. package/src/web/search/types.ts +3 -0
@@ -30,8 +30,18 @@ export interface AsyncJob {
30
30
  */
31
31
  queued?: boolean;
32
32
  }
33
+ /** Delivery callback for a settled job's result text. */
34
+ export type AsyncJobDeliverySink = (jobId: string, text: string, job?: AsyncJob) => void | Promise<void>;
33
35
  export interface AsyncJobManagerOptions {
34
- onJobComplete: (jobId: string, text: string, job?: AsyncJob) => void | Promise<void>;
36
+ /**
37
+ * Delivery sink for UNOWNED completions (jobs registered without an
38
+ * `ownerId`). Owned deliveries route exclusively through
39
+ * {@link AsyncJobManager.registerDeliverySink}; when the owner has no live
40
+ * sink they are dead-lettered (dropped with a warning; the job row keeps
41
+ * the result text until retention eviction) — never routed here, which
42
+ * would leak one agent's result into another session.
43
+ */
44
+ onJobComplete?: AsyncJobDeliverySink;
35
45
  maxRunningJobs?: number;
36
46
  retentionMs?: number;
37
47
  }
@@ -120,6 +130,32 @@ export declare class AsyncJobManager {
120
130
  */
121
131
  cancelAll(filter?: AsyncJobFilter): void;
122
132
  waitForAll(): Promise<void>;
133
+ /**
134
+ * Route completions for jobs owned by `ownerId` to `sink`. Sessions register
135
+ * their own sink at construction and unregister on dispose. Owned deliveries
136
+ * with no live sink are dead-lettered — `onJobComplete` serves only unowned
137
+ * deliveries.
138
+ *
139
+ * Last registration wins for an owner id; the returned unregister clears the
140
+ * mapping only while it still points at `sink`, so a revived session's fresh
141
+ * registration survives its parked predecessor's late cleanup.
142
+ */
143
+ registerDeliverySink(ownerId: string, sink: AsyncJobDeliverySink): () => void;
144
+ /**
145
+ * Wait until every job owned by `ownerId` has settled — its run promise
146
+ * resolved, which for cancelled jobs means the underlying process actually
147
+ * exited. Jobs registered while waiting (e.g. by a follow-up turn) are
148
+ * awaited too. Returns false when `timeoutMs` elapses first.
149
+ *
150
+ * `excludeSuppressed` skips jobs whose delivery is suppressed (acknowledged
151
+ * or `hub`-watched): those can never re-wake a run, so quiescence barriers
152
+ * pass it to share one contract with the pending-async-wake predicate.
153
+ * Teardown reaps omit it — worktree safety concerns every owner process.
154
+ */
155
+ waitForOwnerJobs(ownerId: string, options?: {
156
+ timeoutMs?: number;
157
+ excludeSuppressed?: boolean;
158
+ }): Promise<boolean>;
123
159
  drainDeliveries(options?: {
124
160
  timeoutMs?: number;
125
161
  filter?: AsyncJobFilter;
@@ -2,6 +2,8 @@ import { type ConfiguredThinkingLevel } from "../thinking.js";
2
2
  export type Mode = "text" | "json" | "rpc" | "acp" | "rpc-ui";
3
3
  export interface Args {
4
4
  cwd?: string;
5
+ /** Workspace directories beyond cwd for this session (repeatable `--add-dir`). */
6
+ addDir?: string[];
5
7
  profile?: string;
6
8
  alias?: string;
7
9
  allowHome?: boolean;
@@ -12,6 +12,11 @@ export interface BenchCommandArgs {
12
12
  serviceTier?: string;
13
13
  json?: boolean;
14
14
  par?: number;
15
+ cache?: boolean;
16
+ cachePrefixFile?: string;
17
+ cachePrefixBytes?: number;
18
+ cachePairs?: number;
19
+ cacheConcurrency?: number;
15
20
  };
16
21
  }
17
22
  export interface BenchModelRegistry {
@@ -38,6 +43,36 @@ export interface BenchRunFailure {
38
43
  error: string;
39
44
  }
40
45
  export type BenchRunResult = BenchRunSuccess | BenchRunFailure;
46
+ export type CacheObservation = "prompt_cache_read_observed" | "prompt_cache_write_observed" | "response_cache_hit_observed" | "no_provider_proof";
47
+ export interface BenchCacheUsage {
48
+ inputTokens: number;
49
+ outputTokens: number;
50
+ cacheReadTokens: number;
51
+ cacheWriteTokens: number;
52
+ totalTokens: number;
53
+ cost: number;
54
+ }
55
+ export interface BenchCacheRunReport {
56
+ phase: "cold" | "warm";
57
+ result: BenchRunResult;
58
+ usage?: BenchCacheUsage;
59
+ requestIdObserved: boolean;
60
+ observations: CacheObservation[];
61
+ }
62
+ export interface BenchCachePairReport {
63
+ cold: BenchCacheRunReport;
64
+ warm: BenchCacheRunReport;
65
+ /** The nominal cold request showed cache reuse, so it is not a true cold baseline. */
66
+ coldAlreadyWarm: boolean;
67
+ /** Structural-only comparisons: prompt text and cache keys are never emitted. */
68
+ stablePrefix: true;
69
+ suffixChanged: true;
70
+ promptCacheKeyStable: true;
71
+ statefulResponsesDisabled: true;
72
+ freshProviderSessionState: true;
73
+ /** "unavailable" when a transport does not expose the provider payload locally. */
74
+ payloadStructureStable: boolean | "unavailable";
75
+ }
41
76
  export interface BenchAverages {
42
77
  ttftMs: number;
43
78
  durationMs: number;
@@ -54,6 +89,7 @@ export interface BenchModelReport {
54
89
  results: BenchRunResult[];
55
90
  /** Averages over successful runs; null when every run failed. */
56
91
  average: BenchAverages | null;
92
+ cachePairs?: BenchCachePairReport[];
57
93
  }
58
94
  export interface BenchSummary {
59
95
  runs: number;
@@ -62,6 +98,10 @@ export interface BenchSummary {
62
98
  failures: number;
63
99
  /** Requested per-family service tiers, resolved per model before reaching the wire. */
64
100
  serviceTierByFamily?: ServiceTierByFamily;
101
+ cache?: {
102
+ pairs: number;
103
+ concurrency: number;
104
+ };
65
105
  }
66
106
  type BenchStreamSimple = (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
67
107
  export interface BenchDependencies {
@@ -72,6 +112,7 @@ export interface BenchDependencies {
72
112
  setExitCode?: (code: number) => void;
73
113
  streamSimple?: BenchStreamSimple;
74
114
  now?: () => number;
115
+ readTextFile?: (path: string, maxBytes: number) => Promise<string>;
75
116
  stdoutIsTTY?: boolean;
76
117
  }
77
118
  export declare function formatBenchTable(summary: BenchSummary): string;
@@ -11,11 +11,9 @@ export default class Bench extends Command {
11
11
  static flags: {
12
12
  runs: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
13
13
  description: string;
14
- default: number;
15
14
  };
16
15
  "max-tokens": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
17
16
  description: string;
18
- default: number;
19
17
  };
20
18
  prompt: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
21
19
  description: string;
@@ -29,7 +27,21 @@ export default class Bench extends Command {
29
27
  };
30
28
  par: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
31
29
  description: string;
32
- default: number;
30
+ };
31
+ cache: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
32
+ description: string;
33
+ };
34
+ "cache-prefix-file": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
35
+ description: string;
36
+ };
37
+ "cache-prefix-bytes": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
38
+ description: string;
39
+ };
40
+ "cache-pairs": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
41
+ description: string;
42
+ };
43
+ "cache-concurrency": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"integer"> & {
44
+ description: string;
33
45
  };
34
46
  };
35
47
  static examples: string[];
@@ -72,6 +72,10 @@ export default class Index extends Command {
72
72
  description: string;
73
73
  multiple: true;
74
74
  };
75
+ "add-dir": import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"string"> & {
76
+ description: string;
77
+ multiple: true;
78
+ };
75
79
  print: import("@oh-my-pi/pi-utils/cli").FlagDescriptor<"boolean"> & {
76
80
  char: string;
77
81
  description: string;
@@ -175,7 +175,9 @@ export declare class ModelRegistry {
175
175
  /**
176
176
  * Get API key for a model.
177
177
  */
178
- getApiKey(model: Model<Api>, sessionId?: string): Promise<string | undefined>;
178
+ getApiKey(model: Model<Api>, sessionId?: string, options?: {
179
+ signal?: AbortSignal;
180
+ }): Promise<string | undefined>;
179
181
  /**
180
182
  * Get API key for a provider (e.g., "openai").
181
183
  *
@@ -250,12 +250,15 @@ export declare const ModelOverrideSchema: import("arktype/internal/variants/obje
250
250
  requiresToolResultId?: boolean | undefined;
251
251
  replayUnsignedThinking?: boolean | undefined;
252
252
  } | undefined;
253
+ promptCacheMode?: "automatic" | "explicit" | "none" | undefined;
254
+ promptCacheMinimumTokens?: number | undefined;
255
+ promptCacheMaximumCheckpoints?: number | undefined;
253
256
  } | undefined;
254
257
  contextPromotionTarget?: string | undefined;
255
258
  compactionModel?: string | undefined;
256
259
  remoteCompaction?: {
257
260
  enabled?: boolean | undefined;
258
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
261
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
259
262
  endpoint?: string | undefined;
260
263
  model?: string | undefined;
261
264
  v2StreamingEnabled?: boolean | undefined;
@@ -275,7 +278,7 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
275
278
  [x: string]: {
276
279
  baseUrl?: string | undefined;
277
280
  apiKey?: string | undefined;
278
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
281
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
279
282
  headers?: {
280
283
  [x: string]: string;
281
284
  } | undefined;
@@ -384,10 +387,13 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
384
387
  requiresToolResultId?: boolean | undefined;
385
388
  replayUnsignedThinking?: boolean | undefined;
386
389
  } | undefined;
390
+ promptCacheMode?: "automatic" | "explicit" | "none" | undefined;
391
+ promptCacheMinimumTokens?: number | undefined;
392
+ promptCacheMaximumCheckpoints?: number | undefined;
387
393
  } | undefined;
388
394
  remoteCompaction?: {
389
395
  enabled?: boolean | undefined;
390
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
396
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
391
397
  endpoint?: string | undefined;
392
398
  model?: string | undefined;
393
399
  v2StreamingEnabled?: boolean | undefined;
@@ -402,7 +408,7 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
402
408
  models?: {
403
409
  id: string;
404
410
  name?: string | undefined;
405
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
411
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
406
412
  baseUrl?: string | undefined;
407
413
  reasoning?: boolean | undefined;
408
414
  thinking?: ((In: {
@@ -548,12 +554,15 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
548
554
  requiresToolResultId?: boolean | undefined;
549
555
  replayUnsignedThinking?: boolean | undefined;
550
556
  } | undefined;
557
+ promptCacheMode?: "automatic" | "explicit" | "none" | undefined;
558
+ promptCacheMinimumTokens?: number | undefined;
559
+ promptCacheMaximumCheckpoints?: number | undefined;
551
560
  } | undefined;
552
561
  contextPromotionTarget?: string | undefined;
553
562
  compactionModel?: string | undefined;
554
563
  remoteCompaction?: {
555
564
  enabled?: boolean | undefined;
556
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
565
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
557
566
  endpoint?: string | undefined;
558
567
  model?: string | undefined;
559
568
  v2StreamingEnabled?: boolean | undefined;
@@ -708,12 +717,15 @@ export declare const ModelsConfigSchema: import("arktype/internal/variants/objec
708
717
  requiresToolResultId?: boolean | undefined;
709
718
  replayUnsignedThinking?: boolean | undefined;
710
719
  } | undefined;
720
+ promptCacheMode?: "automatic" | "explicit" | "none" | undefined;
721
+ promptCacheMinimumTokens?: number | undefined;
722
+ promptCacheMaximumCheckpoints?: number | undefined;
711
723
  } | undefined;
712
724
  contextPromotionTarget?: string | undefined;
713
725
  compactionModel?: string | undefined;
714
726
  remoteCompaction?: {
715
727
  enabled?: boolean | undefined;
716
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
728
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
717
729
  endpoint?: string | undefined;
718
730
  model?: string | undefined;
719
731
  v2StreamingEnabled?: boolean | undefined;
@@ -32,7 +32,7 @@ export declare const ModelsConfigFile: ConfigFile<{
32
32
  [x: string]: {
33
33
  baseUrl?: string | undefined;
34
34
  apiKey?: string | undefined;
35
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
35
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
36
36
  headers?: {
37
37
  [x: string]: string;
38
38
  } | undefined;
@@ -141,10 +141,13 @@ export declare const ModelsConfigFile: ConfigFile<{
141
141
  requiresToolResultId?: boolean | undefined;
142
142
  replayUnsignedThinking?: boolean | undefined;
143
143
  } | undefined;
144
+ promptCacheMode?: "automatic" | "explicit" | "none" | undefined;
145
+ promptCacheMinimumTokens?: number | undefined;
146
+ promptCacheMaximumCheckpoints?: number | undefined;
144
147
  } | undefined;
145
148
  remoteCompaction?: {
146
149
  enabled?: boolean | undefined;
147
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
150
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
148
151
  endpoint?: string | undefined;
149
152
  model?: string | undefined;
150
153
  v2StreamingEnabled?: boolean | undefined;
@@ -159,7 +162,7 @@ export declare const ModelsConfigFile: ConfigFile<{
159
162
  models?: {
160
163
  id: string;
161
164
  name?: string | undefined;
162
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
165
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
163
166
  baseUrl?: string | undefined;
164
167
  reasoning?: boolean | undefined;
165
168
  thinking?: {
@@ -289,12 +292,15 @@ export declare const ModelsConfigFile: ConfigFile<{
289
292
  requiresToolResultId?: boolean | undefined;
290
293
  replayUnsignedThinking?: boolean | undefined;
291
294
  } | undefined;
295
+ promptCacheMode?: "automatic" | "explicit" | "none" | undefined;
296
+ promptCacheMinimumTokens?: number | undefined;
297
+ promptCacheMaximumCheckpoints?: number | undefined;
292
298
  } | undefined;
293
299
  contextPromotionTarget?: string | undefined;
294
300
  compactionModel?: string | undefined;
295
301
  remoteCompaction?: {
296
302
  enabled?: boolean | undefined;
297
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
303
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
298
304
  endpoint?: string | undefined;
299
305
  model?: string | undefined;
300
306
  v2StreamingEnabled?: boolean | undefined;
@@ -433,12 +439,15 @@ export declare const ModelsConfigFile: ConfigFile<{
433
439
  requiresToolResultId?: boolean | undefined;
434
440
  replayUnsignedThinking?: boolean | undefined;
435
441
  } | undefined;
442
+ promptCacheMode?: "automatic" | "explicit" | "none" | undefined;
443
+ promptCacheMinimumTokens?: number | undefined;
444
+ promptCacheMaximumCheckpoints?: number | undefined;
436
445
  } | undefined;
437
446
  contextPromotionTarget?: string | undefined;
438
447
  compactionModel?: string | undefined;
439
448
  remoteCompaction?: {
440
449
  enabled?: boolean | undefined;
441
- api?: "anthropic-messages" | "azure-openai-responses" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
450
+ api?: "anthropic-messages" | "azure-openai-responses" | "bedrock-converse-stream" | "google-gemini-cli" | "google-generative-ai" | "google-vertex" | "openai-codex-responses" | "openai-completions" | "openai-responses" | undefined;
442
451
  endpoint?: string | undefined;
443
452
  model?: string | undefined;
444
453
  v2StreamingEnabled?: boolean | undefined;
@@ -1,7 +1,7 @@
1
1
  interface ProviderGlobalSettings {
2
+ get(path: "providers.webSearchOrder"): unknown;
2
3
  get(path: "providers.webSearchExclude"): unknown;
3
- get(path: "providers.webSearch"): unknown;
4
- get(path: "providers.image"): unknown;
4
+ get(path: "providers.imageOrder"): unknown;
5
5
  }
6
6
  export declare function applyProviderGlobalsFromSettings(settings: ProviderGlobalSettings): void;
7
7
  export {};
@@ -1,4 +1,4 @@
1
- import type { ServiceTier, ServiceTierByFamily } from "@oh-my-pi/pi-ai";
1
+ import type { ServiceTier, ServiceTierByFamily, ServiceTierFamily } from "@oh-my-pi/pi-ai";
2
2
  import type { SubmenuOption } from "./settings-schema.js";
3
3
  /**
4
4
  * Per-family service-tier setting values. `"none"` is the omit-the-parameter
@@ -13,6 +13,10 @@ export declare const SERVICE_TIER_GOOGLE_VALUES: readonly ["none", "flex", "prio
13
13
  export type ServiceTierOpenAISettingValue = (typeof SERVICE_TIER_OPENAI_VALUES)[number];
14
14
  export type ServiceTierAnthropicSettingValue = (typeof SERVICE_TIER_ANTHROPIC_VALUES)[number];
15
15
  export type ServiceTierGoogleSettingValue = (typeof SERVICE_TIER_GOOGLE_VALUES)[number];
16
+ /** Whether a runtime value names a provider family with an independent service-tier knob. */
17
+ export declare function isServiceTierFamily(value: unknown): value is ServiceTierFamily;
18
+ /** Whether a runtime value is a supported service tier for one provider family. */
19
+ export declare function isServiceTierForFamily(family: string, tier: unknown): tier is ServiceTier;
16
20
  /**
17
21
  * Inherit-capable single value for the subagent/advisor tiers. The chosen tier
18
22
  * is broadcast across families and applied to whichever family the spawned