ur-agent 1.65.0 → 1.65.2

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,56 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.65.2
4
+
5
+ - Fixed `--discover-ollama` having no effect on model discovery or requests.
6
+ `getOllamaBaseUrl` resolves the session host correctly, but three callers
7
+ read a persisted `provider.baseUrl` *before* consulting it, so a value
8
+ written by `ur config set base_url` silently outranked a host chosen
9
+ interactively seconds earlier. `/model-doctor` calls `getOllamaBaseUrl()`
10
+ directly and was right, which is how the split surfaced: the doctor reported
11
+ `http://172.20.10.5:11434` and its six models while `/model` listed the local
12
+ daemon's, in the same session.
13
+ - This was not cosmetic. The request client had the same inversion
14
+ (`configured.baseUrl ?? getOllamaBaseUrl(...)` short-circuits), so calls went
15
+ to the local daemon while the doctor said otherwise — a different model than
16
+ the user believed, with no visible signal. The provider doctor had it too, so
17
+ it probed a host that was not in use.
18
+ - A model that does not advertise the `tools` capability now says so in the
19
+ transcript. UR already detected it and wrote the warning to the debug log,
20
+ which is invisible in a normal session: tool definitions were stripped, and
21
+ the model — having no way to act — described work it had not performed and
22
+ reported files it had not created. The warning appears once per model and
23
+ names the fix.
24
+ - `AskUserQuestion` states that `options` is required and that a question with
25
+ no discrete choices should be asked in plain text rather than by calling the
26
+ tool with a prose question and no options.
27
+ - Fixed the task list displaying out of order. `listTasks` returned `readdir`
28
+ order, which is lexicographic in practice, so past nine tasks it read
29
+ 1, 10, 11, 12, ... 2, 20, 3. Under ten tasks the two orders are identical,
30
+ which is why it went unnoticed and why a test written against a short
31
+ fixture would have passed against the broken code.
32
+ - A task list is now required before any tool that changes the workspace
33
+ (`Edit`, `Write`, `Bash`, ...). The system prompt already asked for one on
34
+ multi-step work and the agent still edited files and reported completion with
35
+ no plan on record. Reads are never blocked, so it can investigate before
36
+ planning; the first three tool calls are free so a one-line fix needs no
37
+ ceremony; task tools are exempt so the gate cannot block its own remedy; and
38
+ subagents are exempt since they execute a step rather than own the plan.
39
+ Configure with `tasks.requireBeforeChanges`.
40
+
41
+ ## 1.65.1
42
+
43
+ - Fixed `ur selftest run` reporting 0/5 anywhere but the UR repo. The drill
44
+ runner spawned `./bin/ur.js`, a path relative to the current directory, so
45
+ every drill failed instantly with an empty detail — which reads as five
46
+ broken features rather than one broken path. It now re-spawns
47
+ `process.execPath` with `process.argv[1]`, the exact pair this process was
48
+ launched with, so it works from any directory and for a global install.
49
+ - Every existing test ran `bun test` from the repo root, where the relative
50
+ path happens to exist, so all of them stayed green while the command was
51
+ unusable in practice. Added a test that runs the drills from a temp
52
+ directory; verified it fails against the old code and passes against the fix.
53
+
3
54
  ## 1.65.0
4
55
 
5
56
  - The release gate now asks the registry whether the packed dependency ranges
