@oh-my-pi/pi-coding-agent 15.12.4 → 15.13.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 (291) hide show
  1. package/CHANGELOG.md +304 -6
  2. package/dist/cli.js +1015 -881
  3. package/dist/types/async/job-manager.d.ts +15 -0
  4. package/dist/types/autolearn/controller.d.ts +25 -0
  5. package/dist/types/autolearn/managed-skills.d.ts +45 -0
  6. package/dist/types/autoresearch/state.d.ts +1 -1
  7. package/dist/types/autoresearch/types.d.ts +1 -1
  8. package/dist/types/cli/args.d.ts +19 -1
  9. package/dist/types/cli/session-picker.d.ts +1 -1
  10. package/dist/types/cli/setup-cli.d.ts +1 -1
  11. package/dist/types/cli/setup-model-picker.d.ts +14 -0
  12. package/dist/types/collab/protocol.d.ts +1 -1
  13. package/dist/types/commands/say.d.ts +24 -0
  14. package/dist/types/config/keybindings.d.ts +3 -3
  15. package/dist/types/config/model-registry.d.ts +10 -0
  16. package/dist/types/config/models-config-schema.d.ts +12 -0
  17. package/dist/types/config/models-config.d.ts +8 -2
  18. package/dist/types/config/settings-schema.d.ts +261 -58
  19. package/dist/types/export/html/index.d.ts +2 -1
  20. package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
  21. package/dist/types/extensibility/extensions/runner.d.ts +3 -1
  22. package/dist/types/extensibility/extensions/types.d.ts +47 -1
  23. package/dist/types/extensibility/hooks/index.d.ts +2 -1
  24. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +9 -0
  25. package/dist/types/extensibility/plugins/loader.d.ts +11 -0
  26. package/dist/types/extensibility/shared-events.d.ts +1 -1
  27. package/dist/types/extensibility/skills.d.ts +10 -0
  28. package/dist/types/goals/guided-setup.d.ts +18 -0
  29. package/dist/types/goals/state.d.ts +1 -1
  30. package/dist/types/hindsight/transcript.d.ts +1 -1
  31. package/dist/types/index.d.ts +5 -0
  32. package/dist/types/internal-urls/local-protocol.d.ts +4 -2
  33. package/dist/types/main.d.ts +4 -3
  34. package/dist/types/mcp/startup-events.d.ts +11 -0
  35. package/dist/types/memories/index.d.ts +7 -0
  36. package/dist/types/memory-backend/local-backend.d.ts +4 -3
  37. package/dist/types/mnemopi/config.d.ts +4 -4
  38. package/dist/types/modes/components/agent-hub.d.ts +6 -0
  39. package/dist/types/modes/components/assistant-message.d.ts +1 -2
  40. package/dist/types/modes/components/compaction-summary-message.d.ts +15 -1
  41. package/dist/types/modes/components/custom-editor.d.ts +39 -1
  42. package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
  43. package/dist/types/modes/components/session-selector.d.ts +1 -1
  44. package/dist/types/modes/components/tool-execution.d.ts +26 -16
  45. package/dist/types/modes/components/transcript-container.d.ts +23 -2
  46. package/dist/types/modes/components/tree-selector.d.ts +1 -1
  47. package/dist/types/modes/components/usage-row.d.ts +3 -0
  48. package/dist/types/modes/controllers/command-controller.d.ts +2 -2
  49. package/dist/types/modes/controllers/input-controller.d.ts +14 -0
  50. package/dist/types/modes/controllers/selector-controller.d.ts +3 -1
  51. package/dist/types/modes/gradient-highlight.d.ts +9 -4
  52. package/dist/types/modes/image-references.d.ts +6 -0
  53. package/dist/types/modes/interactive-mode.d.ts +27 -3
  54. package/dist/types/modes/magic-keywords.d.ts +13 -1
  55. package/dist/types/modes/rpc/rpc-mode.d.ts +35 -1
  56. package/dist/types/modes/rpc/rpc-types.d.ts +9 -1
  57. package/dist/types/modes/runtime-init.d.ts +4 -0
  58. package/dist/types/modes/theme/theme.d.ts +13 -2
  59. package/dist/types/modes/types.d.ts +8 -2
  60. package/dist/types/modes/utils/ui-helpers.d.ts +1 -1
  61. package/dist/types/registry/agent-registry.d.ts +17 -0
  62. package/dist/types/secrets/obfuscator.d.ts +1 -1
  63. package/dist/types/session/agent-session.d.ts +14 -2
  64. package/dist/types/session/indexed-session-storage.d.ts +3 -4
  65. package/dist/types/session/session-context.d.ts +39 -0
  66. package/dist/types/session/session-entries.d.ts +159 -0
  67. package/dist/types/session/session-listing.d.ts +69 -0
  68. package/dist/types/session/session-loader.d.ts +16 -0
  69. package/dist/types/session/session-manager.d.ts +82 -474
  70. package/dist/types/session/session-migrations.d.ts +12 -0
  71. package/dist/types/session/session-paths.d.ts +25 -0
  72. package/dist/types/session/session-persistence.d.ts +8 -0
  73. package/dist/types/session/session-storage.d.ts +11 -12
  74. package/dist/types/session/snapcompact-inline.d.ts +12 -1
  75. package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
  76. package/dist/types/session/tool-choice-queue.d.ts +6 -6
  77. package/dist/types/stt/asr-client.d.ts +90 -0
  78. package/dist/types/stt/asr-protocol.d.ts +97 -0
  79. package/dist/types/stt/asr-worker.d.ts +2 -0
  80. package/dist/types/stt/downloader.d.ts +38 -0
  81. package/dist/types/stt/endpointer.d.ts +59 -0
  82. package/dist/types/stt/index.d.ts +5 -1
  83. package/dist/types/stt/models.d.ts +120 -0
  84. package/dist/types/stt/recorder.d.ts +17 -0
  85. package/dist/types/stt/stt-controller.d.ts +6 -0
  86. package/dist/types/stt/transcriber.d.ts +5 -7
  87. package/dist/types/stt/wav.d.ts +29 -0
  88. package/dist/types/system-prompt.d.ts +4 -0
  89. package/dist/types/task/executor.d.ts +2 -0
  90. package/dist/types/task/index.d.ts +9 -1
  91. package/dist/types/task/types.d.ts +36 -0
  92. package/dist/types/tools/bash.d.ts +2 -2
  93. package/dist/types/tools/eval-render.d.ts +1 -1
  94. package/dist/types/tools/index.d.ts +11 -1
  95. package/dist/types/tools/irc.d.ts +1 -0
  96. package/dist/types/tools/learn.d.ts +51 -0
  97. package/dist/types/tools/manage-skill.d.ts +40 -0
  98. package/dist/types/tools/plan-mode-guard.d.ts +10 -0
  99. package/dist/types/tools/renderers.d.ts +7 -11
  100. package/dist/types/tools/ssh.d.ts +1 -1
  101. package/dist/types/tools/todo.d.ts +1 -1
  102. package/dist/types/tools/tts.d.ts +25 -0
  103. package/dist/types/tools/write.d.ts +1 -1
  104. package/dist/types/tts/downloader.d.ts +20 -0
  105. package/dist/types/tts/index.d.ts +8 -0
  106. package/dist/types/tts/models.d.ts +82 -0
  107. package/dist/types/tts/player.d.ts +32 -0
  108. package/dist/types/tts/runtime.d.ts +6 -0
  109. package/dist/types/tts/streaming-player.d.ts +41 -0
  110. package/dist/types/tts/tts-client.d.ts +93 -0
  111. package/dist/types/tts/tts-protocol.d.ts +95 -0
  112. package/dist/types/tts/tts-worker.d.ts +2 -0
  113. package/dist/types/tts/vocalizer.d.ts +41 -0
  114. package/dist/types/tts/wav.d.ts +8 -0
  115. package/dist/types/utils/tool-choice.d.ts +8 -0
  116. package/dist/types/utils/tools-manager.d.ts +2 -1
  117. package/dist/types/utils/tools-manager.test.d.ts +1 -0
  118. package/dist/types/web/scrapers/github.d.ts +1 -1
  119. package/package.json +15 -14
  120. package/src/async/job-manager.ts +49 -0
  121. package/src/autolearn/controller.ts +139 -0
  122. package/src/autolearn/managed-skills.ts +257 -0
  123. package/src/autoresearch/state.ts +1 -1
  124. package/src/autoresearch/types.ts +1 -1
  125. package/src/cli/args.ts +56 -2
  126. package/src/cli/session-picker.ts +2 -1
  127. package/src/cli/setup-cli.ts +148 -47
  128. package/src/cli/setup-model-picker.ts +43 -0
  129. package/src/cli-commands.ts +1 -0
  130. package/src/cli.ts +45 -13
  131. package/src/collab/host.ts +1 -1
  132. package/src/collab/protocol.ts +1 -1
  133. package/src/commands/say.ts +102 -0
  134. package/src/commands/setup.ts +1 -1
  135. package/src/commit/agentic/tools/analyze-file.ts +3 -0
  136. package/src/config/keybindings.ts +2 -2
  137. package/src/config/model-discovery.ts +11 -5
  138. package/src/config/model-registry.ts +64 -9
  139. package/src/config/models-config-schema.ts +4 -1
  140. package/src/config/models-config.ts +2 -1
  141. package/src/config/settings-schema.ts +248 -32
  142. package/src/config/settings.ts +10 -0
  143. package/src/discovery/builtin.ts +23 -1
  144. package/src/discovery/claude-plugins.ts +44 -5
  145. package/src/discovery/helpers.ts +41 -1
  146. package/src/eval/__tests__/budget-bridge.test.ts +1 -1
  147. package/src/eval/js/shared/prelude.txt +69 -17
  148. package/src/export/html/index.ts +3 -6
  149. package/src/extensibility/extensions/model-api.ts +41 -0
  150. package/src/extensibility/extensions/runner.ts +4 -0
  151. package/src/extensibility/extensions/types.ts +52 -1
  152. package/src/extensibility/extensions/wrapper.ts +41 -5
  153. package/src/extensibility/hooks/index.ts +2 -1
  154. package/src/extensibility/plugins/legacy-pi-compat.ts +43 -13
  155. package/src/extensibility/plugins/loader.ts +30 -19
  156. package/src/extensibility/plugins/manager.ts +221 -90
  157. package/src/extensibility/shared-events.ts +1 -1
  158. package/src/extensibility/skills.ts +96 -15
  159. package/src/goals/guided-setup.ts +133 -0
  160. package/src/goals/state.ts +1 -1
  161. package/src/hindsight/transcript.ts +1 -1
  162. package/src/index.ts +5 -0
  163. package/src/internal-urls/docs-index.generated.ts +10 -10
  164. package/src/internal-urls/history-protocol.ts +1 -1
  165. package/src/internal-urls/local-protocol.ts +29 -7
  166. package/src/main.ts +27 -7
  167. package/src/mcp/startup-events.ts +21 -0
  168. package/src/mcp/transports/stdio.ts +2 -1
  169. package/src/memories/index.ts +146 -11
  170. package/src/memory-backend/local-backend.ts +11 -5
  171. package/src/mnemopi/backend.ts +1 -0
  172. package/src/mnemopi/config.ts +26 -10
  173. package/src/modes/acp/acp-agent.ts +3 -5
  174. package/src/modes/components/agent-hub.ts +49 -4
  175. package/src/modes/components/assistant-message.ts +4 -37
  176. package/src/modes/components/compaction-summary-message.ts +125 -26
  177. package/src/modes/components/custom-editor.test.ts +96 -0
  178. package/src/modes/components/custom-editor.ts +164 -8
  179. package/src/modes/components/session-selector.ts +1 -1
  180. package/src/modes/components/settings-defs.ts +7 -0
  181. package/src/modes/components/tool-execution.ts +82 -43
  182. package/src/modes/components/transcript-container.ts +70 -1
  183. package/src/modes/components/tree-selector.ts +1 -1
  184. package/src/modes/components/usage-row.ts +18 -0
  185. package/src/modes/components/user-message.ts +4 -2
  186. package/src/modes/controllers/command-controller.ts +14 -4
  187. package/src/modes/controllers/event-controller.ts +78 -11
  188. package/src/modes/controllers/extension-ui-controller.ts +6 -0
  189. package/src/modes/controllers/input-controller.ts +258 -27
  190. package/src/modes/controllers/selector-controller.ts +12 -2
  191. package/src/modes/gradient-highlight.ts +21 -9
  192. package/src/modes/image-references.ts +20 -0
  193. package/src/modes/interactive-mode.ts +286 -40
  194. package/src/modes/magic-keywords.ts +27 -5
  195. package/src/modes/rpc/rpc-mode.ts +146 -14
  196. package/src/modes/rpc/rpc-subagents.ts +2 -2
  197. package/src/modes/rpc/rpc-types.ts +8 -2
  198. package/src/modes/runtime-init.ts +28 -3
  199. package/src/modes/theme/theme.ts +98 -50
  200. package/src/modes/types.ts +6 -2
  201. package/src/modes/utils/hotkeys-markdown.ts +1 -1
  202. package/src/modes/utils/ui-helpers.ts +34 -6
  203. package/src/priority.json +5 -1
  204. package/src/prompts/agents/task.md +1 -0
  205. package/src/prompts/goals/guided-goal-interview.md +8 -0
  206. package/src/prompts/goals/guided-goal-system.md +12 -0
  207. package/src/prompts/memories/read-path.md +6 -0
  208. package/src/prompts/system/autolearn-guidance-learn.md +1 -0
  209. package/src/prompts/system/autolearn-guidance.md +7 -0
  210. package/src/prompts/system/autolearn-nudge.md +3 -0
  211. package/src/prompts/system/eager-task.md +7 -0
  212. package/src/prompts/system/eager-todo.md +11 -6
  213. package/src/prompts/system/subagent-system-prompt.md +4 -0
  214. package/src/prompts/system/system-prompt.md +10 -5
  215. package/src/prompts/system/title-marker-instruction.md +1 -0
  216. package/src/prompts/system/title-system-marker.md +16 -0
  217. package/src/prompts/tools/job.md +1 -0
  218. package/src/prompts/tools/learn.md +7 -0
  219. package/src/prompts/tools/manage-skill.md +9 -0
  220. package/src/prompts/tools/task.md +3 -0
  221. package/src/registry/agent-registry.ts +30 -0
  222. package/src/sdk.ts +88 -24
  223. package/src/secrets/obfuscator.ts +1 -1
  224. package/src/session/agent-session.ts +209 -87
  225. package/src/session/history-storage.ts +2 -2
  226. package/src/session/indexed-session-storage.ts +7 -17
  227. package/src/session/session-context.ts +352 -0
  228. package/src/session/session-entries.ts +194 -0
  229. package/src/session/session-listing.ts +588 -0
  230. package/src/session/session-loader.ts +106 -0
  231. package/src/session/session-manager.ts +933 -3145
  232. package/src/session/session-migrations.ts +78 -0
  233. package/src/session/session-paths.ts +193 -0
  234. package/src/session/session-persistence.ts +131 -0
  235. package/src/session/session-storage.ts +91 -50
  236. package/src/session/snapcompact-inline.ts +21 -1
  237. package/src/session/snapcompact-savings-journal.ts +113 -0
  238. package/src/session/tool-choice-queue.ts +23 -11
  239. package/src/slash-commands/builtin-registry.ts +25 -3
  240. package/src/stt/asr-client.ts +520 -0
  241. package/src/stt/asr-protocol.ts +65 -0
  242. package/src/stt/asr-worker.ts +790 -0
  243. package/src/stt/downloader.ts +107 -47
  244. package/src/stt/endpointer.ts +259 -0
  245. package/src/stt/index.ts +5 -1
  246. package/src/stt/models.ts +150 -0
  247. package/src/stt/recorder.ts +247 -60
  248. package/src/stt/stt-controller.ts +201 -22
  249. package/src/stt/transcriber.ts +37 -68
  250. package/src/stt/wav.ts +173 -0
  251. package/src/system-prompt.ts +8 -0
  252. package/src/task/agents.ts +1 -2
  253. package/src/task/executor.ts +49 -15
  254. package/src/task/index.ts +60 -6
  255. package/src/task/render.ts +83 -8
  256. package/src/task/types.ts +53 -0
  257. package/src/tools/ask.ts +8 -0
  258. package/src/tools/bash.ts +4 -3
  259. package/src/tools/eval-render.ts +4 -3
  260. package/src/tools/index.ts +40 -4
  261. package/src/tools/irc.ts +10 -2
  262. package/src/tools/job.ts +14 -2
  263. package/src/tools/learn.ts +144 -0
  264. package/src/tools/manage-skill.ts +104 -0
  265. package/src/tools/plan-mode-guard.ts +53 -19
  266. package/src/tools/renderers.ts +7 -11
  267. package/src/tools/ssh.ts +4 -3
  268. package/src/tools/todo.ts +1 -1
  269. package/src/tools/tts.ts +203 -92
  270. package/src/tools/write.ts +18 -2
  271. package/src/tts/downloader.ts +64 -0
  272. package/src/tts/index.ts +8 -0
  273. package/src/tts/models.ts +137 -0
  274. package/src/tts/player.ts +137 -0
  275. package/src/tts/runtime.ts +21 -0
  276. package/src/tts/streaming-player.ts +266 -0
  277. package/src/tts/tts-client.ts +647 -0
  278. package/src/tts/tts-protocol.ts +60 -0
  279. package/src/tts/tts-worker.ts +497 -0
  280. package/src/tts/vocalizer.ts +162 -0
  281. package/src/tts/wav.ts +58 -0
  282. package/src/utils/title-generator.ts +48 -5
  283. package/src/utils/tool-choice.ts +16 -0
  284. package/src/utils/tools-manager.test.ts +25 -0
  285. package/src/utils/tools-manager.ts +19 -1
  286. package/src/web/scrapers/github.ts +96 -0
  287. package/src/web/search/index.ts +13 -0
  288. package/src/web/search/providers/searxng.ts +13 -1
  289. package/dist/types/stt/setup.d.ts +0 -18
  290. package/src/stt/setup.ts +0 -52
  291. package/src/stt/transcribe.py +0 -70
