@hasna/oldpal 0.3.6 → 0.3.8

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/index.js CHANGED
@@ -30118,16 +30118,20 @@ class BuiltinCommands {
30118
30118
  registerAll(loader) {
30119
30119
  loader.register(this.helpCommand(loader));
30120
30120
  loader.register(this.clearCommand());
30121
+ loader.register(this.newCommand());
30121
30122
  loader.register(this.statusCommand());
30123
+ loader.register(this.tokensCommand());
30122
30124
  loader.register(this.compactCommand());
30123
30125
  loader.register(this.configCommand());
30124
30126
  loader.register(this.initCommand());
30125
30127
  loader.register(this.costCommand());
30126
30128
  loader.register(this.modelCommand());
30129
+ loader.register(this.skillsCommand(loader));
30127
30130
  loader.register(this.memoryCommand());
30128
30131
  loader.register(this.bugCommand());
30129
30132
  loader.register(this.prCommand());
30130
30133
  loader.register(this.reviewCommand());
30134
+ loader.register(this.exitCommand());
30131
30135
  }
30132
30136
  updateTokenUsage(usage) {
30133
30137
  Object.assign(this.tokenUsage, usage);
@@ -30203,6 +30207,117 @@ class BuiltinCommands {
30203
30207
  }
30204
30208
  };
30205
30209
  }
