@verboo/code 0.7.12 → 0.7.14

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.
Files changed (2) hide show
  1. package/dist/cli.mjs +136 -28
  2. package/package.json +1 -1
package/dist/cli.mjs CHANGED
@@ -115518,7 +115518,7 @@ function printStartupScreen(modelOverride) {
115518
115518
  const home = process.env.HOME || process.env.USERPROFILE || "";
115519
115519
  const cwd2 = process.cwd();
115520
115520
  const displayCwd = home && cwd2.startsWith(home) ? `~${cwd2.slice(home.length)}` : cwd2;
115521
- const version2 = "0.7.12";
115521
+ const version2 = "0.7.14";
115522
115522
  const bold2 = `${ESC}1m`;
115523
115523
  const PURPLE = rgb(...ACCENT);
115524
115524
  const SOFT = rgb(...CREAM);
@@ -193526,8 +193526,13 @@ async function* openaiStreamToAnthropic(response, model, signal) {
193526
193526
  return;
193527
193527
  const decoder = new TextDecoder;
193528
193528
  let buffer = "";
193529
- const STREAM_IDLE_TIMEOUT_MS = 120000;
193529
+ const STREAM_IDLE_TIMEOUT_MS = (() => {
193530
+ const raw = process.env.VERBOO_STREAM_IDLE_TIMEOUT_MS;
193531
+ const v = raw ? parseInt(raw, 10) : NaN;
193532
+ return Number.isFinite(v) && v > 0 ? v : 600000;
193533
+ })();
193530
193534
  let lastDataTime = Date.now();
193535
+ const streamStartedAt = Date.now();
193531
193536
  async function readWithTimeout() {
193532
193537
  return new Promise((resolve19, reject) => {
193533
193538
  const timeoutId = setTimeout(() => {
@@ -193577,8 +193582,20 @@ async function* openaiStreamToAnthropic(response, model, signal) {
193577
193582
  try {
193578
193583
  while (true) {
193579
193584
  const { done, value } = await readWithTimeout();
193580
- if (done)
193585
+ if (done) {
193586
+ if (!hasProcessedFinishReason) {
193587
+ const elapsedSec = Math.round((Date.now() - streamStartedAt) / 1000);
193588
+ logForDebugging2(JSON.stringify({
193589
+ type: "premature_stream_close",
193590
+ model,
193591
+ total_chunks: getStreamStats(streamState).totalChunks,
193592
+ duration_ms: Date.now() - streamStartedAt,
193593
+ had_content: hasEmittedContentStart || hasEmittedThinkingStart
193594
+ }), { level: "error" });
193595
+ throw new Error(`Upstream stream closed without finish_reason after ${elapsedSec}s — likely a guard_proxy/vLLM disconnect. The session was interrupted, not completed.`);
193596
+ }
193581
193597
  break;
193598
+ }
193582
193599
  buffer += decoder.decode(value, { stream: true });
193583
193600
  const lines = buffer.split(`
193584
193601
  `);
@@ -376813,7 +376830,7 @@ function getAnthropicEnvMetadata() {
376813
376830
  function getBuildAgeMinutes() {
376814
376831
  if (false)
376815
376832
  ;
376816
- const buildTime = new Date("2026-05-01T21:13:05.033Z").getTime();
376833
+ const buildTime = new Date("2026-05-01T23:21:37.506Z").getTime();
376817
376834
  if (isNaN(buildTime))
376818
376835
  return;
376819
376836
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -417349,7 +417366,7 @@ function buildPrimarySection() {
417349
417366
  }, undefined, false, undefined, this);
417350
417367
  return [{
417351
417368
  label: "Version",
417352
- value: "0.7.12"
417369
+ value: "0.7.14"
417353
417370
  }, {
417354
417371
  label: "Session name",
417355
417372
  value: nameValue
@@ -485299,7 +485316,7 @@ var init_bridge_kick = __esm(() => {
485299
485316
  var call60 = async () => {
485300
485317
  return {
485301
485318
  type: "text",
485302
- value: `${"99.0.0"} (built ${"2026-05-01T21:13:05.033Z"})`
485319
+ value: `${"99.0.0"} (built ${"2026-05-01T23:21:37.506Z"})`
485303
485320
  };
485304
485321
  }, version2, version_default;
485305
485322
  var init_version = __esm(() => {
@@ -561069,7 +561086,7 @@ function WelcomeV2() {
561069
561086
  dimColor: true,
561070
561087
  children: [
561071
561088
  "v",
561072
- "0.7.12",
561089
+ "0.7.14",
561073
561090
  " "
561074
561091
  ]
561075
561092
  }, undefined, true, undefined, this)
@@ -561256,7 +561273,7 @@ function WelcomeV2() {
561256
561273
  dimColor: true,
561257
561274
  children: [
561258
561275
  "v",
561259
- "0.7.12",
561276
+ "0.7.14",
561260
561277
  " "
561261
561278
  ]
561262
561279
  }, undefined, true, undefined, this)
@@ -561472,7 +561489,7 @@ function AppleTerminalWelcomeV2(t0) {
561472
561489
  dimColor: true,
561473
561490
  children: [
561474
561491
  "v",
561475
- "0.7.12",
561492
+ "0.7.14",
561476
561493
  " "
561477
561494
  ]
561478
561495
  }, undefined, true, undefined, this);
@@ -561681,7 +561698,7 @@ function AppleTerminalWelcomeV2(t0) {
561681
561698
  dimColor: true,
561682
561699
  children: [
561683
561700
  "v",
561684
- "0.7.12",
561701
+ "0.7.14",
561685
561702
  " "
561686
561703
  ]
561687
561704
  }, undefined, true, undefined, this);
@@ -565234,6 +565251,95 @@ var init_debug2 = __esm(() => {
565234
565251
  TAIL_READ_BYTES = 64 * 1024;
565235
565252
  });
565236
565253
 
565254
+ // src/skills/bundled/karpathyGuidelines.ts
565255
+ function registerKarpathyGuidelinesSkill() {
565256
+ registerBundledSkill({
565257
+ name: "karpathy-guidelines",
565258
+ description: "Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid overcomplication, make surgical changes, surface assumptions, and define verifiable success criteria.",
565259
+ userInvocable: true,
565260
+ async getPromptForCommand(args) {
565261
+ let prompt = KARPATHY_GUIDELINES_PROMPT;
565262
+ if (args) {
565263
+ prompt += `
565264
+
565265
+ ## Context
565266
+
565267
+ ${args}`;
565268
+ }
565269
+ return [{ type: "text", text: prompt }];
565270
+ }
565271
+ });
565272
+ }
565273
+ var KARPATHY_GUIDELINES_PROMPT = `# Karpathy Guidelines
565274
+
565275
+ Behavioral guidelines to reduce common LLM coding mistakes, derived from Andrej Karpathy's observations on LLM coding pitfalls.
565276
+
565277
+ **Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment.
565278
+
565279
+ ## 1. Think Before Coding
565280
+
565281
+ **Don't assume. Don't hide confusion. Surface tradeoffs.**
565282
+
565283
+ Before implementing:
565284
+ - State your assumptions explicitly. If uncertain, ask.
565285
+ - If multiple interpretations exist, present them - don't pick silently.
565286
+ - If a simpler approach exists, say so. Push back when warranted.
565287
+ - If something is unclear, stop. Name what's confusing. Ask.
565288
+
565289
+ ## 2. Simplicity First
565290
+
565291
+ **Minimum code that solves the problem. Nothing speculative.**
565292
+
565293
+ - No features beyond what was asked.
565294
+ - No abstractions for single-use code.
565295
+ - No "flexibility" or "configurability" that wasn't requested.
565296
+ - No error handling for impossible scenarios.
565297
+ - If you write 200 lines and it could be 50, rewrite it.
565298
+
565299
+ Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
565300
+
565301
+ ## 3. Surgical Changes
565302
+
565303
+ **Touch only what you must. Clean up only your own mess.**
565304
+
565305
+ When editing existing code:
565306
+ - Don't "improve" adjacent code, comments, or formatting.
565307
+ - Don't refactor things that aren't broken.
565308
+ - Match existing style, even if you'd do it differently.
565309
+ - If you notice unrelated dead code, mention it - don't delete it.
565310
+
565311
+ When your changes create orphans:
565312
+ - Remove imports/variables/functions that YOUR changes made unused.
565313
+ - Don't remove pre-existing dead code unless asked.
565314
+
565315
+ The test: Every changed line should trace directly to the user's request.
565316
+
565317
+ ## 4. Goal-Driven Execution
565318
+
565319
+ **Define success criteria. Loop until verified.**
565320
+
565321
+ Transform tasks into verifiable goals:
565322
+ - "Add validation" → "Write tests for invalid inputs, then make them pass"
565323
+ - "Fix the bug" → "Write a test that reproduces it, then make it pass"
565324
+ - "Refactor X" → "Ensure tests pass before and after"
565325
+
565326
+ For multi-step tasks, state a brief plan:
565327
+ \`\`\`
565328
+ 1. [Step] → verify: [check]
565329
+ 2. [Step] → verify: [check]
565330
+ 3. [Step] → verify: [check]
565331
+ \`\`\`
565332
+
565333
+ Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
565334
+
565335
+ ---
565336
+
565337
+ Apply these guidelines to the current task now.
565338
+ `;
565339
+ var init_karpathyGuidelines = __esm(() => {
565340
+ init_bundledSkills();
565341
+ });
565342
+
565237
565343
  // src/keybindings/schema.ts
565238
565344
  var KEYBINDING_CONTEXTS, KEYBINDING_CONTEXT_DESCRIPTIONS, KEYBINDING_ACTIONS, KeybindingBlockSchema, KeybindingsSchema;
565239
565345
  var init_schema = __esm(() => {
@@ -566426,6 +566532,7 @@ function initBundledSkills() {
566426
566532
  registerKeybindingsSkill();
566427
566533
  registerDebugSkill();
566428
566534
  registerSimplifySkill();
566535
+ registerKarpathyGuidelinesSkill();
566429
566536
  registerBatchSkill();
566430
566537
  if (false) {}
566431
566538
  if (false) {}
@@ -566442,6 +566549,7 @@ var init_bundled = __esm(() => {
566442
566549
  init_batch();
566443
566550
  init_claudeInChrome();
566444
566551
  init_debug2();
566552
+ init_karpathyGuidelines();
566445
566553
  init_keybindings3();
566446
566554
  init_loop();
566447
566555
  init_simplify();
@@ -579721,7 +579829,7 @@ __export(exports_update, {
579721
579829
  async function update() {
579722
579830
  if (getAPIProvider() !== "firstParty") {
579723
579831
  writeToStdout(source_default.yellow(`Auto-update is not available for third-party provider builds.
579724
- `) + `Current version: ${"0.7.12"}
579832
+ `) + `Current version: ${"0.7.14"}
579725
579833
 
579726
579834
  ` + `To update, reinstall from npm:
579727
579835
  ` + source_default.bold(` npm install -g ${"@verboo/code"}@latest`) + `
@@ -579732,7 +579840,7 @@ async function update() {
579732
579840
  await gracefulShutdown(0);
579733
579841
  }
579734
579842
  logEvent("tengu_update_check", {});
579735
- writeToStdout(`Current version: ${"0.7.12"}
579843
+ writeToStdout(`Current version: ${"0.7.14"}
579736
579844
  `);
579737
579845
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
579738
579846
  writeToStdout(`Checking for updates to ${channel} version...
@@ -579817,8 +579925,8 @@ async function update() {
579817
579925
  writeToStdout(`Claude is managed by Homebrew.
579818
579926
  `);
579819
579927
  const latest = await getLatestVersion(channel);
579820
- if (latest && !gte("0.7.12", latest)) {
579821
- writeToStdout(`Update available: ${"0.7.12"} → ${latest}
579928
+ if (latest && !gte("0.7.14", latest)) {
579929
+ writeToStdout(`Update available: ${"0.7.14"} → ${latest}
579822
579930
  `);
579823
579931
  writeToStdout(`
579824
579932
  `);
@@ -579834,8 +579942,8 @@ async function update() {
579834
579942
  writeToStdout(`Claude is managed by winget.
579835
579943
  `);
579836
579944
  const latest = await getLatestVersion(channel);
579837
- if (latest && !gte("0.7.12", latest)) {
579838
- writeToStdout(`Update available: ${"0.7.12"} → ${latest}
579945
+ if (latest && !gte("0.7.14", latest)) {
579946
+ writeToStdout(`Update available: ${"0.7.14"} → ${latest}
579839
579947
  `);
579840
579948
  writeToStdout(`
579841
579949
  `);
@@ -579851,8 +579959,8 @@ async function update() {
579851
579959
  writeToStdout(`Claude is managed by apk.
579852
579960
  `);
579853
579961
  const latest = await getLatestVersion(channel);
579854
- if (latest && !gte("0.7.12", latest)) {
579855
- writeToStdout(`Update available: ${"0.7.12"} → ${latest}
579962
+ if (latest && !gte("0.7.14", latest)) {
579963
+ writeToStdout(`Update available: ${"0.7.14"} → ${latest}
579856
579964
  `);
579857
579965
  writeToStdout(`
579858
579966
  `);
@@ -579917,11 +580025,11 @@ async function update() {
579917
580025
  `);
579918
580026
  await gracefulShutdown(1);
579919
580027
  }
579920
- if (result.latestVersion === "0.7.12") {
579921
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.12"})`) + `
580028
+ if (result.latestVersion === "0.7.14") {
580029
+ writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.14"})`) + `
579922
580030
  `);
579923
580031
  } else {
579924
- writeToStdout(source_default.green(`Successfully updated from ${"0.7.12"} to version ${result.latestVersion}`) + `
580032
+ writeToStdout(source_default.green(`Successfully updated from ${"0.7.14"} to version ${result.latestVersion}`) + `
579925
580033
  `);
579926
580034
  await regenerateCompletionCache();
579927
580035
  }
@@ -579981,12 +580089,12 @@ async function update() {
579981
580089
  `);
579982
580090
  await gracefulShutdown(1);
579983
580091
  }
579984
- if (latestVersion === "0.7.12") {
579985
- writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.12"})`) + `
580092
+ if (latestVersion === "0.7.14") {
580093
+ writeToStdout(source_default.green(`Verboo Code is up to date (${"0.7.14"})`) + `
579986
580094
  `);
579987
580095
  await gracefulShutdown(0);
579988
580096
  }
579989
- writeToStdout(`New version available: ${latestVersion} (current: ${"0.7.12"})
580097
+ writeToStdout(`New version available: ${latestVersion} (current: ${"0.7.14"})
579990
580098
  `);
579991
580099
  writeToStdout(`Installing update...
579992
580100
  `);
@@ -580031,7 +580139,7 @@ async function update() {
580031
580139
  logForDebugging2(`update: Installation status: ${status2}`);
580032
580140
  switch (status2) {
580033
580141
  case "success":
580034
- writeToStdout(source_default.green(`Successfully updated from ${"0.7.12"} to version ${latestVersion}`) + `
580142
+ writeToStdout(source_default.green(`Successfully updated from ${"0.7.14"} to version ${latestVersion}`) + `
580035
580143
  `);
580036
580144
  await regenerateCompletionCache();
580037
580145
  break;
@@ -582084,7 +582192,7 @@ Usage: verboo --remote "your task description"`, () => gracefulShutdown(1));
582084
582192
  pendingHookMessages
582085
582193
  }, renderAndRun);
582086
582194
  }
582087
- }).version(`0.7.12 (${cliDesc})`, "-v, --version", "Output the version number");
582195
+ }).version(`0.7.14 (${cliDesc})`, "-v, --version", "Output the version number");
582088
582196
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
582089
582197
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
582090
582198
  if (canUserConfigureAdvisor()) {
@@ -582652,7 +582760,7 @@ if (false) {}
582652
582760
  async function main2() {
582653
582761
  const args = process.argv.slice(2);
582654
582762
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
582655
- console.log(`${"0.7.12"} (Verboo Code)`);
582763
+ console.log(`${"0.7.14"} (Verboo Code)`);
582656
582764
  return;
582657
582765
  }
582658
582766
  if (args.includes("--provider")) {
@@ -582808,4 +582916,4 @@ async function main2() {
582808
582916
  }
582809
582917
  main2();
582810
582918
 
582811
- //# debugId=B566AA3C880BEEFC64756E2164756E21
582919
+ //# debugId=1E427B195CA6CAB364756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verboo/code",
3
- "version": "0.7.12",
3
+ "version": "0.7.14",
4
4
  "description": "Verboo Code — coding agent for the Verboo platform",
5
5
  "type": "module",
6
6
  "bin": {