@@ -1046,6 +1046,30 @@ export declare const SETTINGS_SCHEMA: {
1046
1046
  }];
1047
1047
  };
1048
1048
  };
1049
+ readonly fastModeScope: {
1050
+ readonly type: "enum";
1051
+ readonly values: readonly ["both", "openai", "claude"];
1052
+ readonly default: "both";
1053
+ readonly ui: {
1054
+ readonly tab: "model";
1055
+ readonly group: "Sampling";
1056
+ readonly label: "Fast Mode Scope";
1057
+ readonly description: 'Which providers `/fast on` (and the fast-mode toggle) target. "both" = priority on every supported provider; "openai"/"claude" scope it to one family (mirrors serviceTier openai-only/claude-only).';
1058
+ readonly options: readonly [{
1059
+ readonly value: "both";
1060
+ readonly label: "Both";
1061
+ readonly description: "Priority on every supported provider";
1062
+ }, {
1063
+ readonly value: "openai";
1064
+ readonly label: "OpenAI only";
1065
+ readonly description: "Priority on OpenAI/OpenAI-Codex requests; ignored elsewhere";
1066
+ }, {
1067
+ readonly value: "claude";
1068
+ readonly label: "Claude only";
1069
+ readonly description: "Anthropic fast mode on direct Claude requests; ignored elsewhere";
1070
+ }];
1071
+ };
1072
+ };
1049
1073
  readonly "retry.enabled": {
1050
1074
  readonly type: "boolean";
1051
1075
  readonly default: true;
@@ -1242,6 +1266,32 @@ export declare const SETTINGS_SCHEMA: {
1242
1266
  readonly description: "Suggest emojis from `:name:` shortcodes and expand text emoticons like `:D` or `:-)`";
1243
1267
  };
1244
1268
  };