30210
+ newCommand() {
30211
+ return {
30212
+ name: "new",
30213
+ description: "Start a new conversation",
30214
+ builtin: true,
30215
+ selfHandled: true,
30216
+ content: "",
30217
+ handler: async (args, context) => {
30218
+ context.clearMessages();
30219
+ this.tokenUsage.inputTokens = 0;
30220
+ this.tokenUsage.outputTokens = 0;
30221
+ this.tokenUsage.totalTokens = 0;
30222
+ context.emit("text", `Starting new conversation.
30223
+ `);
30224
+ context.emit("done");
30225
+ return { handled: true, clearConversation: true };
30226
+ }
30227
+ };
30228
+ }
30229
+ exitCommand() {
30230
+ return {
30231
+ name: "exit",
30232
+ description: "Exit oldpal",
30233
+ builtin: true,
30234
+ selfHandled: true,
30235
+ content: "",
30236
+ handler: async (args, context) => {
30237
+ context.emit("text", `Goodbye!
30238
+ `);
30239
+ context.emit("done");
30240
+ return { handled: true, exit: true };
30241
+ }
30242
+ };
30243
+ }
30244
+ tokensCommand() {
30245
+ return {
30246
+ name: "tokens",
30247
+ description: "Show token usage",
30248
+ builtin: true,
30249
+ selfHandled: true,
30250
+ content: "",
30251
+ handler: async (args, context) => {
30252
+ const usage = this.tokenUsage;
30253
+ const usedPercent = Math.round(usage.totalTokens / usage.maxContextTokens * 100);
30254
+ let message = `
30255
+ **Token Usage**
30256
+
30257
+ `;
30258
+ message += `Input: ${usage.inputTokens.toLocaleString()}
30259
+ `;
30260
+ message += `Output: ${usage.outputTokens.toLocaleString()}
30261
+ `;
30262
+ message += `Total: ${usage.totalTokens.toLocaleString()} / ${usage.maxContextTokens.toLocaleString()} (${usedPercent}%)
30263
+ `;
30264
+ const barLength = 30;
30265
+ const filledLength = Math.round(usedPercent / 100 * barLength);
30266
+ const bar = "\u2588".repeat(filledLength) + "\u2591".repeat(barLength - filledLength);
30267
+ message += `
30268
+ [${bar}] ${usedPercent}%
30269
+ `;
30270
+ context.emit("text", message);
30271
+ context.emit("done");
30272
+ return { handled: true };
30273
+ }
30274
+ };
30275
+ }
30276
+ skillsCommand(loader) {
30277
+ return {
30278
+ name: "skills",
30279
+ description: "List available skills",
30280
+ builtin: true,
30281
+ selfHandled: true,
30282
+ content: "",
30283
+ handler: async (args, context) => {
30284
+ let message = `
30285
+ **Available Skills**
30286
+
30287
+ `;
30288
+ message += `Skills are invoked with /skill-name [arguments]
30289
+
30290
+ `;
30291
+ message += `**Built-in Skills:**
30292
+ `;
30293
+ message += ` /brainstorm - Generate ideas on a topic
30294
+ `;
30295
+ message += ` /draft - Draft content (emails, docs, etc.)
30296
+ `;
30297
+ message += ` /research - Research a topic
30298
+ `;
30299
+ message += ` /summarize - Summarize text or content
30300
+ `;
30301
+ message += `
30302
+ **Connector Skills:**
30303
+ `;
30304
+ message += ` /calendar - Manage calendar events
30305
+ `;
30306
+ message += ` /email - Read and send emails
30307
+ `;
30308
+ message += ` /notes - Manage notes (Notion)
30309
+ `;
30310
+ message += ` /search - Search the web
30311
+ `;
30312
+ message += `
30313
+ Custom skills can be added in .oldpal/skills/
30314
+ `;
30315
+ context.emit("text", message);
30316
+ context.emit("done");
30317
+ return { handled: true };
30318
+ }
30319
+ };
30320
+ }
30206
30321
  statusCommand() {
30207
30322
  return {
30208
30323
  name: "status",
@@ -30759,6 +30874,9 @@ class AgentLoop {
30759
30874
  if (commandResult.clearConversation) {
30760
30875
  this.context = new AgentContext;
30761
30876
  }
30877
+ if (commandResult.exit) {
30878
+ this.emit({ type: "exit" });
30879
+ }
30762
30880
  return;
30763
30881
  }
30764
30882
  if (commandResult.prompt) {
@@ -31256,19 +31374,78 @@ var build_default = TextInput;
31256
31374
 
31257
31375
  // packages/terminal/src/components/Input.tsx
31258
31376
  var jsx_dev_runtime = __toESM(require_jsx_dev_runtime(), 1);
31259
- function Input({ onSubmit, isProcessing, queueLength = 0 }) {
31377
+ var COMMANDS = [
31378
+ { name: "/help", description: "show available commands" },
31379
+ { name: "/clear", description: "clear the conversation" },
31380
+ { name: "/new", description: "start a new conversation" },
31381
+ { name: "/status", description: "show session status" },
31382
+ { name: "/tokens", description: "show token usage" },
31383
+ { name: "/cost", description: "show estimated API cost" },
31384
+ { name: "/model", description: "show model information" },
31385
+ { name: "/skills", description: "list available skills" },
31386
+ { name: "/config", description: "show configuration" },
31387
+ { name: "/init", description: "initialize oldpal in project" },
31388
+ { name: "/compact", description: "summarize to save context" },
31389
+ { name: "/memory", description: "show what AI remembers" },
31390
+ { name: "/bug", description: "analyze and fix a bug" },
31391
+ { name: "/pr", description: "create a pull request" },
31392
+ { name: "/review", description: "review code changes" },
31393
+ { name: "/exit", description: "exit oldpal" }
31394
+ ];
31395
+ function Input({ onSubmit, isProcessing, queueLength = 0, commands }) {
31260
31396
  const [value, setValue] = import_react23.useState("");
31397
+ const [selectedIndex, setSelectedIndex] = import_react23.useState(0);
31398
+ const allCommands = import_react23.useMemo(() => {
31399
+ const merged = [...COMMANDS];
31400
+ if (commands) {
31401
+ for (const cmd of commands) {
31402
+ if (!merged.find((c) => c.name === cmd.name)) {
31403
+ merged.push(cmd);
31404
+ }
31405
+ }
31406
+ }
31407
+ return merged.sort((a, b) => a.name.localeCompare(b.name));
31408
+ }, [commands]);
31409
+ const showAutocomplete = value.startsWith("/") && !value.includes(" ");
31410
+ const filteredCommands = import_react23.useMemo(() => {
31411
+ if (!showAutocomplete)
31412
+ return [];
31413
+ const search = value.toLowerCase();
31414
+ return allCommands.filter((cmd) => cmd.name.toLowerCase().startsWith(search));
31415
+ }, [value, showAutocomplete, allCommands]);
31261
31416
  use_input_default((input, key) => {
31417
+ if (key.tab && showAutocomplete && filteredCommands.length > 0) {
31418
+ const selected = filteredCommands[selectedIndex] || filteredCommands[0];
31419
+ setValue(selected.name + " ");
31420
+ setSelectedIndex(0);
31421
+ return;
31422
+ }
31423
+ if (showAutocomplete && filteredCommands.length > 0) {
31424
+ if (key.downArrow) {
31425
+ setSelectedIndex((prev) => Math.min(prev + 1, filteredCommands.length - 1));
31426
+ return;
31427
+ }
31428
+ if (key.upArrow) {
31429
+ setSelectedIndex((prev) => Math.max(prev - 1, 0));
31430
+ return;
31431
+ }
31432
+ }
31262
31433
  if (!value.trim())
31263
31434
  return;
31264
31435
  if ((key.shift || key.ctrl) && key.return) {
31265
31436
  onSubmit(value, "interrupt");
31266
31437
  setValue("");
31438
+ setSelectedIndex(0);
31267
31439
  } else if (key.meta && key.return) {
31268
31440
  onSubmit(value, "queue");
31269
31441
  setValue("");
31442
+ setSelectedIndex(0);
31270
31443
  }
31271
31444
  });
31445
+ const handleChange = (newValue) => {
31446
+ setValue(newValue);
31447
+ setSelectedIndex(0);
31448
+ };
31272
31449
  const handleSubmit = (submittedValue) => {
31273
31450
  if (!submittedValue.trim())
31274
31451
  return;
@@ -31278,6 +31455,7 @@ function Input({ onSubmit, isProcessing, queueLength = 0 }) {
31278
31455
  onSubmit(submittedValue, "normal");
31279
31456
  }
31280
31457
  setValue("");
31458
+ setSelectedIndex(0);
31281
31459
  };
31282
31460
  let prompt = "\u276F";
31283
31461
  let placeholder = "Type a message...";
@@ -31286,21 +31464,53 @@ function Input({ onSubmit, isProcessing, queueLength = 0 }) {
31286
31464
  placeholder = queueLength > 0 ? "Type to queue another..." : "Type to queue (Enter) or interrupt (Shift+Enter)...";
31287
31465
  }
31288
31466
  return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
31467
+ flexDirection: "column",
31289
31468
  marginTop: 1,
31290
31469
  children: [
31291
- /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
31292
- dimColor: isProcessing,
31470
+ showAutocomplete && filteredCommands.length > 0 && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
31471
+ flexDirection: "column",
31472
+ marginBottom: 1,
31473
+ marginLeft: 2,
31293
31474
  children: [
31294
- prompt,
31295
- " "
31475
+ filteredCommands.slice(0, 8).map((cmd, i) => /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
31476
+ children: [
31477
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
31478
+ color: i === selectedIndex ? "cyan" : undefined,
31479
+ children: cmd.name.padEnd(16)
31480
+ }, undefined, false, undefined, this),
31481
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
31482
+ dimColor: i !== selectedIndex,
31483
+ children: cmd.description
31484
+ }, undefined, false, undefined, this)
31485
+ ]
31486
+ }, cmd.name, true, undefined, this)),
31487
+ filteredCommands.length > 8 && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
31488
+ dimColor: true,
31489
+ children: [
31490
+ " ...and ",
31491
+ filteredCommands.length - 8,
31492
+ " more"
31493
+ ]
31494
+ }, undefined, true, undefined, this)
31296
31495
  ]
