@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.
- package/CHANGELOG.md +77 -0
- package/dist/types/cli/classify-install-target.d.ts +0 -10
- package/dist/types/cli/initial-message.d.ts +1 -1
- package/dist/types/cli/tiny-models-cli.d.ts +9 -0
- package/dist/types/commands/tiny-models.d.ts +22 -0
- package/dist/types/commit/analysis/conventional.d.ts +1 -1
- package/dist/types/commit/analysis/summary.d.ts +1 -1
- package/dist/types/commit/changelog/generate.d.ts +1 -1
- package/dist/types/commit/changelog/index.d.ts +2 -2
- package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
- package/dist/types/config/model-id-affixes.d.ts +10 -0
- package/dist/types/config/model-registry.d.ts +1 -1
- package/dist/types/config/models-config-schema.d.ts +2 -0
- package/dist/types/config/settings-schema.d.ts +233 -17
- package/dist/types/discovery/helpers.d.ts +1 -1
- package/dist/types/discovery/substitute-plugin-root.d.ts +0 -4
- package/dist/types/eval/__tests__/llm-bridge.test.d.ts +1 -0
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +16 -1
- package/dist/types/eval/llm-bridge.d.ts +25 -0
- package/dist/types/export/html/template.generated.d.ts +1 -1
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +15 -0
- package/dist/types/internal-urls/agent-protocol.d.ts +2 -1
- package/dist/types/internal-urls/artifact-protocol.d.ts +2 -1
- package/dist/types/internal-urls/local-protocol.d.ts +2 -1
- package/dist/types/internal-urls/memory-protocol.d.ts +2 -1
- package/dist/types/internal-urls/omp-protocol.d.ts +2 -1
- package/dist/types/internal-urls/router.d.ts +8 -1
- package/dist/types/internal-urls/rule-protocol.d.ts +2 -1
- package/dist/types/internal-urls/skill-protocol.d.ts +2 -1
- package/dist/types/internal-urls/types.d.ts +26 -0
- package/dist/types/memory-backend/index.d.ts +1 -0
- package/dist/types/memory-backend/resolve.d.ts +2 -1
- package/dist/types/memory-backend/types.d.ts +7 -1
- package/dist/types/mnemosyne/backend.d.ts +4 -0
- package/dist/types/mnemosyne/config.d.ts +29 -0
- package/dist/types/mnemosyne/index.d.ts +3 -0
- package/dist/types/mnemosyne/state.d.ts +72 -0
- package/dist/types/modes/components/custom-editor.d.ts +2 -3
- package/dist/types/modes/components/hook-selector.d.ts +27 -0
- package/dist/types/modes/components/index.d.ts +1 -0
- package/dist/types/modes/components/status-line/context-thresholds.d.ts +6 -0
- package/dist/types/modes/components/tiny-title-download-progress.d.ts +11 -0
- package/dist/types/modes/components/welcome.d.ts +1 -0
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +4 -1
- package/dist/types/modes/gradient-highlight.d.ts +23 -0
- package/dist/types/modes/interactive-mode.d.ts +4 -2
- package/dist/types/modes/internal-url-autocomplete.d.ts +43 -0
- package/dist/types/modes/orchestrate.d.ts +10 -0
- package/dist/types/modes/theme/defaults/index.d.ts +8406 -8406
- package/dist/types/modes/theme/theme.d.ts +2 -1
- package/dist/types/modes/ultrathink.d.ts +3 -3
- package/dist/types/modes/utils/keybinding-matchers.d.ts +5 -0
- package/dist/types/sdk.d.ts +3 -0
- package/dist/types/session/agent-session.d.ts +35 -0
- package/dist/types/system-prompt.d.ts +2 -0
- package/dist/types/task/executor.d.ts +2 -0
- package/dist/types/task/render.d.ts +5 -1
- package/dist/types/tiny/models.d.ts +185 -0
- package/dist/types/tiny/text.d.ts +4 -0
- package/dist/types/tiny/title-client.d.ts +24 -0
- package/dist/types/tiny/title-protocol.d.ts +74 -0
- package/dist/types/tiny/worker.d.ts +2 -0
- package/dist/types/tools/bash.d.ts +3 -1
- package/dist/types/tools/index.d.ts +7 -4
- package/dist/types/tools/memory-edit.d.ts +40 -0
- package/dist/types/tools/{hindsight-recall.d.ts → memory-recall.d.ts} +6 -6
- package/dist/types/tools/{hindsight-reflect.d.ts → memory-reflect.d.ts} +6 -6
- package/dist/types/tools/memory-render.d.ts +60 -0
- package/dist/types/tools/{hindsight-retain.d.ts → memory-retain.d.ts} +6 -6
- package/dist/types/tools/todo-write.d.ts +8 -0
- package/dist/types/tools/tool-result.d.ts +2 -0
- package/dist/types/utils/title-generator.d.ts +3 -0
- package/package.json +18 -14
- package/scripts/build-binary.ts +1 -0
- package/src/cli/tiny-models-cli.ts +127 -0
- package/src/cli-commands.ts +1 -0
- package/src/cli.ts +8 -8
- package/src/commands/tiny-models.ts +36 -0
- package/src/config/model-equivalence.ts +43 -2
- package/src/config/model-id-affixes.ts +64 -0
- package/src/config/model-registry.ts +166 -8
- package/src/config/models-config-schema.ts +1 -1
- package/src/config/settings-schema.ts +206 -14
- package/src/edit/hashline/diff.ts +5 -7
- package/src/eval/__tests__/llm-bridge.test.ts +297 -0
- package/src/eval/__tests__/shared-executors.test.ts +36 -0
- package/src/eval/js/shared/local-module-loader.ts +13 -1
- package/src/eval/js/shared/prelude.txt +8 -0
- package/src/eval/js/shared/rewrite-imports.ts +31 -26
- package/src/eval/js/tool-bridge.ts +4 -0
- package/src/eval/llm-bridge.ts +181 -0
- package/src/eval/py/prelude.py +52 -31
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +0 -13
- package/src/extensibility/plugins/legacy-pi-compat.ts +60 -23
- package/src/internal-urls/agent-protocol.ts +18 -1
- package/src/internal-urls/artifact-protocol.ts +19 -1
- package/src/internal-urls/docs-index.generated.ts +5 -4
- package/src/internal-urls/local-protocol.ts +14 -1
- package/src/internal-urls/memory-protocol.ts +6 -1
- package/src/internal-urls/omp-protocol.ts +5 -1
- package/src/internal-urls/router.ts +20 -1
- package/src/internal-urls/rule-protocol.ts +8 -1
- package/src/internal-urls/skill-protocol.ts +8 -1
- package/src/internal-urls/types.ts +27 -0
- package/src/lsp/render.ts +1 -1
- package/src/main.ts +4 -0
- package/src/mcp/oauth-flow.ts +2 -2
- package/src/memory-backend/index.ts +1 -0
- package/src/memory-backend/resolve.ts +4 -1
- package/src/memory-backend/types.ts +8 -1
- package/src/mnemosyne/backend.ts +374 -0
- package/src/mnemosyne/config.ts +160 -0
- package/src/mnemosyne/index.ts +3 -0
- package/src/mnemosyne/state.ts +548 -0
- package/src/modes/acp/acp-agent.ts +11 -6
- package/src/modes/components/agent-dashboard.ts +4 -4
- package/src/modes/components/custom-editor.ts +3 -2
- package/src/modes/components/diff.ts +2 -2
- package/src/modes/components/extensions/extension-list.ts +3 -2
- package/src/modes/components/footer.ts +5 -6
- package/src/modes/components/history-search.ts +3 -3
- package/src/modes/components/hook-selector.ts +94 -8
- package/src/modes/components/index.ts +1 -0
- package/src/modes/components/mcp-add-wizard.ts +3 -3
- package/src/modes/components/model-selector.ts +124 -26
- package/src/modes/components/oauth-selector.ts +3 -3
- package/src/modes/components/session-observer-overlay.ts +19 -13
- package/src/modes/components/session-selector.ts +3 -3
- package/src/modes/components/settings-defs.ts +7 -0
- package/src/modes/components/status-line/context-thresholds.ts +11 -0
- package/src/modes/components/status-line/presets.ts +1 -0
- package/src/modes/components/status-line/segments.ts +25 -2
- package/src/modes/components/tiny-title-download-progress.ts +90 -0
- package/src/modes/components/tips.txt +12 -0
- package/src/modes/components/tool-execution.ts +67 -3
- package/src/modes/components/tree-selector.ts +3 -3
- package/src/modes/components/user-message-selector.ts +3 -3
- package/src/modes/components/welcome.ts +55 -1
- package/src/modes/controllers/command-controller.ts +16 -1
- package/src/modes/controllers/extension-ui-controller.ts +3 -1
- package/src/modes/controllers/input-controller.ts +57 -0
- package/src/modes/gradient-highlight.ts +70 -0
- package/src/modes/interactive-mode.ts +80 -196
- package/src/modes/internal-url-autocomplete.ts +143 -0
- package/src/modes/orchestrate.ts +36 -0
- package/src/modes/prompt-action-autocomplete.ts +12 -0
- package/src/modes/theme/theme.ts +7 -0
- package/src/modes/ultrathink.ts +9 -53
- package/src/modes/utils/keybinding-matchers.ts +11 -0
- package/src/prompts/system/memory-consolidation-system.md +8 -0
- package/src/prompts/system/memory-extraction-system.md +26 -0
- package/src/prompts/{commands/orchestrate.md → system/orchestrate-notice.md} +5 -16
- package/src/prompts/system/system-prompt.md +2 -0
- package/src/prompts/system/tiny-title-system.md +8 -0
- package/src/prompts/tools/eval.md +2 -0
- package/src/prompts/tools/memory-edit.md +8 -0
- package/src/prompts/tools/task.md +4 -7
- package/src/sdk.ts +8 -6
- package/src/session/agent-session.ts +147 -44
- package/src/session/session-manager.ts +47 -0
- package/src/slash-commands/builtin-registry.ts +10 -1
- package/src/system-prompt.ts +4 -0
- package/src/task/commands.ts +1 -5
- package/src/task/executor.ts +8 -0
- package/src/task/index.ts +2 -0
- package/src/task/render.ts +69 -26
- package/src/tiny/models.ts +217 -0
- package/src/tiny/text.ts +19 -0
- package/src/tiny/title-client.ts +340 -0
- package/src/tiny/title-protocol.ts +51 -0
- package/src/tiny/worker.ts +523 -0
- package/src/tools/bash.ts +58 -16
- package/src/tools/browser/tab-worker.ts +1 -1
- package/src/tools/eval.ts +24 -48
- package/src/tools/index.ts +17 -15
- package/src/tools/memory-edit.ts +59 -0
- package/src/tools/memory-recall.ts +100 -0
- package/src/tools/memory-reflect.ts +88 -0
- package/src/tools/memory-render.ts +185 -0
- package/src/tools/memory-retain.ts +91 -0
- package/src/tools/renderers.ts +4 -2
- package/src/tools/todo-write.ts +128 -29
- package/src/tools/tool-result.ts +8 -0
- package/src/utils/title-generator.ts +115 -13
- package/dist/types/tools/calculator.d.ts +0 -77
- package/src/prompts/tools/calculator.md +0 -10
- package/src/tools/calculator.ts +0 -541
- package/src/tools/hindsight-recall.ts +0 -69
- package/src/tools/hindsight-reflect.ts +0 -58
- 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
|
+
}
|