@oh-my-pi/pi-coding-agent 15.5.15 → 15.7.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 (274) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/types/capability/rule-buckets.d.ts +30 -0
  3. package/dist/types/capability/rule.d.ts +7 -0
  4. package/dist/types/cli/classify-install-target.d.ts +0 -10
  5. package/dist/types/cli/completion-gen.d.ts +80 -0
  6. package/dist/types/cli/initial-message.d.ts +1 -1
  7. package/dist/types/cli/tiny-models-cli.d.ts +9 -0
  8. package/dist/types/commands/complete.d.ts +6 -0
  9. package/dist/types/commands/completions.d.ts +13 -0
  10. package/dist/types/commands/setup.d.ts +10 -1
  11. package/dist/types/commands/tiny-models.d.ts +22 -0
  12. package/dist/types/commit/analysis/conventional.d.ts +1 -1
  13. package/dist/types/commit/analysis/summary.d.ts +1 -1
  14. package/dist/types/commit/changelog/generate.d.ts +1 -1
  15. package/dist/types/commit/changelog/index.d.ts +2 -2
  16. package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
  17. package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
  18. package/dist/types/config/model-id-affixes.d.ts +10 -0
  19. package/dist/types/config/settings-schema.d.ts +402 -17
  20. package/dist/types/discovery/builtin-defaults.d.ts +1 -0
  21. package/dist/types/discovery/builtin-rules/index.d.ts +7 -0
  22. package/dist/types/discovery/helpers.d.ts +1 -1
  23. package/dist/types/discovery/index.d.ts +1 -0
  24. package/dist/types/discovery/substitute-plugin-root.d.ts +0 -4
  25. package/dist/types/edit/hashline/block-resolver.d.ts +9 -0
  26. package/dist/types/edit/hashline/index.d.ts +1 -0
  27. package/dist/types/eval/js/shared/rewrite-imports.d.ts +16 -1
  28. package/dist/types/eval/py/kernel.d.ts +3 -0
  29. package/dist/types/eval/py/runtime.d.ts +11 -1
  30. package/dist/types/export/html/template.generated.d.ts +1 -1
  31. package/dist/types/internal-urls/agent-protocol.d.ts +2 -1
  32. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -1
  33. package/dist/types/internal-urls/local-protocol.d.ts +2 -1
  34. package/dist/types/internal-urls/memory-protocol.d.ts +2 -1
  35. package/dist/types/internal-urls/omp-protocol.d.ts +2 -1
  36. package/dist/types/internal-urls/router.d.ts +8 -1
  37. package/dist/types/internal-urls/rule-protocol.d.ts +2 -1
  38. package/dist/types/internal-urls/skill-protocol.d.ts +2 -1
  39. package/dist/types/internal-urls/types.d.ts +26 -0
  40. package/dist/types/main.d.ts +1 -0
  41. package/dist/types/memory-backend/index.d.ts +1 -0
  42. package/dist/types/memory-backend/resolve.d.ts +2 -1
  43. package/dist/types/memory-backend/types.d.ts +7 -1
  44. package/dist/types/mnemosyne/backend.d.ts +4 -0
  45. package/dist/types/mnemosyne/config.d.ts +29 -0
  46. package/dist/types/mnemosyne/index.d.ts +3 -0
  47. package/dist/types/mnemosyne/state.d.ts +72 -0
  48. package/dist/types/modes/components/custom-editor.d.ts +2 -3
  49. package/dist/types/modes/components/hook-selector.d.ts +27 -0
  50. package/dist/types/modes/components/index.d.ts +2 -0
  51. package/dist/types/modes/components/segment-track.d.ts +22 -0
  52. package/dist/types/modes/components/status-line/context-thresholds.d.ts +6 -0
  53. package/dist/types/modes/components/tiny-title-download-progress.d.ts +11 -0
  54. package/dist/types/modes/components/welcome.d.ts +22 -0
  55. package/dist/types/modes/controllers/extension-ui-controller.d.ts +4 -1
  56. package/dist/types/modes/gradient-highlight.d.ts +23 -0
  57. package/dist/types/modes/interactive-mode.d.ts +7 -4
  58. package/dist/types/modes/internal-url-autocomplete.d.ts +43 -0
  59. package/dist/types/modes/orchestrate.d.ts +10 -0
  60. package/dist/types/modes/setup-wizard/index.d.ts +16 -0
  61. package/dist/types/modes/setup-wizard/scenes/glyph.d.ts +2 -0
  62. package/dist/types/modes/setup-wizard/scenes/outro.d.ts +2 -0
  63. package/dist/types/modes/setup-wizard/scenes/providers.d.ts +2 -0
  64. package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +19 -0
  65. package/dist/types/modes/setup-wizard/scenes/splash.d.ts +11 -0
  66. package/dist/types/modes/setup-wizard/scenes/theme.d.ts +2 -0
  67. package/dist/types/modes/setup-wizard/scenes/types.d.ts +43 -0
  68. package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +19 -0
  69. package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +14 -0
  70. package/dist/types/modes/theme/defaults/index.d.ts +8406 -8406
  71. package/dist/types/modes/theme/shimmer.d.ts +2 -0
  72. package/dist/types/modes/theme/theme.d.ts +11 -0
  73. package/dist/types/modes/types.d.ts +5 -1
  74. package/dist/types/modes/ultrathink.d.ts +3 -3
  75. package/dist/types/modes/utils/keybinding-matchers.d.ts +5 -0
  76. package/dist/types/sdk.d.ts +3 -0
  77. package/dist/types/session/agent-session.d.ts +33 -0
  78. package/dist/types/system-prompt.d.ts +2 -0
  79. package/dist/types/task/executor.d.ts +2 -0
  80. package/dist/types/task/render.d.ts +5 -1
  81. package/dist/types/tiny/device.d.ts +78 -0
  82. package/dist/types/tiny/dtype.d.ts +85 -0
  83. package/dist/types/tiny/models.d.ts +185 -0
  84. package/dist/types/tiny/text.d.ts +19 -0
  85. package/dist/types/tiny/title-client.d.ts +32 -0
  86. package/dist/types/tiny/title-protocol.d.ts +74 -0
  87. package/dist/types/tiny/worker.d.ts +2 -0
  88. package/dist/types/tools/bash.d.ts +3 -2
  89. package/dist/types/tools/eval.d.ts +1 -1
  90. package/dist/types/tools/index.d.ts +7 -4
  91. package/dist/types/tools/memory-edit.d.ts +40 -0
  92. package/dist/types/tools/{hindsight-recall.d.ts → memory-recall.d.ts} +6 -6
  93. package/dist/types/tools/{hindsight-reflect.d.ts → memory-reflect.d.ts} +6 -6
  94. package/dist/types/tools/memory-render.d.ts +60 -0
  95. package/dist/types/tools/{hindsight-retain.d.ts → memory-retain.d.ts} +6 -6
  96. package/dist/types/tools/todo-write.d.ts +8 -0
  97. package/dist/types/tools/tool-result.d.ts +2 -0
  98. package/dist/types/tui/code-cell.d.ts +2 -0
  99. package/dist/types/tui/output-block.d.ts +17 -0
  100. package/dist/types/utils/title-generator.d.ts +3 -0
  101. package/package.json +18 -14
  102. package/scripts/build-binary.ts +1 -0
  103. package/src/capability/rule-buckets.ts +64 -0
  104. package/src/capability/rule.ts +8 -0
  105. package/src/cli/completion-gen.ts +550 -0
  106. package/src/cli/setup-cli.ts +5 -3
  107. package/src/cli/tiny-models-cli.ts +127 -0
  108. package/src/cli-commands.ts +3 -0
  109. package/src/cli.ts +9 -15
  110. package/src/commands/complete.ts +66 -0
  111. package/src/commands/completions.ts +60 -0
  112. package/src/commands/setup.ts +29 -4
  113. package/src/commands/tiny-models.ts +36 -0
  114. package/src/config/model-equivalence.ts +43 -2
  115. package/src/config/model-id-affixes.ts +64 -0
  116. package/src/config/model-registry.ts +84 -10
  117. package/src/config/settings-schema.ts +275 -15
  118. package/src/discovery/builtin-defaults.ts +39 -0
  119. package/src/discovery/builtin-rules/index.ts +48 -0
  120. package/src/discovery/builtin-rules/rs-box-leak.md +48 -0
  121. package/src/discovery/builtin-rules/rs-future-prelude.md +23 -0
  122. package/src/discovery/builtin-rules/rs-lazylock.md +51 -0
  123. package/src/discovery/builtin-rules/rs-match-ergonomics.md +67 -0
  124. package/src/discovery/builtin-rules/rs-parking-lot.md +44 -0
  125. package/src/discovery/builtin-rules/rs-result-type.md +19 -0
  126. package/src/discovery/builtin-rules/ts-bare-catch.md +38 -0
  127. package/src/discovery/builtin-rules/ts-import-type.md +42 -0
  128. package/src/discovery/builtin-rules/ts-no-any.md +56 -0
  129. package/src/discovery/builtin-rules/ts-no-dynamic-import.md +39 -0
  130. package/src/discovery/builtin-rules/ts-no-return-type.md +45 -0
  131. package/src/discovery/builtin-rules/ts-no-tiny-functions.md +50 -0
  132. package/src/discovery/builtin-rules/ts-promise-with-resolvers.md +65 -0
  133. package/src/discovery/builtin-rules/ts-set-map.md +28 -0
  134. package/src/discovery/index.ts +1 -0
  135. package/src/edit/hashline/block-resolver.ts +14 -0
  136. package/src/edit/hashline/diff.ts +9 -8
  137. package/src/edit/hashline/execute.ts +2 -1
  138. package/src/edit/hashline/index.ts +1 -0
  139. package/src/eval/__tests__/shared-executors.test.ts +36 -0
  140. package/src/eval/js/shared/local-module-loader.ts +13 -1
  141. package/src/eval/js/shared/rewrite-imports.ts +31 -26
  142. package/src/eval/py/kernel.ts +37 -15
  143. package/src/eval/py/runtime.ts +57 -28
  144. package/src/export/html/template.generated.ts +1 -1
  145. package/src/export/html/template.js +0 -12
  146. package/src/export/ttsr.ts +2 -0
  147. package/src/internal-urls/agent-protocol.ts +18 -1
  148. package/src/internal-urls/artifact-protocol.ts +19 -1
  149. package/src/internal-urls/docs-index.generated.ts +8 -7
  150. package/src/internal-urls/local-protocol.ts +14 -1
  151. package/src/internal-urls/memory-protocol.ts +6 -1
  152. package/src/internal-urls/omp-protocol.ts +5 -1
  153. package/src/internal-urls/router.ts +20 -1
  154. package/src/internal-urls/rule-protocol.ts +8 -1
  155. package/src/internal-urls/skill-protocol.ts +8 -1
  156. package/src/internal-urls/types.ts +27 -0
  157. package/src/lsp/render.ts +1 -1
  158. package/src/main.ts +18 -1
  159. package/src/mcp/oauth-flow.ts +2 -2
  160. package/src/memory-backend/index.ts +1 -0
  161. package/src/memory-backend/resolve.ts +4 -1
  162. package/src/memory-backend/types.ts +8 -1
  163. package/src/mnemosyne/backend.ts +374 -0
  164. package/src/mnemosyne/config.ts +160 -0
  165. package/src/mnemosyne/index.ts +3 -0
  166. package/src/mnemosyne/state.ts +548 -0
  167. package/src/modes/acp/acp-agent.ts +11 -6
  168. package/src/modes/components/agent-dashboard.ts +4 -4
  169. package/src/modes/components/custom-editor.ts +3 -2
  170. package/src/modes/components/diff.ts +2 -2
  171. package/src/modes/components/extensions/extension-list.ts +3 -2
  172. package/src/modes/components/footer.ts +5 -6
  173. package/src/modes/components/history-search.ts +3 -3
  174. package/src/modes/components/hook-selector.ts +92 -8
  175. package/src/modes/components/index.ts +2 -0
  176. package/src/modes/components/mcp-add-wizard.ts +3 -3
  177. package/src/modes/components/model-selector.ts +5 -4
  178. package/src/modes/components/oauth-selector.ts +3 -3
  179. package/src/modes/components/segment-track.ts +52 -0
  180. package/src/modes/components/session-observer-overlay.ts +19 -13
  181. package/src/modes/components/session-selector.ts +3 -3
  182. package/src/modes/components/settings-defs.ts +7 -0
  183. package/src/modes/components/status-line/context-thresholds.ts +11 -0
  184. package/src/modes/components/status-line/segments.ts +2 -2
  185. package/src/modes/components/tiny-title-download-progress.ts +90 -0
  186. package/src/modes/components/tips.txt +13 -0
  187. package/src/modes/components/tool-execution.ts +72 -4
  188. package/src/modes/components/tree-selector.ts +3 -3
  189. package/src/modes/components/user-message-selector.ts +3 -3
  190. package/src/modes/components/welcome.ts +102 -43
  191. package/src/modes/controllers/command-controller.ts +16 -1
  192. package/src/modes/controllers/extension-ui-controller.ts +3 -1
  193. package/src/modes/controllers/input-controller.ts +69 -21
  194. package/src/modes/gradient-highlight.ts +70 -0
  195. package/src/modes/interactive-mode.ts +75 -114
  196. package/src/modes/internal-url-autocomplete.ts +143 -0
  197. package/src/modes/orchestrate.ts +36 -0
  198. package/src/modes/prompt-action-autocomplete.ts +12 -0
  199. package/src/modes/setup-wizard/index.ts +88 -0
  200. package/src/modes/setup-wizard/scenes/glyph.ts +96 -0
  201. package/src/modes/setup-wizard/scenes/outro.ts +35 -0
  202. package/src/modes/setup-wizard/scenes/providers.ts +69 -0
  203. package/src/modes/setup-wizard/scenes/sign-in.ts +193 -0
  204. package/src/modes/setup-wizard/scenes/splash.ts +201 -0
  205. package/src/modes/setup-wizard/scenes/theme.ts +299 -0
  206. package/src/modes/setup-wizard/scenes/types.ts +48 -0
  207. package/src/modes/setup-wizard/scenes/web-search.ts +128 -0
  208. package/src/modes/setup-wizard/wizard-overlay.ts +275 -0
  209. package/src/modes/theme/shimmer.ts +5 -0
  210. package/src/modes/theme/theme.ts +44 -20
  211. package/src/modes/types.ts +6 -1
  212. package/src/modes/ultrathink.ts +9 -53
  213. package/src/modes/utils/keybinding-matchers.ts +11 -0
  214. package/src/prompts/system/memory-consolidation-system.md +8 -0
  215. package/src/prompts/system/memory-extraction-system.md +26 -0
  216. package/src/prompts/{commands/orchestrate.md → system/orchestrate-notice.md} +6 -17
  217. package/src/prompts/system/system-prompt.md +2 -0
  218. package/src/prompts/system/tiny-title-system.md +8 -0
  219. package/src/prompts/tools/memory-edit.md +8 -0
  220. package/src/prompts/tools/read.md +4 -0
  221. package/src/prompts/tools/task.md +4 -7
  222. package/src/sdk.ts +13 -21
  223. package/src/session/agent-session.ts +128 -44
  224. package/src/slash-commands/builtin-registry.ts +18 -1
  225. package/src/system-prompt.ts +4 -0
  226. package/src/task/commands.ts +1 -5
  227. package/src/task/executor.ts +8 -0
  228. package/src/task/index.ts +2 -0
  229. package/src/task/render.ts +69 -26
  230. package/src/tiny/device.ts +117 -0
  231. package/src/tiny/dtype.ts +101 -0
  232. package/src/tiny/models.ts +218 -0
  233. package/src/tiny/text.ts +54 -0
  234. package/src/tiny/title-client.ts +395 -0
  235. package/src/tiny/title-protocol.ts +51 -0
  236. package/src/tiny/worker.ts +587 -0
  237. package/src/tools/bash.ts +74 -29
  238. package/src/tools/browser/tab-worker.ts +1 -1
  239. package/src/tools/eval.ts +9 -4
  240. package/src/tools/index.ts +17 -22
  241. package/src/tools/memory-edit.ts +59 -0
  242. package/src/tools/memory-recall.ts +100 -0
  243. package/src/tools/memory-reflect.ts +88 -0
  244. package/src/tools/memory-render.ts +185 -0
  245. package/src/tools/memory-retain.ts +91 -0
  246. package/src/tools/read.ts +1 -0
  247. package/src/tools/renderers.ts +4 -2
  248. package/src/tools/todo-write.ts +128 -29
  249. package/src/tools/tool-result.ts +8 -0
  250. package/src/tui/code-cell.ts +6 -1
  251. package/src/tui/output-block.ts +199 -38
  252. package/src/utils/title-generator.ts +115 -13
  253. package/dist/types/tools/recipe/index.d.ts +0 -46
  254. package/dist/types/tools/recipe/render.d.ts +0 -36
  255. package/dist/types/tools/recipe/runner.d.ts +0 -60
  256. package/dist/types/tools/recipe/runners/cargo.d.ts +0 -16
  257. package/dist/types/tools/recipe/runners/index.d.ts +0 -2
  258. package/dist/types/tools/recipe/runners/just.d.ts +0 -2
  259. package/dist/types/tools/recipe/runners/make.d.ts +0 -2
  260. package/dist/types/tools/recipe/runners/pkg.d.ts +0 -2
  261. package/dist/types/tools/recipe/runners/task.d.ts +0 -2
  262. package/src/prompts/tools/recipe.md +0 -16
  263. package/src/tools/hindsight-recall.ts +0 -69
  264. package/src/tools/hindsight-reflect.ts +0 -58
  265. package/src/tools/hindsight-retain.ts +0 -57
  266. package/src/tools/recipe/index.ts +0 -81
  267. package/src/tools/recipe/render.ts +0 -19
  268. package/src/tools/recipe/runner.ts +0 -219
  269. package/src/tools/recipe/runners/cargo.ts +0 -131
  270. package/src/tools/recipe/runners/index.ts +0 -8
  271. package/src/tools/recipe/runners/just.ts +0 -73
  272. package/src/tools/recipe/runners/make.ts +0 -101
  273. package/src/tools/recipe/runners/pkg.ts +0 -167
  274. package/src/tools/recipe/runners/task.ts +0 -72