31297
31496
  }, undefined, true, undefined, this),
31298
- /* @__PURE__ */ jsx_dev_runtime.jsxDEV(build_default, {
31299
- value,
31300
- onChange: setValue,
31301
- onSubmit: handleSubmit,
31302
- placeholder
31303
- }, undefined, false, undefined, this)
31497
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
31498
+ children: [
31499
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
31500
+ dimColor: isProcessing,
31501
+ children: [
31502
+ prompt,
31503
+ " "
31504
+ ]
31505
+ }, undefined, true, undefined, this),
31506
+ /* @__PURE__ */ jsx_dev_runtime.jsxDEV(build_default, {
31507
+ value,
31508
+ onChange: handleChange,
31509
+ onSubmit: handleSubmit,
31510
+ placeholder
31511
+ }, undefined, false, undefined, this)
31512
+ ]
31513
+ }, undefined, true, undefined, this)
31304
31514
  ]
31305
31515
  }, undefined, true, undefined, this);
31306
31516
  }
@@ -31637,29 +31847,33 @@ function truncate(text, maxLength) {
31637
31847
  // packages/terminal/src/components/Status.tsx
31638
31848
  var jsx_dev_runtime4 = __toESM(require_jsx_dev_runtime(), 1);
31639
31849
  function Status({ isProcessing, cwd: cwd2, queueLength = 0, tokenUsage }) {
31640
- const maxCwdLength = 30;
31641
- const displayCwd = cwd2.length > maxCwdLength ? "..." + cwd2.slice(-(maxCwdLength - 3)) : cwd2;
31642
- const queueInfo = queueLength > 0 ? ` | ${queueLength} queued` : "";
31643
- let tokenInfo = "";
31644
- if (tokenUsage && tokenUsage.totalTokens > 0) {
31645
- const used = Math.round(tokenUsage.totalTokens / 1000);
31646
- const max = Math.round(tokenUsage.maxContextTokens / 1000);
31850
+ let contextInfo = "";
31851
+ if (tokenUsage && tokenUsage.maxContextTokens > 0) {
31647
31852
  const percent = Math.round(tokenUsage.totalTokens / tokenUsage.maxContextTokens * 100);
31648
- tokenInfo = ` | ${used}k/${max}k (${percent}%)`;
31853
+ contextInfo = `${percent}% context used`;
31649
31854
  }
31650
31855
  return /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
31651
31856
  marginTop: 1,
31652
- children: /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
31653
- dimColor: true,
31654
- children: [
31655
- displayCwd,
31656
- tokenInfo,
31657
- queueInfo,
31658
- isProcessing && " | Esc to stop",
31659
- " | Ctrl+C to exit | /help"
31660
- ]
31661
- }, undefined, true, undefined, this)
31662
- }, undefined, false, undefined, this);
31857
+ justifyContent: "space-between",
31858
+ children: [
31859
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
31860
+ dimColor: true,
31861
+ children: "/help for commands"
31862
+ }, undefined, false, undefined, this),
31863
+ /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Box_default, {
31864
+ children: [
31865
+ isProcessing && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
31866
+ dimColor: true,
31867
+ children: "esc to stop \xB7 "
31868
+ }, undefined, false, undefined, this),
31869
+ contextInfo && /* @__PURE__ */ jsx_dev_runtime4.jsxDEV(Text, {
31870
+ dimColor: true,
31871
+ children: contextInfo
31872
+ }, undefined, false, undefined, this)
31873
+ ]
31874
+ }, undefined, true, undefined, this)
31875
+ ]
31876
+ }, undefined, true, undefined, this);
31663
31877
  }
