@prestyj/cli 4.3.161 → 4.3.200
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/dist/cli.d.ts +1 -1
- package/dist/cli.js +112 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +50 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +175 -20
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +6 -1
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +112 -3
- package/dist/core/agents.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +20 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/claude-code-version.d.ts +10 -0
- package/dist/core/claude-code-version.d.ts.map +1 -0
- package/dist/core/claude-code-version.js +106 -0
- package/dist/core/claude-code-version.js.map +1 -0
- package/dist/core/compaction/compactor.d.ts +13 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +20 -1
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +12 -1
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/language-detector.d.ts +32 -0
- package/dist/core/language-detector.d.ts.map +1 -0
- package/dist/core/language-detector.js +191 -0
- package/dist/core/language-detector.js.map +1 -0
- package/dist/core/language-detector.test.d.ts +2 -0
- package/dist/core/language-detector.test.d.ts.map +1 -0
- package/dist/core/language-detector.test.js +109 -0
- package/dist/core/language-detector.test.js.map +1 -0
- package/dist/core/model-registry.d.ts +30 -2
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +41 -26
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-registry.test.d.ts +2 -0
- package/dist/core/model-registry.test.d.ts.map +1 -0
- package/dist/core/model-registry.test.js +19 -0
- package/dist/core/model-registry.test.js.map +1 -0
- package/dist/core/oauth/anthropic.d.ts.map +1 -1
- package/dist/core/oauth/anthropic.js +64 -42
- package/dist/core/oauth/anthropic.js.map +1 -1
- package/dist/core/oauth/openai.js +1 -1
- package/dist/core/oauth/openai.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +569 -96
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.d.ts +2 -0
- package/dist/core/prompt-commands.test.d.ts.map +1 -0
- package/dist/core/prompt-commands.test.js +33 -0
- package/dist/core/prompt-commands.test.js.map +1 -0
- package/dist/core/repomap-context.d.ts +11 -0
- package/dist/core/repomap-context.d.ts.map +1 -0
- package/dist/core/repomap-context.js +68 -0
- package/dist/core/repomap-context.js.map +1 -0
- package/dist/core/repomap-context.test.d.ts +2 -0
- package/dist/core/repomap-context.test.d.ts.map +1 -0
- package/dist/core/repomap-context.test.js +47 -0
- package/dist/core/repomap-context.test.js.map +1 -0
- package/dist/core/repomap.d.ts +74 -0
- package/dist/core/repomap.d.ts.map +1 -0
- package/dist/core/repomap.js +897 -0
- package/dist/core/repomap.js.map +1 -0
- package/dist/core/repomap.test.d.ts +2 -0
- package/dist/core/repomap.test.d.ts.map +1 -0
- package/dist/core/repomap.test.js +444 -0
- package/dist/core/repomap.test.js.map +1 -0
- package/dist/core/session-compaction.d.ts +15 -0
- package/dist/core/session-compaction.d.ts.map +1 -0
- package/dist/core/session-compaction.js +31 -0
- package/dist/core/session-compaction.js.map +1 -0
- package/dist/core/session-compaction.test.d.ts +2 -0
- package/dist/core/session-compaction.test.d.ts.map +1 -0
- package/dist/core/session-compaction.test.js +70 -0
- package/dist/core/session-compaction.test.js.map +1 -0
- package/dist/core/settings-manager.d.ts +3 -5
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +6 -5
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/setup-history.d.ts +13 -0
- package/dist/core/setup-history.d.ts.map +1 -0
- package/dist/core/setup-history.js +71 -0
- package/dist/core/setup-history.js.map +1 -0
- package/dist/core/setup-history.test.d.ts +2 -0
- package/dist/core/setup-history.test.d.ts.map +1 -0
- package/dist/core/setup-history.test.js +74 -0
- package/dist/core/setup-history.test.js.map +1 -0
- package/dist/core/slash-commands.d.ts +2 -0
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +15 -14
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/style-packs/index.d.ts +19 -0
- package/dist/core/style-packs/index.d.ts.map +1 -0
- package/dist/core/style-packs/index.js +69 -0
- package/dist/core/style-packs/index.js.map +1 -0
- package/dist/core/style-packs/packs.d.ts +18 -0
- package/dist/core/style-packs/packs.d.ts.map +1 -0
- package/dist/core/style-packs/packs.js +229 -0
- package/dist/core/style-packs/packs.js.map +1 -0
- package/dist/core/verify-commands.d.ts +35 -0
- package/dist/core/verify-commands.d.ts.map +1 -0
- package/dist/core/verify-commands.js +209 -0
- package/dist/core/verify-commands.js.map +1 -0
- package/dist/core/verify-commands.test.d.ts +2 -0
- package/dist/core/verify-commands.test.d.ts.map +1 -0
- package/dist/core/verify-commands.test.js +85 -0
- package/dist/core/verify-commands.test.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +12 -6
- package/dist/interactive.js.map +1 -1
- package/dist/modes/json-mode.d.ts +7 -0
- package/dist/modes/json-mode.d.ts.map +1 -1
- package/dist/modes/json-mode.js +9 -1
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/system-prompt.d.ts +2 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +116 -92
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.d.ts +2 -0
- package/dist/system-prompt.test.d.ts.map +1 -0
- package/dist/system-prompt.test.js +107 -0
- package/dist/system-prompt.test.js.map +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +1 -0
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit-diff.d.ts +66 -1
- package/dist/tools/edit-diff.d.ts.map +1 -1
- package/dist/tools/edit-diff.js +208 -10
- package/dist/tools/edit-diff.js.map +1 -1
- package/dist/tools/edit-diff.test.js +175 -15
- package/dist/tools/edit-diff.test.js.map +1 -1
- package/dist/tools/edit.d.ts +3 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +190 -44
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +392 -3
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/enter-plan.d.ts.map +1 -1
- package/dist/tools/enter-plan.js +1 -0
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/exit-plan.d.ts.map +1 -1
- package/dist/tools/exit-plan.js +1 -0
- package/dist/tools/exit-plan.js.map +1 -1
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +6 -4
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read.d.ts +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +2 -1
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/subagent.d.ts +1 -1
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +55 -2
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +1 -0
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +1 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +96 -6
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.d.ts +2 -0
- package/dist/tools/web-fetch.test.d.ts.map +1 -0
- package/dist/tools/web-fetch.test.js +90 -0
- package/dist/tools/web-fetch.test.js.map +1 -0
- package/dist/tools/web-search.d.ts +1 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +167 -27
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.d.ts +2 -0
- package/dist/tools/web-search.test.d.ts.map +1 -0
- package/dist/tools/web-search.test.js +119 -0
- package/dist/tools/web-search.test.js.map +1 -0
- package/dist/tools/write.d.ts +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +3 -1
- package/dist/tools/write.js.map +1 -1
- package/dist/tools/write.test.js +23 -0
- package/dist/tools/write.test.js.map +1 -1
- package/dist/ui/App.d.ts +74 -3
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +727 -223
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/activity-phrases.d.ts +2 -1
- package/dist/ui/activity-phrases.d.ts.map +1 -1
- package/dist/ui/activity-phrases.js +11 -1
- package/dist/ui/activity-phrases.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.d.ts +15 -1
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +143 -44
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.test.d.ts +2 -0
- package/dist/ui/components/ActivityIndicator.test.d.ts.map +1 -0
- package/dist/ui/components/ActivityIndicator.test.js +40 -0
- package/dist/ui/components/ActivityIndicator.test.js.map +1 -0
- package/dist/ui/components/AnimationContext.d.ts +8 -2
- package/dist/ui/components/AnimationContext.d.ts.map +1 -1
- package/dist/ui/components/AnimationContext.js +94 -16
- package/dist/ui/components/AnimationContext.js.map +1 -1
- package/dist/ui/components/AssistantMessage.js +1 -1
- package/dist/ui/components/AssistantMessage.js.map +1 -1
- package/dist/ui/components/CompactionNotice.d.ts +5 -1
- package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
- package/dist/ui/components/CompactionNotice.js +4 -6
- package/dist/ui/components/CompactionNotice.js.map +1 -1
- package/dist/ui/components/Footer.d.ts +10 -2
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +45 -8
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +76 -28
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/ServerToolExecution.d.ts +1 -0
- package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ServerToolExecution.js +21 -2
- package/dist/ui/components/ServerToolExecution.js.map +1 -1
- package/dist/ui/components/Spinner.d.ts +3 -1
- package/dist/ui/components/Spinner.d.ts.map +1 -1
- package/dist/ui/components/Spinner.js +10 -4
- package/dist/ui/components/Spinner.js.map +1 -1
- package/dist/ui/components/StreamingArea.js +1 -1
- package/dist/ui/components/StreamingArea.js.map +1 -1
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
- package/dist/ui/components/SubAgentPanel.js +3 -4
- package/dist/ui/components/SubAgentPanel.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts +2 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +24 -5
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.js +23 -2
- package/dist/ui/components/ToolGroupExecution.js.map +1 -1
- package/dist/ui/components/ToolUseLoader.d.ts +4 -2
- package/dist/ui/components/ToolUseLoader.d.ts.map +1 -1
- package/dist/ui/components/ToolUseLoader.js +3 -3
- package/dist/ui/components/ToolUseLoader.js.map +1 -1
- package/dist/ui/components/index.d.ts +1 -2
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +1 -2
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +4 -1
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +110 -13
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useBlink.d.ts.map +1 -1
- package/dist/ui/hooks/useBlink.js +3 -4
- package/dist/ui/hooks/useBlink.js.map +1 -1
- package/dist/ui/hooks/useTerminalSize.d.ts +12 -3
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.js +16 -1
- package/dist/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/ui/pixel.js +1 -1
- package/dist/ui/pixel.test.js +1 -1
- package/dist/ui/pixel.test.js.map +1 -1
- package/dist/ui/render.d.ts +48 -1
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +56 -6
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/theme/dark-ansi.json +2 -1
- package/dist/ui/theme/dark-daltonized.json +2 -1
- package/dist/ui/theme/dark.json +2 -1
- package/dist/ui/theme/light-ansi.json +2 -1
- package/dist/ui/theme/light-daltonized.json +2 -1
- package/dist/ui/theme/light.json +2 -1
- package/dist/ui/theme/theme.d.ts +1 -0
- package/dist/ui/theme/theme.d.ts.map +1 -1
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +2 -0
- package/dist/utils/error-handler.js.map +1 -1
- package/package.json +9 -6
- package/dist/ui/buddy/Buddy.d.ts +0 -15
- package/dist/ui/buddy/Buddy.d.ts.map +0 -1
- package/dist/ui/buddy/Buddy.js +0 -118
- package/dist/ui/buddy/Buddy.js.map +0 -1
- package/dist/ui/buddy/gacha.d.ts +0 -8
- package/dist/ui/buddy/gacha.d.ts.map +0 -1
- package/dist/ui/buddy/gacha.js +0 -94
- package/dist/ui/buddy/gacha.js.map +0 -1
- package/dist/ui/buddy/species.d.ts +0 -52
- package/dist/ui/buddy/species.d.ts.map +0 -1
- package/dist/ui/buddy/species.js +0 -257
- package/dist/ui/buddy/species.js.map +0 -1
- package/dist/ui/components/ThinkingIndicator.d.ts +0 -6
- package/dist/ui/components/ThinkingIndicator.d.ts.map +0 -1
- package/dist/ui/components/ThinkingIndicator.js +0 -145
- package/dist/ui/components/ThinkingIndicator.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-compaction.test.d.ts","sourceRoot":"","sources":["../../src/core/session-compaction.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { SessionManager } from "./session-manager.js";
|
|
6
|
+
import { appendMessagesToSession, createCompactedSessionCheckpoint, formatRestoreInfoText, getRestoredMessagesForDisplay, } from "./session-compaction.js";
|
|
7
|
+
const tempDirs = [];
|
|
8
|
+
async function makeTempDir() {
|
|
9
|
+
const dir = await mkdtemp(path.join(tmpdir(), "gg-session-compaction-"));
|
|
10
|
+
tempDirs.push(dir);
|
|
11
|
+
return dir;
|
|
12
|
+
}
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
await Promise.all(tempDirs.splice(0).map((dir) => rm(dir, { recursive: true, force: true })));
|
|
15
|
+
});
|
|
16
|
+
function message(role, content) {
|
|
17
|
+
return { role, content };
|
|
18
|
+
}
|
|
19
|
+
describe("session compaction persistence", () => {
|
|
20
|
+
it("writes compacted checkpoints to a fresh session without persisting system messages", async () => {
|
|
21
|
+
const sessionsDir = await makeTempDir();
|
|
22
|
+
const manager = new SessionManager(sessionsDir);
|
|
23
|
+
const messages = [
|
|
24
|
+
message("system", "system prompt"),
|
|
25
|
+
message("user", "[Previous conversation summary]\nsummary"),
|
|
26
|
+
message("assistant", "ack"),
|
|
27
|
+
message("user", "recent request"),
|
|
28
|
+
];
|
|
29
|
+
const checkpoint = await createCompactedSessionCheckpoint(manager, {
|
|
30
|
+
cwd: "/repo",
|
|
31
|
+
provider: "openai",
|
|
32
|
+
model: "gpt-5",
|
|
33
|
+
messages,
|
|
34
|
+
});
|
|
35
|
+
const loaded = await manager.load(checkpoint.path);
|
|
36
|
+
const loadedMessages = manager.getMessages(loaded.entries);
|
|
37
|
+
expect(loaded.header.cwd).toBe("/repo");
|
|
38
|
+
expect(loaded.header.provider).toBe("openai");
|
|
39
|
+
expect(loaded.header.model).toBe("gpt-5");
|
|
40
|
+
expect(loadedMessages).toEqual(messages.slice(1));
|
|
41
|
+
const file = await readFile(checkpoint.path, "utf-8");
|
|
42
|
+
expect(file).not.toContain("system prompt");
|
|
43
|
+
expect(file).toContain("[Previous conversation summary]");
|
|
44
|
+
});
|
|
45
|
+
it("appends only messages at and after the requested start index", async () => {
|
|
46
|
+
const sessionsDir = await makeTempDir();
|
|
47
|
+
const manager = new SessionManager(sessionsDir);
|
|
48
|
+
const session = await manager.create("/repo", "anthropic", "claude-sonnet-4-5");
|
|
49
|
+
const messages = [
|
|
50
|
+
message("system", "system prompt"),
|
|
51
|
+
message("user", "already persisted"),
|
|
52
|
+
message("assistant", "new answer"),
|
|
53
|
+
message("user", "new request"),
|
|
54
|
+
];
|
|
55
|
+
await appendMessagesToSession(manager, session.path, messages, 2);
|
|
56
|
+
const loaded = await manager.load(session.path);
|
|
57
|
+
expect(manager.getMessages(loaded.entries)).toEqual(messages.slice(2));
|
|
58
|
+
});
|
|
59
|
+
it("builds restored display messages and accurate restore text after load compaction", () => {
|
|
60
|
+
const restored = getRestoredMessagesForDisplay([
|
|
61
|
+
message("system", "system prompt"),
|
|
62
|
+
message("user", "[Previous conversation summary]\nsummary"),
|
|
63
|
+
message("assistant", "ack"),
|
|
64
|
+
]);
|
|
65
|
+
expect(restored.map((msg) => msg.role)).toEqual(["user", "assistant"]);
|
|
66
|
+
expect(formatRestoreInfoText(20, restored.length)).toBe("↻ Restored compacted session (20 → 2 messages)");
|
|
67
|
+
expect(formatRestoreInfoText(2, 2)).toBe("↻ Restored session (2 messages)");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=session-compaction.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-compaction.test.js","sourceRoot":"","sources":["../../src/core/session-compaction.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,12 +15,12 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
15
15
|
defaultModel: z.ZodOptional<z.ZodString>;
|
|
16
16
|
maxTokens: z.ZodDefault<z.ZodNumber>;
|
|
17
17
|
thinkingEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
18
|
-
thinkingLevel: z.ZodOptional<z.ZodEnum<{
|
|
18
|
+
thinkingLevel: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
|
|
19
19
|
low: "low";
|
|
20
20
|
medium: "medium";
|
|
21
21
|
high: "high";
|
|
22
|
-
|
|
23
|
-
}
|
|
22
|
+
xhigh: "xhigh";
|
|
23
|
+
}>>>;
|
|
24
24
|
theme: z.ZodDefault<z.ZodEnum<{
|
|
25
25
|
light: "light";
|
|
26
26
|
dark: "dark";
|
|
@@ -31,9 +31,7 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
31
31
|
auto: "auto";
|
|
32
32
|
}>>;
|
|
33
33
|
showTokenUsage: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
-
showThinking: z.ZodDefault<z.ZodBoolean>;
|
|
35
34
|
enabledTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
36
|
-
buddyEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
37
35
|
}, z.core.$strip>;
|
|
38
36
|
export type Settings = z.infer<typeof SettingsSchema>;
|
|
39
37
|
export declare const DEFAULT_SETTINGS: Settings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,QAAA,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BlB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,QAQ9B,CAAC;AAIF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,CAAC,EAAE,MAAM;IAIvB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAazB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI5C,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,MAAM,IAAI,QAAQ;CAGnB"}
|
|
@@ -11,7 +11,12 @@ const SettingsSchema = z.object({
|
|
|
11
11
|
defaultModel: z.string().optional(),
|
|
12
12
|
maxTokens: z.number().int().min(256).default(16384),
|
|
13
13
|
thinkingEnabled: z.boolean().default(false),
|
|
14
|
-
thinkingLevel: z
|
|
14
|
+
thinkingLevel: z
|
|
15
|
+
.preprocess(
|
|
16
|
+
// Legacy "max" → "xhigh" migration for settings files written before
|
|
17
|
+
// the rename. Matches OpenAI's GPT-5.5-era naming for the top tier.
|
|
18
|
+
(v) => (v === "max" ? "xhigh" : v), z.enum(["low", "medium", "high", "xhigh"]))
|
|
19
|
+
.optional(),
|
|
15
20
|
theme: z
|
|
16
21
|
.enum([
|
|
17
22
|
"auto",
|
|
@@ -24,9 +29,7 @@ const SettingsSchema = z.object({
|
|
|
24
29
|
])
|
|
25
30
|
.default("auto"),
|
|
26
31
|
showTokenUsage: z.boolean().default(true),
|
|
27
|
-
showThinking: z.boolean().default(true),
|
|
28
32
|
enabledTools: z.array(z.string()).optional(),
|
|
29
|
-
buddyEnabled: z.boolean().default(false),
|
|
30
33
|
});
|
|
31
34
|
export const DEFAULT_SETTINGS = {
|
|
32
35
|
autoCompact: true,
|
|
@@ -36,8 +39,6 @@ export const DEFAULT_SETTINGS = {
|
|
|
36
39
|
thinkingEnabled: false,
|
|
37
40
|
theme: "auto",
|
|
38
41
|
showTokenUsage: true,
|
|
39
|
-
showThinking: true,
|
|
40
|
-
buddyEnabled: false,
|
|
41
42
|
};
|
|
42
43
|
// ── Settings Manager ───────────────────────────────────────
|
|
43
44
|
export class SettingsManager {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,8DAA8D;AAE9D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACtC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3D,eAAe,EAAE,CAAC;SACf,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;SAC/F,OAAO,CAAC,WAAW,CAAC;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACnD,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Returns true if this cwd has never been audited by /setup before. */
|
|
2
|
+
export declare function isFirstTimeSetup(cwd: string): boolean;
|
|
3
|
+
/** Mark this cwd as audited. Called immediately after the auto-run fires
|
|
4
|
+
* (whether or not the agent actually completes the audit) so we never
|
|
5
|
+
* double-trigger across sessions. */
|
|
6
|
+
export declare function markSetupAudited(cwd: string): void;
|
|
7
|
+
/** Returns the language ids that have already been announced via the
|
|
8
|
+
* "STYLE PACK ACTIVE" badge for this cwd. */
|
|
9
|
+
export declare function getAnnouncedLanguages(cwd: string): string[];
|
|
10
|
+
/** Add language ids to the announced set for this cwd. No-op if the input
|
|
11
|
+
* is empty or adds nothing new. */
|
|
12
|
+
export declare function markLanguagesAnnounced(cwd: string, langs: readonly string[]): void;
|
|
13
|
+
//# sourceMappingURL=setup-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-history.d.ts","sourceRoot":"","sources":["../../src/core/setup-history.ts"],"names":[],"mappings":"AAiDA,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED;;sCAEsC;AACtC,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAKlD;AAED;8CAC8C;AAC9C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAG3D;AAED;oCACoC;AACpC,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CASlF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
const HISTORY_PATH = path.join(os.homedir(), ".ezcoder", "setup-history.json");
|
|
5
|
+
/**
|
|
6
|
+
* Persisted record of which project directories have been auto-audited by
|
|
7
|
+
* `/setup`. Used to gate the first-time auto-run: we want the audit to fire
|
|
8
|
+
* exactly once per project, not once per session.
|
|
9
|
+
*
|
|
10
|
+
* Stored at `~/.ezcoder/setup-history.json`. Keys are absolute cwd paths. The file
|
|
11
|
+
* is small (one line per project the user has ever opened with ezcoder) and
|
|
12
|
+
* read/written on session start only \u2014 not in any hot path.
|
|
13
|
+
*/
|
|
14
|
+
function readHistory() {
|
|
15
|
+
try {
|
|
16
|
+
const raw = fs.readFileSync(HISTORY_PATH, "utf-8");
|
|
17
|
+
const parsed = JSON.parse(raw);
|
|
18
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
19
|
+
return parsed;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
/* missing or unparseable \u2014 treat as empty */
|
|
24
|
+
}
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
function writeHistory(history) {
|
|
28
|
+
try {
|
|
29
|
+
fs.mkdirSync(path.dirname(HISTORY_PATH), { recursive: true });
|
|
30
|
+
fs.writeFileSync(HISTORY_PATH, JSON.stringify(history, null, 2), "utf-8");
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
/* best-effort \u2014 a failed write just means the auto-run will fire again
|
|
34
|
+
next session, which is annoying but not broken. */
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Returns true if this cwd has never been audited by /setup before. */
|
|
38
|
+
export function isFirstTimeSetup(cwd) {
|
|
39
|
+
const history = readHistory();
|
|
40
|
+
return history[cwd]?.lastAuditedAt === undefined;
|
|
41
|
+
}
|
|
42
|
+
/** Mark this cwd as audited. Called immediately after the auto-run fires
|
|
43
|
+
* (whether or not the agent actually completes the audit) so we never
|
|
44
|
+
* double-trigger across sessions. */
|
|
45
|
+
export function markSetupAudited(cwd) {
|
|
46
|
+
const history = readHistory();
|
|
47
|
+
const existing = history[cwd] ?? {};
|
|
48
|
+
history[cwd] = { ...existing, lastAuditedAt: new Date().toISOString() };
|
|
49
|
+
writeHistory(history);
|
|
50
|
+
}
|
|
51
|
+
/** Returns the language ids that have already been announced via the
|
|
52
|
+
* "STYLE PACK ACTIVE" badge for this cwd. */
|
|
53
|
+
export function getAnnouncedLanguages(cwd) {
|
|
54
|
+
const history = readHistory();
|
|
55
|
+
return history[cwd]?.announcedLanguages ?? [];
|
|
56
|
+
}
|
|
57
|
+
/** Add language ids to the announced set for this cwd. No-op if the input
|
|
58
|
+
* is empty or adds nothing new. */
|
|
59
|
+
export function markLanguagesAnnounced(cwd, langs) {
|
|
60
|
+
if (langs.length === 0)
|
|
61
|
+
return;
|
|
62
|
+
const history = readHistory();
|
|
63
|
+
const existing = history[cwd] ?? {};
|
|
64
|
+
const prev = existing.announcedLanguages ?? [];
|
|
65
|
+
const merged = Array.from(new Set([...prev, ...langs]));
|
|
66
|
+
if (merged.length === prev.length)
|
|
67
|
+
return;
|
|
68
|
+
history[cwd] = { ...existing, announcedLanguages: merged };
|
|
69
|
+
writeHistory(history);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=setup-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-history.js","sourceRoot":"","sources":["../../src/core/setup-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;AAa/E;;;;;;;;GAQG;AACH,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAsB,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,OAAqB;IACzC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP;6DACqD;IACvD,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,KAAK,SAAS,CAAC;AACnD,CAAC;AAED;;sCAEsC;AACtC,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACxE,YAAY,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED;8CAC8C;AAC9C,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,kBAAkB,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;oCACoC;AACpC,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,KAAwB;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC3D,YAAY,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-history.test.d.ts","sourceRoot":"","sources":["../../src/core/setup-history.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
let tmpHome;
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
tmpHome = fs.mkdtempSync(path.join(os.tmpdir(), "setup-history-"));
|
|
8
|
+
// Re-point os.homedir() at our tmp dir. Done via a spy so the change is
|
|
9
|
+
// reverted after each test via vi.restoreAllMocks().
|
|
10
|
+
vi.spyOn(os, "homedir").mockReturnValue(tmpHome);
|
|
11
|
+
// setup-history.ts captures HISTORY_PATH at module load via os.homedir().
|
|
12
|
+
// We must re-import after the mock is in place to pick up the tmp path.
|
|
13
|
+
vi.resetModules();
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
fs.rmSync(tmpHome, { recursive: true, force: true });
|
|
17
|
+
vi.restoreAllMocks();
|
|
18
|
+
});
|
|
19
|
+
async function loadModule() {
|
|
20
|
+
return await import("./setup-history.js");
|
|
21
|
+
}
|
|
22
|
+
describe("setup-history", () => {
|
|
23
|
+
it("isFirstTimeSetup returns true when history file is absent", async () => {
|
|
24
|
+
const { isFirstTimeSetup } = await loadModule();
|
|
25
|
+
expect(isFirstTimeSetup("/tmp/never-seen")).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it("markSetupAudited persists the cwd entry", async () => {
|
|
28
|
+
const { isFirstTimeSetup, markSetupAudited } = await loadModule();
|
|
29
|
+
const cwd = "/tmp/first-project";
|
|
30
|
+
expect(isFirstTimeSetup(cwd)).toBe(true);
|
|
31
|
+
markSetupAudited(cwd);
|
|
32
|
+
expect(isFirstTimeSetup(cwd)).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
it("treats distinct cwds independently", async () => {
|
|
35
|
+
const { isFirstTimeSetup, markSetupAudited } = await loadModule();
|
|
36
|
+
markSetupAudited("/tmp/project-a");
|
|
37
|
+
expect(isFirstTimeSetup("/tmp/project-a")).toBe(false);
|
|
38
|
+
expect(isFirstTimeSetup("/tmp/project-b")).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
it("tolerates corrupt history files (treats as empty)", async () => {
|
|
41
|
+
const ggDir = path.join(tmpHome, ".ezcoder");
|
|
42
|
+
fs.mkdirSync(ggDir, { recursive: true });
|
|
43
|
+
fs.writeFileSync(path.join(ggDir, "setup-history.json"), "{ not valid json");
|
|
44
|
+
const { isFirstTimeSetup } = await loadModule();
|
|
45
|
+
expect(isFirstTimeSetup("/tmp/anywhere")).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it("getAnnouncedLanguages returns [] when never announced", async () => {
|
|
48
|
+
const { getAnnouncedLanguages } = await loadModule();
|
|
49
|
+
expect(getAnnouncedLanguages("/tmp/fresh")).toEqual([]);
|
|
50
|
+
});
|
|
51
|
+
it("markLanguagesAnnounced persists and dedupes across calls", async () => {
|
|
52
|
+
const { getAnnouncedLanguages, markLanguagesAnnounced } = await loadModule();
|
|
53
|
+
const cwd = "/tmp/proj";
|
|
54
|
+
markLanguagesAnnounced(cwd, ["typescript"]);
|
|
55
|
+
expect(getAnnouncedLanguages(cwd)).toEqual(["typescript"]);
|
|
56
|
+
markLanguagesAnnounced(cwd, ["typescript", "rust"]);
|
|
57
|
+
expect(getAnnouncedLanguages(cwd).sort()).toEqual(["rust", "typescript"]);
|
|
58
|
+
});
|
|
59
|
+
it("markLanguagesAnnounced and markSetupAudited coexist without clobbering", async () => {
|
|
60
|
+
const { isFirstTimeSetup, markSetupAudited, getAnnouncedLanguages, markLanguagesAnnounced } = await loadModule();
|
|
61
|
+
const cwd = "/tmp/coexist";
|
|
62
|
+
markLanguagesAnnounced(cwd, ["python"]);
|
|
63
|
+
expect(isFirstTimeSetup(cwd)).toBe(true);
|
|
64
|
+
markSetupAudited(cwd);
|
|
65
|
+
expect(isFirstTimeSetup(cwd)).toBe(false);
|
|
66
|
+
expect(getAnnouncedLanguages(cwd)).toEqual(["python"]);
|
|
67
|
+
});
|
|
68
|
+
it("markLanguagesAnnounced is a no-op for empty input", async () => {
|
|
69
|
+
const { getAnnouncedLanguages, markLanguagesAnnounced } = await loadModule();
|
|
70
|
+
markLanguagesAnnounced("/tmp/noop", []);
|
|
71
|
+
expect(getAnnouncedLanguages("/tmp/noop")).toEqual([]);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=setup-history.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-history.test.js","sourceRoot":"","sources":["../../src/core/setup-history.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ export interface SlashCommandContext {
|
|
|
11
11
|
branch: (stepsBack?: number) => Promise<string>;
|
|
12
12
|
/** List all branches in the current session. */
|
|
13
13
|
listBranches: () => Promise<string>;
|
|
14
|
+
/** Show or refresh the dynamic repo map. */
|
|
15
|
+
repoMap: (action?: "show" | "refresh" | "on" | "off") => Promise<string>;
|
|
14
16
|
}
|
|
15
17
|
export interface SlashCommand {
|
|
16
18
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAElC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,gDAAgD;IAChD,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAElC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,gDAAgD;IAChD,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACnF;AAID,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAmC;IAEnD,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAOrC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C,MAAM,IAAI,YAAY,EAAE;IAaxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IASrD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CASnF;AAID,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,CA6MtD"}
|
|
@@ -190,6 +190,21 @@ export function createBuiltinCommands() {
|
|
|
190
190
|
return "New session created.";
|
|
191
191
|
},
|
|
192
192
|
},
|
|
193
|
+
{
|
|
194
|
+
name: "map",
|
|
195
|
+
aliases: [],
|
|
196
|
+
description: "Show, refresh, or toggle the dynamic repo map",
|
|
197
|
+
usage: "/map [refresh|on|off]",
|
|
198
|
+
async execute(args, ctx) {
|
|
199
|
+
const normalized = args.trim().toLowerCase();
|
|
200
|
+
if (normalized === "refresh" || normalized === "on" || normalized === "off") {
|
|
201
|
+
return ctx.repoMap(normalized);
|
|
202
|
+
}
|
|
203
|
+
if (normalized.length > 0)
|
|
204
|
+
return "Usage: /map [refresh|on|off]";
|
|
205
|
+
return ctx.repoMap("show");
|
|
206
|
+
},
|
|
207
|
+
},
|
|
193
208
|
{
|
|
194
209
|
name: "branch",
|
|
195
210
|
aliases: ["b"],
|
|
@@ -212,20 +227,6 @@ export function createBuiltinCommands() {
|
|
|
212
227
|
return ctx.listBranches();
|
|
213
228
|
},
|
|
214
229
|
},
|
|
215
|
-
{
|
|
216
|
-
name: "buddy",
|
|
217
|
-
aliases: [],
|
|
218
|
-
description: "Toggle the buddy companion on/off",
|
|
219
|
-
usage: "/buddy",
|
|
220
|
-
async execute(_args, ctx) {
|
|
221
|
-
const settings = ctx.getSettings();
|
|
222
|
-
const current = !!settings.buddyEnabled;
|
|
223
|
-
await ctx.setSetting("buddyEnabled", !current);
|
|
224
|
-
return !current
|
|
225
|
-
? "Buddy enabled! Your companion will appear near the prompt."
|
|
226
|
-
: "Buddy disabled.";
|
|
227
|
-
},
|
|
228
|
-
},
|
|
229
230
|
{
|
|
230
231
|
name: "help",
|
|
231
232
|
aliases: ["h", "?"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"AAAA,8DAA8D;
|
|
1
|
+
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LanguageId } from "../language-detector.js";
|
|
2
|
+
/**
|
|
3
|
+
* Load the style-pack content for a given language. Checks for a per-project
|
|
4
|
+
* override at `<cwd>/.ezcoder/styles/<id>.md` first, falling back to the bundled
|
|
5
|
+
* pack. Returns `null` if neither exists (defensive — should not happen for
|
|
6
|
+
* any LanguageId in PACKS).
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadPack(id: LanguageId, cwd: string): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Render the full "Language Style Packs" section that gets spliced into the
|
|
11
|
+
* system prompt. Returns an empty string when the active set is empty so the
|
|
12
|
+
* caller can skip the section entirely.
|
|
13
|
+
*
|
|
14
|
+
* The output is intentionally compact: a single header followed by each pack
|
|
15
|
+
* separated by a blank line. Packs already include their own \`### <Language>\`
|
|
16
|
+
* sub-headers.
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderStylePacksSection(active: Set<LanguageId>, cwd: string): string;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/style-packs/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAepF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { languagesToSortedArray } from "../language-detector.js";
|
|
4
|
+
import { PACKS } from "./packs.js";
|
|
5
|
+
/**
|
|
6
|
+
* Load the style-pack content for a given language. Checks for a per-project
|
|
7
|
+
* override at `<cwd>/.ezcoder/styles/<id>.md` first, falling back to the bundled
|
|
8
|
+
* pack. Returns `null` if neither exists (defensive — should not happen for
|
|
9
|
+
* any LanguageId in PACKS).
|
|
10
|
+
*/
|
|
11
|
+
export function loadPack(id, cwd) {
|
|
12
|
+
const overridePath = path.join(cwd, ".ezcoder", "styles", `${id}.md`);
|
|
13
|
+
try {
|
|
14
|
+
const stat = fs.statSync(overridePath);
|
|
15
|
+
if (stat.isFile()) {
|
|
16
|
+
return fs.readFileSync(overridePath, "utf-8").trim();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
/* no override — fall through to bundled */
|
|
21
|
+
}
|
|
22
|
+
return PACKS[id] ?? null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Render the full "Language Style Packs" section that gets spliced into the
|
|
26
|
+
* system prompt. Returns an empty string when the active set is empty so the
|
|
27
|
+
* caller can skip the section entirely.
|
|
28
|
+
*
|
|
29
|
+
* The output is intentionally compact: a single header followed by each pack
|
|
30
|
+
* separated by a blank line. Packs already include their own \`### <Language>\`
|
|
31
|
+
* sub-headers.
|
|
32
|
+
*/
|
|
33
|
+
export function renderStylePacksSection(active, cwd) {
|
|
34
|
+
if (active.size === 0)
|
|
35
|
+
return "";
|
|
36
|
+
const ids = languagesToSortedArray(active);
|
|
37
|
+
const parts = [];
|
|
38
|
+
for (const id of ids) {
|
|
39
|
+
const pack = loadPack(id, cwd);
|
|
40
|
+
if (pack)
|
|
41
|
+
parts.push(pack);
|
|
42
|
+
}
|
|
43
|
+
if (parts.length === 0)
|
|
44
|
+
return "";
|
|
45
|
+
return (`## Language Style Packs\n\n` +
|
|
46
|
+
`Conventions for new code in active languages. Project context and existing local patterns override these defaults; library names are illustrative.\n\n` +
|
|
47
|
+
`${AGENT_WRITTEN_CODE_PREAMBLE}\n\n` +
|
|
48
|
+
parts.join("\n\n"));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Cross-cutting rules that apply to every language pack. These are agent-native
|
|
52
|
+
* concerns (determinism, observability, no hidden state, output stability) that
|
|
53
|
+
* matter more for code written *by* and *read by* agents than for human-only
|
|
54
|
+
* codebases. Kept terse — every line is a load-bearing constraint, not advice.
|
|
55
|
+
*
|
|
56
|
+
* Lives in the system prompt above the per-language packs so the model reads
|
|
57
|
+
* universal rules first, then specializes per language.
|
|
58
|
+
*/
|
|
59
|
+
const AGENT_WRITTEN_CODE_PREAMBLE = `### Agent-Written Code (cross-cutting)
|
|
60
|
+
|
|
61
|
+
Universal rules for agent-written code:
|
|
62
|
+
|
|
63
|
+
- **Observe boundaries.** Use structured logging at external I/O; include inputs, outcome, and elapsed time. Do not commit debug prints.
|
|
64
|
+
- **Deterministic output.** Sort observable map/set iteration; use stable IDs; inject clocks; canonicalize serialized data used for hashes, persistence, comparisons, or diffs.
|
|
65
|
+
- **Explicit state.** Avoid module-level mutables, global state containers, and implicit DI. Pass dependencies through signatures or constructors.
|
|
66
|
+
- **Locally verifiable.** Prefer small pure functions and shallow composition over deep indirection.
|
|
67
|
+
- **Behavioral tests.** Arrange-Act-Assert, no shared mutable fixtures, table-driven where natural, independent test order.
|
|
68
|
+
- **Validate at boundaries.** Validate untrusted input as it enters; inside, rely on validated types and use local error values for expected failures.`;
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/style-packs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAc,EAAE,GAAW;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAuB,EAAE,GAAW;IAC1E,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CACL,6BAA6B;QAC7B,wJAAwJ;QACxJ,GAAG,2BAA2B,MAAM;QACpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CACnB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,2BAA2B,GAAG;;;;;;;;;uJASmH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LanguageId } from "../language-detector.js";
|
|
2
|
+
/**
|
|
3
|
+
* Per-language style packs injected into the system prompt when the detector
|
|
4
|
+
* sees the language is active in the project.
|
|
5
|
+
*
|
|
6
|
+
* Design principles (apply to every pack):
|
|
7
|
+
* 1. Apply the strictest reasonable subset of *idiomatic* style — nothing
|
|
8
|
+
* exotic the model has to think about. The agent already knows these
|
|
9
|
+
* patterns; the pack just narrows the choice space.
|
|
10
|
+
* 2. Optimize for low ambiguity, not for human readability. Bullet form.
|
|
11
|
+
* 3. Errors as values, schema at boundaries, mechanical formatting,
|
|
12
|
+
* one canonical way to do common tasks.
|
|
13
|
+
* 4. ~30-50 lines per pack. Anything longer is bloat in the system prompt.
|
|
14
|
+
* 5. Avoid triple backticks (template literal conflict). Use single
|
|
15
|
+
* backticks for inline tokens, escape with \\\` when needed.
|
|
16
|
+
*/
|
|
17
|
+
export declare const PACKS: Readonly<Record<LanguageId, string>>;
|
|
18
|
+
//# sourceMappingURL=packs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../../src/core/style-packs/packs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CA4OtD,CAAC"}
|