pi-caveman 1.0.3 → 1.0.4
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/extensions/caveman.ts +25 -6
- package/package.json +1 -1
package/extensions/caveman.ts
CHANGED
|
@@ -51,7 +51,8 @@ interface CavemanConfig {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
const CONFIG_PATH = join(homedir(), ".pi", "agent", "caveman.json");
|
|
54
|
-
const DEFAULT_CONFIG: CavemanConfig = { defaultLevel: "
|
|
54
|
+
const DEFAULT_CONFIG: CavemanConfig = { defaultLevel: "full", showStatus: true };
|
|
55
|
+
let saveConfigQueue: Promise<void> = Promise.resolve();
|
|
55
56
|
|
|
56
57
|
async function loadConfig(): Promise<CavemanConfig> {
|
|
57
58
|
try {
|
|
@@ -67,8 +68,12 @@ async function loadConfig(): Promise<CavemanConfig> {
|
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
async function saveConfig(config: CavemanConfig): Promise<void> {
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
const snapshot = JSON.stringify(config, null, 2) + "\n";
|
|
72
|
+
saveConfigQueue = saveConfigQueue.then(async () => {
|
|
73
|
+
await mkdir(join(homedir(), ".pi", "agent"), { recursive: true });
|
|
74
|
+
await writeFile(CONFIG_PATH, snapshot, "utf8");
|
|
75
|
+
});
|
|
76
|
+
return saveConfigQueue;
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
// ---------------------------------------------------------------------------
|
|
@@ -102,7 +107,7 @@ const FIRE_FRAMES = [
|
|
|
102
107
|
|
|
103
108
|
const ANIMATIONS: Record<Exclude<Level, "off">, Animation> = {
|
|
104
109
|
lite: { frames: FIRE_FRAMES, label: "LITE", interval: 300 },
|
|
105
|
-
full: { frames: FIRE_FRAMES, label: "
|
|
110
|
+
full: { frames: FIRE_FRAMES, label: "FULL", interval: 200 },
|
|
106
111
|
ultra: { frames: FIRE_FRAMES, label: "ULTRA", interval: 100 },
|
|
107
112
|
"wenyan-lite": { frames: FIRE_FRAMES, label: "文言", interval: 300 },
|
|
108
113
|
wenyan: { frames: FIRE_FRAMES, label: "文言文", interval: 200 },
|
|
@@ -177,6 +182,19 @@ export default function caveman(pi: ExtensionAPI) {
|
|
|
177
182
|
let timer: ReturnType<typeof setInterval> | null = null;
|
|
178
183
|
let frameIndex = 0;
|
|
179
184
|
let isActive = false;
|
|
185
|
+
let configLoadPromise: Promise<void> | null = null;
|
|
186
|
+
|
|
187
|
+
const ensureConfigLoaded = async () => {
|
|
188
|
+
if (!configLoadPromise) {
|
|
189
|
+
configLoadPromise = (async () => {
|
|
190
|
+
config = await loadConfig();
|
|
191
|
+
if (level === "off" && config.defaultLevel !== "off") {
|
|
192
|
+
level = config.defaultLevel;
|
|
193
|
+
}
|
|
194
|
+
})();
|
|
195
|
+
}
|
|
196
|
+
await configLoadPromise;
|
|
197
|
+
};
|
|
180
198
|
|
|
181
199
|
// -- Animation helpers --
|
|
182
200
|
|
|
@@ -219,7 +237,7 @@ export default function caveman(pi: ExtensionAPI) {
|
|
|
219
237
|
// -- Restore state on session load --
|
|
220
238
|
|
|
221
239
|
pi.on("session_start", async (_event, ctx) => {
|
|
222
|
-
|
|
240
|
+
await ensureConfigLoaded();
|
|
223
241
|
|
|
224
242
|
// Check for session-level override first (resuming a session)
|
|
225
243
|
let sessionLevel: Level | null = null;
|
|
@@ -298,7 +316,7 @@ export default function caveman(pi: ExtensionAPI) {
|
|
|
298
316
|
// -- /caveman config: interactive SettingsList --
|
|
299
317
|
|
|
300
318
|
async function openConfig(ctx: ExtensionContext) {
|
|
301
|
-
|
|
319
|
+
await ensureConfigLoaded();
|
|
302
320
|
|
|
303
321
|
await ctx.ui.custom((_tui, theme, _kb, done) => {
|
|
304
322
|
const items: SettingItem[] = [
|
|
@@ -386,6 +404,7 @@ export default function caveman(pi: ExtensionAPI) {
|
|
|
386
404
|
// -- Inject caveman rules into system prompt --
|
|
387
405
|
|
|
388
406
|
pi.on("before_agent_start", async (event) => {
|
|
407
|
+
await ensureConfigLoaded();
|
|
389
408
|
if (level === "off") return;
|
|
390
409
|
if (level === "micro") {
|
|
391
410
|
return {
|
package/package.json
CHANGED