31664
31878
 
31665
31879
  // node_modules/.pnpm/ink-spinner@5.0.0_ink@5.2.1_@types+react@18.3.27_react-devtools-core@4.28.5_react@18.3.1__react@18.3.1/node_modules/ink-spinner/build/index.js
@@ -31906,8 +32120,74 @@ function useToolCallExpansion() {
31906
32120
  return { isExpanded, setIsExpanded };
31907
32121
  }
31908
32122
 
31909
- // packages/terminal/src/components/App.tsx
32123
+ // packages/terminal/src/components/WelcomeBanner.tsx
31910
32124
  var jsx_dev_runtime8 = __toESM(require_jsx_dev_runtime(), 1);
32125
+ function WelcomeBanner({ version, model, directory }) {
32126
+ const homeDir = process.env.HOME || "";
32127
+ const displayDir = directory.startsWith(homeDir) ? "~" + directory.slice(homeDir.length) : directory;
32128
+ return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32129
+ flexDirection: "column",
32130
+ marginBottom: 1,
32131
+ children: [
32132
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32133
+ children: [
32134
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32135
+ color: "cyan",
32136
+ bold: true,
32137
+ children: ">"
32138
+ }, undefined, false, undefined, this),
32139
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32140
+ color: "cyan",
32141
+ bold: true,
32142
+ children: "_ "
32143
+ }, undefined, false, undefined, this),
32144
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32145
+ bold: true,
32146
+ children: "oldpal"
32147
+ }, undefined, false, undefined, this),
32148
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32149
+ dimColor: true,
32150
+ children: [
32151
+ " (v",
32152
+ version,
32153
+ ")"
32154
+ ]
32155
+ }, undefined, true, undefined, this)
32156
+ ]
32157
+ }, undefined, true, undefined, this),
32158
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32159
+ marginTop: 1,
32160
+ children: [
32161
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32162
+ dimColor: true,
32163
+ children: "model: "
32164
+ }, undefined, false, undefined, this),
32165
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32166
+ children: model
32167
+ }, undefined, false, undefined, this),
32168
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32169
+ dimColor: true,
32170
+ children: " /model to change"
32171
+ }, undefined, false, undefined, this)
32172
+ ]
32173
+ }, undefined, true, undefined, this),
32174
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32175
+ children: [
32176
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32177
+ dimColor: true,
32178
+ children: "directory: "
32179
+ }, undefined, false, undefined, this),
32180
+ /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32181
+ children: displayDir
32182
+ }, undefined, false, undefined, this)
32183
+ ]
32184
+ }, undefined, true, undefined, this)
32185
+ ]
32186
+ }, undefined, true, undefined, this);
32187
+ }
32188
+
32189
+ // packages/terminal/src/components/App.tsx
32190
+ var jsx_dev_runtime9 = __toESM(require_jsx_dev_runtime(), 1);
31911
32191
  function App2({ cwd: cwd2 }) {
31912
32192
  const { exit } = use_app_default();
31913
32193
  const [client, setClient] = import_react27.useState(null);
@@ -32004,6 +32284,8 @@ function App2({ cwd: cwd2 }) {
32004
32284
  } else if (chunk.type === "error" && chunk.error) {
32005
32285
  setError(chunk.error);
32006
32286
  setIsProcessing(false);
32287
+ } else if (chunk.type === "exit") {
32288
+ exit();
32007
32289
  } else if (chunk.type === "usage" && chunk.usage) {
32008
32290
  setTokenUsage(chunk.usage);
32009
32291
  setCurrentTurnTokens((prev) => prev + (chunk.usage?.outputTokens || 0));
@@ -32193,10 +32475,10 @@ function App2({ cwd: cwd2 }) {
32193
32475
  await client.send(trimmedInput);
32194
32476
  }, [client, isProcessing]);
32195
32477
  if (isInitializing) {
32196
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32478
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
32197
32479
  flexDirection: "column",
32198
32480
  padding: 1,
32199
- children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Spinner2, {
32481
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Spinner2, {
32200
32482
  label: "Initializing..."
32201
32483
  }, undefined, false, undefined, this)
32202
32484
  }, undefined, false, undefined, this);