@@ -1,4 +1,4 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, UrlCompletion } from "./types";
2
2
  /**
3
3
  * Handler for agent:// URLs.
4
4
  *
@@ -9,4 +9,5 @@ export declare class AgentProtocolHandler implements ProtocolHandler {
9
9
  readonly scheme = "agent";
10
10
  readonly immutable = true;
11
11
  resolve(url: InternalUrl): Promise<InternalResource>;
12
+ complete(): Promise<UrlCompletion[]>;
12
13
  }
@@ -1,6 +1,7 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, UrlCompletion } from "./types";
2
2
  export declare class ArtifactProtocolHandler implements ProtocolHandler {
3
3
  readonly scheme = "artifact";
4
4
  readonly immutable = true;
5
5
  resolve(url: InternalUrl): Promise<InternalResource>;
6
+ complete(): Promise<UrlCompletion[]>;
6
7
  }
@@ -1,4 +1,4 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, UrlCompletion } from "./types";
2
2
  export interface LocalProtocolOptions {
3
3
  getArtifactsDir?: () => string | null;
4
4
  getSessionId?: () => string | null;
@@ -36,4 +36,5 @@ export declare class LocalProtocolHandler implements ProtocolHandler {
36
36
  */
37
37
  static resolveOptions(): LocalProtocolOptions | undefined;