1269
+ readonly "paste.largeMenuThreshold": {
1270
+ readonly type: "number";
1271
+ readonly default: 100;
1272
+ readonly ui: {
1273
+ readonly tab: "interaction";
1274
+ readonly group: "Input";
1275
+ readonly label: "Large Paste Menu";
1276
+ readonly description: "When a paste reaches this many lines, offer a menu to wrap it in a code block, wrap it in XML tags, or save it to a file. 0 disables the menu (large pastes still collapse to a [Paste] marker).";
1277
+ readonly options: readonly [{
1278
+ readonly value: "0";
1279
+ readonly label: "Off";
1280
+ }, {
1281
+ readonly value: "100";
1282
+ readonly label: "100 lines";
1283
+ }, {
1284
+ readonly value: "250";
1285
+ readonly label: "250 lines";
1286
+ }, {
1287
+ readonly value: "500";
1288
+ readonly label: "500 lines";
1289
+ }, {
1290
+ readonly value: "1000";
1291
+ readonly label: "1000 lines";
1292
+ }];
1293
+ };
1294
+ };
1245
1295
  readonly "startup.quiet": {
1246
1296
  readonly type: "boolean";
1247
1297
  readonly default: false;
@@ -1450,50 +1500,18 @@ export declare const SETTINGS_SCHEMA: {
1450
1500
  };
1451
1501
  readonly "stt.modelName": {
1452
1502
  readonly type: "enum";
1453
- readonly values: readonly ["tiny", "tiny.en", "base", "base.en", "small", "small.en", "medium", "medium.en", "large"];
1454
- readonly default: "base.en";
1503
+ readonly values: readonly ["fast", "balanced", "turbo", "parakeet"];
1504
+ readonly default: "parakeet";
1455
1505
  readonly ui: {
1456
1506
  readonly tab: "interaction";
1457
1507
  readonly group: "Speech";
1458
1508
  readonly label: "Speech Model";
1459
- readonly description: "Whisper model size (larger = more accurate but slower)";
1460
- readonly options: readonly [{
1461
- readonly value: "tiny";
1462
- readonly label: "tiny";
1463
- readonly description: "Multilingual; fastest, lowest accuracy";
1464
- }, {
1465
- readonly value: "tiny.en";
1466
- readonly label: "tiny.en";
1467
- readonly description: "English-only; fastest";
1468
- }, {
1469
- readonly value: "base";
1470
- readonly label: "base";
1471
- readonly description: "Multilingual; small and fast";
1472
- }, {
1473
- readonly value: "base.en";
1474
- readonly label: "base.en";
1475
- readonly description: "English-only; default";
1476
- }, {
1477
- readonly value: "small";
1478
- readonly label: "small";
1479
- readonly description: "Multilingual; balanced";
1480
- }, {
1481
- readonly value: "small.en";
1482
- readonly label: "small.en";
1483
- readonly description: "English-only; balanced";
1484
- }, {
1485
- readonly value: "medium";
1486
- readonly label: "medium";
1487
- readonly description: "Multilingual; accurate but slower";
1488
- }, {
1489
- readonly value: "medium.en";
1490
- readonly label: "medium.en";
1491
- readonly description: "English-only; accurate but slower";
1492
- }, {
1493
- readonly value: "large";
1494
- readonly label: "large";
1495
- readonly description: "Multilingual; most accurate";
1496
- }];
1509
+ readonly description: "Local on-device speech model. Parakeet TDT v3 (sherpa-onnx) is the SoTA default; Whisper base/small/large-v3-turbo tiers (transformers.js) trade size for multilingual coverage. Downloaded on first use.";
1510
+ readonly options: {
1511
+ value: "balanced" | "fast" | "parakeet" | "turbo";
1512
+ label: "Balanced (Whisper small)" | "Fast (Whisper base)" | "Parakeet TDT v3 (SoTA)" | "Turbo (Whisper large-v3)";
1513
+ description: "NVIDIA Parakeet TDT 0.6B v3, 25 languages. Open ASR Leaderboard leader — best accuracy and far fastest decoding. Default." | "Whisper base, multilingual. Smallest + fastest; lowest accuracy. Best for low-resource machines." | "Whisper large-v3-turbo, 99 languages. Widest language coverage; large download, slower." | "Whisper small, multilingual. More accurate than Fast, still light on CPU/RAM.";
1514
+ }[];
1497
1515
  };
1498
1516
  };
1499
1517
  readonly "contextPromotion.enabled": {
@@ -1823,7 +1841,7 @@ export declare const SETTINGS_SCHEMA: {
1823
1841
  };
1824
1842
  readonly "snapcompact.shape": {
1825
1843
  readonly type: "enum";
1826
- readonly values: readonly ["auto", ...("5x8-bw" | "5x8-sent" | "6x12-dim" | "6x6u-bw" | "6x6u-sent" | "8on16-bw" | "8x13-bw" | "8x8r-bw" | "8x8r-sent" | "8x8u-bw" | "8x8u-sent" | "doc-8on16-bw" | "doc-8on16-sent" | "doc-8on16-sent-dim")[]];
1844
+ readonly values: readonly ["auto", ...("11on16-bw" | "5x8-bw" | "5x8-sent" | "6x12-dim" | "6x6u-bw" | "6x6u-sent" | "8on16-bw" | "8on22-bw" | "8x13-bw" | "8x8r-bw" | "8x8r-sent" | "8x8u-bw" | "8x8u-sent" | "doc-8on16-bw" | "doc-8on16-sent" | "doc-8on16-sent-dim")[]];
1827
1845
  readonly default: "auto";
1828
1846
  readonly ui: {
1829
1847
  readonly tab: "context";
@@ -1878,6 +1896,14 @@ export declare const SETTINGS_SCHEMA: {
1878
1896
  readonly value: "8on16-bw";
1879
1897
  readonly label: "8x13 on 16px pitch, black";
1880
1898
  readonly description: "8x13 glyphs on an 8x16 cell (extra leading), black ink.";
1899
+ }, {
1900
+ readonly value: "8on22-bw";
1901
+ readonly label: "8x13 on 22px pitch (leading), black";
1902
+ readonly description: "8x13 glyphs on an 8x22 cell — extra line spacing so rows don't crowd. Default for OpenAI/Google.";
1903
+ }, {
1904
+ readonly value: "11on16-bw";
1905
+ readonly label: "8x13 on 11px advance (tracking), black";
1906
+ readonly description: "8x13 glyphs on an 11x16 cell — extra letter spacing so characters don't merge. Default for Anthropic.";
1881
1907
  }, {
1882
1908
  readonly value: "doc-8on16-bw";
1883
1909
  readonly label: "Doc 8on16, black";
@@ -1999,6 +2025,31 @@ export declare const SETTINGS_SCHEMA: {
1999
2025
  }];
2000
2026
  };
2001
2027
  };
2028
+ readonly "autolearn.enabled": {
2029
+ readonly type: "boolean";
2030
+ readonly default: false;
2031
+ readonly ui: {
2032
+ readonly tab: "memory";
2033
+ readonly group: "Auto-Learn";
2034
+ readonly label: "Auto-Learn (experimental)";
2035
+ readonly description: "After the agent stops, nudge it to capture lessons to memory and create/enhance isolated managed skills";
2036
+ };
2037
+ };
2038
+ readonly "autolearn.autoContinue": {
2039
+ readonly type: "boolean";
2040
+ readonly default: false;
2041
+ readonly ui: {
2042
+ readonly tab: "memory";
2043
+ readonly group: "Auto-Learn";
2044
+ readonly label: "Auto-run capture at stop";
2045
+ readonly description: "When on, auto-run one capture turn at stop (uses extra tokens). Off = passive reminder on your next turn.";
2046
+ readonly condition: "autolearnActive";
2047
+ };
2048
+ };
2049
+ readonly "autolearn.minToolCalls": {
2050
+ readonly type: "number";
2051
+ readonly default: 5;
2052
+ };
2002
2053
  readonly "mnemopi.dbPath": {
2003
2054
  readonly type: "string";
2004
2055
  readonly default: undefined;
@@ -2046,6 +2097,27 @@ export declare const SETTINGS_SCHEMA: {
2046
2097
  readonly condition: "mnemopiActive";
2047
2098
  };
2048
2099
  };
2100
+ readonly "mnemopi.embeddingVariant": {
2101
+ readonly type: "enum";
2102
+ readonly values: readonly ["en", "multilingual"];
2103
+ readonly default: "en";
2104
+ readonly ui: {
2105
+ readonly tab: "memory";
2106
+ readonly group: "Mnemopi";
2107
+ readonly label: "Embedding variant";
2108
+ readonly description: "Local embedding model family. en = stronger English model; multilingual = cross-language model. Changing this rebuilds existing memory embeddings on next start.";
2109
+ readonly options: readonly [{
2110
+ readonly value: "en";
2111
+ readonly label: "English (bge-base-en-v1.5)";
2112
+ readonly description: "BAAI/bge-base-en-v1.5 (768d), English-only";
2113
+ }, {
2114
+ readonly value: "multilingual";
2115
+ readonly label: "Multilingual (multilingual-e5-large)";
2116
+ readonly description: "intfloat/multilingual-e5-large (1024d), cross-language recall";
2117
+ }];
2118
+ readonly condition: "mnemopiActive";
2119
+ };
2120
+ };
2049
2121
  readonly "mnemopi.autoRecall": {
2050
2122
  readonly type: "boolean";
2051
2123
  readonly default: true;
@@ -2108,7 +2180,7 @@ export declare const SETTINGS_SCHEMA: {
2108
2180
  readonly tab: "memory";
2109
2181
  readonly group: "Mnemopi";
2110
2182
  readonly label: "Mnemopi Embedding Model";
2111
- readonly description: "Optional embedding model override passed to Mnemopi";
2183
+ readonly description: "Advanced: explicit embedding model id that overrides the variant. Leave empty to use mnemopi.embeddingVariant.";
2112
2184
  readonly condition: "mnemopiActive";
2113
2185
  };
2114
2186
  };
@@ -2953,13 +3025,27 @@ export declare const SETTINGS_SCHEMA: {
2953
3025
  };
2954
3026
  };
2955
3027
  readonly "todo.eager": {
2956
- readonly type: "boolean";
2957
- readonly default: false;
3028
+ readonly type: "enum";
3029
+ readonly values: readonly ["default", "preferred", "always"];
3030
+ readonly default: "default";
2958
3031
  readonly ui: {
2959
3032
  readonly tab: "tools";
2960
3033
  readonly group: "Todos";
2961
3034
  readonly label: "Create Todos Automatically";
2962
- readonly description: "Automatically create a comprehensive todo list after the first message";
3035
+ readonly description: "How strongly to push automatic todo-list creation after the first message";
3036
+ readonly options: readonly [{
3037
+ readonly value: "default";
3038
+ readonly label: "Default";
3039
+ readonly description: "Model decides; no automatic todo list";
3040
+ }, {
3041
+ readonly value: "preferred";
3042
+ readonly label: "Preferred";
3043
+ readonly description: "Suggests a todo list on the first message (reminder, not forced)";
3044
+ }, {
3045
+ readonly value: "always";
3046
+ readonly label: "Always";
3047
+ readonly description: "Forces a comprehensive todo list on the first message";
3048
+ }];
2963
3049
  };
2964
3050
  };
2965
3051
  readonly "find.enabled": {
@@ -3077,14 +3163,14 @@ export declare const SETTINGS_SCHEMA: {
3077
3163
  readonly description: "Enable the debug tool for DAP-based debugging";
3078
3164
  };
3079
3165
  };
3080
- readonly "tts.enabled": {
3166
+ readonly "speechgen.enabled": {
3081
3167
  readonly type: "boolean";
3082
3168
  readonly default: false;
3083
3169
  readonly ui: {
3084
3170
  readonly tab: "tools";
3085
3171
  readonly group: "Available Tools";
3086
- readonly label: "Text-to-Speech";
3087
- readonly description: "Enable the tts tool for xAI Grok Voice speech synthesis";
3172
+ readonly label: "Speech Generation";
3173
+ readonly description: "Enable the tts tool for on-device (Kokoro) or xAI Grok Voice speech-file synthesis";
3088
3174
  };
3089
3175
  };
3090
3176
  readonly "inspect_image.enabled": {
@@ -3272,13 +3358,13 @@ export declare const SETTINGS_SCHEMA: {
3272
3358
  };
3273
3359
  readonly "async.pollWaitDuration": {
3274
3360
  readonly type: "enum";
3275
- readonly values: readonly ["5s", "10s", "30s", "1m", "5m"];
3276
- readonly default: "30s";
3361
+ readonly values: readonly ["5s", "10s", "30s", "1m", "5m", "smart"];
3362
+ readonly default: "smart";
3277
3363
  readonly ui: {
3278
3364
  readonly tab: "tools";
3279
3365
  readonly group: "Execution";
3280
- readonly label: "Poll Wait Duration";
3281
- readonly description: "How long the poll tool waits for background job updates before returning the current state";
3366
+ readonly label: "Max Poll Time";
3367
+ readonly description: "How long the poll tool waits for background job updates before returning the current state. A fixed value waits that exact duration every time. `smart` adapts: it starts at 5s and lengthens with each back-to-back poll (up to 5m), then resets to 5s after about a minute without polling.";
3282
3368
  readonly options: readonly [{
3283
3369
  readonly value: "5s";
3284
3370
  readonly label: "5 seconds";
@@ -3288,13 +3374,16 @@ export declare const SETTINGS_SCHEMA: {
3288
3374
  }, {
3289
3375
  readonly value: "30s";
3290
3376
  readonly label: "30 seconds";
3291
- readonly description: "Default";
3292
3377
  }, {
3293
3378
  readonly value: "1m";
3294
3379
  readonly label: "1 minute";
3295
3380
  }, {
3296
3381
  readonly value: "5m";
3297
3382
  readonly label: "5 minutes";
3383
+ }, {
3384
+ readonly value: "smart";
3385
+ readonly label: "Smart";
3386
+ readonly description: "Default — adaptive 5s→5m, resets when you stop polling";
3298
3387
  }];
3299
3388
  };
3300
3389
  };
@@ -3532,13 +3621,27 @@ export declare const SETTINGS_SCHEMA: {
3532
3621
  };
3533
3622
  };
3534
3623
  readonly "task.eager": {
3535
- readonly type: "boolean";
3536
- readonly default: false;
3624
+ readonly type: "enum";
3625
+ readonly values: readonly ["default", "preferred", "always"];
3626
+ readonly default: "default";
3537
3627
  readonly ui: {
3538
3628
  readonly tab: "tasks";
3539
3629
  readonly group: "Subagents";
3540
3630
  readonly label: "Prefer Task Delegation";
3541
- readonly description: "Encourage the agent to delegate work to subagents unless changes are trivial";
3631
+ readonly description: "How strongly to push delegating work to subagents";
3632
+ readonly options: readonly [{
3633
+ readonly value: "default";
3634
+ readonly label: "Default";
3635
+ readonly description: "Model decides when to delegate";
3636
+ }, {
3637
+ readonly value: "preferred";
3638
+ readonly label: "Preferred";
3639
+ readonly description: "Adds delegation guidance to the system prompt";
3640
+ }, {
3641
+ readonly value: "always";
3642
+ readonly label: "Always";
3643
+ readonly description: "Prompt guidance plus a first-turn delegation reminder";
3644
+ }];
3542
3645
  };
3543
3646
  };
3544
3647
  readonly "task.batch": {
@@ -3946,6 +4049,107 @@ export declare const SETTINGS_SCHEMA: {
3946
4049
  }];
3947
4050
  };
3948
4051
  };
4052
+ readonly "providers.tts": {
4053
+ readonly type: "enum";
4054
+ readonly values: readonly ["auto", "local", "xai"];
4055
+ readonly default: "auto";
4056
+ readonly ui: {
4057
+ readonly tab: "providers";
4058
+ readonly group: "Services";
4059
+ readonly label: "Text-to-Speech Provider";
4060
+ readonly description: "Backend for the tts tool: local on-device neural TTS (Kokoro-82M) or xAI Grok Voice";
4061
+ readonly options: readonly [{
4062
+ readonly value: "auto";
4063
+ readonly label: "Auto";
4064
+ readonly description: "Prefer local on-device TTS; route .mp3 output to xAI when credentials exist";
4065
+ }, {
4066
+ readonly value: "local";
4067
+ readonly label: "Local";
4068
+ readonly description: "On-device neural TTS (Kokoro-82M); output is WAV/PCM16";
4069
+ }, {
4070
+ readonly value: "xai";
4071
+ readonly label: "xAI Grok Voice";
4072
+ readonly description: "Requires xAI Grok OAuth or XAI_API_KEY; MP3 or WAV";
4073
+ }];
4074
+ };
4075
+ };
4076
+ readonly "tts.localModel": {
4077
+ readonly type: "enum";
4078
+ readonly values: readonly ["kokoro"];
4079
+ readonly default: "kokoro";
4080
+ readonly ui: {
4081
+ readonly tab: "providers";
4082
+ readonly group: "Services";
4083
+ readonly label: "Local TTS Model";
4084
+ readonly description: "On-device neural TTS model (Kokoro-82M) used by the local TTS backend";
4085
+ readonly options: readonly [{
4086
+ readonly value: "kokoro";
4087
+ readonly label: "Kokoro-82M";
4088
+ readonly description: "Kokoro-82M neural TTS — SoTA on-device quality, multi-voice, fully local";
4089
+ }];
4090
+ };
4091
+ };
4092
+ readonly "tts.localVoice": {
4093
+ readonly type: "enum";
4094
+ readonly values: readonly string[];
4095
+ readonly default: "af_heart";
4096
+ readonly ui: {
4097
+ readonly tab: "providers";
4098
+ readonly group: "Services";
4099
+ readonly label: "Local TTS Voice";
4100
+ readonly description: "Kokoro voice used by the local TTS backend (American/British, female/male)";
4101
+ readonly options: readonly {
4102
+ value: string;
4103
+ label: string;
4104
+ }[];
4105
+ };
4106
+ };
4107
+ readonly "speech.enabled": {
4108
+ readonly type: "boolean";
4109
+ readonly default: false;
4110
+ readonly ui: {
4111
+ readonly tab: "providers";
4112
+ readonly group: "Services";
4113
+ readonly label: "Speech Vocalization";
4114
+ readonly description: "Speak the assistant's output aloud through the speakers as it streams";
4115
+ };
4116
+ };
4117
+ readonly "speech.mode": {
4118
+ readonly type: "enum";
4119
+ readonly values: readonly ["all", "assistant", "yield"];
4120
+ readonly default: "assistant";
4121
+ readonly ui: {
4122
+ readonly tab: "providers";
4123
+ readonly group: "Services";
4124
+ readonly label: "Speech Vocalization Mode";
4125
+ readonly description: "What to speak: all = assistant messages + thinking; assistant = messages only; yield = only the final message at turn end";
4126
+ readonly options: readonly [{
4127
+ readonly value: "all";
4128
+ readonly label: "All (messages + thinking)";
4129
+ }, {
4130
+ readonly value: "assistant";
4131
+ readonly label: "Assistant messages";
4132
+ }, {
4133
+ readonly value: "yield";
4134
+ readonly label: "Final message only";
4135
+ }];
4136
+ };
4137
+ };
4138
+ readonly "speech.voice": {
4139
+ readonly type: "enum";
4140
+ readonly values: readonly string[];
4141
+ readonly default: "af_heart";
4142
+ readonly ui: {
4143
+ readonly tab: "providers";
4144
+ readonly group: "Services";
4145
+ readonly label: "Speech Vocalization Voice";
4146
+ readonly description: "Kokoro voice used when speaking the assistant's output aloud";
4147
+ readonly options: readonly {
4148
+ value: string;
4149
+ label: string;
4150
+ }[];
4151
+ };
4152
+ };
3949
4153
  readonly "providers.tinyModel": {
3950
4154
  readonly type: "enum";
3951
4155
  readonly values: readonly ["online", "lfm2-350m", "qwen3-0.6b", "gemma-270m", "qwen2.5-0.5b", "lfm2-700m"];
@@ -4633,8 +4837,7 @@ export interface SttSettings {
4633
4837
  enabled: boolean;
4634
4838
  language: string | undefined;
4635
4839
  modelName: string;
4636
- whisperPath: string | undefined;
4637
- modelPath: string | undefined;
4840
+ streaming: boolean;
4638
4841
  }
4639
4842
  export interface BashInterceptorRule {
4640
4843
  pattern: string;
@@ -1,5 +1,6 @@
1
1
  import type { AgentState } from "@oh-my-pi/pi-agent-core";
2
- import { type SessionEntry, type SessionHeader, SessionManager } from "../../session/session-manager";
2
+ import type { SessionEntry, SessionHeader } from "../../session/session-entries";
3
+ import { SessionManager } from "../../session/session-manager";
3
4
  /** Compose the standalone export template: minified CSS, tool renderers, and viewer JS inlined. */
4
5
  export declare function getTemplate(): string;
5
6
  export interface ExportOptions {
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Model query facade exposed to extensions as `ctx.models`.
3
+ *
4
+ * Read-only: lets an extension select a model the same way core does — list
5
+ * authenticated models, read the session model, resolve a model string or role
6
+ * alias, and compare model families — without touching the mutable registry or
7
+ * duplicating resolution/family heuristics.
8
+ */
9
+ import type { Model } from "@oh-my-pi/pi-ai";
10
+ import type { ModelRegistry } from "../../config/model-registry";
11
+ import type { Settings } from "../../config/settings";
12
+ import type { ExtensionModelQuery } from "./types";
13
+ /**
14
+ * Build the `ctx.models` facade. `getModel` is read lazily so `current()` always
15
+ * reflects the live session model (it can change mid-session via `/model`).
16
+ */
17
+ export declare function createExtensionModelQuery(modelRegistry: ModelRegistry, settings: Settings | undefined, getModel: () => Model | undefined): ExtensionModelQuery;
@@ -5,6 +5,7 @@ import type { AgentMessage } from "@oh-my-pi/pi-agent-core";
5
5
  import type { CredentialDisabledEvent, ImageContent, Model, ProviderResponseMetadata } from "@oh-my-pi/pi-ai";
6
6
  import type { KeyId } from "@oh-my-pi/pi-tui";
7
7
  import type { ModelRegistry } from "../../config/model-registry";
8
+ import type { Settings } from "../../config/settings";
8
9
  import type { MemoryRuntimeContext } from "../../memory-backend";
9
10
  import type { SessionManager } from "../../session/session-manager";
10
11
  import type { AfterProviderResponseEvent, AssistantThinkingRenderer, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, ContextEvent, Extension, ExtensionActions, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFlag, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, InputEvent, InputEventResult, MessageRenderer, RegisteredCommand, RegisteredTool, ResourcesDiscoverEvent, SessionBeforeBranchResult, SessionBeforeCompactResult, SessionBeforeSwitchResult, SessionBeforeTreeResult, SessionCompactingResult, ToolCallEvent, ToolCallEventResult, ToolResultEvent, ToolResultEventResult, UserBashEvent, UserBashEventResult, UserPythonEvent, UserPythonEventResult } from "./types";
@@ -62,7 +63,8 @@ export declare class ExtensionRunner {
62
63
  private readonly cwd;
63
64
  private readonly sessionManager;
64
65
  private readonly modelRegistry;
65
- constructor(extensions: Extension[], runtime: ExtensionRuntime, cwd: string, sessionManager: SessionManager, modelRegistry: ModelRegistry, getMemory?: () => MemoryRuntimeContext | undefined);
66
+ private readonly settings?;
67
+ constructor(extensions: Extension[], runtime: ExtensionRuntime, cwd: string, sessionManager: SessionManager, modelRegistry: ModelRegistry, getMemory?: () => MemoryRuntimeContext | undefined, settings?: Settings | undefined);
66
68
  initialize(actions: ExtensionActions, contextActions: ExtensionContextActions, commandContextActions?: ExtensionCommandContextActions, uiContext?: ExtensionUIContext): void;
67
69
  /**
68
70
  * Forward a `credential_disabled` event from `AuthStorage` to extension handlers.
@@ -27,6 +27,7 @@ import type { Theme } from "../../modes/theme/theme";
27
27
  import type { CustomMessage } from "../../session/messages";
28
28
  import type { ReadonlySessionManager, SessionManager } from "../../session/session-manager";
29
29
  import type { BashToolDetails, BashToolInput, FindToolDetails, FindToolInput, ReadToolDetails, ReadToolInput, SearchToolDetails, SearchToolInput, WriteToolInput } from "../../tools";
30
+ import type { ApprovalMode } from "../../tools/approval";
30
31
  import type { EventBus } from "../../utils/event-bus";
31
32
  import type { AgentEndEvent, AgentStartEvent, AutoCompactionEndEvent, AutoCompactionStartEvent, AutoRetryEndEvent, AutoRetryStartEvent, ContextEvent, GoalUpdatedEvent, SessionBeforeBranchEvent, SessionBeforeBranchResult, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionBranchEvent, SessionCompactEvent, SessionCompactingEvent, SessionCompactingResult, SessionEvent, SessionShutdownEvent, SessionStartEvent, SessionSwitchEvent, SessionTreeEvent, TodoReminderEvent, ToolCallEventResult, ToolResultEventResult, TtsrTriggeredEvent, TurnEndEvent, TurnStartEvent } from "../shared-events";
32
33
  import type { SlashCommandInfo } from "../slash-commands";
@@ -173,6 +174,31 @@ export interface CompactOptions {
173
174
  /**
174
175
  * Context passed to extension event handlers.
175
176
  */
177
+ /**
178
+ * Read-only model query facade exposed at `ctx.models`. Lets an extension select a
179
+ * model the same way core does — list authenticated models, read the session model,
180
+ * resolve a model string or role alias, and compare model families — without reaching
181
+ * into the mutable registry or re-implementing matching/family heuristics.
182
+ */
183
+ export interface ExtensionModelQuery {
184
+ /** Authenticated models available this session (the same set `--model` selection sees). */
185
+ list(): Model[];
186
+ /** The current session model, if one is set. */
187
+ current(): Model | undefined;
188
+ /**
189
+ * Resolve a model string (`provider/id`, bare id) or role alias (`pi/slow`, a
190
+ * configured role) to a Model, using the same settings-backed aliases and match
191
+ * preferences as core selection. Thinking/routing suffixes are accepted and resolved
192
+ * to the base model (pass effort separately). Returns undefined when nothing matches.
193
+ */
194
+ resolve(spec: string): Model | undefined;
195
+ /**
196
+ * Opaque lineage token for "are these the same family?" comparisons — every Claude
197
+ * point release shares a token, Claude and GPT differ. Backed by catalog canonical
198
+ * identity. Compare it; do not persist it (the vocabulary tracks new releases).
199
+ */
200
+ family(model: Model): string;
201
+ }
176
202
  export interface ExtensionContext {
177
203
  /** UI methods for user interaction */
178
204
  ui: ExtensionUIContext;
@@ -190,6 +216,8 @@ export interface ExtensionContext {
190
216
  modelRegistry: ModelRegistry;
191
217
  /** Current model (may be undefined) */
192
218
  model: Model | undefined;
219
+ /** Read-only model query facade: list / current / resolve / family. */
220
+ models: ExtensionModelQuery;
193
221
  /** Whether the agent is idle (not streaming) */
194
222
  isIdle(): boolean;
195
223
  /** Abort the current agent operation */
@@ -396,6 +424,22 @@ export interface InputEvent {
396
424
  images?: ImageContent[];
397
425
  source: "interactive" | "rpc" | "extension";
398
426
  }
427
+ export interface ToolApprovalRequestedEvent {
428
+ type: "tool_approval_requested";
429
+ sessionId: string;
430
+ toolCallId: string;
431
+ toolName: string;
432
+ reason?: string;
433
+ approvalMode: ApprovalMode;
434
+ }
435
+ export interface ToolApprovalResolvedEvent {
436
+ type: "tool_approval_resolved";
437
+ sessionId: string;
438
+ toolCallId: string;
439
+ toolName: string;
440
+ approved: boolean;
441
+ reason?: string;
442
+ }
399
443
  interface ToolCallEventBase {
400
444
  type: "tool_call";
401
445
  toolCallId: string;
@@ -498,7 +542,7 @@ export declare function isToolCallEventType<TName extends string, TInput extends
498
542
  input: TInput;
499
543
  };
500
544
  /** Union of all event types */
501
- export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | AutoCompactionStartEvent | AutoCompactionEndEvent | AutoRetryStartEvent | AutoRetryEndEvent | TtsrTriggeredEvent | TodoReminderEvent | GoalUpdatedEvent | CredentialDisabledEvent | UserBashEvent | UserPythonEvent | InputEvent | ToolCallEvent | ToolResultEvent;
545
+ export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | AutoCompactionStartEvent | AutoCompactionEndEvent | AutoRetryStartEvent | AutoRetryEndEvent | TtsrTriggeredEvent | TodoReminderEvent | GoalUpdatedEvent | CredentialDisabledEvent | UserBashEvent | UserPythonEvent | InputEvent | ToolCallEvent | ToolResultEvent | ToolApprovalRequestedEvent | ToolApprovalResolvedEvent;
502
546
  export interface ContextEventResult {
503
547
  messages?: AgentMessage[];
504
548
  }
@@ -596,6 +640,8 @@ export interface ExtensionAPI {
596
640
  on(event: "goal_updated", handler: ExtensionHandler<GoalUpdatedEvent>): void;
597
641
  on(event: "credential_disabled", handler: ExtensionHandler<CredentialDisabledEvent>): void;
598
642
  on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
643
+ on(event: "tool_approval_requested", handler: ExtensionHandler<ToolApprovalRequestedEvent>): void;
644
+ on(event: "tool_approval_resolved", handler: ExtensionHandler<ToolApprovalResolvedEvent>): void;
599
645
  on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
600
646
  on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
601
647
  on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
@@ -1,4 +1,5 @@
1
- export type { ReadonlySessionManager, UsageStatistics } from "../../session/session-manager";
1
+ export type { UsageStatistics } from "../../session/session-entries";
2
+ export type { ReadonlySessionManager } from "../../session/session-manager";
2
3
  export * from "./loader";
3
4
  export * from "./runner";
4
5
  export * from "./tool-wrapper";
@@ -13,6 +13,15 @@ import * as path from "node:path";
13
13
  * Exported for tests; production callers use `BUNFS_PACKAGE_ROOT` below.
14
14
  */
15
15
  export declare function __computeBunfsPackageRoot(metaDir: string, pathImpl?: typeof path): string;
16
+ /**
17
+ * Compute the package root for the npm prebuilt `dist/cli.js` bundle.
18
+ *
19
+ * `bundle-dist.ts` defines `process.env.PI_BUNDLED="true"`; after bundling,
20
+ * `import.meta.dir` points at `<package>/dist`. Do not resolve the package via
21
+ * bare `@oh-my-pi/pi-coding-agent` here: from a global install Bun can pick an
22
+ * older cache entry, recreating mixed-runtime plugin loading.
23
+ */
24
+ export declare function __computeBundledSelfPackageRoot(metaDir: string, pathImpl?: typeof path): string;
16
25
  /**
17
26
  * Drop overrides whose targets are missing on disk so they can fall through to
18
27
  * the canonical-resolution path. Exported for the test seam in #2168.
@@ -14,6 +14,17 @@ import type { InstalledPlugin } from "./types";
14
14
  export declare function getEnabledPlugins(cwd: string, opts?: {
15
15
  home?: string;
16
16
  }): Promise<InstalledPlugin[]>;
17
+ /**
18
+ * Declared manifest entries paired with their resolved file path. Returns one
19
+ * record per declared entry — base entries first, then enabled-feature entries
20
+ * — so callers (e.g. install-time validation) can detect manifest entries that
21
+ * point at missing files instead of silently skipping them like
22
+ * {@link resolvePluginPaths} does.
23
+ */
24
+ export declare function resolvePluginManifestEntries(plugin: InstalledPlugin, key: "tools" | "hooks" | "commands" | "extensions"): Array<{
25
+ entry: string;
26
+ resolvedPath: string | null;
27
+ }>;
17
28
  export declare function resolvePluginToolPaths(plugin: InstalledPlugin): string[];
18
29
  export declare function resolvePluginHookPaths(plugin: InstalledPlugin): string[];
19
30
  export declare function resolvePluginCommandPaths(plugin: InstalledPlugin): string[];
@@ -17,7 +17,7 @@ import type { CompactionPreparation, CompactionResult } from "@oh-my-pi/pi-agent
17
17
  import type { ImageContent, TextContent, ToolResultMessage } from "@oh-my-pi/pi-ai";
18
18
  import type { Rule } from "../capability/rule";
19
19
  import type { Goal, GoalModeState } from "../goals/state";
20
- import type { BranchSummaryEntry, CompactionEntry, SessionEntry } from "../session/session-manager";
20
+ import type { BranchSummaryEntry, CompactionEntry, SessionEntry } from "../session/session-entries";
21
21
  import type { TodoItem } from "../tools/todo";
22
22
  /** Fired on initial session load */
23
23
  export interface SessionStartEvent {
@@ -33,6 +33,16 @@ export declare function getActiveSkills(): readonly Skill[];
33
33
  export declare function setActiveSkills(value: readonly Skill[]): void;
34
34
  /** Reset the active skill snapshot. Test-only. */
35
35
  export declare function resetActiveSkillsForTests(): void;
36
+ /**
37
+ * Whether `name` is already claimed by an active authored (non-managed) skill.
38
+ *
39
+ * Managed (auto-learn) skills resolve dead-last in discovery, so an authored
40
+ * skill of the same name always wins (see `loadSkills`) and a managed skill
41
+ * written under an authored name is silently dropped — it never surfaces.
42
+ * `manage_skill` create consults this to refuse the write up front instead of
43
+ * reporting a false "Created" for a skill that can never appear.
44
+ */
45
+ export declare function isNameClaimedByAuthoredSkill(name: string): boolean;
36
46
  export interface LoadSkillsFromDirOptions {
37
47
  /** Directory to scan for skills */
38
48
  dir: string;