@@ -32206,12 +32488,18 @@ function App2({ cwd: cwd2 }) {
32206
32488
  return { toolCall: e.toolCall, result };
32207
32489
  });
32208
32490
  const isThinking = isProcessing && !currentResponse && !currentToolCall && toolCallEntries.length === 0;
32209
- return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32491
+ const showWelcome = messages.length === 0 && !isProcessing;
32492
+ return /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
32210
32493
  flexDirection: "column",
32211
32494
  padding: 1,
32212
32495
  children: [
32213
- scrollOffset > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32214
- children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32496
+ showWelcome && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(WelcomeBanner, {
32497
+ version: "0.3.8",
32498
+ model: "claude-sonnet-4-20250514",
32499
+ directory: cwd2
32500
+ }, undefined, false, undefined, this),
32501
+ scrollOffset > 0 && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
32502
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
32215
32503
  dimColor: true,
32216
32504
  children: [
32217
32505
  "\u2191 ",
@@ -32220,7 +32508,7 @@ function App2({ cwd: cwd2 }) {
32220
32508
  ]
32221
32509
  }, undefined, true, undefined, this)
32222
32510
  }, undefined, false, undefined, this),
32223
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Messages4, {
32511
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Messages4, {
32224
32512
  messages,
32225
32513
  currentResponse: isProcessing ? currentResponse : undefined,
32226
32514
  currentToolCall: undefined,
@@ -32229,14 +32517,14 @@ function App2({ cwd: cwd2 }) {
32229
32517
  scrollOffset,
32230
32518
  maxVisible: maxVisibleMessages
32231
32519
  }, undefined, false, undefined, this),
32232
- isProcessing && toolCallEntries.length > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ToolCallBox, {
32520
+ isProcessing && toolCallEntries.length > 0 && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ToolCallBox, {
32233
32521
  entries: toolCallEntries,
32234
32522
  maxVisible: 3,
32235
32523
  isExpanded: toolsExpanded
32236
32524
  }, undefined, false, undefined, this),
32237
- messageQueue.length > 0 && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32525
+ messageQueue.length > 0 && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
32238
32526
  marginY: 1,
32239
- children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32527
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
32240
32528
  dimColor: true,
32241
32529
  children: [
32242
32530
  messageQueue.length,
@@ -32246,9 +32534,9 @@ function App2({ cwd: cwd2 }) {
32246
32534
  ]
32247
32535
  }, undefined, true, undefined, this)
