@oh-my-pi/pi-coding-agent 15.5.13 → 15.6.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 (192) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/types/cli/classify-install-target.d.ts +0 -10
  3. package/dist/types/cli/initial-message.d.ts +1 -1
  4. package/dist/types/cli/tiny-models-cli.d.ts +9 -0
  5. package/dist/types/commands/tiny-models.d.ts +22 -0
  6. package/dist/types/commit/analysis/conventional.d.ts +1 -1
  7. package/dist/types/commit/analysis/summary.d.ts +1 -1
  8. package/dist/types/commit/changelog/generate.d.ts +1 -1
  9. package/dist/types/commit/changelog/index.d.ts +2 -2
  10. package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
  11. package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
  12. package/dist/types/config/model-id-affixes.d.ts +10 -0
  13. package/dist/types/config/model-registry.d.ts +1 -1
  14. package/dist/types/config/models-config-schema.d.ts +2 -0
  15. package/dist/types/config/settings-schema.d.ts +233 -17
  16. package/dist/types/discovery/helpers.d.ts +1 -1
  17. package/dist/types/discovery/substitute-plugin-root.d.ts +0 -4
  18. package/dist/types/eval/__tests__/llm-bridge.test.d.ts +1 -0
  19. package/dist/types/eval/js/shared/rewrite-imports.d.ts +16 -1
  20. package/dist/types/eval/llm-bridge.d.ts +25 -0
  21. package/dist/types/export/html/template.generated.d.ts +1 -1
  22. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +15 -0
  23. package/dist/types/internal-urls/agent-protocol.d.ts +2 -1
  24. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -1
  25. package/dist/types/internal-urls/local-protocol.d.ts +2 -1
  26. package/dist/types/internal-urls/memory-protocol.d.ts +2 -1
  27. package/dist/types/internal-urls/omp-protocol.d.ts +2 -1
  28. package/dist/types/internal-urls/router.d.ts +8 -1
  29. package/dist/types/internal-urls/rule-protocol.d.ts +2 -1
  30. package/dist/types/internal-urls/skill-protocol.d.ts +2 -1
  31. package/dist/types/internal-urls/types.d.ts +26 -0
  32. package/dist/types/memory-backend/index.d.ts +1 -0
  33. package/dist/types/memory-backend/resolve.d.ts +2 -1
  34. package/dist/types/memory-backend/types.d.ts +7 -1
  35. package/dist/types/mnemosyne/backend.d.ts +4 -0
  36. package/dist/types/mnemosyne/config.d.ts +29 -0
  37. package/dist/types/mnemosyne/index.d.ts +3 -0
  38. package/dist/types/mnemosyne/state.d.ts +72 -0
  39. package/dist/types/modes/components/custom-editor.d.ts +2 -3
  40. package/dist/types/modes/components/hook-selector.d.ts +27 -0
  41. package/dist/types/modes/components/index.d.ts +1 -0
  42. package/dist/types/modes/components/status-line/context-thresholds.d.ts +6 -0
  43. package/dist/types/modes/components/tiny-title-download-progress.d.ts +11 -0
  44. package/dist/types/modes/components/welcome.d.ts +1 -0
  45. package/dist/types/modes/controllers/extension-ui-controller.d.ts +4 -1
  46. package/dist/types/modes/gradient-highlight.d.ts +23 -0
  47. package/dist/types/modes/interactive-mode.d.ts +4 -2
  48. package/dist/types/modes/internal-url-autocomplete.d.ts +43 -0
  49. package/dist/types/modes/orchestrate.d.ts +10 -0
  50. package/dist/types/modes/theme/defaults/index.d.ts +8406 -8406
  51. package/dist/types/modes/theme/theme.d.ts +2 -1
  52. package/dist/types/modes/ultrathink.d.ts +3 -3
  53. package/dist/types/modes/utils/keybinding-matchers.d.ts +5 -0
  54. package/dist/types/sdk.d.ts +3 -0
  55. package/dist/types/session/agent-session.d.ts +35 -0
  56. package/dist/types/system-prompt.d.ts +2 -0
  57. package/dist/types/task/executor.d.ts +2 -0
  58. package/dist/types/task/render.d.ts +5 -1
  59. package/dist/types/tiny/models.d.ts +185 -0
  60. package/dist/types/tiny/text.d.ts +4 -0
  61. package/dist/types/tiny/title-client.d.ts +24 -0
  62. package/dist/types/tiny/title-protocol.d.ts +74 -0
  63. package/dist/types/tiny/worker.d.ts +2 -0
  64. package/dist/types/tools/bash.d.ts +3 -1
  65. package/dist/types/tools/index.d.ts +7 -4
  66. package/dist/types/tools/memory-edit.d.ts +40 -0
  67. package/dist/types/tools/{hindsight-recall.d.ts → memory-recall.d.ts} +6 -6
  68. package/dist/types/tools/{hindsight-reflect.d.ts → memory-reflect.d.ts} +6 -6
  69. package/dist/types/tools/memory-render.d.ts +60 -0
  70. package/dist/types/tools/{hindsight-retain.d.ts → memory-retain.d.ts} +6 -6
  71. package/dist/types/tools/todo-write.d.ts +8 -0
  72. package/dist/types/tools/tool-result.d.ts +2 -0
  73. package/dist/types/utils/title-generator.d.ts +3 -0
  74. package/package.json +18 -14
  75. package/scripts/build-binary.ts +1 -0
  76. package/src/cli/tiny-models-cli.ts +127 -0
  77. package/src/cli-commands.ts +1 -0
  78. package/src/cli.ts +8 -8
  79. package/src/commands/tiny-models.ts +36 -0
  80. package/src/config/model-equivalence.ts +43 -2
  81. package/src/config/model-id-affixes.ts +64 -0
  82. package/src/config/model-registry.ts +166 -8
  83. package/src/config/models-config-schema.ts +1 -1
  84. package/src/config/settings-schema.ts +206 -14
  85. package/src/edit/hashline/diff.ts +5 -7
  86. package/src/eval/__tests__/llm-bridge.test.ts +297 -0
  87. package/src/eval/__tests__/shared-executors.test.ts +36 -0
  88. package/src/eval/js/shared/local-module-loader.ts +13 -1
  89. package/src/eval/js/shared/prelude.txt +8 -0
  90. package/src/eval/js/shared/rewrite-imports.ts +31 -26
  91. package/src/eval/js/tool-bridge.ts +4 -0
  92. package/src/eval/llm-bridge.ts +181 -0
  93. package/src/eval/py/prelude.py +52 -31
  94. package/src/export/html/template.generated.ts +1 -1
  95. package/src/export/html/template.js +0 -13
  96. package/src/extensibility/plugins/legacy-pi-compat.ts +60 -23
  97. package/src/internal-urls/agent-protocol.ts +18 -1
  98. package/src/internal-urls/artifact-protocol.ts +19 -1
  99. package/src/internal-urls/docs-index.generated.ts +5 -4
  100. package/src/internal-urls/local-protocol.ts +14 -1
  101. package/src/internal-urls/memory-protocol.ts +6 -1
  102. package/src/internal-urls/omp-protocol.ts +5 -1
  103. package/src/internal-urls/router.ts +20 -1
  104. package/src/internal-urls/rule-protocol.ts +8 -1
  105. package/src/internal-urls/skill-protocol.ts +8 -1
  106. package/src/internal-urls/types.ts +27 -0
  107. package/src/lsp/render.ts +1 -1
  108. package/src/main.ts +4 -0
  109. package/src/mcp/oauth-flow.ts +2 -2
  110. package/src/memory-backend/index.ts +1 -0
  111. package/src/memory-backend/resolve.ts +4 -1
  112. package/src/memory-backend/types.ts +8 -1
  113. package/src/mnemosyne/backend.ts +374 -0
  114. package/src/mnemosyne/config.ts +160 -0
  115. package/src/mnemosyne/index.ts +3 -0
  116. package/src/mnemosyne/state.ts +548 -0
  117. package/src/modes/acp/acp-agent.ts +11 -6
  118. package/src/modes/components/agent-dashboard.ts +4 -4
  119. package/src/modes/components/custom-editor.ts +3 -2
  120. package/src/modes/components/diff.ts +2 -2
  121. package/src/modes/components/extensions/extension-list.ts +3 -2
  122. package/src/modes/components/footer.ts +5 -6
  123. package/src/modes/components/history-search.ts +3 -3
  124. package/src/modes/components/hook-selector.ts +94 -8
  125. package/src/modes/components/index.ts +1 -0
  126. package/src/modes/components/mcp-add-wizard.ts +3 -3
  127. package/src/modes/components/model-selector.ts +124 -26
  128. package/src/modes/components/oauth-selector.ts +3 -3
  129. package/src/modes/components/session-observer-overlay.ts +19 -13
  130. package/src/modes/components/session-selector.ts +3 -3
  131. package/src/modes/components/settings-defs.ts +7 -0
  132. package/src/modes/components/status-line/context-thresholds.ts +11 -0
  133. package/src/modes/components/status-line/presets.ts +1 -0
  134. package/src/modes/components/status-line/segments.ts +25 -2
  135. package/src/modes/components/tiny-title-download-progress.ts +90 -0
  136. package/src/modes/components/tips.txt +12 -0
  137. package/src/modes/components/tool-execution.ts +67 -3
  138. package/src/modes/components/tree-selector.ts +3 -3
  139. package/src/modes/components/user-message-selector.ts +3 -3
  140. package/src/modes/components/welcome.ts +55 -1
  141. package/src/modes/controllers/command-controller.ts +16 -1
  142. package/src/modes/controllers/extension-ui-controller.ts +3 -1
  143. package/src/modes/controllers/input-controller.ts +57 -0
  144. package/src/modes/gradient-highlight.ts +70 -0
  145. package/src/modes/interactive-mode.ts +80 -196
  146. package/src/modes/internal-url-autocomplete.ts +143 -0
  147. package/src/modes/orchestrate.ts +36 -0
  148. package/src/modes/prompt-action-autocomplete.ts +12 -0
  149. package/src/modes/theme/theme.ts +7 -0
  150. package/src/modes/ultrathink.ts +9 -53
  151. package/src/modes/utils/keybinding-matchers.ts +11 -0
  152. package/src/prompts/system/memory-consolidation-system.md +8 -0
  153. package/src/prompts/system/memory-extraction-system.md +26 -0
  154. package/src/prompts/{commands/orchestrate.md → system/orchestrate-notice.md} +5 -16
  155. package/src/prompts/system/system-prompt.md +2 -0
  156. package/src/prompts/system/tiny-title-system.md +8 -0
  157. package/src/prompts/tools/eval.md +2 -0
  158. package/src/prompts/tools/memory-edit.md +8 -0
  159. package/src/prompts/tools/task.md +4 -7
  160. package/src/sdk.ts +8 -6
  161. package/src/session/agent-session.ts +147 -44
  162. package/src/session/session-manager.ts +47 -0
  163. package/src/slash-commands/builtin-registry.ts +10 -1
  164. package/src/system-prompt.ts +4 -0
  165. package/src/task/commands.ts +1 -5
  166. package/src/task/executor.ts +8 -0
  167. package/src/task/index.ts +2 -0
  168. package/src/task/render.ts +69 -26
  169. package/src/tiny/models.ts +217 -0
  170. package/src/tiny/text.ts +19 -0
  171. package/src/tiny/title-client.ts +340 -0
  172. package/src/tiny/title-protocol.ts +51 -0
  173. package/src/tiny/worker.ts +523 -0
  174. package/src/tools/bash.ts +58 -16
  175. package/src/tools/browser/tab-worker.ts +1 -1
  176. package/src/tools/eval.ts +24 -48
  177. package/src/tools/index.ts +17 -15
  178. package/src/tools/memory-edit.ts +59 -0
  179. package/src/tools/memory-recall.ts +100 -0
  180. package/src/tools/memory-reflect.ts +88 -0
  181. package/src/tools/memory-render.ts +185 -0
  182. package/src/tools/memory-retain.ts +91 -0
  183. package/src/tools/renderers.ts +4 -2
  184. package/src/tools/todo-write.ts +128 -29
  185. package/src/tools/tool-result.ts +8 -0
  186. package/src/utils/title-generator.ts +115 -13
  187. package/dist/types/tools/calculator.d.ts +0 -77
  188. package/src/prompts/tools/calculator.md +0 -10
  189. package/src/tools/calculator.ts +0 -541
  190. package/src/tools/hindsight-recall.ts +0 -69
  191. package/src/tools/hindsight-reflect.ts +0 -58
  192. package/src/tools/hindsight-retain.ts +0 -57
