ur-agent 1.44.7 → 1.44.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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.44.8
4
+
5
+ - Keep auto-memory and automatic learning on by default with explicit opt-outs.
6
+ Automatic learning can now be disabled with `automaticLearningEnabled: false`
7
+ or `UR_CODE_DISABLE_AUTO_LEARNING=1`.
8
+ - Make `/remember <text>` promote explicit notes into recallable auto-memory
9
+ topic files when auto-memory is enabled.
10
+ - Reduce recall token load by prefiltering memory candidates before the
11
+ selector model and surfacing fewer, smaller high-confidence memories.
12
+
3
13
  ## 1.44.7
4
14
 
5
15
  - Add `autoApprove` permission mode for command/tool approval prompts. It
package/README.md CHANGED
@@ -638,6 +638,10 @@ the permission boundary matters.
638
638
  rules.
639
639
  - `ur context-pack scan` writes a repo architecture manifest from package
640
640
  scripts, instruction files, `.ur/verify.json`, and safety config.
641
+ - Auto-memory and automatic learning are enabled by default. Auto-memory can be
642
+ disabled with `autoMemoryEnabled: false`; automatic learning can be disabled
643
+ with `automaticLearningEnabled: false`. The automatic learning path writes
644
+ local JSON stats only and uses no model tokens.
641
645
  - The deep verification subagent is available through `/verify` and can be
642
646
  auto-enabled with `UR_VERIFIER_AUTO_SUBAGENT=1`.
643
647
  - UR enforces permission and sandbox policy before running UR Bash/File