38
38
  resolve(url: InternalUrl): Promise<InternalResource>;
39
+ complete(): Promise<UrlCompletion[]>;
39
40
  }
@@ -1,4 +1,4 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, UrlCompletion } from "./types";
2
2
  /**
3
3
  * Snapshot of memory roots for every registered session, deduped.
4
4
  * Each session has its own cwd (possibly a worktree), so subagents and main
@@ -20,4 +20,5 @@ export declare class MemoryProtocolHandler implements ProtocolHandler {
20
20
  readonly scheme = "memory";
21
21
  readonly immutable = true;
22
22
  resolve(url: InternalUrl): Promise<InternalResource>;
23
+ complete(): Promise<UrlCompletion[]>;
23
24
  }
@@ -1,4 +1,4 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, UrlCompletion } from "./types";
2
2
  /**
3
3
  * Handler for omp:// URLs.
4
4
  *
@@ -9,4 +9,5 @@ export declare class OmpProtocolHandler implements ProtocolHandler {
9
9
  readonly scheme = "omp";
10
10
  readonly immutable = true;
11
11
  resolve(url: InternalUrl): Promise<InternalResource>;
12
+ complete(): Promise<UrlCompletion[]>;
12
13
  }
@@ -1,4 +1,4 @@
1
- import type { InternalResource, ProtocolHandler, ResolveContext } from "./types";
1
+ import type { InternalResource, ProtocolHandler, ResolveContext, UrlCompletion } from "./types";
2
2
  export declare class InternalUrlRouter {
3
3
  #private;
4
4
  constructor();
@@ -10,5 +10,12 @@ export declare class InternalUrlRouter {
10
10
  unregister(scheme: string): boolean;
11
11
  getHandler(scheme: string): ProtocolHandler | undefined;
12
12
  canHandle(input: string): boolean;
13
+ /** Schemes whose handler supports host/path autocomplete. */
14
+ completionSchemes(): string[];
15
+ /**
16
+ * Candidate completions for the host/path portion of `scheme://<query>`.
17
+ * Returns `null` when the scheme is unknown or does not support completion.
18
+ */
19
+ complete(scheme: string, query: string): Promise<UrlCompletion[] | null>;
13
20
  resolve(input: string, context?: ResolveContext): Promise<InternalResource>;