32248
32536
  }, undefined, false, undefined, this),
32249
- error && /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
32537
+ error && /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Box_default, {
32250
32538
  marginY: 1,
32251
- children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
32539
+ children: /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Text, {
32252
32540
  color: "red",
32253
32541
  children: [
32254
32542
  "Error: ",
@@ -32256,18 +32544,18 @@ function App2({ cwd: cwd2 }) {
32256
32544
  ]
32257
32545
  }, undefined, true, undefined, this)
32258
32546
  }, undefined, false, undefined, this),
32259
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(ProcessingIndicator, {
32547
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(ProcessingIndicator, {
32260
32548
  isProcessing,
32261
32549
  startTime: processingStartTime,
32262
32550
  tokenCount: currentTurnTokens,
32263
32551
  isThinking
32264
32552
  }, undefined, false, undefined, this),
32265
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Input, {
32553
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Input, {
32266
32554
  onSubmit: handleSubmit,
32267
32555
  isProcessing,
32268
32556
  queueLength: messageQueue.length
32269
32557
  }, undefined, false, undefined, this),
32270
- /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Status, {
32558
+ /* @__PURE__ */ jsx_dev_runtime9.jsxDEV(Status, {
32271
32559
  isProcessing,
32272
32560
  cwd: cwd2,
32273
32561
  queueLength: messageQueue.length,
@@ -32278,7 +32566,7 @@ function App2({ cwd: cwd2 }) {
32278
32566
  }
32279
32567
 
32280
32568
  // packages/terminal/src/index.tsx
32281
- var jsx_dev_runtime9 = __toESM(require_jsx_dev_runtime(), 1);
32569
+ var jsx_dev_runtime10 = __toESM(require_jsx_dev_runtime(), 1);
32282
32570
  var args = process.argv.slice(2);
32283
32571
  var options = {
32284
32572
  cwd: process.cwd(),
@@ -32286,7 +32574,7 @@ var options = {
32286
32574
  help: args.includes("--help") || args.includes("-h")
32287
32575
  };
32288
32576
  if (options.version) {
32289
- console.log("oldpal v0.3.6");
32577
+ console.log("oldpal v0.3.8");
32290
32578
  process.exit(0);
32291
32579
  }
32292
32580
  if (options.help) {
@@ -32310,11 +32598,11 @@ In interactive mode:
32310
32598
  `);
32311
32599
  process.exit(0);
32312
32600
  }
32313
- var { waitUntilExit } = render_default(/* @__PURE__ */ jsx_dev_runtime9.jsxDEV(App2, {
32601
+ var { waitUntilExit } = render_default(/* @__PURE__ */ jsx_dev_runtime10.jsxDEV(App2, {
32314
32602
  cwd: options.cwd
32315
32603
  }, undefined, false, undefined, this));
32316
32604
  waitUntilExit().then(() => {
32317
32605
  process.exit(0);
32318
32606
  });
32319
32607
 
32320
- //# debugId=883DD49707B1DC4164756E2164756E21
32608
+ //# debugId=13C80C7BB59BEAC264756E2164756E21