package/dist/cli.js CHANGED
@@ -71438,7 +71438,7 @@ var init_auth = __esm(() => {
71438
71438
 
71439
71439
  // src/utils/userAgent.ts
71440
71440
  function getURCodeUserAgent() {
71441
- return `ur/${"1.44.7"}`;
71441
+ return `ur/${"1.44.8"}`;
71442
71442
  }
71443
71443
 
71444
71444
  // src/utils/workloadContext.ts
@@ -71460,7 +71460,7 @@ function getUserAgent() {
71460
71460
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
71461
71461
  const workload = getWorkload();
71462
71462
  const workloadSuffix = workload ? `, workload/${workload}` : "";
71463
- return `ur-cli/${"1.44.7"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71463
+ return `ur-cli/${"1.44.8"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71464
71464
  }
71465
71465
  function getMCPUserAgent() {
71466
71466
  const parts = [];
@@ -71474,7 +71474,7 @@ function getMCPUserAgent() {
71474
71474
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
71475
71475
  }
71476
71476
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
71477
- return `ur/${"1.44.7"}${suffix}`;
71477
+ return `ur/${"1.44.8"}${suffix}`;
71478
71478
  }
71479
71479
  function getWebFetchUserAgent() {
71480
71480
  return `UR-User (${getURCodeUserAgent()})`;
@@ -71612,7 +71612,7 @@ var init_user = __esm(() => {
71612
71612
  deviceId,
71613
71613
  sessionId: getSessionId(),
71614
71614
  email: getEmail(),
71615
- appVersion: "1.44.7",
71615
+ appVersion: "1.44.8",
71616
71616
  platform: getHostPlatformForAnalytics(),
71617
71617
  organizationUuid,
71618
71618
  accountUuid,
@@ -78129,7 +78129,7 @@ var init_metadata = __esm(() => {
78129
78129
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
78130
78130
  WHITESPACE_REGEX = /\s+/;
78131
78131
  getVersionBase = memoize_default(() => {
78132
- const match = "1.44.7".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
78132
+ const match = "1.44.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
78133
78133
  return match ? match[0] : undefined;
78134
78134
  });
78135
78135
  buildEnvContext = memoize_default(async () => {
@@ -78169,7 +78169,7 @@ var init_metadata = __esm(() => {
78169
78169
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
78170
78170
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
78171
78171
  isURAiAuth: isURAISubscriber(),
78172
- version: "1.44.7",
78172
+ version: "1.44.8",
78173
78173
  versionBase: getVersionBase(),
78174
78174
  buildTime: "",
78175
78175
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -78839,7 +78839,7 @@ function initialize1PEventLogging() {
78839
78839
  const platform2 = getPlatform();
78840
78840
  const attributes = {
78841
78841
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
78842
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.7"
78842
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.8"
78843
78843
  };
78844
78844
  if (platform2 === "wsl") {
78845
78845
  const wslVersion = getWslVersion();
@@ -78866,7 +78866,7 @@ function initialize1PEventLogging() {
78866
78866
  })
78867
78867
  ]
78868
78868
  });
78869
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.7");
78869
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.8");
78870
78870
  }
78871
78871
  async function reinitialize1PEventLoggingIfConfigChanged() {
78872
78872
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -81501,6 +81501,7 @@ var init_types2 = __esm(() => {
81501
81501
  autoMemoryEnabled: exports_external.boolean().optional().describe("Enable auto-memory for this project. When false, UR will not read from or write to the auto-memory directory."),
81502
81502
  autoMemoryDirectory: exports_external.string().optional().describe("Custom directory path for auto-memory storage. Supports ~/ prefix for home directory expansion. Ignored if set in projectSettings (checked-in .ur/settings.json) for security. When unset, defaults to ~/.ur/projects/<sanitized-cwd>/memory/."),
81503
81503
  autoMemoryExtractionInterval: exports_external.number().int().min(1).optional().describe("Run the auto-memory extraction agent only every N eligible turns (default 1 = every turn). The extraction is a forked agent call on the session model, so raising this trades memory freshness for lower token/compute usage."),
81504
+ automaticLearningEnabled: exports_external.boolean().optional().describe("Enable automatic learning from completed ci-loop, arena, escalation, and test-first outcomes. Default: true. The automatic path is a local JSON fold and uses no model calls."),
81504
81505
  verifier: exports_external.object({
81505
81506
  askBeforeGates: exports_external.boolean().optional().describe("When true, UR asks whether to run project verification commands (tests, typecheck, lint) after a task instead of running them automatically. Default: false.")
81506
81507
  }).optional().describe("Verifier behavior configuration"),
@@ -83404,7 +83405,16 @@ function saveStats(cwd2, stats) {
83404
83405
  writeFileSync6(statsPath(cwd2), `${JSON.stringify(stats, null, 2)}
83405
83406
  `);
83406
83407
  }
83408
+ function isAutomaticLearningEnabled() {
83409
+ if (isEnvTruthy(process.env.UR_CODE_DISABLE_AUTO_LEARNING)) {
83410
+ return false;
83411
+ }
83412
+ return getInitialSettings().automaticLearningEnabled !== false;
83413
+ }
83407
83414
  function recordOutcome(cwd2, input) {
83415
+ if (!isAutomaticLearningEnabled()) {
83416
+ return;
83417
+ }
83408
83418
  try {
83409
83419
  saveStats(cwd2, foldOutcomes(loadStats(cwd2), [outcomeFromRun(input)]));
83410
83420
  } catch {}
@@ -83504,7 +83514,9 @@ function formatLearnResult(result, json2) {
83504
83514
  }
83505
83515
  var TEST_PASS_RE, TEST_FAIL_RE;
83506
83516
  var init_learning = __esm(() => {
83517
+ init_envUtils();
83507
83518
  init_json();
83519
+ init_settings2();
83508
83520
  init_artifacts();
83509
83521
  init_headlessAgent();
83510
83522
  init_intentRouter();
@@ -84761,7 +84773,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
84761
84773
  function formatA2AAgentCard(options = {}, pretty = true) {
84762
84774
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
84763
84775
  }
84764
- var urVersion = "1.44.7", coverage, priorityRoadmap;
84776
+ var urVersion = "1.44.8", coverage, priorityRoadmap;
84765
84777
  var init_trends = __esm(() => {
84766
84778
  coverage = [
84767
84779
  {
@@ -86756,7 +86768,7 @@ function getAttributionHeader(fingerprint) {
86756
86768
  if (!isAttributionHeaderEnabled()) {
86757
86769
  return "";
86758
86770
  }
86759
- const version2 = `${"1.44.7"}.${fingerprint}`;
86771
+ const version2 = `${"1.44.8"}.${fingerprint}`;
86760
86772
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
86761
86773
  const cch = "";
86762
86774
  const workload = getWorkload();
@@ -194726,7 +194738,7 @@ function getTelemetryAttributes() {
194726
194738
  attributes["session.id"] = sessionId;
194727
194739
  }
194728
194740
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
194729
- attributes["app.version"] = "1.44.7";
194741
+ attributes["app.version"] = "1.44.8";
194730
194742
  }
194731
194743
  const oauthAccount = getOauthAccountInfo();
194732
194744
  if (oauthAccount) {
@@ -230114,7 +230126,7 @@ function getInstallationEnv() {
230114
230126
  return;
230115
230127
  }
230116
230128
  function getURCodeVersion() {
230117
- return "1.44.7";
230129
+ return "1.44.8";
230118
230130
  }
230119
230131
  async function getInstalledVSCodeExtensionVersion(command) {
230120
230132
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -232953,7 +232965,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
232953
232965
  const client2 = new Client({
232954
232966
  name: "ur",
232955
232967
  title: "UR",
232956
- version: "1.44.7",
232968
+ version: "1.44.8",
232957
232969
  description: "UR-Nexus autonomous engineering workflow engine",
232958
232970
  websiteUrl: PRODUCT_URL
232959
232971
  }, {
@@ -233307,7 +233319,7 @@ var init_client5 = __esm(() => {
233307
233319
  const client2 = new Client({
233308
233320
  name: "ur",
233309
233321
  title: "UR",
233310
- version: "1.44.7",
233322
+ version: "1.44.8",
233311
233323
  description: "UR-Nexus autonomous engineering workflow engine",
233312
233324
  websiteUrl: PRODUCT_URL
233313
233325
  }, {
@@ -243121,9 +243133,9 @@ async function assertMinVersion() {
243121
243133
  if (false) {}
243122
243134
  try {
243123
243135
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
243124
- if (versionConfig.minVersion && lt("1.44.7", versionConfig.minVersion)) {
243136
+ if (versionConfig.minVersion && lt("1.44.8", versionConfig.minVersion)) {
243125
243137
  console.error(`
243126
- It looks like your version of UR (${"1.44.7"}) needs an update.
243138
+ It looks like your version of UR (${"1.44.8"}) needs an update.
243127
243139
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
243128
243140
 
243129
243141
  To update, please run:
@@ -243339,7 +243351,7 @@ async function installGlobalPackage(specificVersion) {
243339
243351
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
243340
243352
  logEvent("tengu_auto_updater_lock_contention", {
243341
243353
  pid: process.pid,
243342
- currentVersion: "1.44.7"
243354
+ currentVersion: "1.44.8"
243343
243355
  });
243344
243356
  return "in_progress";
243345
243357
  }
@@ -243348,7 +243360,7 @@ async function installGlobalPackage(specificVersion) {
243348
243360
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
243349
243361
  logError2(new Error("Windows NPM detected in WSL environment"));
243350
243362
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
243351
- currentVersion: "1.44.7"
243363
+ currentVersion: "1.44.8"
243352
243364
  });
243353
243365
  console.error(`
243354
243366
  Error: Windows NPM detected in WSL
@@ -243883,7 +243895,7 @@ function detectLinuxGlobPatternWarnings() {
243883
243895
  }
243884
243896
  async function getDoctorDiagnostic() {
243885
243897
  const installationType = await getCurrentInstallationType();
243886
- const version2 = typeof MACRO !== "undefined" ? "1.44.7" : "unknown";
243898
+ const version2 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
243887
243899
  const installationPath = await getInstallationPath();
243888
243900
  const invokedBinary = getInvokedBinary();
243889
243901
  const multipleInstallations = await detectMultipleInstallations();
@@ -244818,8 +244830,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244818
244830
  const maxVersion = await getMaxVersion();
244819
244831
  if (maxVersion && gt(version2, maxVersion)) {
244820
244832
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
244821
- if (gte("1.44.7", maxVersion)) {
244822
- logForDebugging(`Native installer: current version ${"1.44.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
244833
+ if (gte("1.44.8", maxVersion)) {
244834
+ logForDebugging(`Native installer: current version ${"1.44.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
244823
244835
  logEvent("tengu_native_update_skipped_max_version", {
244824
244836
  latency_ms: Date.now() - startTime,
244825
244837
  max_version: maxVersion,
@@ -244830,7 +244842,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244830
244842
  version2 = maxVersion;
244831
244843
  }
244832
244844
  }
244833
- if (!forceReinstall && version2 === "1.44.7" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244845
+ if (!forceReinstall && version2 === "1.44.8" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244834
244846
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
244835
244847
  logEvent("tengu_native_update_complete", {
244836
244848
  latency_ms: Date.now() - startTime,
@@ -302327,6 +302339,11 @@ var init_supportedSettings = __esm(() => {
302327
302339
  type: "boolean",
302328
302340
  description: "Enable auto-memory"
302329
302341
  },
302342
+ automaticLearningEnabled: {
302343
+ source: "settings",
302344
+ type: "boolean",
302345
+ description: "Automatically learn from completed agent runs using local JSON stats"
302346
+ },
302330
302347
  "codeIndex.autoReindex": {
302331
302348
  source: "global",
302332
302349
  type: "boolean",
@@ -323429,16 +323446,44 @@ function isHumanTurn(m) {
323429
323446
  }
323430
323447
 
323431
323448
  // src/memdir/findRelevantMemories.ts
323449
+ function tokenizeForMemoryRecall(text) {
323450
+ const terms = new Set;
323451
+ for (const raw of text.toLowerCase().match(/[a-z0-9][a-z0-9._/-]{2,}/g) ?? []) {
323452
+ const term = raw.replace(/^[/._-]+|[/._-]+$/g, "");
323453
+ if (term.length >= 3 && !STOP_WORDS.has(term)) {
323454
+ terms.add(term);
323455
+ }
323456
+ }
323457
+ return terms;
323458
+ }
323459
+ function scoreMemoryForQuery(queryTerms, memory) {
323460
+ const haystack = `${memory.filename} ${memory.description ?? ""} ${memory.type ?? ""}`.toLowerCase();
323461
+ let score = 0;
323462
+ for (const term of queryTerms) {
323463
+ if (haystack.includes(term)) {
323464
+ score += memory.filename.toLowerCase().includes(term) ? 3 : 1;
323465
+ }
323466
+ }
323467
+ return score;
323468
+ }
323432
323469
  async function findRelevantMemories(query2, memoryDir, signal, recentTools = [], alreadySurfaced = new Set) {
323433
323470
  const memories = (await scanMemoryFiles(memoryDir, signal)).filter((m) => !alreadySurfaced.has(m.filePath));
323434
323471
  if (memories.length === 0) {
323435
323472
  return [];
323436
323473
  }
323437
- const selectedFilenames = await selectRelevantMemories(query2, memories, signal, recentTools);
323438
- const byFilename = new Map(memories.map((m) => [m.filename, m]));
323474
+ const queryTerms = tokenizeForMemoryRecall(query2);
323475
+ if (queryTerms.size === 0) {
323476
+ return [];
323477
+ }
323478
+ const candidates2 = memories.map((memory) => ({ memory, score: scoreMemoryForQuery(queryTerms, memory) })).filter(({ score }) => score > 0).sort((a2, b) => b.score - a2.score || b.memory.mtimeMs - a2.memory.mtimeMs).slice(0, MAX_SELECTOR_CANDIDATES).map(({ memory }) => memory);
323479
+ if (candidates2.length === 0) {
323480
+ return [];
323481
+ }
323482
+ const selectedFilenames = await selectRelevantMemories(query2, candidates2, signal, recentTools);
323483
+ const byFilename = new Map(candidates2.map((m) => [m.filename, m]));
323439
323484
  const selected = selectedFilenames.map((filename) => byFilename.get(filename)).filter((m) => m !== undefined);
323440
323485
  if (false) {}
323441
- return selected.map((m) => ({ path: m.filePath, mtimeMs: m.mtimeMs }));
323486
+ return selected.slice(0, 3).map((m) => ({ path: m.filePath, mtimeMs: m.mtimeMs }));
323442
323487
  }
323443
323488
  async function selectRelevantMemories(query2, memories, signal, recentTools) {
323444
323489
  const validFilenames = new Set(memories.map((m) => m.filename));
@@ -323491,11 +323536,11 @@ ${manifest}${toolsSection}`
323491
323536
  }
323492
323537
  var SELECT_MEMORIES_SYSTEM_PROMPT = `You are selecting memories that will be useful to UR as it processes a user's query. You will be given the user's query and a list of available memory files with their filenames and descriptions.
323493
323538
 
323494
- Return a list of filenames for the memories that will clearly be useful to UR as it processes the user's query (up to 5). Only include memories that you are certain will be helpful based on their name and description.
323539
+ Return a list of filenames for the memories that will clearly be useful to UR as it processes the user's query (up to 3). Only include memories that you are certain will be helpful based on their name and description.
323495
323540
  - If you are unsure if a memory will be useful in processing the user's query, then do not include it in your list. Be selective and discerning.
323496
323541
  - If there are no memories in the list that would clearly be useful, feel free to return an empty list.
323497
323542
  - If a list of recently-used tools is provided, do not select memories that are usage reference or API documentation for those tools (UR is already exercising them). DO still select memories containing warnings, gotchas, or known issues about those tools \u2014 active use is exactly when those matter.
323498
- `;
323543
+ `, MAX_SELECTOR_CANDIDATES = 40, STOP_WORDS;
323499
323544
  var init_findRelevantMemories = __esm(() => {
323500
323545
  init_debug();
323501
323546
  init_errors();
@@ -323503,6 +323548,45 @@ var init_findRelevantMemories = __esm(() => {
323503
323548
  init_sideQuery();
323504
323549
  init_slowOperations();
323505
323550
  init_memoryScan();
323551
+ STOP_WORDS = new Set([
323552
+ "a",
323553
+ "about",
323554
+ "an",
323555
+ "and",
323556
+ "are",
323557
+ "as",
323558
+ "at",
323559
+ "be",
323560
+ "but",
323561
+ "by",
323562
+ "can",
323563
+ "do",
323564
+ "for",
323565
+ "from",
323566
+ "how",
323567
+ "i",
323568
+ "in",
323569
+ "is",
323570
+ "it",
323571
+ "me",
323572
+ "my",
323573
+ "of",
323574
+ "on",
323575
+ "or",
323576
+ "our",
323577
+ "please",
323578
+ "should",
323579
+ "that",
323580
+ "the",
323581
+ "this",
323582
+ "to",
323583
+ "use",
323584
+ "we",
323585
+ "what",
323586
+ "when",
323587
+ "with",
323588
+ "you"
323589
+ ]);
323506
323590
  });
323507
323591
 
323508
323592
  // src/utils/attachments.ts
@@ -324186,7 +324270,7 @@ async function getRelevantMemoryAttachments(input, agents, readFileState, recent
324186
324270
  });
324187
324271
  const dirs = memoryDirs.length > 0 ? memoryDirs : [getAutoMemPath()];
324188
324272
  const allResults = await Promise.all(dirs.map((dir) => findRelevantMemories(input, dir, signal, recentTools, alreadySurfaced).catch(() => [])));
324189
- const selected = allResults.flat().filter((m) => !readFileState.has(m.path) && !alreadySurfaced.has(m.path)).slice(0, 5);
324273
+ const selected = allResults.flat().filter((m) => !readFileState.has(m.path) && !alreadySurfaced.has(m.path)).slice(0, 3);
324190
324274
  const memories = await readMemoriesForSurfacing(selected, signal);
324191
324275
  if (memories.length === 0) {
324192
324276
  return [];
@@ -325055,7 +325139,7 @@ function isFileReadDenied(filePath, toolPermissionContext) {
325055
325139
  const denyRule = matchingRuleForInput(filePath, toolPermissionContext, "read", "deny");
325056
325140
  return denyRule !== null;
325057
325141
  }
325058
- var BRIEF_TOOL_NAME3 = null, TODO_REMINDER_CONFIG, PLAN_MODE_ATTACHMENT_CONFIG, MAX_MEMORY_LINES = 200, MAX_MEMORY_BYTES = 4096, RELEVANT_MEMORIES_CONFIG, VERIFY_PLAN_REMINDER_CONFIG, INLINE_NOTIFICATION_MODES, sentSkillNames, suppressNext = false;
325142
+ var BRIEF_TOOL_NAME3 = null, TODO_REMINDER_CONFIG, PLAN_MODE_ATTACHMENT_CONFIG, MAX_MEMORY_LINES = 120, MAX_MEMORY_BYTES = 2048, RELEVANT_MEMORIES_CONFIG, VERIFY_PLAN_REMINDER_CONFIG, INLINE_NOTIFICATION_MODES, sentSkillNames, suppressNext = false;
325059
325143
  var init_attachments2 = __esm(() => {
325060
325144
  init_analytics();
325061
325145
  init_Tool();
@@ -325136,7 +325220,7 @@ var init_attachments2 = __esm(() => {
325136
325220
  FULL_REMINDER_EVERY_N_ATTACHMENTS: 5
325137
325221
  };
325138
325222
  RELEVANT_MEMORIES_CONFIG = {
325139
- MAX_SESSION_BYTES: 60 * 1024
325223
+ MAX_SESSION_BYTES: 24 * 1024
325140
325224
  };
325141
325225
  VERIFY_PLAN_REMINDER_CONFIG = {
325142
325226
  TURNS_BETWEEN_REMINDERS: 10
@@ -341523,7 +341607,7 @@ function Feedback({
341523
341607
  platform: env2.platform,
341524
341608
  gitRepo: envInfo.isGit,
341525
341609
  terminal: env2.terminal,
341526
- version: "1.44.7",
341610
+ version: "1.44.8",
341527
341611
  transcript: normalizeMessagesForAPI(messages),
341528
341612
  errors: sanitizedErrors,
341529
341613
  lastApiRequest: getLastAPIRequest(),
@@ -341715,7 +341799,7 @@ function Feedback({
341715
341799
  ", ",
341716
341800
  env2.terminal,
341717
341801
  ", v",
341718
- "1.44.7"
341802
+ "1.44.8"
341719
341803
  ]
341720
341804
  }, undefined, true, undefined, this)
341721
341805
  ]
@@ -341821,7 +341905,7 @@ ${sanitizedDescription}
341821
341905
  ` + `**Environment Info**
341822
341906
  ` + `- Platform: ${env2.platform}
341823
341907
  ` + `- Terminal: ${env2.terminal}
341824
- ` + `- Version: ${"1.44.7"}
341908
+ ` + `- Version: ${"1.44.8"}
341825
341909
  ` + `- Feedback ID: ${feedbackId}
341826
341910
  ` + `
341827
341911
  **Errors**
@@ -344932,7 +345016,7 @@ function buildPrimarySection() {
344932
345016
  }, undefined, false, undefined, this);
344933
345017
  return [{
344934
345018
  label: "Version",
344935
- value: "1.44.7"
345019
+ value: "1.44.8"
344936
345020
  }, {
344937
345021
  label: "Session name",
344938
345022
  value: nameValue
@@ -348262,7 +348346,7 @@ function Config({
348262
348346
  }
348263
348347
  }, undefined, false, undefined, this)
348264
348348
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
348265
- currentVersion: "1.44.7",
348349
+ currentVersion: "1.44.8",
348266
348350
  onChoice: (choice) => {
348267
348351
  setShowSubmenu(null);
348268
348352
  setTabsHidden(false);
@@ -348274,7 +348358,7 @@ function Config({
348274
348358
  autoUpdatesChannel: "stable"
348275
348359
  };
348276
348360
  if (choice === "stay") {
348277
- newSettings.minimumVersion = "1.44.7";
348361
+ newSettings.minimumVersion = "1.44.8";
348278
348362
  }
348279
348363
  updateSettingsForSource("userSettings", newSettings);
348280
348364
  setSettingsData((prev_27) => ({
@@ -356344,7 +356428,7 @@ function HelpV2(t0) {
356344
356428
  let t6;
356345
356429
  if ($3[31] !== tabs) {
356346
356430
  t6 = /* @__PURE__ */ jsx_dev_runtime203.jsxDEV(Tabs, {
356347
- title: `UR v${"1.44.7"}`,
356431
+ title: `UR v${"1.44.8"}`,
356348
356432
  color: "professionalBlue",
356349
356433
  defaultTab: "general",
356350
356434
  children: tabs
@@ -357090,7 +357174,7 @@ function buildToolUseContext(tools, readFileStateCache) {
357090
357174
  async function handleInitialize(options2) {
357091
357175
  return {
357092
357176
  name: "UR",
357093
- version: "1.44.7",
357177
+ version: "1.44.8",
357094
357178
  protocolVersion: "0.1.0",
357095
357179
  workspaceRoot: options2.cwd,
357096
357180
  capabilities: {
@@ -377232,7 +377316,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
377232
377316
  return [];
377233
377317
  }
377234
377318
  }
377235
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.7") {
377319
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.8") {
377236
377320
  if (process.env.USER_TYPE === "ant") {
377237
377321
  const changelog = "";
377238
377322
  if (changelog) {
@@ -377259,7 +377343,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.7")
377259
377343
  releaseNotes
377260
377344
  };
377261
377345
  }
377262
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.7") {
377346
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.8") {
377263
377347
  if (process.env.USER_TYPE === "ant") {
377264
377348
  const changelog = "";
377265
377349
  if (changelog) {
@@ -378438,7 +378522,7 @@ function getRecentActivitySync() {
378438
378522
  return cachedActivity;
378439
378523
  }
378440
378524
  function getLogoDisplayData() {
378441
- const version2 = process.env.DEMO_VERSION ?? "1.44.7";
378525
+ const version2 = process.env.DEMO_VERSION ?? "1.44.8";
378442
378526
  const serverUrl = getDirectConnectServerUrl();
378443
378527
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
378444
378528
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -379227,7 +379311,7 @@ function LogoV2() {
379227
379311
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
379228
379312
  t2 = () => {
379229
379313
  const currentConfig2 = getGlobalConfig();
379230
- if (currentConfig2.lastReleaseNotesSeen === "1.44.7") {
379314
+ if (currentConfig2.lastReleaseNotesSeen === "1.44.8") {
379231
379315
  return;
379232
379316
  }
379233
379317
  saveGlobalConfig(_temp326);
@@ -379912,12 +379996,12 @@ function LogoV2() {
379912
379996
  return t41;
379913
379997
  }
379914
379998
  function _temp326(current) {
379915
- if (current.lastReleaseNotesSeen === "1.44.7") {
379999
+ if (current.lastReleaseNotesSeen === "1.44.8") {
379916
380000
  return current;
379917
380001
  }
379918
380002
  return {
379919
380003
  ...current,
379920
- lastReleaseNotesSeen: "1.44.7"
380004
+ lastReleaseNotesSeen: "1.44.8"
379921
380005
  };
379922
380006
  }
379923
380007
  function _temp241(s_0) {
@@ -410338,6 +410422,7 @@ var init_project2 = __esm(() => {
410338
410422
  });
410339
410423
 
410340
410424
  // src/ur/notes.ts
410425
+ import { createHash as createHash25 } from "crypto";
410341
410426
  import { appendFileSync as appendFileSync5, existsSync as existsSync50, mkdirSync as mkdirSync43, readFileSync as readFileSync56, writeFileSync as writeFileSync42 } from "fs";
410342
410427
  import { dirname as dirname62, join as join173 } from "path";
410343
410428
  function readJsonl(file2) {
@@ -410359,6 +410444,58 @@ function append2(file2, rec) {
410359
410444
  `);
410360
410445
  } catch {}
410361
410446
  }
410447
+ function memorySlug(text) {
410448
+ const words = text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").split("-").filter(Boolean).slice(0, 8).join("-");
410449
+ const hash2 = createHash25("sha1").update(text).digest("hex").slice(0, 8);
410450
+ return `${words || "remembered-note"}-${hash2}`;
410451
+ }
410452
+ function yamlSingleQuote(value) {
410453
+ return `'${value.replaceAll("'", "''")}'`;
410454
+ }
410455
+ function oneLine(text, max2 = 140) {
410456
+ const normalized = text.replace(/\s+/g, " ").trim();
410457
+ return normalized.length <= max2 ? normalized : `${normalized.slice(0, max2 - 1)}\u2026`;
410458
+ }
410459
+ function rememberInAutoMemory(memoryDir, text) {
410460
+ const trimmed = text.trim();
410461
+ if (!trimmed)
410462
+ return null;
410463
+ try {
410464
+ mkdirSync43(memoryDir, { recursive: true });
410465
+ const slug4 = memorySlug(trimmed);
410466
+ const fileName = `${slug4}.md`;
410467
+ const filePath = join173(memoryDir, fileName);
410468
+ const description = oneLine(trimmed);
410469
+ const now7 = new Date().toISOString();
410470
+ writeFileSync42(filePath, [
410471
+ "---",
410472
+ `name: ${yamlSingleQuote(description)}`,
410473
+ `description: ${yamlSingleQuote(description)}`,
410474
+ "type: feedback",
410475
+ "---",
410476
+ "",
410477
+ "# Remembered note",
410478
+ "",
410479
+ trimmed,
410480
+ "",
410481
+ `Saved: ${now7}`,
410482
+ ""
410483
+ ].join(`
410484
+ `));
410485
+ const indexPath3 = join173(memoryDir, "MEMORY.md");
410486
+ const indexLine = `- [Remembered note](${fileName}) \u2014 ${description}`;
410487
+ const existing2 = existsSync50(indexPath3) ? readFileSync56(indexPath3, "utf8") : "";
410488
+ if (!existing2.includes(`](${fileName})`)) {
410489
+ const prefix = existing2.trimEnd();
410490
+ writeFileSync42(indexPath3, `${prefix ? `${prefix}
410491
+ ` : ""}${indexLine}
410492
+ `);
410493
+ }
410494
+ return filePath;
410495
+ } catch {
410496
+ return null;
410497
+ }
410498
+ }
410362
410499
  function remember(cwd2, text) {
410363
410500
  append2(memFile(cwd2), { ts: new Date().toISOString(), text, kind: "note" });
410364
410501
  }
@@ -410402,9 +410539,13 @@ var call93 = async (args) => {
410402
410539
  `) : "no memory notes yet" };
410403
410540
  }
410404
410541
  remember(getCwd(), text);
410542
+ if (isAutoMemoryEnabled()) {
410543
+ rememberInAutoMemory(getAutoMemPath(), text);
410544
+ }
410405
410545
  return { type: "text", value: `remembered: ${text}` };
410406
410546
  };
410407
410547
  var init_remember = __esm(() => {
410548
+ init_paths();
410408
410549
  init_cwd2();
410409
410550
  init_notes();
410410
410551
  });
@@ -596872,7 +597013,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
596872
597013
  smapsRollup,
596873
597014
  platform: process.platform,
596874
597015
  nodeVersion: process.version,
596875
- ccVersion: "1.44.7"
597016
+ ccVersion: "1.44.8"
596876
597017
  };
596877
597018
  }
596878
597019
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -597458,7 +597599,7 @@ var init_bridge_kick = __esm(() => {
597458
597599
  var call138 = async () => {
597459
597600
  return {
597460
597601
  type: "text",
597461
- value: "1.44.7"
597602
+ value: "1.44.8"
597462
597603
  };
597463
597604
  }, version2, version_default;
597464
597605
  var init_version = __esm(() => {
@@ -607551,7 +607692,7 @@ function generateHtmlReport(data, insights) {
607551
607692
  </html>`;
607552
607693
  }
607553
607694
  function buildExportData(data, insights, facets, remoteStats) {
607554
- const version3 = typeof MACRO !== "undefined" ? "1.44.7" : "unknown";
607695
+ const version3 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
607555
607696
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
607556
607697
  const facets_summary = {
607557
607698
  total: facets.size,
@@ -611833,7 +611974,7 @@ var init_sessionStorage = __esm(() => {
611833
611974
  init_settings2();
611834
611975
  init_slowOperations();
611835
611976
  init_uuid();
611836
- VERSION5 = typeof MACRO !== "undefined" ? "1.44.7" : "unknown";
611977
+ VERSION5 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
611837
611978
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
611838
611979
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
611839
611980
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -613038,7 +613179,7 @@ var init_filesystem = __esm(() => {
613038
613179
  });
613039
613180
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
613040
613181
  const nonce = randomBytes18(16).toString("hex");
613041
- return join202(getURTempDir(), "bundled-skills", "1.44.7", nonce);
613182
+ return join202(getURTempDir(), "bundled-skills", "1.44.8", nonce);
613042
613183
  });
613043
613184
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
613044
613185
  });
@@ -618886,7 +619027,7 @@ var init_prompts4 = __esm(() => {
618886
619027
  });
618887
619028
 
618888
619029
  // src/utils/api.ts
618889
- import { createHash as createHash25 } from "crypto";
619030
+ import { createHash as createHash26 } from "crypto";
618890
619031
  function filterSwarmFieldsFromSchema(toolName, schema) {
618891
619032
  const fieldsToRemove = SWARM_FIELDS_BY_TOOL[toolName];
618892
619033
  if (!fieldsToRemove || fieldsToRemove.length === 0) {
@@ -618976,7 +619117,7 @@ function logAPIPrefix(systemPrompt) {
618976
619117
  logEvent("tengu_sysprompt_block", {
618977
619118
  snippet: firstSystemPrompt?.slice(0, 20),
618978
619119
  length: firstSystemPrompt?.length ?? 0,
618979
- hash: firstSystemPrompt ? createHash25("sha256").update(firstSystemPrompt).digest("hex") : ""
619120
+ hash: firstSystemPrompt ? createHash26("sha256").update(firstSystemPrompt).digest("hex") : ""
618980
619121
  });
618981
619122
  }
618982
619123
  function splitSysPromptPrefix(systemPrompt, options2) {
@@ -619302,7 +619443,7 @@ var init_api3 = __esm(() => {
619302
619443
  });
619303
619444
 
619304
619445
  // src/utils/fingerprint.ts
619305
- import { createHash as createHash26 } from "crypto";
619446
+ import { createHash as createHash27 } from "crypto";
619306
619447
  function extractFirstMessageText(messages) {
619307
619448
  const firstUserMessage = messages.find((msg) => msg.type === "user");
619308
619449
  if (!firstUserMessage) {
@@ -619324,12 +619465,12 @@ function computeFingerprint(messageText2, version3) {
619324
619465
  const indices = [4, 7, 20];
619325
619466
  const chars = indices.map((i3) => messageText2[i3] || "0").join("");
619326
619467
  const fingerprintInput = `${FINGERPRINT_SALT}${chars}${version3}`;
619327
- const hash2 = createHash26("sha256").update(fingerprintInput).digest("hex");
619468
+ const hash2 = createHash27("sha256").update(fingerprintInput).digest("hex");
619328
619469
  return hash2.slice(0, 3);
619329
619470
  }
619330
619471
  function computeFingerprintFromMessages(messages) {
619331
619472
  const firstMessageText = extractFirstMessageText(messages);
619332
- return computeFingerprint(firstMessageText, "1.44.7");
619473
+ return computeFingerprint(firstMessageText, "1.44.8");
619333
619474
  }
619334
619475
  var FINGERPRINT_SALT = "59cf53e54c78";
619335
619476
  var init_fingerprint = () => {};
@@ -621203,7 +621344,7 @@ async function sideQuery(opts) {
621203
621344
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
621204
621345
  }
621205
621346
  const messageText2 = extractFirstUserMessageText(messages);
621206
- const fingerprint2 = computeFingerprint(messageText2, "1.44.7");
621347
+ const fingerprint2 = computeFingerprint(messageText2, "1.44.8");
621207
621348
  const attributionHeader = getAttributionHeader(fingerprint2);
621208
621349
  const systemBlocks = [
621209
621350
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -625940,7 +626081,7 @@ function buildSystemInitMessage(inputs) {
625940
626081
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625941
626082
  apiKeySource: getURHQApiKeyWithSource().source,
625942
626083
  betas: getSdkBetas(),
625943
- ur_version: "1.44.7",
626084
+ ur_version: "1.44.8",
625944
626085
  output_style: outputStyle2,
625945
626086
  agents: inputs.agents.map((agent) => agent.agentType),
625946
626087
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -640568,7 +640709,7 @@ var init_useVoiceEnabled = __esm(() => {
640568
640709
  function getSemverPart(version3) {
640569
640710
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
640570
640711
  }
640571
- function useUpdateNotification(updatedVersion, initialVersion = "1.44.7") {
640712
+ function useUpdateNotification(updatedVersion, initialVersion = "1.44.8") {
640572
640713
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
640573
640714
  if (!updatedVersion) {
640574
640715
  return null;
@@ -640617,7 +640758,7 @@ function AutoUpdater({
640617
640758
  return;
640618
640759
  }
640619
640760
  if (false) {}
640620
- const currentVersion = "1.44.7";
640761
+ const currentVersion = "1.44.8";
640621
640762
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
640622
640763
  let latestVersion = await getLatestVersion(channel);
640623
640764
  const isDisabled = isAutoUpdaterDisabled();
@@ -640846,12 +640987,12 @@ function NativeAutoUpdater({
640846
640987
  logEvent("tengu_native_auto_updater_start", {});
640847
640988
  try {
640848
640989
  const maxVersion = await getMaxVersion();
640849
- if (maxVersion && gt("1.44.7", maxVersion)) {
640990
+ if (maxVersion && gt("1.44.8", maxVersion)) {
640850
640991
  const msg = await getMaxVersionMessage();
640851
640992
  setMaxVersionIssue(msg ?? "affects your version");
640852
640993
  }
640853
640994
  const result = await installLatest(channel);
640854
- const currentVersion = "1.44.7";
640995
+ const currentVersion = "1.44.8";
640855
640996
  const latencyMs = Date.now() - startTime;
640856
640997
  if (result.lockFailed) {
640857
640998
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -640988,17 +641129,17 @@ function PackageManagerAutoUpdater(t0) {
640988
641129
  const maxVersion = await getMaxVersion();
640989
641130
  if (maxVersion && latest && gt(latest, maxVersion)) {
640990
641131
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
640991
- if (gte("1.44.7", maxVersion)) {
640992
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
641132
+ if (gte("1.44.8", maxVersion)) {
641133
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
640993
641134
  setUpdateAvailable(false);
640994
641135
  return;
640995
641136
  }
640996
641137
  latest = maxVersion;
640997
641138
  }
640998
- const hasUpdate = latest && !gte("1.44.7", latest) && !shouldSkipVersion(latest);
641139
+ const hasUpdate = latest && !gte("1.44.8", latest) && !shouldSkipVersion(latest);
640999
641140
  setUpdateAvailable(!!hasUpdate);
641000
641141
  if (hasUpdate) {
641001
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.7"} -> ${latest}`);
641142
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.8"} -> ${latest}`);
641002
641143
  }
641003
641144
  };
641004
641145
  $3[0] = t1;
@@ -641032,7 +641173,7 @@ function PackageManagerAutoUpdater(t0) {
641032
641173
  wrap: "truncate",
641033
641174
  children: [
641034
641175
  "currentVersion: ",
641035
- "1.44.7"
641176
+ "1.44.8"
641036
641177
  ]
641037
641178
  }, undefined, true, undefined, this);
641038
641179
  $3[3] = verbose;
@@ -653488,7 +653629,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
653488
653629
  project_dir: getOriginalCwd(),
653489
653630
  added_dirs: addedDirs
653490
653631
  },
653491
- version: "1.44.7",
653632
+ version: "1.44.8",
653492
653633
  output_style: {
653493
653634
  name: outputStyleName
653494
653635
  },
@@ -653571,7 +653712,7 @@ function StatusLineInner({
653571
653712
  const taskValues = Object.values(tasks2);
653572
653713
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
653573
653714
  const defaultStatusLineText = buildDefaultStatusBar({
653574
- version: "1.44.7",
653715
+ version: "1.44.8",
653575
653716
  providerLabel: providerRuntime.providerLabel,
653576
653717
  authMode: providerRuntime.authLabel,
653577
653718
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -665502,7 +665643,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
665502
665643
  } catch {}
665503
665644
  const data = {
665504
665645
  trigger: trigger2,
665505
- version: "1.44.7",
665646
+ version: "1.44.8",
665506
665647
  platform: process.platform,
665507
665648
  transcript,
665508
665649
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -677387,7 +677528,7 @@ function WelcomeV2() {
677387
677528
  dimColor: true,
677388
677529
  children: [
677389
677530
  "v",
677390
- "1.44.7"
677531
+ "1.44.8"
677391
677532
  ]
677392
677533
  }, undefined, true, undefined, this)
677393
677534
  ]
@@ -678647,7 +678788,7 @@ function completeOnboarding() {
678647
678788
  saveGlobalConfig((current) => ({
678648
678789
  ...current,
678649
678790
  hasCompletedOnboarding: true,
678650
- lastOnboardingVersion: "1.44.7"
678791
+ lastOnboardingVersion: "1.44.8"
678651
678792
  }));
678652
678793
  }
678653
678794
  function showDialog(root2, renderer) {
@@ -683687,7 +683828,7 @@ function appendToLog(path24, message) {
683687
683828
  cwd: getFsImplementation().cwd(),
683688
683829
  userType: process.env.USER_TYPE,
683689
683830
  sessionId: getSessionId(),
683690
- version: "1.44.7"
683831
+ version: "1.44.8"
683691
683832
  };
683692
683833
  getLogWriter(path24).write(messageWithTimestamp);
683693
683834
  }
@@ -687781,8 +687922,8 @@ async function getEnvLessBridgeConfig() {
687781
687922
  }
687782
687923
  async function checkEnvLessBridgeMinVersion() {
687783
687924
  const cfg = await getEnvLessBridgeConfig();
687784
- if (cfg.min_version && lt("1.44.7", cfg.min_version)) {
687785
- return `Your version of UR (${"1.44.7"}) is too old for Remote Control.
687925
+ if (cfg.min_version && lt("1.44.8", cfg.min_version)) {
687926
+ return `Your version of UR (${"1.44.8"}) is too old for Remote Control.
687786
687927
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
687787
687928
  }
687788
687929
  return null;
@@ -688256,7 +688397,7 @@ async function initBridgeCore(params) {
688256
688397
  const rawApi = createBridgeApiClient({
688257
688398
  baseUrl,
688258
688399
  getAccessToken,
688259
- runnerVersion: "1.44.7",
688400
+ runnerVersion: "1.44.8",
688260
688401
  onDebug: logForDebugging,
688261
688402
  onAuth401,
688262
688403
  getTrustedDeviceToken
@@ -693938,7 +694079,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
693938
694079
  setCwd(cwd3);
693939
694080
  const server2 = new Server({
693940
694081
  name: "ur/tengu",
693941
- version: "1.44.7"
694082
+ version: "1.44.8"
693942
694083
  }, {
693943
694084
  capabilities: {
693944
694085
  tools: {}
@@ -695980,7 +696121,7 @@ async function update() {
695980
696121
  logEvent("tengu_update_check", {});
695981
696122
  const diagnostic = await getDoctorDiagnostic();
695982
696123
  const result = await checkUpgradeStatus({
695983
- currentVersion: "1.44.7",
696124
+ currentVersion: "1.44.8",
695984
696125
  packageName: UR_AGENT_PACKAGE_NAME,
695985
696126
  installationType: diagnostic.installationType,
695986
696127
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -697226,7 +697367,7 @@ ${customInstructions}` : customInstructions;
697226
697367
  }
697227
697368
  }
697228
697369
  logForDiagnosticsNoPII("info", "started", {
697229
- version: "1.44.7",
697370
+ version: "1.44.8",
697230
697371
  is_native_binary: isInBundledMode()
697231
697372
  });
697232
697373
  registerCleanup(async () => {
@@ -698012,7 +698153,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
698012
698153
  pendingHookMessages
698013
698154
  }, renderAndRun);
698014
698155
  }
698015
- }).version("1.44.7 (UR-Nexus)", "-v, --version", "Output the version number");
698156
+ }).version("1.44.8 (UR-Nexus)", "-v, --version", "Output the version number");
698016
698157
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
698017
698158
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
698018
698159
  if (canUserConfigureAdvisor()) {
@@ -698927,7 +699068,7 @@ if (false) {}
698927
699068
  async function main2() {
698928
699069
  const args = process.argv.slice(2);
698929
699070
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
698930
- console.log(`${"1.44.7"} (UR-Nexus)`);
699071
+ console.log(`${"1.44.8"} (UR-Nexus)`);
698931
699072
  return;
698932
699073
  }
698933
699074
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -270,6 +270,15 @@ Recommended Git behavior:
270
270
  - Do not commit generated `.ur/index/`, `.ur/memory/`, `.ur/cache/`, `.ur/tmp/`, or `.ur/logs/`.
271
271
  - Do not commit `UR.local.md`.
272
272
 
273
+ Memory and learning defaults:
274
+
275
+ - Auto-memory is enabled by default. Disable with `autoMemoryEnabled: false`,
276
+ `UR_CODE_DISABLE_AUTO_MEMORY=1`, or `--bare`.
277
+ - Automatic learning is enabled by default. Disable with
278
+ `automaticLearningEnabled: false` or `UR_CODE_DISABLE_AUTO_LEARNING=1`.
279
+ - Automatic learning folds local outcome stats only; it does not call a model
280
+ unless you explicitly run `/learn run --reflect`.
281
+
273
282
  ## Verifier
274
283
 
275
284
  UR runs a lightweight verifier in the agent loop (L1) to catch false "task
@@ -44,7 +44,7 @@
44
44
  <main id="content" class="content">
45
45
  <header class="topbar">
46
46
  <div>
47
- <p class="eyebrow">Version 1.44.7</p>
47
+ <p class="eyebrow">Version 1.44.8</p>
48
48
  <h1>UR-Nexus Documentation</h1>
49
49
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
50
50
  </div>
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.44.7",
5
+ "version": "1.44.8",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.44.7",
3
+ "version": "1.44.8",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",