14
21
  }
@@ -1,6 +1,7 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, UrlCompletion } from "./types";
2
2
  export declare class RuleProtocolHandler implements ProtocolHandler {
3
3
  readonly scheme = "rule";
4
4
  readonly immutable = true;
5
5
  resolve(url: InternalUrl): Promise<InternalResource>;
6
+ complete(): Promise<UrlCompletion[]>;
6
7
  }
@@ -1,4 +1,4 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, UrlCompletion } from "./types";
2
2
  /**
3
3
  * Validate that a path is safe (no traversal, no absolute paths).
4
4
  */
@@ -10,4 +10,5 @@ export declare class SkillProtocolHandler implements ProtocolHandler {
10
10
  readonly scheme = "skill";
11
11
  readonly immutable = true;
12
12
  resolve(url: InternalUrl): Promise<InternalResource>;
13
+ complete(): Promise<UrlCompletion[]>;
13
14
  }
@@ -30,6 +30,21 @@ export interface InternalResource {
30
30
  */
31
31
  immutable?: boolean;
32
32
  }
33
+ /**
34
+ * A single autocomplete candidate for the host/path portion of a `scheme://`
35
+ * URL, produced by {@link ProtocolHandler.complete}.
36
+ */
37
+ export interface UrlCompletion {
38
+ /**
39
+ * The text that follows `scheme://` for this candidate (e.g. `humanizer`,
40
+ * `subdir/data.json`, `root`). The caller renders it as `scheme://<value>`.
41
+ */
42
+ value: string;
43
+ /** Human-facing label for the dropdown. Defaults to {@link value}. */
44
+ label?: string;
45
+ /** Optional one-line description shown beside the candidate. */
46
+ description?: string;
47
+ }
33
48
  /**
34
49
  * Parsed internal URL with preserved host casing.
35
50
  */
@@ -102,4 +117,15 @@ export interface ProtocolHandler {
102
117
  * surfaces a clear "not writable" error when invoked against them.
103
118
  */
104
119
  write?(url: InternalUrl, content: string, context?: WriteContext): Promise<void>;
120
+ /**
121
+ * Optional autocomplete hook. Returns candidate completions for the
122
+ * host/path portion of a `scheme://` URL while the user composes a prompt.
123
+ *
124
+ * Implementations **MUST** be fast and local — this runs on every keystroke.
125
+ * Schemes backed by network or external CLIs (issue://, pr://, vault://,
126
+ * mcp://) omit it. The caller fuzzy-filters the returned set against the
127
+ * partially typed `query`, so handlers return their full (bounded) candidate
128
+ * list; `query` is provided only so handlers can scope expensive enumeration.
129
+ */
130
+ complete?(query: string): Promise<UrlCompletion[]>;
105
131
  }
@@ -44,6 +44,7 @@ interface RunRootCommandDependencies {
44
44
  discoverAuthStorage?: typeof discoverAuthStorage;
45
45
  runAcpMode?: typeof runAcpMode;
46
46
  settings?: Settings;
47
+ forceSetupWizard?: boolean;
47
48
  }
48
49
  export declare function runRootCommand(parsed: Args, rawArgs: string[], deps?: RunRootCommandDependencies): Promise<void>;
49
50
  export declare function main(args: string[]): Promise<void>;
@@ -1,3 +1,4 @@
1
+ export * from "../mnemosyne";
1
2
  export * from "./local-backend";
2
3
  export * from "./off-backend";
3
4
  export * from "./resolve";
@@ -6,7 +6,8 @@ import type { MemoryBackend } from "./types";
6
6
  * Selection rules (single source of truth — every memory consumer routes
7
7
  * through this):
8
8
  * - `memory.backend === "hindsight"` → Hindsight remote memory
9
- * - `memory.backend === "local"` → local pipeline
9
+ * - `memory.backend === "mnemosyne"` → local Mnemosyne SQLite memory
10
+ * - `memory.backend === "local"` → local rollout summary pipeline
10
11
  * - everything else → no-op
11
12
  *