@@ -0,0 +1,160 @@
1
+ import * as path from "node:path";
2
+ import type { MnemosyneOptions } from "@oh-my-pi/pi-mnemosyne";
3
+ import { getMemoriesDir } from "@oh-my-pi/pi-utils";
4
+ import type { Settings } from "../config/settings";
5
+ import * as git from "../utils/git";
6
+
7
+ export type MnemosyneLlmMode = "none" | "smol" | "remote";
8
+
9
+ export type MnemosyneScoping = "global" | "per-project" | "per-project-tagged";
10
+
11
+ export type MnemosyneProviderOptions = Pick<
12
+ MnemosyneOptions,
13
+ "noEmbeddings" | "embeddingModel" | "embeddingApiUrl" | "embeddingApiKey" | "llm"
14
+ >;
15
+
16
+ export interface MnemosyneBackendConfig {
17
+ dbPath: string;
18
+ baseBank?: string;
19
+ bank: string;
20
+ globalBank?: string;
21
+ retainBank?: string;
22
+ recallBanks?: readonly string[];
23
+ scoping?: MnemosyneScoping;
24
+ autoRecall: boolean;
25
+ autoRetain: boolean;
26
+ retainEveryNTurns: number;
27
+ recallLimit: number;
28
+ recallContextTurns: number;
29
+ recallMaxQueryChars: number;
30
+ injectionTokenLimit: number;
31
+ debug: boolean;
32
+ providerOptions: MnemosyneProviderOptions;
33
+ llmMode: MnemosyneLlmMode;
34
+ llmBaseUrl?: string;
35
+ llmApiKey?: string;
36
+ llmModel?: string;
37
+ }
38
+
39
+ export function loadMnemosyneConfig(settings: Settings, agentDir: string): MnemosyneBackendConfig {
40
+ const configuredDbPath = settings.get("mnemosyne.dbPath");
41
+ const cwd = settings.getCwd();
42
+ const scoping = settings.get("mnemosyne.scoping");
43
+ const scope = resolveBankScope(settings.get("mnemosyne.bank"), cwd, scoping);
44
+ const llmMode = settings.get("mnemosyne.llmMode");
45
+ return {
46
+ dbPath: configuredDbPath ?? path.join(getMemoriesDir(agentDir), "mnemosyne", "mnemosyne.db"),
47
+ baseBank: scope.baseBank,
48
+ bank: scope.bank,
49
+ globalBank: scope.globalBank,
50
+ retainBank: scope.retainBank,
51
+ recallBanks: scope.recallBanks,
52
+ scoping,
53
+ autoRecall: settings.get("mnemosyne.autoRecall"),
54
+ autoRetain: settings.get("mnemosyne.autoRetain"),
55
+ retainEveryNTurns: Math.max(1, Math.floor(settings.get("mnemosyne.retainEveryNTurns"))),
56
+ recallLimit: Math.max(1, Math.floor(settings.get("mnemosyne.recallLimit"))),
57
+ recallContextTurns: Math.max(1, Math.floor(settings.get("mnemosyne.recallContextTurns"))),
58
+ recallMaxQueryChars: Math.max(256, Math.floor(settings.get("mnemosyne.recallMaxQueryChars"))),
59
+ injectionTokenLimit: Math.max(256, Math.floor(settings.get("mnemosyne.injectionTokenLimit"))),
60
+ debug: settings.get("mnemosyne.debug"),
61
+ providerOptions: {
62
+ noEmbeddings: settings.get("mnemosyne.noEmbeddings"),
63
+ embeddingModel: settings.get("mnemosyne.embeddingModel"),
64
+ embeddingApiUrl: settings.get("mnemosyne.embeddingApiUrl"),
65
+ embeddingApiKey: settings.get("mnemosyne.embeddingApiKey"),
66
+ llm:
67
+ llmMode === "remote"
68
+ ? {
69
+ baseUrl: settings.get("mnemosyne.llmBaseUrl"),
70
+ apiKey: settings.get("mnemosyne.llmApiKey"),
71
+ model: settings.get("mnemosyne.llmModel"),
72
+ }
73
+ : false,
74
+ },
75
+ llmMode,
76
+ llmBaseUrl: settings.get("mnemosyne.llmBaseUrl"),
77
+ llmApiKey: settings.get("mnemosyne.llmApiKey"),
78
+ llmModel: settings.get("mnemosyne.llmModel"),
79
+ };
80
+ }
81
+
82
+ const DEFAULT_SHARED_BANK = "default";
83
+
84
+ interface MnemosyneBankScope {
85
+ baseBank: string;
86
+ bank: string;
87
+ globalBank: string;
88
+ retainBank: string;
89
+ recallBanks: readonly string[];
90
+ }
91
+
92
+ // Mnemosyne does not have built-in tag-filtered recall, so `per-project-tagged`
93
+ // maps to a project-local write bank plus a shared recall-visible bank.
94
+ function resolveBankScope(configured: string | undefined, cwd: string, scoping: MnemosyneScoping): MnemosyneBankScope {
95
+ const project = projectBank(configured, cwd);
96
+ const globalBank = sharedBank(configured);
97
+ switch (scoping) {
98
+ case "global":
99
+ return {
100
+ baseBank: globalBank,
101
+ bank: globalBank,
102
+ globalBank,
103
+ retainBank: globalBank,
104
+ recallBanks: [globalBank],
105
+ };
106
+ case "per-project":
107
+ return {
108
+ baseBank: globalBank,
109
+ bank: project,
110
+ globalBank,
111
+ retainBank: project,
112
+ recallBanks: [project],
113
+ };
114
+ case "per-project-tagged":
115
+ return {
116
+ baseBank: globalBank,
117
+ bank: project,
118
+ globalBank,
119
+ retainBank: project,
120
+ recallBanks: project === globalBank ? [project] : [project, globalBank],
121
+ };
122
+ }
123
+ }
124
+
125
+ function sharedBank(configured: string | undefined): string {
126
+ return sanitizeBankName(configured) ?? DEFAULT_SHARED_BANK;
127
+ }
128
+
129
+ function projectBank(configured: string | undefined, cwd: string): string {
130
+ const projectRoot = git.repo.resolveSync(cwd)?.repoRoot ?? path.resolve(cwd);
131
+ const project = projectBankSegment(projectRoot);
132
+ const base = sanitizeBankName(configured);
133
+ return limitBankName(base ? `${base}-${project}` : project);
134
+ }
135
+
136
+ function projectBankSegment(projectRoot: string): string {
137
+ const project = sanitizeBankName(path.basename(projectRoot)) ?? "default";
138
+ return limitBankName(`${project}-${Bun.hash(path.resolve(projectRoot)).toString(36)}`);
139
+ }
140
+
141
+ function sanitizeBankName(value: string | undefined): string | undefined {
142
+ const raw = value?.trim();
143
+ if (!raw) return undefined;
144
+ const sanitized = raw.replace(/[^a-zA-Z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
145
+ return sanitized ? limitBankName(sanitized) : undefined;
146
+ }
147
+
148
+ function limitBankName(name: string): string {
149
+ if (name.length <= 64) return name;
150
+ const hash = Bun.hash(name).toString(36);
151
+ const prefixLength = Math.max(1, 63 - hash.length);
152
+ const prefix = name.slice(0, prefixLength).replace(/-+$/g, "") || "bank";
153
+ return `${prefix}-${hash}`;
154
+ }
155
+
156
+ export function truncateApproxTokens(text: string, tokenLimit: number): string {
157
+ const maxChars = Math.max(0, tokenLimit * 4);
158
+ if (text.length <= maxChars) return text;
159
+ return `${text.slice(0, Math.max(0, maxChars - 1)).trimEnd()}…`;
160
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./backend";
2
+ export * from "./config";
3
+ export * from "./state";