package/dist/cli.js CHANGED
@@ -53915,7 +53915,7 @@ function isLocalBaseUrl(value) {
53915
53915
  async function checkEndpoint(definition, settings, adapters, result) {
53916
53916
  if (!definition.endpointKind)
53917
53917
  return;
53918
- const baseUrl = settings.baseUrl ?? (definition.id === "ollama" ? getOllamaBaseUrl() : definition.defaultBaseUrl);
53918
+ const baseUrl = (definition.id === "ollama" ? getOllamaSessionOverride() : undefined) ?? settings.baseUrl ?? (definition.id === "ollama" ? getOllamaBaseUrl() : definition.defaultBaseUrl);
53919
53919
  if (!baseUrl) {
53920
53920
  result.checks.push({
53921
53921
  name: "base_url",
@@ -54482,6 +54482,12 @@ function clearProviderModelCacheForTests() {
54482
54482
  cachedModelsByProvider.clear();
54483
54483
  }
54484
54484
  function providerBaseUrl(provider, definition, settings) {
54485
+ if (provider === "ollama") {
54486
+ const sessionHost = getOllamaSessionOverride();
54487
+ if (sessionHost) {
54488
+ return sessionHost;
54489
+ }
54490
+ }
54485
54491
  const providerSettings = getActiveProviderSettings(settings);
54486
54492
  if (providerSettings.baseUrl) {
54487
54493
  return providerSettings.baseUrl;
@@ -57388,6 +57394,7 @@ __export(exports_ollama, {
57388
57394
  getOllamaRequestTimeoutMs: () => getOllamaRequestTimeoutMs,
57389
57395
  getEffectiveOllamaBaseUrl: () => getEffectiveOllamaBaseUrl,
57390
57396
  createOllamaURHQClient: () => createOllamaURHQClient,
57397
+ consumePendingProviderNotice: () => consumePendingProviderNotice,
57391
57398
  buildOllamaHeaders: () => buildOllamaHeaders
57392
57399
  });
57393
57400
  import { randomUUID as randomUUID2 } from "crypto";
@@ -57552,6 +57559,11 @@ function isTruthyEnv(value) {
57552
57559
  }
57553
57560
  return !["0", "false", "no", "off"].includes(value.toLowerCase());
57554
57561
  }
57562
+ function consumePendingProviderNotice() {
57563
+ const notice = pendingProviderNotice;
57564
+ pendingProviderNotice = null;
57565
+ return notice;
57566
+ }
57555
57567
  function toOllamaChatRequest(params, stream4, capabilities) {
57556
57568
  const supportsTools = modelCapabilityEnabled(capabilities, "tools");
57557
57569
  const tools = supportsTools ? toOllamaTools(params.tools) : [];
@@ -57559,7 +57571,9 @@ function toOllamaChatRequest(params, stream4, capabilities) {
57559
57571
  const toolsDropped = toolsRequested && !supportsTools;
57560
57572
  if (toolsDropped && !warnedToolsUnsupportedModels.has(params.model)) {
57561
57573
  warnedToolsUnsupportedModels.add(params.model);
57562
- logForDebugging(`Ollama model "${params.model}" does not advertise the 'tools' capability; ` + "tool definitions are not sent and tool calls fall back to text parsing. " + "Expect degraded agent behavior \u2014 prefer a tools-capable model (check with: ollama show <model>).", { level: "warn" });
57574
+ const message = `"${params.model}" does not advertise the 'tools' capability, so tool ` + `definitions are not sent to it. It cannot read or write files, run ` + `commands, or use any tool \u2014 asked to, it will describe what it would ` + `do and may report work it did not perform. Pick a tools-capable model ` + `with /model (check with: ur model-doctor).`;
57575
+ logForDebugging(message, { level: "warn" });
57576
+ pendingProviderNotice = message;
57563
57577
  }
57564
57578
  const systemMessage = {
57565
57579
  role: "system",
@@ -58438,7 +58452,7 @@ function parseToolInput(input) {
58438
58452
  }
58439
58453
  return parsed ?? {};
58440
58454
  }
58441
- var DEFAULT_OLLAMA_REQUEST_TIMEOUT_MS = 300000, REMOTE_OLLAMA_REQUEST_TIMEOUT_MS = 120000, CLOUD_OLLAMA_REQUEST_TIMEOUT_MS = 120000, OLLAMA_GATEWAY_TIMEOUT_MESSAGE = "Ollama gateway timed out while waiting for the model to respond. Check the selected Ollama endpoint or increase API_TIMEOUT_MS if the model needs more time.", ollamaModelCapabilitiesCache, ollamaBaseUrlOverride, warnedToolsUnsupportedModels, TEXT_TOOL_CALL_HINT, LEVELED_THINK_MODEL_RE;
58455
+ var DEFAULT_OLLAMA_REQUEST_TIMEOUT_MS = 300000, REMOTE_OLLAMA_REQUEST_TIMEOUT_MS = 120000, CLOUD_OLLAMA_REQUEST_TIMEOUT_MS = 120000, OLLAMA_GATEWAY_TIMEOUT_MESSAGE = "Ollama gateway timed out while waiting for the model to respond. Check the selected Ollama endpoint or increase API_TIMEOUT_MS if the model needs more time.", ollamaModelCapabilitiesCache, ollamaBaseUrlOverride, warnedToolsUnsupportedModels, TEXT_TOOL_CALL_HINT, pendingProviderNotice = null, LEVELED_THINK_MODEL_RE;
58442
58456
  var init_ollama = __esm(() => {
58443
58457
  init_urhq_sdk();
58444
58458
  init_ollamaModels();
@@ -62586,7 +62600,8 @@ async function createLocalProviderClient(providerId, options = {}) {
62586
62600
  const { createOllamaURHQClient: createOllamaURHQClient2 } = await Promise.resolve().then(() => (init_ollama(), exports_ollama));
62587
62601
  const settings = getInitialSettings();
62588
62602
  const configured = getActiveProviderSettings(settings);
62589
- const baseUrlOverride = configured.active === providerId ? configured.baseUrl ?? getOllamaBaseUrl(process.env, settings) : getOllamaBaseUrl(process.env, settings);
62603
+ const sessionHost = getOllamaSessionOverride();
62604
+ const baseUrlOverride = sessionHost ? sessionHost : configured.active === providerId ? configured.baseUrl ?? getOllamaBaseUrl(process.env, settings) : getOllamaBaseUrl(process.env, settings);
62590
62605
  return createOllamaURHQClient2({ baseUrlOverride });
62591
62606
  }
62592
62607
  async function createOpenAICompatibleProviderClient(providerId, options = {}) {
@@ -75223,7 +75238,7 @@ var init_auth = __esm(() => {
75223
75238
 
75224
75239
  // src/utils/userAgent.ts
75225
75240
  function getURCodeUserAgent() {
75226
- return `ur/${"1.65.0"}`;
75241
+ return `ur/${"1.65.2"}`;
75227
75242
  }
75228
75243
 
75229
75244
  // src/utils/workloadContext.ts
@@ -75245,7 +75260,7 @@ function getUserAgent() {
75245
75260
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
75246
75261
  const workload = getWorkload();
75247
75262
  const workloadSuffix = workload ? `, workload/${workload}` : "";
75248
- return `ur-cli/${"1.65.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75263
+ return `ur-cli/${"1.65.2"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75249
75264
  }
75250
75265
  function getMCPUserAgent() {
75251
75266
  const parts = [];
@@ -75259,7 +75274,7 @@ function getMCPUserAgent() {
75259
75274
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
75260
75275
  }
75261
75276
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
75262
- return `ur/${"1.65.0"}${suffix}`;
75277
+ return `ur/${"1.65.2"}${suffix}`;
75263
75278
  }
75264
75279
  function getWebFetchUserAgent() {
75265
75280
  return `UR-User (${getURCodeUserAgent()})`;
@@ -75397,7 +75412,7 @@ var init_user = __esm(() => {
75397
75412
  deviceId,
75398
75413
  sessionId: getSessionId(),
75399
75414
  email: getEmail(),
75400
- appVersion: "1.65.0",
75415
+ appVersion: "1.65.2",
75401
75416
  platform: getHostPlatformForAnalytics(),
75402
75417
  organizationUuid,
75403
75418
  accountUuid,
@@ -83597,7 +83612,7 @@ var init_metadata = __esm(() => {
83597
83612
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
83598
83613
  WHITESPACE_REGEX = /\s+/;
83599
83614
  getVersionBase = memoize_default(() => {
83600
- const match = "1.65.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83615
+ const match = "1.65.2".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83601
83616
  return match ? match[0] : undefined;
83602
83617
  });
83603
83618
  buildEnvContext = memoize_default(async () => {
@@ -83637,7 +83652,7 @@ var init_metadata = __esm(() => {
83637
83652
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
83638
83653
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
83639
83654
  isURAiAuth: isURAISubscriber(),
83640
- version: "1.65.0",
83655
+ version: "1.65.2",
83641
83656
  versionBase: getVersionBase(),
83642
83657
  buildTime: "",
83643
83658
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -84307,7 +84322,7 @@ function initialize1PEventLogging() {
84307
84322
  const platform2 = getPlatform();
84308
84323
  const attributes = {
84309
84324
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
84310
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.65.0"
84325
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.65.2"
84311
84326
  };
84312
84327
  if (platform2 === "wsl") {
84313
84328
  const wslVersion = getWslVersion();
@@ -84335,7 +84350,7 @@ function initialize1PEventLogging() {
84335
84350
  })
84336
84351
  ]
84337
84352
  });
84338
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.65.0");
84353
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.65.2");
84339
84354
  }
84340
84355
  async function reinitialize1PEventLoggingIfConfigChanged() {
84341
84356
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -86854,6 +86869,12 @@ var init_types2 = __esm(() => {
86854
86869
  name: exports_external.string().optional().describe("Synthesiser voice name"),
86855
86870
  rate: exports_external.number().optional().describe("Words per minute")
86856
86871
  }).optional().describe("Spoken output settings"),
86872
+ tasks: exports_external.object({
86873
+ requireBeforeChanges: exports_external.object({
86874
+ enabled: exports_external.boolean().optional(),
86875
+ freeReads: exports_external.number().optional()
86876
+ }).optional().describe("Require a task list before any tool that changes the workspace (Edit, Write, Bash, ...). " + "Reads are never blocked, so the agent can investigate before planning; freeReads is how many " + "tool calls may run before the gate applies at all. Set enabled=false to make the task list advisory again.")
86877
+ }).optional().describe("Task list behaviour."),
86857
86878
  context: exports_external.object({
86858
86879
  pruneToolResults: exports_external.object({
86859
86880
  enabled: exports_external.boolean().optional(),
@@ -88095,6 +88116,9 @@ function getOllamaBaseUrl(env4 = process.env, settings) {
88095
88116
  function setOllamaBaseUrlOverride(url3) {
88096
88117
  sessionOverride = url3;
88097
88118
  }
88119
+ function getOllamaSessionOverride() {
88120
+ return sessionOverride ? normalizeOllamaBaseUrl(sessionOverride) : undefined;
88121
+ }
88098
88122
  var sessionOverride, OLLAMA_CLOUD_BASE_URL = "https://ollama.com";
88099
88123
  var init_ollamaConfig = __esm(() => {
88100
88124
  init_settings2();
@@ -94181,7 +94205,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
94181
94205
  function formatA2AAgentCard(options = {}, pretty = true) {
94182
94206
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
94183
94207
  }
94184
- var urVersion = "1.65.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94208
+ var urVersion = "1.65.2", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94185
94209
  var init_trends = __esm(() => {
94186
94210
  init_a2aCardSignature();
94187
94211
  coverage = [
@@ -96984,7 +97008,7 @@ function getAttributionHeader(fingerprint) {
96984
97008
  if (!isAttributionHeaderEnabled()) {
96985
97009
  return "";
96986
97010
  }
96987
- const version2 = `${"1.65.0"}.${fingerprint}`;
97011
+ const version2 = `${"1.65.2"}.${fingerprint}`;
96988
97012
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
96989
97013
  const cch = "";
96990
97014
  const workload = getWorkload();
@@ -154748,7 +154772,7 @@ var init_projectSafety = __esm(() => {
154748
154772
  function getInstruments() {
154749
154773
  if (instruments)
154750
154774
  return instruments;
154751
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.65.0");
154775
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.65.2");
154752
154776
  instruments = {
154753
154777
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
154754
154778
  description: "GenAI operation duration.",
@@ -154846,7 +154870,7 @@ function genAiAgentAttributes() {
154846
154870
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
154847
154871
  "gen_ai.provider.name": "ur",
154848
154872
  "gen_ai.agent.name": "UR-Nexus",
154849
- "gen_ai.agent.version": "1.65.0"
154873
+ "gen_ai.agent.version": "1.65.2"
154850
154874
  };
154851
154875
  }
154852
154876
  function genAiWorkflowAttributes(workflowName) {
@@ -154862,7 +154886,7 @@ function genAiWorkflowAttributes(workflowName) {
154862
154886
  function startGenAiWorkflowSpan(workflowName) {
154863
154887
  const attributes = genAiWorkflowAttributes(workflowName);
154864
154888
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
154865
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154889
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.2").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154866
154890
  }
154867
154891
  function endGenAiWorkflowSpan(span, options2 = {}) {
154868
154892
  try {
@@ -154900,7 +154924,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
154900
154924
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
154901
154925
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
154902
154926
  }
154903
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154927
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.2").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154904
154928
  }
154905
154929
  function endGenAiMemorySpan(span, options2 = {}) {
154906
154930
  try {
@@ -206419,7 +206443,7 @@ function getTelemetryAttributes() {
206419
206443
  attributes["session.id"] = sessionId;
206420
206444
  }
206421
206445
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
206422
- attributes["app.version"] = "1.65.0";
206446
+ attributes["app.version"] = "1.65.2";
206423
206447
  }
206424
206448
  const oauthAccount = getOauthAccountInfo();
206425
206449
  if (oauthAccount) {
@@ -252956,7 +252980,7 @@ function getInstallationEnv() {
252956
252980
  return;
252957
252981
  }
252958
252982
  function getURCodeVersion() {
252959
- return "1.65.0";
252983
+ return "1.65.2";
252960
252984
  }
252961
252985
  async function getInstalledVSCodeExtensionVersion(command) {
252962
252986
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -260287,7 +260311,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
260287
260311
  const client2 = new Client({
260288
260312
  name: "ur",
260289
260313
  title: "UR",
260290
- version: "1.65.0",
260314
+ version: "1.65.2",
260291
260315
  description: "UR-Nexus autonomous engineering workflow engine",
260292
260316
  websiteUrl: PRODUCT_URL
260293
260317
  }, {
@@ -260647,7 +260671,7 @@ var init_client5 = __esm(() => {
260647
260671
  const client2 = new Client({
260648
260672
  name: "ur",
260649
260673
  title: "UR",
260650
- version: "1.65.0",
260674
+ version: "1.65.2",
260651
260675
  description: "UR-Nexus autonomous engineering workflow engine",
260652
260676
  websiteUrl: PRODUCT_URL
260653
260677
  }, {
@@ -273248,7 +273272,7 @@ async function createRuntime() {
273248
273272
  bootstrapTelemetry();
273249
273273
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
273250
273274
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
273251
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.65.0"
273275
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.65.2"
273252
273276
  }));
273253
273277
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
273254
273278
  resource,
@@ -273281,11 +273305,11 @@ async function createRuntime() {
273281
273305
  setMeterProvider(meterProvider);
273282
273306
  setLoggerProvider(loggerProvider);
273283
273307
  if (meterProvider) {
273284
- const meter = meterProvider.getMeter("ur-agent", "1.65.0");
273308
+ const meter = meterProvider.getMeter("ur-agent", "1.65.2");
273285
273309
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
273286
273310
  }
273287
273311
  if (loggerProvider) {
273288
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.65.0"));
273312
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.65.2"));
273289
273313
  }
273290
273314
  if (!cleanupRegistered2) {
273291
273315
  cleanupRegistered2 = true;
@@ -273947,9 +273971,9 @@ async function assertMinVersion() {
273947
273971
  if (false) {}
273948
273972
  try {
273949
273973
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
273950
- if (versionConfig.minVersion && lt("1.65.0", versionConfig.minVersion)) {
273974
+ if (versionConfig.minVersion && lt("1.65.2", versionConfig.minVersion)) {
273951
273975
  console.error(`
273952
- It looks like your version of UR (${"1.65.0"}) needs an update.
273976
+ It looks like your version of UR (${"1.65.2"}) needs an update.
273953
273977
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
273954
273978
 
273955
273979
  To update, please run:
@@ -274165,7 +274189,7 @@ async function installGlobalPackage(specificVersion) {
274165
274189
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
274166
274190
  logEvent("tengu_auto_updater_lock_contention", {
274167
274191
  pid: process.pid,
274168
- currentVersion: "1.65.0"
274192
+ currentVersion: "1.65.2"
274169
274193
  });
274170
274194
  return "in_progress";
274171
274195
  }
@@ -274174,7 +274198,7 @@ async function installGlobalPackage(specificVersion) {
274174
274198
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
274175
274199
  logError2(new Error("Windows NPM detected in WSL environment"));
274176
274200
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
274177
- currentVersion: "1.65.0"
274201
+ currentVersion: "1.65.2"
274178
274202
  });
274179
274203
  console.error(`
274180
274204
  Error: Windows NPM detected in WSL
@@ -274709,7 +274733,7 @@ function detectLinuxGlobPatternWarnings() {
274709
274733
  }
274710
274734
  async function getDoctorDiagnostic() {
274711
274735
  const installationType = await getCurrentInstallationType();
274712
- const version2 = typeof MACRO !== "undefined" ? "1.65.0" : "unknown";
274736
+ const version2 = typeof MACRO !== "undefined" ? "1.65.2" : "unknown";
274713
274737
  const installationPath = await getInstallationPath();
274714
274738
  const invokedBinary = getInvokedBinary();
274715
274739
  const multipleInstallations = await detectMultipleInstallations();
@@ -275644,8 +275668,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
275644
275668
  const maxVersion = await getMaxVersion();
275645
275669
  if (maxVersion && gt(version2, maxVersion)) {
275646
275670
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
275647
- if (gte("1.65.0", maxVersion)) {
275648
- logForDebugging(`Native installer: current version ${"1.65.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
275671
+ if (gte("1.65.2", maxVersion)) {
275672
+ logForDebugging(`Native installer: current version ${"1.65.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
275649
275673
  logEvent("tengu_native_update_skipped_max_version", {
275650
275674
  latency_ms: Date.now() - startTime,
275651
275675
  max_version: maxVersion,
@@ -275656,7 +275680,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
275656
275680
  version2 = maxVersion;
275657
275681
  }
275658
275682
  }
275659
- if (!forceReinstall && version2 === "1.65.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
275683
+ if (!forceReinstall && version2 === "1.65.2" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
275660
275684
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
275661
275685
  logEvent("tengu_native_update_complete", {
275662
275686
  latency_ms: Date.now() - startTime,
@@ -277525,6 +277549,34 @@ var init_spinnerVerbs = __esm(() => {
277525
277549
  });
277526
277550
 
277527
277551
  // src/utils/tasks.ts
277552
+ var exports_tasks = {};
277553
+ __export(exports_tasks, {
277554
+ updateTask: () => updateTask2,
277555
+ unassignTeammateTasks: () => unassignTeammateTasks,
277556
+ setLeaderTeamName: () => setLeaderTeamName,
277557
+ sanitizePathComponent: () => sanitizePathComponent,
277558
+ resetTaskList: () => resetTaskList,
277559
+ onTasksUpdated: () => onTasksUpdated,
277560
+ notifyTasksUpdated: () => notifyTasksUpdated,
277561
+ listTasks: () => listTasks,
277562
+ isTodoV2Enabled: () => isTodoV2Enabled,
277563
+ getTasksDir: () => getTasksDir,
277564
+ getTaskPath: () => getTaskPath,
277565
+ getTaskListId: () => getTaskListId,
277566
+ getTask: () => getTask,
277567
+ getAgentStatuses: () => getAgentStatuses,
277568
+ ensureTasksDir: () => ensureTasksDir,
277569
+ deleteTask: () => deleteTask,
277570
+ createTask: () => createTask,
277571
+ compareTaskIds: () => compareTaskIds,
277572
+ clearLeaderTeamName: () => clearLeaderTeamName,
277573
+ claimTask: () => claimTask,
277574
+ blockTask: () => blockTask,
277575
+ TaskStatusSchema: () => TaskStatusSchema2,
277576
+ TaskSchema: () => TaskSchema2,
277577
+ TASK_STATUSES: () => TASK_STATUSES,
277578
+ DEFAULT_TASKS_MODE_TASK_LIST_ID: () => DEFAULT_TASKS_MODE_TASK_LIST_ID
277579
+ });
277528
277580
  import { mkdir as mkdir13, readdir as readdir10, readFile as readFile16, unlink as unlink10, writeFile as writeFile15 } from "fs/promises";
277529
277581
  import { join as join83 } from "path";
277530
277582
  function setLeaderTeamName(teamName) {
@@ -277762,6 +277814,19 @@ async function deleteTask(taskListId, taskId) {
277762
277814
  return false;
277763
277815
  }
277764
277816
  }
277817
+ function compareTaskIds(a2, b) {
277818
+ const left = Number.parseInt(a2, 10);
277819
+ const right = Number.parseInt(b, 10);
277820
+ const leftIsNumeric = !Number.isNaN(left);
277821
+ const rightIsNumeric = !Number.isNaN(right);
277822
+ if (leftIsNumeric && rightIsNumeric)
277823
+ return left - right;
277824
+ if (leftIsNumeric)
277825
+ return -1;
277826
+ if (rightIsNumeric)
277827
+ return 1;
277828
+ return a2.localeCompare(b);
277829
+ }
277765
277830
  async function listTasks(taskListId) {
277766
277831
  const dir = getTasksDir(taskListId);
277767
277832
  let files;
@@ -277770,7 +277835,7 @@ async function listTasks(taskListId) {
277770
277835
  } catch {
277771
277836
  return [];
277772
277837
  }
277773
- const taskIds = files.filter((f) => f.endsWith(".json")).map((f) => f.replace(".json", ""));
277838
+ const taskIds = files.filter((f) => f.endsWith(".json")).map((f) => f.replace(".json", "")).sort(compareTaskIds);
277774
277839
  const results = await Promise.all(taskIds.map((id) => getTask(taskListId, id)));
277775
277840
  return results.filter((t) => t !== null);
277776
277841
  }
@@ -277891,6 +277956,60 @@ async function claimTaskWithBusyCheck(taskListId, taskId, claimantAgentId) {
277891
277956
  }
277892
277957
  }
277893
277958
  }
277959
+ function sanitizeName(name) {
277960
+ return name.replace(/[^a-zA-Z0-9]/g, "-").toLowerCase();
277961
+ }
277962
+ async function readTeamMembers(teamName) {
277963
+ const teamsDir = getTeamsDir();
277964
+ const teamFilePath = join83(teamsDir, sanitizeName(teamName), "config.json");
277965
+ try {
277966
+ const content = await readFile16(teamFilePath, "utf-8");
277967
+ const teamFile = jsonParse(content);
277968
+ return {
277969
+ leadAgentId: teamFile.leadAgentId,
277970
+ members: teamFile.members.map((m) => ({
277971
+ agentId: m.agentId,
277972
+ name: m.name,
277973
+ agentType: m.agentType
277974
+ }))
277975
+ };
277976
+ } catch (e) {
277977
+ const code = getErrnoCode(e);
277978
+ if (code === "ENOENT") {
277979
+ return null;
277980
+ }
277981
+ logForDebugging(`[Tasks] Failed to read team file for ${teamName}: ${errorMessage2(e)}`);
277982
+ return null;
277983
+ }
277984
+ }
277985
+ async function getAgentStatuses(teamName) {
277986
+ const teamData = await readTeamMembers(teamName);
277987
+ if (!teamData) {
277988
+ return null;
277989
+ }
277990
+ const taskListId = sanitizeName(teamName);
277991
+ const allTasks = await listTasks(taskListId);
277992
+ const unresolvedTasksByOwner = new Map;
277993
+ for (const task of allTasks) {
277994
+ if (task.status !== "completed" && task.owner) {
277995
+ const existing2 = unresolvedTasksByOwner.get(task.owner) || [];
277996
+ existing2.push(task.id);
277997
+ unresolvedTasksByOwner.set(task.owner, existing2);
277998
+ }
277999
+ }
278000
+ return teamData.members.map((member) => {
278001
+ const tasksByName = unresolvedTasksByOwner.get(member.name) || [];
278002
+ const tasksById = unresolvedTasksByOwner.get(member.agentId) || [];
278003
+ const currentTasks = uniq([...tasksByName, ...tasksById]);
278004
+ return {
278005
+ agentId: member.agentId,
278006
+ name: member.name,
278007
+ agentType: member.agentType,
278008
+ status: currentTasks.length === 0 ? "idle" : "busy",
278009
+ currentTasks
278010
+ };
278011
+ });
278012
+ }
277894
278013
  async function unassignTeammateTasks(teamName, teammateId, teammateName, reason) {
277895
278014
  const tasks = await listTasks(teamName);
277896
278015
  const unresolvedAssignedTasks = tasks.filter((t) => t.status !== "completed" && (t.owner === teammateId || t.owner === teammateName));
@@ -277914,7 +278033,7 @@ async function unassignTeammateTasks(teamName, teammateId, teammateName, reason)
277914
278033
  notificationMessage
277915
278034
  };
277916
278035
  }
277917
- var tasksUpdated, leaderTeamName, onTasksUpdated, TaskStatusSchema2, TaskSchema2, HIGH_WATER_MARK_FILE = ".highwatermark", LOCK_OPTIONS, DEFAULT_TASKS_MODE_TASK_LIST_ID = "tasklist";
278036
+ var tasksUpdated, leaderTeamName, onTasksUpdated, TASK_STATUSES, TaskStatusSchema2, TaskSchema2, HIGH_WATER_MARK_FILE = ".highwatermark", LOCK_OPTIONS, DEFAULT_TASKS_MODE_TASK_LIST_ID = "tasklist";
277918
278037
  var init_tasks = __esm(() => {
277919
278038
  init_v4();
277920
278039
  init_state();
@@ -277927,6 +278046,7 @@ var init_tasks = __esm(() => {
277927
278046
  init_teammateContext();
277928
278047
  tasksUpdated = createSignal();
277929
278048
  onTasksUpdated = tasksUpdated.subscribe;
278049
+ TASK_STATUSES = ["pending", "in_progress", "completed"];
277930
278050
  TaskStatusSchema2 = lazySchema(() => exports_external.enum(["pending", "in_progress", "completed", "failed", "skipped"]));
277931
278051
  TaskSchema2 = lazySchema(() => exports_external.object({
277932
278052
  id: exports_external.string(),
@@ -283545,7 +283665,7 @@ __export(exports_teamHelpers, {
283545
283665
  setMultipleMemberModes: () => setMultipleMemberModes,
283546
283666
  setMemberMode: () => setMemberMode,
283547
283667
  setMemberActive: () => setMemberActive,
283548
- sanitizeName: () => sanitizeName,
283668
+ sanitizeName: () => sanitizeName2,
283549
283669
  sanitizeAgentName: () => sanitizeAgentName,
283550
283670
  removeTeammateFromTeamFile: () => removeTeammateFromTeamFile,
283551
283671
  removeMemberFromTeam: () => removeMemberFromTeam,
@@ -283564,14 +283684,14 @@ __export(exports_teamHelpers, {
283564
283684
  import { mkdirSync as mkdirSync16, readFileSync as readFileSync24, writeFileSync as writeFileSync16 } from "fs";
283565
283685
  import { mkdir as mkdir15, readFile as readFile18, rm as rm4, writeFile as writeFile17 } from "fs/promises";
283566
283686
  import { join as join85 } from "path";
283567
- function sanitizeName(name) {
283687
+ function sanitizeName2(name) {
283568
283688
  return name.replace(/[^a-zA-Z0-9]/g, "-").toLowerCase();
283569
283689
  }
283570
283690
  function sanitizeAgentName(name) {
283571
283691
  return name.replace(/@/g, "-");
283572
283692
  }
283573
283693
  function getTeamDir(teamName) {
283574
- return join85(getTeamsDir(), sanitizeName(teamName));
283694
+ return join85(getTeamsDir(), sanitizeName2(teamName));
283575
283695
  }
283576
283696
  function getTeamFilePath(teamName) {
283577
283697
  return join85(getTeamDir(teamName), "config.json");
@@ -283833,7 +283953,7 @@ async function killOrphanedTeammatePanes(teamName) {
283833
283953
  }));
283834
283954
  }
283835
283955
  async function cleanupTeamDirectories(teamName) {
283836
- const sanitizedName = sanitizeName(teamName);
283956
+ const sanitizedName = sanitizeName2(teamName);
283837
283957
  const teamFile = readTeamFile(teamName);
283838
283958
  const worktreePaths = [];
283839
283959
  if (teamFile) {
@@ -331629,7 +331749,7 @@ var init_AskUserQuestionTool = __esm(() => {
331629
331749
  questionSchema = lazySchema(() => exports_external.object({
331630
331750
  question: exports_external.string().describe('The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"'),
331631
331751
  header: exports_external.string().describe(`The category being decided, as a chip/tag (max ${ASK_USER_QUESTION_TOOL_CHIP_WIDTH} chars). Name the dimension, not the question: for "Which database should we use?" the header is "Database", not "Which DB". Examples: "Auth method", "Library", "Approach".`),
331632
- options: exports_external.array(questionOptionSchema()).min(2).max(8).describe(`The available choices for this question. Must have 2-8 options. Keep options concise and distinct; there should be no 'Other' option, that will be provided automatically.`),
331752
+ options: exports_external.array(questionOptionSchema()).min(2).max(8).describe(`REQUIRED: 2-8 concrete choices. A question with no options is not askable here \u2014 if you cannot name at least two specific answers, the question is open-ended, so ask it in plain assistant text instead of calling this tool. Do not call this tool with a prose question and omit options. Keep options concise and distinct; there should be no 'Other' option, that will be provided automatically.`),
331633
331753
  multiSelect: exports_external.boolean().default(false).describe("Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.")
331634
331754
  }));
331635
331755
  annotationsSchema = lazySchema(() => {
@@ -336802,10 +336922,10 @@ var init_TeamCreateTool = __esm(() => {
336802
336922
  };
336803
336923
  await writeTeamFileAsync(finalTeamName, teamFile);
336804
336924
  registerTeamForSessionCleanup(finalTeamName);
336805
- const taskListId = sanitizeName(finalTeamName);
336925
+ const taskListId = sanitizeName2(finalTeamName);
336806
336926
  await resetTaskList(taskListId);
336807
336927
  await ensureTasksDir(taskListId);
336808
- setLeaderTeamName(sanitizeName(finalTeamName));
336928
+ setLeaderTeamName(sanitizeName2(finalTeamName));
336809
336929
  setAppState((prev) => ({
336810
336930
  ...prev,
336811
336931
  teamContext: {
@@ -339226,7 +339346,7 @@ async function handleSpawnSeparateWindow(input, context5) {
339226
339346
  const uniqueName = await generateUniqueTeammateName(name, teamName);
339227
339347
  const sanitizedName = sanitizeAgentName(uniqueName);
339228
339348
  const teammateId = formatAgentId(sanitizedName, teamName);
339229
- const windowName = `teammate-${sanitizeName(sanitizedName)}`;
339349
+ const windowName = `teammate-${sanitizeName2(sanitizedName)}`;
339230
339350
  const workingDir = cwd2 || getCwd();
339231
339351
  await ensureSession(SWARM_SESSION_NAME);
339232
339352
  const teammateColor = assignTeammateColor(teammateId);
@@ -345855,7 +345975,7 @@ function isAnyTracingEnabled() {
345855
345975
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
345856
345976
  }
345857
345977
  function getTracer() {
345858
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.65.0");
345978
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.65.2");
345859
345979
  }
345860
345980
  function createSpanAttributes(spanType, customAttributes = {}) {
345861
345981
  const baseAttributes = getTelemetryAttributes();
@@ -346513,6 +346633,53 @@ var init_toolErrors = __esm(() => {
346513
346633
  init_messages();
346514
346634
  });
346515
346635
 
346636
+ // src/services/tools/taskListGate.ts
346637
+ function getTaskListGateConfig() {
346638
+ const configured = getInitialSettings()?.tasks?.requireBeforeChanges;
346639
+ if (!configured)
346640
+ return TASK_LIST_GATE_DEFAULTS;
346641
+ return {
346642
+ enabled: typeof configured.enabled === "boolean" ? configured.enabled : TASK_LIST_GATE_DEFAULTS.enabled,
346643
+ freeReads: typeof configured.freeReads === "number" && Number.isInteger(configured.freeReads) && configured.freeReads >= 0 ? configured.freeReads : TASK_LIST_GATE_DEFAULTS.freeReads
346644
+ };
346645
+ }
346646
+ function isMutatingTool2(toolName) {
346647
+ return MUTATING_TOOLS2.has(toolName);
346648
+ }
346649
+ function checkTaskListGate(input) {
346650
+ const config2 = input.config ?? getTaskListGateConfig();
346651
+ if (!config2.enabled)
346652
+ return { allowed: true };
346653
+ if (input.isSubagent)
346654
+ return { allowed: true };
346655
+ if (!isMutatingTool2(input.toolName))
346656
+ return { allowed: true };
346657
+ if (input.taskCount > 0)
346658
+ return { allowed: true };
346659
+ if (input.readsSoFar < config2.freeReads)
346660
+ return { allowed: true };
346661
+ return {
346662
+ allowed: false,
346663
+ reason: `No task list exists, and ${input.toolName} changes the workspace. ` + `Call TaskCreate first with the steps you intend to take, then retry ` + `this call. Reads are unrestricted, so investigate as much as you need ` + `before writing the list. ` + `Disable with tasks.requireBeforeChanges.enabled=false in settings.`
346664
+ };
346665
+ }
346666
+ var TASK_LIST_GATE_DEFAULTS, MUTATING_TOOLS2;
346667
+ var init_taskListGate = __esm(() => {
346668
+ init_settings2();
346669
+ TASK_LIST_GATE_DEFAULTS = {
346670
+ enabled: true,
346671
+ freeReads: 3
346672
+ };
346673
+ MUTATING_TOOLS2 = new Set([
346674
+ "Edit",
346675
+ "MultiEdit",
346676
+ "Write",
346677
+ "NotebookEdit",
346678
+ "Bash",
346679
+ "Shell"
346680
+ ]);
346681
+ });
346682
+
346516
346683
  // src/stability/types.ts
346517
346684
  var DEFAULT_LIMITS;
346518
346685
  var init_types12 = __esm(() => {
@@ -347254,6 +347421,14 @@ var init_toolHooks = __esm(() => {
347254
347421
  });
347255
347422
 
347256
347423
  // src/services/tools/toolExecution.ts
347424
+ async function countTasksForGate() {
347425
+ try {
347426
+ const { getTaskListId: getTaskListId2, listTasks: listTasks3 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
347427
+ return (await listTasks3(getTaskListId2())).length;
347428
+ } catch {
347429
+ return Number.POSITIVE_INFINITY;
347430
+ }
347431
+ }
347257
347432
  function classifyToolError(error40) {
347258
347433
  if (error40 instanceof TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS) {
347259
347434
  return error40.telemetryMessage.slice(0, 200);
@@ -347518,7 +347693,7 @@ function buildSchemaNotSentHint(tool, messages, tools) {
347518
347693
  return null;
347519
347694
  return `
347520
347695
 
347521
- This tool's schema was not sent to the API \u2014 it was not in the discovered-tool set derived from message history. ` + `Without the schema in your prompt, typed parameters (arrays, numbers, booleans) get emitted as strings and the client-side parser rejects them. ` + `Load the tool first: call ${TOOL_SEARCH_TOOL_NAME} with query "select:${tool.name}", then retry this call.`;
347696
+ This tool's schema was not sent to the API \u2014 it was not in the discovered-tool set derived from message history. ` + `Without the schema in your prompt, typed parameters (arrays, numbers, booleans) get emitted as strings and the client-side parser rejects them. Load the tool first: call ${TOOL_SEARCH_TOOL_NAME} with query "select:${tool.name}", then retry this call.`;
347522
347697
  }
347523
347698
  async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContext, canUseTool, assistantMessage, messageId, requestId, mcpServerType, mcpServerBaseUrl, onToolProgress) {
347524
347699
  let parsedInput = tool.inputSchema.safeParse(input);
@@ -347535,6 +347710,32 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
347535
347710
  }
347536
347711
  }
347537
347712
  }
347713
+ const gate = checkTaskListGate({
347714
+ toolName: tool.name,
347715
+ taskCount: await countTasksForGate(),
347716
+ readsSoFar: toolUseContext.messages?.length ?? 0,
347717
+ isSubagent: Boolean(toolUseContext.agentId)
347718
+ });
347719
+ if (!gate.allowed) {
347720
+ logEvent("tengu_task_list_gate_blocked", {
347721
+ toolName: sanitizeToolNameForAnalytics(tool.name)
347722
+ });
347723
+ return [
347724
+ {
347725
+ message: createUserMessage({
347726
+ content: [
347727
+ {
347728
+ type: "tool_result",
347729
+ content: `<tool_use_error>TaskListRequired: ${gate.reason}</tool_use_error>`,
347730
+ is_error: true,
347731
+ tool_use_id: toolUseID
347732
+ }
347733
+ ]
347734
+ }),
347735
+ shouldSkipPermissionCheck: false
347736
+ }
347737
+ ];
347738
+ }
347538
347739
  if (!parsedInput.success) {
347539
347740
  let errorContent = formatZodValidationError(tool.name, parsedInput.error);
347540
347741
  const schemaHint = buildSchemaNotSentHint(tool, toolUseContext.messages, toolUseContext.options.tools);
@@ -347717,7 +347918,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
347717
347918
  processedInput = resolved.input;
347718
347919
  const permissionDurationMs = Date.now() - permissionStart;
347719
347920
  if (permissionDurationMs >= SLOW_PHASE_LOG_THRESHOLD_MS && permissionMode === "auto") {
347720
- logForDebugging(`Slow permission decision: ${permissionDurationMs}ms for ${tool.name} ` + `(mode=${permissionMode}, behavior=${permissionDecision.behavior})`, { level: "info" });
347921
+ logForDebugging(`Slow permission decision: ${permissionDurationMs}ms for ${tool.name} (mode=${permissionMode}, behavior=${permissionDecision.behavior})`, { level: "info" });
347721
347922
  }
347722
347923
  if (permissionDecision.behavior !== "ask" && !toolUseContext.toolDecisions?.has(toolUseID)) {
347723
347924
  const decision = permissionDecision.behavior === "allow" ? "accept" : "reject";
@@ -348225,6 +348426,7 @@ var init_toolExecution = __esm(() => {
348225
348426
  init_toolErrors();
348226
348427
  init_toolResultStorage();
348227
348428
  init_toolSearch();
348429
+ init_taskListGate();
348228
348430
  init_client5();
348229
348431
  init_mcpStringUtils();
348230
348432
  init_utils3();
@@ -350334,6 +350536,10 @@ async function* queryLoop(params, consumedCommandUuids) {
350334
350536
  }
350335
350537
  const pendingCacheEdits2 = undefined;
350336
350538
  queryCheckpoint("query_microcompact_end");
350539
+ const providerNotice = consumePendingProviderNotice();
350540
+ if (providerNotice) {
350541
+ yield createSystemMessage(providerNotice, "warning");
350542
+ }
350337
350543
  if (false) {}
350338
350544
  const fullSystemPrompt = asSystemPrompt(appendSystemContext(systemPrompt, systemContext));
350339
350545
  queryCheckpoint("query_autocompact_start");
@@ -351095,6 +351301,7 @@ var init_query = __esm(() => {
351095
351301
  init_log2();
351096
351302
  init_errors6();
351097
351303
  init_debug();
351304
+ init_ollama();
351098
351305
  init_messages();
351099
351306
  init_toolUseSummaryGenerator();
351100
351307
  init_api3();
@@ -375361,7 +375568,7 @@ function Feedback({
375361
375568
  platform: env2.platform,
375362
375569
  gitRepo: envInfo.isGit,
375363
375570
  terminal: env2.terminal,
375364
- version: "1.65.0",
375571
+ version: "1.65.2",
375365
375572
  transcript: normalizeMessagesForAPI(messages),
375366
375573
  errors: sanitizedErrors,
375367
375574
  lastApiRequest: getLastAPIRequest(),
@@ -375553,7 +375760,7 @@ function Feedback({
375553
375760
  ", ",
375554
375761
  env2.terminal,
375555
375762
  ", v",
375556
- "1.65.0"
375763
+ "1.65.2"
375557
375764
  ]
375558
375765
  }, undefined, true, undefined, this)
375559
375766
  ]
@@ -375659,7 +375866,7 @@ ${sanitizedDescription}
375659
375866
  ` + `**Environment Info**
375660
375867
  ` + `- Platform: ${env2.platform}
375661
375868
  ` + `- Terminal: ${env2.terminal}
375662
- ` + `- Version: ${"1.65.0"}
375869
+ ` + `- Version: ${"1.65.2"}
375663
375870
  ` + `- Feedback ID: ${feedbackId}
375664
375871
  ` + `
375665
375872
  **Errors**
@@ -378769,7 +378976,7 @@ function buildPrimarySection() {
378769
378976
  }, undefined, false, undefined, this);
378770
378977
  return [{
378771
378978
  label: "Version",
378772
- value: "1.65.0"
378979
+ value: "1.65.2"
378773
378980
  }, {
378774
378981
  label: "Session name",
378775
378982
  value: nameValue
@@ -382099,7 +382306,7 @@ function Config({
382099
382306
  }
382100
382307
  }, undefined, false, undefined, this)
382101
382308
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
382102
- currentVersion: "1.65.0",
382309
+ currentVersion: "1.65.2",
382103
382310
  onChoice: (choice) => {
382104
382311
  setShowSubmenu(null);
382105
382312
  setTabsHidden(false);
@@ -382111,7 +382318,7 @@ function Config({
382111
382318
  autoUpdatesChannel: "stable"
382112
382319
  };
382113
382320
  if (choice === "stay") {
382114
- newSettings.minimumVersion = "1.65.0";
382321
+ newSettings.minimumVersion = "1.65.2";
382115
382322
  }
382116
382323
  updateSettingsForSource("userSettings", newSettings);
382117
382324
  setSettingsData((prev_27) => ({
@@ -390175,7 +390382,7 @@ function HelpV2(t0) {
390175
390382
  let t6;
390176
390383
  if ($2[31] !== tabs) {
390177
390384
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
390178
- title: `UR v${"1.65.0"}`,
390385
+ title: `UR v${"1.65.2"}`,
390179
390386
  color: "professionalBlue",
390180
390387
  defaultTab: "general",
390181
390388
  children: tabs
@@ -391092,7 +391299,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
391092
391299
  async function handleInitialize(options2) {
391093
391300
  return {
391094
391301
  name: "UR",
391095
- version: "1.65.0",
391302
+ version: "1.65.2",
391096
391303
  protocolVersion: "0.1.0",
391097
391304
  workspaceRoot: options2.cwd,
391098
391305
  capabilities: {
@@ -408200,7 +408407,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
408200
408407
  return [];
408201
408408
  }
408202
408409
  }
408203
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.65.0") {
408410
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.65.2") {
408204
408411
  if (process.env.USER_TYPE === "ant") {
408205
408412
  const changelog = "";
408206
408413
  if (changelog) {
@@ -408227,7 +408434,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.65.0")
408227
408434
  releaseNotes
408228
408435
  };
408229
408436
  }
408230
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.65.0") {
408437
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.65.2") {
408231
408438
  if (process.env.USER_TYPE === "ant") {
408232
408439
  const changelog = "";
408233
408440
  if (changelog) {
@@ -411084,7 +411291,7 @@ function getRecentActivitySync() {
411084
411291
  return cachedActivity;
411085
411292
  }
411086
411293
  function getLogoDisplayData() {
411087
- const version2 = process.env.DEMO_VERSION ?? "1.65.0";
411294
+ const version2 = process.env.DEMO_VERSION ?? "1.65.2";
411088
411295
  const serverUrl = getDirectConnectServerUrl();
411089
411296
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
411090
411297
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -411968,7 +412175,7 @@ function LogoV2() {
411968
412175
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
411969
412176
  t2 = () => {
411970
412177
  const currentConfig2 = getGlobalConfig();
411971
- if (currentConfig2.lastReleaseNotesSeen === "1.65.0") {
412178
+ if (currentConfig2.lastReleaseNotesSeen === "1.65.2") {
411972
412179
  return;
411973
412180
  }
411974
412181
  saveGlobalConfig(_temp327);
@@ -412653,12 +412860,12 @@ function LogoV2() {
412653
412860
  return t41;
412654
412861
  }
412655
412862
  function _temp327(current) {
412656
- if (current.lastReleaseNotesSeen === "1.65.0") {
412863
+ if (current.lastReleaseNotesSeen === "1.65.2") {
412657
412864
  return current;
412658
412865
  }
412659
412866
  return {
412660
412867
  ...current,
412661
- lastReleaseNotesSeen: "1.65.0"
412868
+ lastReleaseNotesSeen: "1.65.2"
412662
412869
  };
412663
412870
  }
412664
412871
  function _temp241(s_0) {
@@ -425983,8 +426190,8 @@ var init_BackgroundTasksDialog = __esm(() => {
425983
426190
  });
425984
426191
 
425985
426192
  // src/commands/tasks/tasks.tsx
425986
- var exports_tasks = {};
425987
- __export(exports_tasks, {
426193
+ var exports_tasks2 = {};
426194
+ __export(exports_tasks2, {
425988
426195
  call: () => call41
425989
426196
  });
425990
426197
  async function call41(onDone, context6) {
@@ -426007,7 +426214,7 @@ var init_tasks4 = __esm(() => {
426007
426214
  name: "tasks",
426008
426215
  aliases: ["bashes"],
426009
426216
  description: "List and manage background tasks",
426010
- load: () => Promise.resolve().then(() => (init_tasks3(), exports_tasks))
426217
+ load: () => Promise.resolve().then(() => (init_tasks3(), exports_tasks2))
426011
426218
  };
426012
426219
  tasks_default = tasks;
426013
426220
  });
@@ -429456,7 +429663,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
429456
429663
  if (spec.name !== specName) {
429457
429664
  throw new Error("Agentic CI workflow spec name does not match");
429458
429665
  }
429459
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.65.0" : "1.65.0");
429666
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.65.2" : "1.65.2");
429460
429667
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
429461
429668
  throw new Error("invalid ur-agent package version");
429462
429669
  }
@@ -430449,7 +430656,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
430449
430656
  path: ".github/workflows/ur.yml",
430450
430657
  root: "project",
430451
430658
  content: compileAgenticCiWorkflow("default", {
430452
- packageVersion: typeof MACRO !== "undefined" ? "1.65.0" : "1.65.0"
430659
+ packageVersion: typeof MACRO !== "undefined" ? "1.65.2" : "1.65.2"
430453
430660
  })
430454
430661
  },
430455
430662
  {
@@ -430512,7 +430719,7 @@ function value(tokens, flag) {
430512
430719
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
430513
430720
  }
430514
430721
  function cliVersion() {
430515
- return typeof MACRO !== "undefined" ? "1.65.0" : "1.65.0";
430722
+ return typeof MACRO !== "undefined" ? "1.65.2" : "1.65.2";
430516
430723
  }
430517
430724
  function workflowPath(cwd2) {
430518
430725
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -436368,7 +436575,7 @@ function createAcpStdioApp(deps) {
436368
436575
  }
436369
436576
  },
436370
436577
  authMethods: [],
436371
- agentInfo: { name: "UR-Nexus", version: "1.65.0" }
436578
+ agentInfo: { name: "UR-Nexus", version: "1.65.2" }
436372
436579
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
436373
436580
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
436374
436581
  await runtime2.announce({
@@ -436465,7 +436672,7 @@ function createAcpStdioAgent(deps) {
436465
436672
  }
436466
436673
  },
436467
436674
  authMethods: [],
436468
- agentInfo: { name: "UR-Nexus", version: "1.65.0" }
436675
+ agentInfo: { name: "UR-Nexus", version: "1.65.2" }
436469
436676
  });
436470
436677
  return;
436471
436678
  case "authenticate":
@@ -437463,9 +437670,9 @@ function automationsDir() {
437463
437670
  return join162(getCwd(), ".ur", "automations");
437464
437671
  }
437465
437672
  function automationPath(name) {
437466
- return join162(automationsDir(), `${sanitizeName2(name)}.json`);
437673
+ return join162(automationsDir(), `${sanitizeName3(name)}.json`);
437467
437674
  }
437468
- function sanitizeName2(name) {
437675
+ function sanitizeName3(name) {
437469
437676
  return name.trim().replace(/[^a-zA-Z0-9_-]/g, "-");
437470
437677
  }
437471
437678
  function option6(tokens, name) {
@@ -437726,7 +437933,7 @@ Expected a 5-field cron expression with a next run in the next year.`
437726
437933
  }
437727
437934
  const spec = {
437728
437935
  version: 1,
437729
- name: sanitizeName2(name),
437936
+ name: sanitizeName3(name),
437730
437937
  schedule,
437731
437938
  prompt,
437732
437939
  runner: {
@@ -437749,7 +437956,7 @@ Expected a 5-field cron expression with a next run in the next year.`
437749
437956
  return { type: "text", value: usage7() };
437750
437957
  const path22 = automationPath(name);
437751
437958
  if (!existsSync46(path22)) {
437752
- return { type: "text", value: `Automation not found: ${sanitizeName2(name)}` };
437959
+ return { type: "text", value: `Automation not found: ${sanitizeName3(name)}` };
437753
437960
  }
437754
437961
  const raw = readFileSync47(path22, "utf-8");
437755
437962
  const parsed = safeParseJSON(raw, false);
@@ -437767,7 +437974,7 @@ Expected a 5-field cron expression with a next run in the next year.`
437767
437974
  return { type: "text", value: usage7() };
437768
437975
  const path22 = automationPath(name);
437769
437976
  if (!existsSync46(path22)) {
437770
- return { type: "text", value: `Automation not found: ${sanitizeName2(name)}` };
437977
+ return { type: "text", value: `Automation not found: ${sanitizeName3(name)}` };
437771
437978
  }
437772
437979
  const parsed = safeParseJSON(readFileSync47(path22, "utf-8"), false);
437773
437980
  if (!parsed)
@@ -437784,9 +437991,9 @@ Expected a 5-field cron expression with a next run in the next year.`
437784
437991
  const nowMs = toMs(option6(tokens, "--now")) ?? Date.now();
437785
437992
  const dryRun = hasFlag2(tokens, "--dry-run");
437786
437993
  const dueOnly = command5 === "run-due";
437787
- const specs = command5 === "run" ? listSpecs().filter((spec) => spec.name === sanitizeName2(positional[1] ?? "")) : listSpecs();
437994
+ const specs = command5 === "run" ? listSpecs().filter((spec) => spec.name === sanitizeName3(positional[1] ?? "")) : listSpecs();
437788
437995
  if (command5 === "run" && specs.length === 0) {
437789
- return { type: "text", value: `Automation not found: ${sanitizeName2(positional[1] ?? "")}` };
437996
+ return { type: "text", value: `Automation not found: ${sanitizeName3(positional[1] ?? "")}` };
437790
437997
  }
437791
437998
  const results = await Promise.all(specs.map((spec) => runSpec(spec, { dryRun, dueOnly, nowMs })));
437792
437999
  const runnable = results.filter((result) => !result.skipped);
@@ -437802,10 +438009,10 @@ Expected a 5-field cron expression with a next run in the next year.`
437802
438009
  return { type: "text", value: usage7() };
437803
438010
  const path22 = automationPath(name);
437804
438011
  if (!existsSync46(path22)) {
437805
- return { type: "text", value: `Automation not found: ${sanitizeName2(name)}` };
438012
+ return { type: "text", value: `Automation not found: ${sanitizeName3(name)}` };
437806
438013
  }
437807
438014
  unlinkSync9(path22);
437808
- return { type: "text", value: `Deleted automation ${sanitizeName2(name)}` };
438015
+ return { type: "text", value: `Deleted automation ${sanitizeName3(name)}` };
437809
438016
  }
437810
438017
  return { type: "text", value: usage7() };
437811
438018
  };
@@ -446321,8 +446528,11 @@ import { spawnSync as spawnSync6 } from "child_process";
446321
446528
  import { mkdirSync as mkdirSync47, mkdtempSync as mkdtempSync4, rmSync as rmSync14, writeFileSync as writeFileSync47 } from "fs";
446322
446529
  import { tmpdir as tmpdir15 } from "os";
446323
446530
  import { join as join186 } from "path";
446531
+ function urBinary() {
446532
+ return process.env.UR_BIN ?? process.argv[1] ?? "./bin/ur.js";
446533
+ }
446324
446534
  function runCli(args, cwd2) {
446325
- return spawnSync6("node", [process.env.UR_BIN ?? "./bin/ur.js", ...args], {
446535
+ return spawnSync6(process.execPath, [urBinary(), ...args], {
446326
446536
  encoding: "utf8",
446327
446537
  timeout: 90000,
446328
446538
  cwd: cwd2
@@ -459126,7 +459336,7 @@ var init_code_index2 = __esm(() => {
459126
459336
 
459127
459337
  // node_modules/typescript/lib/typescript.js
459128
459338
  var require_typescript2 = __commonJS((exports, module) => {
459129
- var __dirname = "/sessions/great-laughing-cerf/mnt/UR-1.49.0/node_modules/typescript/lib", __filename = "/sessions/great-laughing-cerf/mnt/UR-1.49.0/node_modules/typescript/lib/typescript.js";
459339
+ var __dirname = "/Users/maith/Desktop/ur3-dev/UR-1.65.0/node_modules/typescript/lib", __filename = "/Users/maith/Desktop/ur3-dev/UR-1.65.0/node_modules/typescript/lib/typescript.js";
459130
459340
  /*! *****************************************************************************
459131
459341
  Copyright (c) Microsoft Corporation. All rights reserved.
459132
459342
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -644839,7 +645049,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
644839
645049
  smapsRollup,
644840
645050
  platform: process.platform,
644841
645051
  nodeVersion: process.version,
644842
- ccVersion: "1.65.0"
645052
+ ccVersion: "1.65.2"
644843
645053
  };
644844
645054
  }
644845
645055
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -645419,7 +645629,7 @@ var init_bridge_kick = __esm(() => {
645419
645629
  var call153 = async () => {
645420
645630
  return {
645421
645631
  type: "text",
645422
- value: "1.65.0"
645632
+ value: "1.65.2"
645423
645633
  };
645424
645634
  }, version2, version_default;
645425
645635
  var init_version = __esm(() => {
@@ -656490,7 +656700,7 @@ function generateHtmlReport(data, insights) {
656490
656700
  </html>`;
656491
656701
  }
656492
656702
  function buildExportData(data, insights, facets, remoteStats) {
656493
- const version3 = typeof MACRO !== "undefined" ? "1.65.0" : "unknown";
656703
+ const version3 = typeof MACRO !== "undefined" ? "1.65.2" : "unknown";
656494
656704
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
656495
656705
  const facets_summary = {
656496
656706
  total: facets.size,
@@ -660801,7 +661011,7 @@ var init_sessionStorage = __esm(() => {
660801
661011
  init_settings2();
660802
661012
  init_slowOperations();
660803
661013
  init_uuid();
660804
- VERSION7 = typeof MACRO !== "undefined" ? "1.65.0" : "unknown";
661014
+ VERSION7 = typeof MACRO !== "undefined" ? "1.65.2" : "unknown";
660805
661015
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
660806
661016
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
660807
661017
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -662016,7 +662226,7 @@ var init_filesystem = __esm(() => {
662016
662226
  });
662017
662227
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
662018
662228
  const nonce = randomBytes20(16).toString("hex");
662019
- return join232(getURTempDir(), "bundled-skills", "1.65.0", nonce);
662229
+ return join232(getURTempDir(), "bundled-skills", "1.65.2", nonce);
662020
662230
  });
662021
662231
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
662022
662232
  });
@@ -668311,7 +668521,7 @@ function computeFingerprint(messageText2, version3) {
668311
668521
  }
668312
668522
  function computeFingerprintFromMessages(messages) {
668313
668523
  const firstMessageText = extractFirstMessageText(messages);
668314
- return computeFingerprint(firstMessageText, "1.65.0");
668524
+ return computeFingerprint(firstMessageText, "1.65.2");
668315
668525
  }
668316
668526
  var FINGERPRINT_SALT = "59cf53e54c78";
668317
668527
  var init_fingerprint = () => {};
@@ -670207,7 +670417,7 @@ async function sideQuery(opts) {
670207
670417
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
670208
670418
  }
670209
670419
  const messageText2 = extractFirstUserMessageText(messages);
670210
- const fingerprint2 = computeFingerprint(messageText2, "1.65.0");
670420
+ const fingerprint2 = computeFingerprint(messageText2, "1.65.2");
670211
670421
  const attributionHeader = getAttributionHeader(fingerprint2);
670212
670422
  const systemBlocks = [
670213
670423
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -674978,7 +675188,7 @@ function buildSystemInitMessage(inputs) {
674978
675188
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
674979
675189
  apiKeySource: getURHQApiKeyWithSource().source,
674980
675190
  betas: getSdkBetas(),
674981
- ur_version: "1.65.0",
675191
+ ur_version: "1.65.2",
674982
675192
  output_style: outputStyle2,
674983
675193
  agents: inputs.agents.map((agent2) => agent2.agentType),
674984
675194
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -688838,7 +689048,7 @@ var init_useVoiceEnabled = __esm(() => {
688838
689048
  function getSemverPart(version3) {
688839
689049
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
688840
689050
  }
688841
- function useUpdateNotification(updatedVersion, initialVersion = "1.65.0") {
689051
+ function useUpdateNotification(updatedVersion, initialVersion = "1.65.2") {
688842
689052
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
688843
689053
  if (!updatedVersion) {
688844
689054
  return null;
@@ -688887,7 +689097,7 @@ function AutoUpdater({
688887
689097
  return;
688888
689098
  }
688889
689099
  if (false) {}
688890
- const currentVersion = "1.65.0";
689100
+ const currentVersion = "1.65.2";
688891
689101
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
688892
689102
  let latestVersion = await getLatestVersion(channel);
688893
689103
  const isDisabled = isAutoUpdaterDisabled();
@@ -689116,12 +689326,12 @@ function NativeAutoUpdater({
689116
689326
  logEvent("tengu_native_auto_updater_start", {});
689117
689327
  try {
689118
689328
  const maxVersion = await getMaxVersion();
689119
- if (maxVersion && gt("1.65.0", maxVersion)) {
689329
+ if (maxVersion && gt("1.65.2", maxVersion)) {
689120
689330
  const msg = await getMaxVersionMessage();
689121
689331
  setMaxVersionIssue(msg ?? "affects your version");
689122
689332
  }
689123
689333
  const result = await installLatest(channel);
689124
- const currentVersion = "1.65.0";
689334
+ const currentVersion = "1.65.2";
689125
689335
  const latencyMs = Date.now() - startTime;
689126
689336
  if (result.lockFailed) {
689127
689337
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -689258,17 +689468,17 @@ function PackageManagerAutoUpdater(t0) {
689258
689468
  const maxVersion = await getMaxVersion();
689259
689469
  if (maxVersion && latest && gt(latest, maxVersion)) {
689260
689470
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
689261
- if (gte("1.65.0", maxVersion)) {
689262
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.65.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
689471
+ if (gte("1.65.2", maxVersion)) {
689472
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.65.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
689263
689473
  setUpdateAvailable(false);
689264
689474
  return;
689265
689475
  }
689266
689476
  latest = maxVersion;
689267
689477
  }
689268
- const hasUpdate = latest && !gte("1.65.0", latest) && !shouldSkipVersion(latest);
689478
+ const hasUpdate = latest && !gte("1.65.2", latest) && !shouldSkipVersion(latest);
689269
689479
  setUpdateAvailable(!!hasUpdate);
689270
689480
  if (hasUpdate) {
689271
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.65.0"} -> ${latest}`);
689481
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.65.2"} -> ${latest}`);
689272
689482
  }
689273
689483
  };
689274
689484
  $2[0] = t1;
@@ -689302,7 +689512,7 @@ function PackageManagerAutoUpdater(t0) {
689302
689512
  wrap: "truncate",
689303
689513
  children: [
689304
689514
  "currentVersion: ",
689305
- "1.65.0"
689515
+ "1.65.2"
689306
689516
  ]
689307
689517
  }, undefined, true, undefined, this);
689308
689518
  $2[3] = verbose;
@@ -699999,7 +700209,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
699999
700209
  project_dir: getOriginalCwd(),
700000
700210
  added_dirs: addedDirs
700001
700211
  },
700002
- version: "1.65.0",
700212
+ version: "1.65.2",
700003
700213
  output_style: {
700004
700214
  name: outputStyleName
700005
700215
  },
@@ -700082,7 +700292,7 @@ function StatusLineInner({
700082
700292
  const taskValues = Object.values(tasks2);
700083
700293
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
700084
700294
  const defaultStatusLineText = buildDefaultStatusBar({
700085
- version: "1.65.0",
700295
+ version: "1.65.2",
700086
700296
  providerLabel: providerRuntime.providerLabel,
700087
700297
  authMode: providerRuntime.authLabel,
700088
700298
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -712225,7 +712435,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
712225
712435
  } catch {}
712226
712436
  const data = {
712227
712437
  trigger: trigger2,
712228
- version: "1.65.0",
712438
+ version: "1.65.2",
712229
712439
  platform: process.platform,
712230
712440
  transcript,
712231
712441
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -724505,7 +724715,7 @@ function WelcomeV2() {
724505
724715
  dimColor: true,
724506
724716
  children: [
724507
724717
  "v",
724508
- "1.65.0"
724718
+ "1.65.2"
724509
724719
  ]
724510
724720
  }, undefined, true, undefined, this)
724511
724721
  ]
@@ -725765,7 +725975,7 @@ function completeOnboarding() {
725765
725975
  saveGlobalConfig((current) => ({
725766
725976
  ...current,
725767
725977
  hasCompletedOnboarding: true,
725768
- lastOnboardingVersion: "1.65.0"
725978
+ lastOnboardingVersion: "1.65.2"
725769
725979
  }));
725770
725980
  }
725771
725981
  function showDialog(root2, renderer) {
@@ -730809,7 +731019,7 @@ function appendToLog(path24, message) {
730809
731019
  cwd: getFsImplementation().cwd(),
730810
731020
  userType: process.env.USER_TYPE,
730811
731021
  sessionId: getSessionId(),
730812
- version: "1.65.0"
731022
+ version: "1.65.2"
730813
731023
  };
730814
731024
  getLogWriter(path24).write(messageWithTimestamp);
730815
731025
  }
@@ -734968,8 +735178,8 @@ async function getEnvLessBridgeConfig() {
734968
735178
  }
734969
735179
  async function checkEnvLessBridgeMinVersion() {
734970
735180
  const cfg = await getEnvLessBridgeConfig();
734971
- if (cfg.min_version && lt("1.65.0", cfg.min_version)) {
734972
- return `Your version of UR (${"1.65.0"}) is too old for Remote Control.
735181
+ if (cfg.min_version && lt("1.65.2", cfg.min_version)) {
735182
+ return `Your version of UR (${"1.65.2"}) is too old for Remote Control.
734973
735183
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
734974
735184
  }
734975
735185
  return null;
@@ -735443,7 +735653,7 @@ async function initBridgeCore(params) {
735443
735653
  const rawApi = createBridgeApiClient({
735444
735654
  baseUrl,
735445
735655
  getAccessToken,
735446
- runnerVersion: "1.65.0",
735656
+ runnerVersion: "1.65.2",
735447
735657
  onDebug: logForDebugging,
735448
735658
  onAuth401,
735449
735659
  getTrustedDeviceToken
@@ -744916,7 +745126,7 @@ function getAgUiCapabilities() {
744916
745126
  name: "UR-Nexus",
744917
745127
  type: "ur-nexus",
744918
745128
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
744919
- version: "1.65.0",
745129
+ version: "1.65.2",
744920
745130
  provider: "UR",
744921
745131
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
744922
745132
  },
@@ -746056,7 +746266,7 @@ function createMCPServer(cwd4, debug2, verbose) {
746056
746266
  };
746057
746267
  const server2 = new Server({
746058
746268
  name: "ur-nexus",
746059
- version: "1.65.0"
746269
+ version: "1.65.2"
746060
746270
  }, {
746061
746271
  capabilities: {
746062
746272
  tools: {}
@@ -747214,7 +747424,7 @@ function thrownResponse(error40) {
747214
747424
  }
747215
747425
  async function createUrMcp2026Runtime(options4) {
747216
747426
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
747217
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.65.0" }, { capabilities: {} });
747427
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.65.2" }, { capabilities: {} });
747218
747428
  const [clientTransport, serverTransport] = createLinkedTransportPair();
747219
747429
  try {
747220
747430
  await server2.connect(serverTransport);
@@ -747225,7 +747435,7 @@ async function createUrMcp2026Runtime(options4) {
747225
747435
  }
747226
747436
  const runtime2 = new Mcp2026Runtime({
747227
747437
  cwd: options4.cwd,
747228
- version: "1.65.0",
747438
+ version: "1.65.2",
747229
747439
  backend: {
747230
747440
  listTools: async () => {
747231
747441
  const listed = await client2.listTools();
@@ -749358,7 +749568,7 @@ async function update() {
749358
749568
  logEvent("tengu_update_check", {});
749359
749569
  const diagnostic2 = await getDoctorDiagnostic();
749360
749570
  const result = await checkUpgradeStatus({
749361
- currentVersion: "1.65.0",
749571
+ currentVersion: "1.65.2",
749362
749572
  packageName: UR_AGENT_PACKAGE_NAME,
749363
749573
  installationType: diagnostic2.installationType,
749364
749574
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -750674,7 +750884,7 @@ ${customInstructions}` : customInstructions;
750674
750884
  }
750675
750885
  }
750676
750886
  logForDiagnosticsNoPII("info", "started", {
750677
- version: "1.65.0",
750887
+ version: "1.65.2",
750678
750888
  is_native_binary: isInBundledMode()
750679
750889
  });
750680
750890
  registerCleanup(async () => {
@@ -751460,7 +751670,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
751460
751670
  pendingHookMessages
751461
751671
  }, renderAndRun);
751462
751672
  }
751463
- }).version("1.65.0 (UR-Nexus)", "-v, --version", "Output the version number");
751673
+ }).version("1.65.2 (UR-Nexus)", "-v, --version", "Output the version number");
751464
751674
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
751465
751675
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
751466
751676
  if (canUserConfigureAdvisor()) {
@@ -752512,7 +752722,7 @@ if (false) {}
752512
752722
  async function main2() {
752513
752723
  const args = process.argv.slice(2);
752514
752724
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
752515
- console.log(`${"1.65.0"} (UR-Nexus)`);
752725
+ console.log(`${"1.65.2"} (UR-Nexus)`);
752516
752726
  return;
752517
752727
  }
752518
752728
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -45,7 +45,7 @@
45
45
  <main id="content" class="content">
46
46
  <header class="topbar">
47
47
  <div>
48
- <p class="eyebrow">Version 1.65.0</p>
48
+ <p class="eyebrow">Version 1.65.2</p>
49
49
  <h1>UR-Nexus Documentation</h1>
50
50
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
51
51
  </div>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.65.0"
10
+ version = "1.65.2"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -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.65.0",
5
+ "version": "1.65.2",
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.65.0",
3
+ "version": "1.65.2",
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",