12
13
  * `memories.enabled` remains accepted only as a legacy migration input. Once
@@ -9,8 +9,9 @@ import type { AgentMessage } from "@oh-my-pi/pi-agent-core";
9
9
  import type { ModelRegistry } from "../config/model-registry";
10
10
  import type { Settings } from "../config/settings";
11
11
  import type { HindsightSessionState } from "../hindsight/state";
12
+ import type { MnemosyneSessionState } from "../mnemosyne/state";
12
13
  import type { AgentSession } from "../session/agent-session";
13
- export type MemoryBackendId = "off" | "local" | "hindsight";
14
+ export type MemoryBackendId = "off" | "local" | "hindsight" | "mnemosyne";
14
15
  export interface MemoryBackendStartOptions {
15
16
  session: AgentSession;
16
17
  settings: Settings;
@@ -18,6 +19,7 @@ export interface MemoryBackendStartOptions {
18
19
  agentDir: string;
19
20
  taskDepth: number;
20
21
  parentHindsightSessionState?: HindsightSessionState;
22
+ parentMnemosyneSessionState?: MnemosyneSessionState;
21
23
  }
22
24
  export interface MemoryBackend {
23
25
  readonly id: MemoryBackendId;
@@ -38,6 +40,10 @@ export interface MemoryBackend {
38
40
  clear(agentDir: string, cwd: string, session?: AgentSession): Promise<void>;
39
41
  /** Force consolidation/retain to happen now (slash `/memory enqueue`). */
40
42
  enqueue(agentDir: string, cwd: string, session?: AgentSession): Promise<void>;
43
+ /** Render backend-specific memory statistics as markdown (`/memory stats`). */
44
+ stats?(agentDir: string, cwd: string, session?: AgentSession): Promise<string | undefined>;
45
+ /** Render backend-specific memory diagnostics as markdown (`/memory diagnose`). */
46
+ diagnose?(agentDir: string, cwd: string, session?: AgentSession): Promise<string | undefined>;
41
47
  /**
42
48
  * Optional hook to inject a backend-specific block into the current turn's
43
49
  * system prompt before the agent starts generating.
@@ -0,0 +1,4 @@
1
+ import type { MemoryBackend } from "../memory-backend/types";
2
+ import type { AgentSession } from "../session/agent-session";
3
+ export declare const mnemosyneBackend: MemoryBackend;
4
+ export declare function getMnemosyneDbDirForTests(session: AgentSession): string | undefined;
@@ -0,0 +1,29 @@
1
+ import type { MnemosyneOptions } from "@oh-my-pi/pi-mnemosyne";
2
+ import type { Settings } from "../config/settings";
3
+ export type MnemosyneLlmMode = "none" | "smol" | "remote";
4
+ export type MnemosyneScoping = "global" | "per-project" | "per-project-tagged";
5
+ export type MnemosyneProviderOptions = Pick<MnemosyneOptions, "noEmbeddings" | "embeddingModel" | "embeddingApiUrl" | "embeddingApiKey" | "llm">;
6
+ export interface MnemosyneBackendConfig {
7
+ dbPath: string;
8
+ baseBank?: string;
9
+ bank: string;
10
+ globalBank?: string;
11
+ retainBank?: string;
12
+ recallBanks?: readonly string[];
13
+ scoping?: MnemosyneScoping;
14
+ autoRecall: boolean;
15
+ autoRetain: boolean;
16
+ retainEveryNTurns: number;
17
+ recallLimit: number;
18
+ recallContextTurns: number;
19
+ recallMaxQueryChars: number;
20
+ injectionTokenLimit: number;
21
+ debug: boolean;
22
+ providerOptions: MnemosyneProviderOptions;
23
+ llmMode: MnemosyneLlmMode;
24
+ llmBaseUrl?: string;
25
+ llmApiKey?: string;
26
+ llmModel?: string;
27
+ }
28
+ export declare function loadMnemosyneConfig(settings: Settings, agentDir: string): MnemosyneBackendConfig;
29
+ export declare function truncateApproxTokens(text: string, tokenLimit: number): string;
@@ -0,0 +1,3 @@
1
+ export * from "./backend";
2
+ export * from "./config";
3
+ export * from "./state";
@@ -0,0 +1,72 @@
1
+ import type { AgentMessage } from "@oh-my-pi/pi-agent-core";
2
+ import { Mnemosyne, type RecallResult } from "@oh-my-pi/pi-mnemosyne";
3
+ import type { AgentSession } from "../session/agent-session";
4
+ import type { MnemosyneBackendConfig } from "./config";
5
+ interface MnemosyneScopedMemory {
6
+ bank: string;
7
+ memory: Mnemosyne;
8
+ }
9
+ type MnemosyneRememberInput = Parameters<Mnemosyne["remember"]>[0];
10
+ type MnemosyneRememberOptions = Parameters<Mnemosyne["remember"]>[1];
11
+ export type MnemosyneMemoryEditOperation = "update" | "forget" | "invalidate";
12
+ export interface MnemosyneMemoryEditOptions {
13
+ content?: string;
14
+ importance?: number;
15
+ replacementId?: string;
16
+ }
17
+ export interface MnemosyneMemoryEditResult {
18
+ status: "updated" | "deleted" | "invalidated" | "not_found";
19
+ bank?: string;
20
+ store?: "working" | "episodic";
21
+ }
22
+ export declare function getMnemosyneSessionState(session: AgentSession | undefined): MnemosyneSessionState | undefined;
23
+ export declare function setMnemosyneSessionState(session: AgentSession, state: MnemosyneSessionState | undefined): MnemosyneSessionState | undefined;
24
+ export interface MnemosyneSessionStateOptions {
25
+ sessionId: string;
26
+ config: MnemosyneBackendConfig;
27
+ session: AgentSession;
28
+ aliasOf?: MnemosyneSessionState;
29
+ lastRetainedTurn?: number;
30
+ hasRecalledForFirstTurn?: boolean;
31
+ }
32
+ export declare class MnemosyneSessionState {
33
+ sessionId: string;
34
+ readonly config: MnemosyneBackendConfig;
35
+ readonly session: AgentSession;
36
+ readonly memory: Mnemosyne;
37
+ readonly globalMemory?: Mnemosyne;
38
+ readonly aliasOf?: MnemosyneSessionState;
39
+ private readonly scoped;
40
+ lastRetainedTurn: number;
41
+ hasRecalledForFirstTurn: boolean;
42
+ lastRecallSnippet?: string;
43
+ unsubscribe?: () => void;
44
+ constructor(options: MnemosyneSessionStateOptions);
45
+ setSessionId(sessionId: string): void;
46
+ resetConversationTracking(): void;
47
+ getScopedRecallTargets(): readonly MnemosyneScopedMemory[];
48
+ getScopedRetainTarget(): MnemosyneScopedMemory;
49
+ editScopedMemory(op: MnemosyneMemoryEditOperation, id: string, options?: MnemosyneMemoryEditOptions): MnemosyneMemoryEditResult;
50
+ formatScopedRecallWithIds(results: readonly RecallResult[]): string;
51
+ collectScopedRecallResults(query: string): RecallResult[];
52
+ recallResultsScoped(query: string): RecallResult[];
53
+ formatScopedRecallContext(results: readonly RecallResult[], format?: "bullet" | "json"): string | undefined;
54
+ formatContextScoped(results: readonly RecallResult[], format?: "bullet" | "json"): string;
55
+ rememberInScope(memory: MnemosyneRememberInput, options?: MnemosyneRememberOptions): string | undefined;
56
+ rememberScoped(memory: MnemosyneRememberInput, options?: MnemosyneRememberOptions): string | undefined;
57
+ recallForContext(query: string): Promise<string | undefined>;
58
+ beforeAgentStartPrompt(promptText: string): Promise<string | undefined>;
59
+ recallForCompaction(messages: AgentMessage[]): Promise<string | undefined>;
60
+ maybeRetainOnAgentEnd(_messages: AgentMessage[]): Promise<void>;
61
+ forceRetainCurrentSession(): Promise<void>;
62
+ retainMessages(messages: Array<{
63
+ role: string;
64
+ content: string;
65
+ }>, sourceId: string): Promise<void>;
66
+ attachSessionListeners(): void;
67
+ maybeRecallOnAgentStart(): Promise<void>;
68
+ dispose(): void;
69
+ }
70
+ export declare function getMnemosyneScopedDbPaths(config: MnemosyneBackendConfig): readonly string[];
71
+ export declare function getMnemosyneScopedBanks(config: MnemosyneBackendConfig): readonly string[];
72
+ export {};
@@ -1,14 +1,13 @@
1
1
  import { Editor, type KeyId } from "@oh-my-pi/pi-tui";
2
2
  import type { AppKeybinding } from "../../config/keybindings";
3
- import { highlightUltrathink } from "../ultrathink";
4
3
  type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.thinking.cycle" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.tools.expand" | "app.thinking.toggle" | "app.editor.external" | "app.history.search" | "app.message.dequeue" | "app.clipboard.pasteImage" | "app.clipboard.copyPrompt">;
5
4
  /**
6
5
  * Custom editor that handles configurable app-level shortcuts for coding-agent.
7
6
  */
8
7
  export declare class CustomEditor extends Editor {
9
8
  #private;
10
- /** Rainbow-highlight the "ultrathink" keyword as the user types it. */
11
- decorateText: typeof highlightUltrathink;
9
+ /** Gradient-highlight the "ultrathink" / "orchestrate" keywords as the user types them. */
10
+ decorateText: (text: string) => string;
12
11
  onEscape?: () => void;
13
12
  shouldBypassAutocompleteOnEscape?: () => boolean;
14
13
  onClear?: () => void;
@@ -3,6 +3,32 @@
3
3
  * Displays a list of string options with keyboard navigation.
4
4
  */
5
5
  import { Container, type TUI } from "@oh-my-pi/pi-tui";
6
+ import { type ThemeColor } from "../../modes/theme/theme";
7
+ /** One segment of a {@link HookSelectorSlider} — a label, its accent color, and
8
+ * an optional detail line (e.g. the resolved model name) shown beneath the
9
+ * track while the segment is active. */
10
+ export interface HookSelectorSliderSegment {
11
+ label: string;
12
+ /** Theme color for the segment label; defaults to `accent`. */
13
+ color?: ThemeColor;
14
+ /** Secondary line rendered under the track when this segment is selected. */
15
+ detail?: string;
16
+ }
17
+ /**
18
+ * A horizontal left/right selector rendered above the option list. Unlike the
19
+ * up/down option cursor, the slider is moved with the left/right arrows from
20
+ * any list position, letting the caller capture an orthogonal choice (e.g. the
21
+ * model tier to continue execution with) alongside the selected option.
22
+ */
23
+ export interface HookSelectorSlider {
24
+ /** Dim caption rendered before the slider track (e.g. "continue with"). */
25
+ caption?: string;
26
+ segments: HookSelectorSliderSegment[];
27
+ /** Initially highlighted segment index. */
28
+ index: number;
29
+ /** Invoked with the new index whenever the slider moves. */
30
+ onChange?: (index: number) => void;
31
+ }
6
32
  export interface HookSelectorOptions {
7
33
  tui?: TUI;
8
34
  timeout?: number;
@@ -14,6 +40,7 @@ export interface HookSelectorOptions {
14
40
  onRight?: () => void;
15
41
  onExternalEditor?: () => void;
16
42
  helpText?: string;
43
+ slider?: HookSelectorSlider;
17
44
  }
18
45
  export declare class HookSelectorComponent extends Container {
19
46
  #private;
@@ -19,12 +19,14 @@ export * from "./model-selector";
19
19
  export * from "./oauth-selector";
20
20
  export * from "./queue-mode-selector";
21
21
  export * from "./read-tool-group";
22
+ export * from "./segment-track";
22
23
  export * from "./session-selector";
23
24
  export * from "./settings-selector";
24
25
  export * from "./show-images-selector";
25
26
  export * from "./status-line";
26
27
  export * from "./theme-selector";
27
28
  export * from "./thinking-selector";
29
+ export * from "./tiny-title-download-progress";
28
30
  export * from "./todo-reminder";
29
31
  export * from "./tool-execution";
30
32
  export * from "./tree-selector";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared renderer for a horizontal row of colored "segments" styled after the
3
+ * status line: each segment shows in its own accent, the active one is filled
4
+ * as a powerline chip (its accent as the background, a luminance-matched label,
5
+ * flanked by triangle caps) and the rest are plain colored labels joined by a
6
+ * thin separator.
7
+ *
8
+ * Used by the plan-mode model-tier slider ({@link HookSelectorComponent}) and
9
+ * the ctrl+p role-cycle status so both surfaces read identically.
10
+ */
11
+ import { type ThemeColor } from "../theme/theme";
12
+ export interface TrackSegment {
13
+ label: string;
14
+ /** Theme color for the segment; defaults to `accent`. */
15
+ color?: ThemeColor;
16
+ }
17
+ /**
18
+ * Render `segments` as a colored chip track with `activeIndex` filled. Returns
19
+ * a single line of styled text with no surrounding caption or arrows — callers
20
+ * frame it as they need.
21
+ */
22
+ export declare function renderSegmentTrack(segments: TrackSegment[], activeIndex: number): string;
@@ -1,4 +1,10 @@
1
1
  import type { ThemeColor } from "../../../modes/theme/theme";
2
2
  export type ContextUsageLevel = "normal" | "warning" | "purple" | "error";
3
3
  export declare function getContextUsageLevel(contextPercent: number, contextWindow: number): ContextUsageLevel;
4
+ /**
5
+ * Format context usage as `<percent>%/<window>` (e.g. `5.1%/1M`), matching the
6
+ * status line's context gauge so subagent and footer renderers stay in sync.
7
+ * A `null`/`undefined` percent (unknown, e.g. right after compaction) renders as `?`.
8
+ */
9
+ export declare function formatContextUsage(contextPercent: number | null | undefined, contextWindow: number): string;
4
10
  export declare function getContextUsageThemeColor(level: ContextUsageLevel): ThemeColor;
@@ -0,0 +1,11 @@
1
+ import { type Component } from "@oh-my-pi/pi-tui";
2
+ import { type TinyTitleLocalModelKey } from "../../tiny/models";
3
+ import type { TinyTitleProgressEvent } from "../../tiny/title-protocol";
4
+ export declare class TinyTitleDownloadProgressComponent implements Component {
5
+ #private;
6
+ constructor(modelKey: TinyTitleLocalModelKey);
7
+ update(event: TinyTitleProgressEvent): void;
8
+ isComplete(): boolean;
9
+ invalidate(): void;
10
+ render(width: number): string[];
11
+ }
@@ -1,4 +1,5 @@
1
1
  import { type Component } from "@oh-my-pi/pi-tui";
2
+ export declare function renderWelcomeTip(tip: string, boxWidth: number): string[];
2
3
  export interface RecentSession {
3
4
  name: string;
4
5
  timeAgo: string;
@@ -31,3 +32,24 @@ export declare class WelcomeComponent implements Component {
31
32
  setLspServers(servers: LspServerInfo[]): void;
32
33
  render(termWidth: number): string[];
33
34
  }
35
+ export declare const PI_LOGO: string[];
36
+ export interface ShineConfig {
37
+ /** Overall opacity of the shine overlay, in [0, 1]. */
38
+ strength: number;
39
+ /** Center of the shine band along the diagonal, in [0, 1]. */
40
+ pos: number;
41
+ }
42
+ /**
43
+ * Resolve the gradient SGR foreground escape for a normalized position `t`
44
+ * (0..1) along the diagonal, compositing the optional sliding shine highlight.
45
+ * Shared by {@link gradientLogo} and the setup splash so both stay
46
+ * color-identical (truecolor when available, 256-color ramp otherwise).
47
+ */
48
+ export declare function gradientEscape(t: number, shine?: ShineConfig): string;
49
+ /**
50
+ * Apply a multi-stop diagonal gradient (bottom-left → top-right) plus an
51
+ * optional sliding shine band across multi-line art. `phase` (0..1) shifts the
52
+ * gradient along the diagonal, wrapping at 1. When `shine` is provided, a soft
53
+ * white highlight is composited on top, centered at `shine.pos`.
54
+ */
55
+ export declare function gradientLogo(lines: readonly string[], phase?: number, shine?: ShineConfig): string[];
@@ -1,6 +1,7 @@
1
1
  import type { Component, TUI } from "@oh-my-pi/pi-tui";
2
2
  import { KeybindingsManager } from "../../config/keybindings";
3
3
  import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetContent, ExtensionWidgetOptions, TerminalInputHandler } from "../../extensibility/extensions";
4
+ import { type HookSelectorSlider } from "../../modes/components/hook-selector";
4
5
  import { type Theme } from "../../modes/theme/theme";
5
6
  import type { InteractiveModeContext } from "../../modes/types";
6
7
  export declare class ExtensionUiController {
@@ -29,7 +30,9 @@ export declare class ExtensionUiController {
29
30
  /**
30
31
  * Show a selector for hooks.
31
32
  */
32
- showHookSelector(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
33
+ showHookSelector(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions, extra?: {
34
+ slider?: HookSelectorSlider;
35
+ }): Promise<string | undefined>;
33
36
  /**
34
37
  * Hide the hook selector.
35
38
  */
@@ -0,0 +1,23 @@
1
+ /** Declarative spec for {@link createGradientHighlighter}. */
2
+ export interface GradientHighlightSpec {
3
+ /** Cheap, stateless presence probe used to skip the boundary regex on most lines. Must be non-global. */
4
+ probe: RegExp;
5
+ /** Global, word-bounded match regex walked by `.replace`. */
6
+ highlight: RegExp;
7
+ /** Number of color stops swept across the gradient. */
8
+ stops: number;
9
+ /** Maps a normalized position `t` in [0, 1) to an HSL hue in degrees. */
10
+ hue: (t: number) => number;
11
+ /** HSL saturation percentage. Default 90. */
12
+ saturation?: number;
13
+ /** HSL lightness percentage. Default 62. */
14
+ lightness?: number;
15
+ }
16
+ /**
17
+ * Build a stateless highlighter that paints each standalone match of `highlight`
18
+ * with a smooth HSL gradient for editor display. The returned function adds only
19
+ * zero-width SGR escapes — the visible width is unchanged — and returns the input
20
+ * untouched when `probe` does not match. The palette is compiled lazily and
21
+ * memoized per active color mode.
22
+ */
23
+ export declare function createGradientHighlighter(spec: GradientHighlightSpec): (text: string) => string;
@@ -19,13 +19,13 @@ import { CustomEditor } from "./components/custom-editor";
19
19
  import type { EvalExecutionComponent } from "./components/eval-execution";
20
20
  import type { HookEditorComponent } from "./components/hook-editor";
21
21
  import type { HookInputComponent } from "./components/hook-input";
22
- import type { HookSelectorComponent } from "./components/hook-selector";
22
+ import type { HookSelectorComponent, HookSelectorSlider } from "./components/hook-selector";
23
23
  import { StatusLineComponent } from "./components/status-line";
24
24
  import type { ToolExecutionHandle } from "./components/tool-execution";
25
25
  import { type LoopLimitRuntime } from "./loop-limit";
26
26
  import { OAuthManualInputManager } from "./oauth-manual-input";
27
27
  import type { Theme } from "./theme/theme";
28
- import type { CompactionQueuedMessage, InteractiveModeContext, SubmittedUserInput, TodoItem, TodoPhase } from "./types";
28
+ import type { CompactionQueuedMessage, InteractiveModeContext, InteractiveModeInitOptions, SubmittedUserInput, TodoItem, TodoPhase } from "./types";
29
29
  /** Options for creating an InteractiveMode instance (for future API use) */
30
30
  export interface InteractiveModeOptions {
31
31
  /** Providers that were migrated during startup */
@@ -106,7 +106,8 @@ export declare class InteractiveMode implements InteractiveModeContext {
106
106
  readonly lspServers: LspStartupServerInfo[] | undefined;
107
107
  mcpManager?: import("../mcp").MCPManager;
108
108
  constructor(session: AgentSession, version: string, changelogMarkdown?: string | undefined, setToolUIContext?: (uiContext: ExtensionUIContext, hasUI: boolean) => void, lspServers?: LspStartupServerInfo[] | undefined, mcpManager?: import("../mcp").MCPManager, eventBus?: EventBus);
109
- init(): Promise<void>;
109
+ playWelcomeIntro(): void;
110
+ init(options?: InteractiveModeInitOptions): Promise<void>;
110
111
  /** Reload slash commands and autocomplete for the provided working directory. */
111
112
  refreshSlashCommandState(cwd?: string): Promise<void>;
112
113
  getUserInput(): Promise<SubmittedUserInput>;
@@ -248,7 +249,9 @@ export declare class InteractiveMode implements InteractiveModeContext {
248
249
  emitCustomToolSessionEvent(reason: "start" | "switch" | "branch" | "tree" | "shutdown", previousSessionFile?: string): Promise<void>;
249
250
  setHookWidget(key: string, content: ExtensionWidgetContent, options?: ExtensionWidgetOptions): void;
250
251
  setHookStatus(key: string, text: string | undefined): void;
251
- showHookSelector(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
252
+ showHookSelector(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions, extra?: {
253
+ slider?: HookSelectorSlider;
254
+ }): Promise<string | undefined>;
252
255
  hideHookSelector(): void;
253
256
  showHookInput(title: string, placeholder?: string): Promise<string | undefined>;
254
257
  hideHookInput(): void;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Autocomplete for internal-url schemes (skill://, rule://, omp://, local://,
3
+ * memory://, agent://, artifact://) while composing a prompt.
4
+ *
5
+ * Detection here MUST stay in sync with the generic URL-scheme trigger in the
6
+ * TUI editor (`packages/tui/src/components/editor.ts`); the editor fires the
7
+ * popup, this module decides whether there are candidates to show.
8
+ */
9
+ import type { AutocompleteItem } from "@oh-my-pi/pi-tui";
10
+ export interface InternalUrlContext {
11
+ /** Lowercased scheme (e.g. `local`). */
12
+ scheme: string;
13
+ /** Text typed after the slashes so far (host + path); may be empty. */
14
+ query: string;
15
+ /** Exact buffer token from its boundary to the cursor (the completion prefix). */
16
+ token: string;
17
+ }
18
+ /**
19
+ * Detect a completable internal-url token immediately before the cursor.
20
+ * Returns `null` when the text is not a `scheme://` token whose scheme is
21
+ * registered with a completion-capable handler.
22
+ */
23
+ export declare function extractInternalUrlContext(textBeforeCursor: string): InternalUrlContext | null;
24
+ /**
25
+ * Suggestions for the internal-url token ending at the cursor, or `null` when
26
+ * the text is not such a token or no candidate matches the typed query.
27
+ */
28
+ export declare function getInternalUrlSuggestions(textBeforeCursor: string): Promise<{
29
+ items: AutocompleteItem[];
30
+ prefix: string;
31
+ } | null>;
32
+ /** Whether `prefix` (the token a completion was offered for) is an internal-url token. */
33
+ export declare function isInternalUrlPrefix(prefix: string): boolean;
34
+ /**
35
+ * Replace the internal-url token with the selected candidate, appending a
36
+ * trailing space (matching `@` file-reference behavior) so the user can keep
37
+ * typing.
38
+ */
39
+ export declare function applyInternalUrlCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
40
+ lines: string[];
41
+ cursorLine: number;
42
+ cursorCol: number;
43
+ };
@@ -0,0 +1,10 @@
1
+ /** Hidden system notice appended after a user message that mentions "orchestrate". */
2
+ export declare const ORCHESTRATE_NOTICE: string;
3
+ /** Whether `text` contains the standalone keyword "orchestrate" (any case). */
4
+ export declare function containsOrchestrate(text: string): boolean;
5
+ /**
6
+ * Highlight every standalone "orchestrate" in `text` for editor display with a
7
+ * cool teal→violet gradient (hue 150..280), visually distinct from ultrathink's
8
+ * full-spectrum rainbow.
9
+ */
10
+ export declare const highlightOrchestrate: (text: string) => string;
@@ -0,0 +1,16 @@
1
+ import type { Settings } from "../../config/settings";
2
+ import type { InteractiveModeContext } from "../types";
3
+ import type { SetupScene } from "./scenes/types";
4
+ export type { SetupScene, SetupSceneController, SetupSceneHost, SetupSceneResult } from "./scenes/types";
5
+ export declare const ALL_SCENES: readonly [SetupScene, SetupScene, SetupScene];
6
+ export declare const CURRENT_SETUP_VERSION: number;
7
+ export interface SetupSceneSelectionOptions {
8
+ resuming?: boolean;
9
+ isTTY?: boolean;
10
+ skipEnv?: string;
11
+ setupWizardEnabled?: boolean;
12
+ force?: boolean;
13
+ }
14
+ export declare function selectSetupScenes(storedVersion: number, scenes: readonly SetupScene[], ctx?: InteractiveModeContext, options?: SetupSceneSelectionOptions): Promise<SetupScene[]>;
15
+ export declare function markSetupWizardComplete(settings: Settings, version?: number): Promise<void>;
16
+ export declare function runSetupWizard(ctx: InteractiveModeContext, scenes?: readonly SetupScene[]): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { SetupScene } from "./types";
2
+ export declare const glyphSetupScene: SetupScene;
@@ -0,0 +1,2 @@
1
+ export declare const SETUP_OUTRO_MS = 1200;
2
+ export declare function renderSetupOutro(width: number, height: number, elapsedMs: number): string[];
@@ -0,0 +1,2 @@
1
+ import type { SetupScene } from "./types";
2
+ export declare const providersSetupScene: SetupScene;