pi-caveman 1.0.3 → 1.0.5

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.
@@ -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: "off", showStatus: true };
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
- await mkdir(join(homedir(), ".pi", "agent"), { recursive: true });
71
- await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", "utf8");
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: "CAVEMAN", interval: 200 },
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
- config = await loadConfig();
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
- config = await loadConfig();
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-caveman",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Why use many token when few do trick. Caveman mode for pi — cuts ~75% output tokens while keeping full technical accuracy.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "pi": {
24
24
  "extensions": [
25
- "./extensions"
25
+ "./extensions/caveman.ts"
26
26
  ],
27
27
  "image": "https://raw.githubusercontent.com/jonjonrankin/pi-caveman/main/pi-caveman.gif"
28
28
  },