ur-agent 1.41.1 → 1.43.0

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,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.43.0
4
+
5
+ - Add `ur artifacts serve [--port 4180]`: a local web page for artifacts.
6
+ `GET /artifacts/<id>` renders one artifact (status, summary, feedback,
7
+ content), `/` lists all, with `/artifacts/<id>/raw` and `/api/artifacts[/<id>]`
8
+ endpoints. Bound to 127.0.0.1; stop with `ur artifacts serve --stop`.
9
+
10
+ ## 1.42.0
11
+
12
+ - Project safety policy no longer hard-blocks commands. Risky or deny-matched
13
+ commands (package installs, destructive git operations, secret access,
14
+ sandbox-required commands when the sandbox is unavailable) now surface as
15
+ approval prompts instead of `Blocked by project safety policy` errors; the
16
+ user decides. `ur safety`/`ur sandbox` evaluation output is unchanged.
17
+
3
18
  ## 1.41.1
4
19
 
5
20
  - Harden provider tests against stored API keys in the local secure storage.
package/README.md CHANGED
@@ -377,7 +377,7 @@ as first-class subcommands in the shipped CLI.
377
377
  | `ur semantic-memory` | Build and search a project-local memory index. |
378
378
  | `ur memory retention` | Configure and apply local memory retention policies (TTL, max entries, decay). |
379
379
  | `ur knowledge` | Manage a curated project knowledge base with provenance. |
380
- | `ur artifacts` | Capture diffs, test runs, notes, and review feedback under `.ur/artifacts/`. |
380
+ | `ur artifacts` | Capture diffs, test runs, notes, and review feedback under `.ur/artifacts/`; `serve` opens a local web page per artifact ID. |
381
381
  | `ur claim-ledger` | Map generated claims to file, web, MCP, tool, or user sources. |
382
382
  | `ur browser-qa` | Validate and smoke-run browser QA replay fixtures. |
383
383
  | `ur eval run` | Run an eval suite and grade outputs; optionally capture cost/tokens/files/test metrics. |
@@ -560,6 +560,7 @@ ur code-index repo search "rate limiter"
560
560
  ur skill init security-review
561
561
  ur skill run security-review "src/auth.ts"
562
562
  ur artifacts capture-tests --command "bun test"
563
+ ur artifacts serve --port 4180
563
564
  ur agent-task pr --create --dry-run
564
565
  ur acp serve --port 8123
565
566
  ur exec "add tests for the parser" --concurrency 4 --json
package/dist/cli.js CHANGED
@@ -71146,7 +71146,7 @@ var init_auth = __esm(() => {
71146
71146
 
71147
71147
  // src/utils/userAgent.ts
71148
71148
  function getURCodeUserAgent() {
71149
- return `ur/${"1.41.1"}`;
71149
+ return `ur/${"1.43.0"}`;
71150
71150
  }
71151
71151
 
71152
71152
  // src/utils/workloadContext.ts
@@ -71168,7 +71168,7 @@ function getUserAgent() {
71168
71168
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
71169
71169
  const workload = getWorkload();
71170
71170
  const workloadSuffix = workload ? `, workload/${workload}` : "";
71171
- return `ur-cli/${"1.41.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71171
+ return `ur-cli/${"1.43.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71172
71172
  }
71173
71173
  function getMCPUserAgent() {
71174
71174
  const parts = [];
@@ -71182,7 +71182,7 @@ function getMCPUserAgent() {
71182
71182
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
71183
71183
  }
71184
71184
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
71185
- return `ur/${"1.41.1"}${suffix}`;
71185
+ return `ur/${"1.43.0"}${suffix}`;
71186
71186
  }
71187
71187
  function getWebFetchUserAgent() {
71188
71188
  return `UR-User (${getURCodeUserAgent()})`;
@@ -71320,7 +71320,7 @@ var init_user = __esm(() => {
71320
71320
  deviceId,
71321
71321
  sessionId: getSessionId(),
71322
71322
  email: getEmail(),
71323
- appVersion: "1.41.1",
71323
+ appVersion: "1.43.0",
71324
71324
  platform: getHostPlatformForAnalytics(),
71325
71325
  organizationUuid,
71326
71326
  accountUuid,
@@ -77837,7 +77837,7 @@ var init_metadata = __esm(() => {
77837
77837
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
77838
77838
  WHITESPACE_REGEX = /\s+/;
77839
77839
  getVersionBase = memoize_default(() => {
77840
- const match = "1.41.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
77840
+ const match = "1.43.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
77841
77841
  return match ? match[0] : undefined;
77842
77842
  });
77843
77843
  buildEnvContext = memoize_default(async () => {
@@ -77877,7 +77877,7 @@ var init_metadata = __esm(() => {
77877
77877
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
77878
77878
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
77879
77879
  isURAiAuth: isURAISubscriber(),
77880
- version: "1.41.1",
77880
+ version: "1.43.0",
77881
77881
  versionBase: getVersionBase(),
77882
77882
  buildTime: "",
77883
77883
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -78547,7 +78547,7 @@ function initialize1PEventLogging() {
78547
78547
  const platform2 = getPlatform();
78548
78548
  const attributes = {
78549
78549
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
78550
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.41.1"
78550
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.43.0"
78551
78551
  };
78552
78552
  if (platform2 === "wsl") {
78553
78553
  const wslVersion = getWslVersion();
@@ -78574,7 +78574,7 @@ function initialize1PEventLogging() {
78574
78574
  })
78575
78575
  ]
78576
78576
  });
78577
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.41.1");
78577
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.43.0");
78578
78578
  }
78579
78579
  async function reinitialize1PEventLoggingIfConfigChanged() {
78580
78580
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -83873,7 +83873,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
83873
83873
  function formatA2AAgentCard(options = {}, pretty = true) {
83874
83874
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
83875
83875
  }
83876
- var urVersion = "1.41.1", coverage, priorityRoadmap;
83876
+ var urVersion = "1.43.0", coverage, priorityRoadmap;
83877
83877
  var init_trends = __esm(() => {
83878
83878
  coverage = [
83879
83879
  {
@@ -85868,7 +85868,7 @@ function getAttributionHeader(fingerprint) {
85868
85868
  if (!isAttributionHeaderEnabled()) {
85869
85869
  return "";
85870
85870
  }
85871
- const version2 = `${"1.41.1"}.${fingerprint}`;
85871
+ const version2 = `${"1.43.0"}.${fingerprint}`;
85872
85872
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
85873
85873
  const cch = "";
85874
85874
  const workload = getWorkload();
@@ -193771,7 +193771,7 @@ function getTelemetryAttributes() {
193771
193771
  attributes["session.id"] = sessionId;
193772
193772
  }
193773
193773
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
193774
- attributes["app.version"] = "1.41.1";
193774
+ attributes["app.version"] = "1.43.0";
193775
193775
  }
193776
193776
  const oauthAccount = getOauthAccountInfo();
193777
193777
  if (oauthAccount) {
@@ -229157,7 +229157,7 @@ function getInstallationEnv() {
229157
229157
  return;
229158
229158
  }
229159
229159
  function getURCodeVersion() {
229160
- return "1.41.1";
229160
+ return "1.43.0";
229161
229161
  }
229162
229162
  async function getInstalledVSCodeExtensionVersion(command) {
229163
229163
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -231996,7 +231996,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
231996
231996
  const client2 = new Client({
231997
231997
  name: "ur",
231998
231998
  title: "UR",
231999
- version: "1.41.1",
231999
+ version: "1.43.0",
232000
232000
  description: "UR-Nexus autonomous engineering workflow engine",
232001
232001
  websiteUrl: PRODUCT_URL
232002
232002
  }, {
@@ -232350,7 +232350,7 @@ var init_client5 = __esm(() => {
232350
232350
  const client2 = new Client({
232351
232351
  name: "ur",
232352
232352
  title: "UR",
232353
- version: "1.41.1",
232353
+ version: "1.43.0",
232354
232354
  description: "UR-Nexus autonomous engineering workflow engine",
232355
232355
  websiteUrl: PRODUCT_URL
232356
232356
  }, {
@@ -242164,9 +242164,9 @@ async function assertMinVersion() {
242164
242164
  if (false) {}
242165
242165
  try {
242166
242166
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
242167
- if (versionConfig.minVersion && lt("1.41.1", versionConfig.minVersion)) {
242167
+ if (versionConfig.minVersion && lt("1.43.0", versionConfig.minVersion)) {
242168
242168
  console.error(`
242169
- It looks like your version of UR (${"1.41.1"}) needs an update.
242169
+ It looks like your version of UR (${"1.43.0"}) needs an update.
242170
242170
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
242171
242171
 
242172
242172
  To update, please run:
@@ -242382,7 +242382,7 @@ async function installGlobalPackage(specificVersion) {
242382
242382
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
242383
242383
  logEvent("tengu_auto_updater_lock_contention", {
242384
242384
  pid: process.pid,
242385
- currentVersion: "1.41.1"
242385
+ currentVersion: "1.43.0"
242386
242386
  });
242387
242387
  return "in_progress";
242388
242388
  }
@@ -242391,7 +242391,7 @@ async function installGlobalPackage(specificVersion) {
242391
242391
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
242392
242392
  logError2(new Error("Windows NPM detected in WSL environment"));
242393
242393
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
242394
- currentVersion: "1.41.1"
242394
+ currentVersion: "1.43.0"
242395
242395
  });
242396
242396
  console.error(`
242397
242397
  Error: Windows NPM detected in WSL
@@ -242926,7 +242926,7 @@ function detectLinuxGlobPatternWarnings() {
242926
242926
  }
242927
242927
  async function getDoctorDiagnostic() {
242928
242928
  const installationType = await getCurrentInstallationType();
242929
- const version2 = typeof MACRO !== "undefined" ? "1.41.1" : "unknown";
242929
+ const version2 = typeof MACRO !== "undefined" ? "1.43.0" : "unknown";
242930
242930
  const installationPath = await getInstallationPath();
242931
242931
  const invokedBinary = getInvokedBinary();
242932
242932
  const multipleInstallations = await detectMultipleInstallations();
@@ -243861,8 +243861,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
243861
243861
  const maxVersion = await getMaxVersion();
243862
243862
  if (maxVersion && gt(version2, maxVersion)) {
243863
243863
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
243864
- if (gte("1.41.1", maxVersion)) {
243865
- logForDebugging(`Native installer: current version ${"1.41.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
243864
+ if (gte("1.43.0", maxVersion)) {
243865
+ logForDebugging(`Native installer: current version ${"1.43.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
243866
243866
  logEvent("tengu_native_update_skipped_max_version", {
243867
243867
  latency_ms: Date.now() - startTime,
243868
243868
  max_version: maxVersion,
@@ -243873,7 +243873,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
243873
243873
  version2 = maxVersion;
243874
243874
  }
243875
243875
  }
243876
- if (!forceReinstall && version2 === "1.41.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
243876
+ if (!forceReinstall && version2 === "1.43.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
243877
243877
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
243878
243878
  logEvent("tengu_native_update_complete", {
243879
243879
  latency_ms: Date.now() - startTime,
@@ -311265,27 +311265,27 @@ async function bashToolHasPermission(input, context3, getCommandSubcommandPrefix
311265
311265
  if (safetyEvaluation.behavior === "deny") {
311266
311266
  const reason = safetyEvaluation.reasons.join("; ");
311267
311267
  recordShellSafetyViolation(safetyEvaluation, reason);
311268
+ const decisionReason2 = {
311269
+ type: "other",
311270
+ reason: `Project safety policy requires approval: ${reason}`
311271
+ };
311268
311272
  return {
311269
- behavior: "deny",
311270
- message: `Blocked by project safety policy: ${reason}`,
311271
- decisionReason: {
311272
- type: "other",
311273
- reason: `Project safety policy denied command: ${reason}`
311274
- }
311273
+ behavior: "ask",
311274
+ decisionReason: decisionReason2,
311275
+ message: createPermissionRequestMessage2(BashTool.name, decisionReason2),
311276
+ suggestions: []
311275
311277
  };
311276
311278
  }
311277
311279
  if (safetyEvaluation.sandboxMode === "required" && !shouldUseSandbox(input)) {
311278
- const reason = safetyEvaluation.reasons.join("; ");
311279
- const unavailableReason = SandboxManager2.getSandboxUnavailableReason() ?? "sandbox is disabled, unavailable, or bypassed for this command";
311280
- const message = `Blocked by project safety policy: sandbox is required but unavailable. ${unavailableReason}`;
311281
- recordShellSafetyViolation(safetyEvaluation, `${reason}; ${unavailableReason}`);
311280
+ const decisionReason2 = {
311281
+ type: "other",
311282
+ reason: `Sandbox unavailable; approval required to run unsandboxed: ${safetyEvaluation.reasons.join("; ")}`
311283
+ };
311282
311284
  return {
311283
- behavior: "deny",
311284
- message,
311285
- decisionReason: {
311286
- type: "other",
311287
- reason: `Project safety policy requires sandbox enforcement: ${reason}; ${unavailableReason}`
311288
- }
311285
+ behavior: "ask",
311286
+ decisionReason: decisionReason2,
311287
+ message: createPermissionRequestMessage2(BashTool.name, decisionReason2),
311288
+ suggestions: []
311289
311289
  };
311290
311290
  }
311291
311291
  if (safetyEvaluation.behavior === "ask") {
@@ -340844,7 +340844,7 @@ function Feedback({
340844
340844
  platform: env2.platform,
340845
340845
  gitRepo: envInfo.isGit,
340846
340846
  terminal: env2.terminal,
340847
- version: "1.41.1",
340847
+ version: "1.43.0",
340848
340848
  transcript: normalizeMessagesForAPI(messages),
340849
340849
  errors: sanitizedErrors,
340850
340850
  lastApiRequest: getLastAPIRequest(),
@@ -341036,7 +341036,7 @@ function Feedback({
341036
341036
  ", ",
341037
341037
  env2.terminal,
341038
341038
  ", v",
341039
- "1.41.1"
341039
+ "1.43.0"
341040
341040
  ]
341041
341041
  }, undefined, true, undefined, this)
341042
341042
  ]
@@ -341142,7 +341142,7 @@ ${sanitizedDescription}
341142
341142
  ` + `**Environment Info**
341143
341143
  ` + `- Platform: ${env2.platform}
341144
341144
  ` + `- Terminal: ${env2.terminal}
341145
- ` + `- Version: ${"1.41.1"}
341145
+ ` + `- Version: ${"1.43.0"}
341146
341146
  ` + `- Feedback ID: ${feedbackId}
341147
341147
  ` + `
341148
341148
  **Errors**
@@ -344253,7 +344253,7 @@ function buildPrimarySection() {
344253
344253
  }, undefined, false, undefined, this);
344254
344254
  return [{
344255
344255
  label: "Version",
344256
- value: "1.41.1"
344256
+ value: "1.43.0"
344257
344257
  }, {
344258
344258
  label: "Session name",
344259
344259
  value: nameValue
@@ -347554,7 +347554,7 @@ function Config({
347554
347554
  }
347555
347555
  }, undefined, false, undefined, this)
347556
347556
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
347557
- currentVersion: "1.41.1",
347557
+ currentVersion: "1.43.0",
347558
347558
  onChoice: (choice) => {
347559
347559
  setShowSubmenu(null);
347560
347560
  setTabsHidden(false);
@@ -347566,7 +347566,7 @@ function Config({
347566
347566
  autoUpdatesChannel: "stable"
347567
347567
  };
347568
347568
  if (choice === "stay") {
347569
- newSettings.minimumVersion = "1.41.1";
347569
+ newSettings.minimumVersion = "1.43.0";
347570
347570
  }
347571
347571
  updateSettingsForSource("userSettings", newSettings);
347572
347572
  setSettingsData((prev_27) => ({
@@ -355636,7 +355636,7 @@ function HelpV2(t0) {
355636
355636
  let t6;
355637
355637
  if ($3[31] !== tabs) {
355638
355638
  t6 = /* @__PURE__ */ jsx_dev_runtime204.jsxDEV(Tabs, {
355639
- title: `UR v${"1.41.1"}`,
355639
+ title: `UR v${"1.43.0"}`,
355640
355640
  color: "professionalBlue",
355641
355641
  defaultTab: "general",
355642
355642
  children: tabs
@@ -356382,7 +356382,7 @@ function buildToolUseContext(tools, readFileStateCache) {
356382
356382
  async function handleInitialize(options2) {
356383
356383
  return {
356384
356384
  name: "UR",
356385
- version: "1.41.1",
356385
+ version: "1.43.0",
356386
356386
  protocolVersion: "0.1.0",
356387
356387
  workspaceRoot: options2.cwd,
356388
356388
  capabilities: {
@@ -376524,7 +376524,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
376524
376524
  return [];
376525
376525
  }
376526
376526
  }
376527
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.41.1") {
376527
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.43.0") {
376528
376528
  if (process.env.USER_TYPE === "ant") {
376529
376529
  const changelog = "";
376530
376530
  if (changelog) {
@@ -376551,7 +376551,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.41.1")
376551
376551
  releaseNotes
376552
376552
  };
376553
376553
  }
376554
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.41.1") {
376554
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.43.0") {
376555
376555
  if (process.env.USER_TYPE === "ant") {
376556
376556
  const changelog = "";
376557
376557
  if (changelog) {
@@ -377730,7 +377730,7 @@ function getRecentActivitySync() {
377730
377730
  return cachedActivity;
377731
377731
  }
377732
377732
  function getLogoDisplayData() {
377733
- const version2 = process.env.DEMO_VERSION ?? "1.41.1";
377733
+ const version2 = process.env.DEMO_VERSION ?? "1.43.0";
377734
377734
  const serverUrl = getDirectConnectServerUrl();
377735
377735
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
377736
377736
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -378519,7 +378519,7 @@ function LogoV2() {
378519
378519
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
378520
378520
  t2 = () => {
378521
378521
  const currentConfig2 = getGlobalConfig();
378522
- if (currentConfig2.lastReleaseNotesSeen === "1.41.1") {
378522
+ if (currentConfig2.lastReleaseNotesSeen === "1.43.0") {
378523
378523
  return;
378524
378524
  }
378525
378525
  saveGlobalConfig(_temp326);
@@ -379204,12 +379204,12 @@ function LogoV2() {
379204
379204
  return t41;
379205
379205
  }
379206
379206
  function _temp326(current) {
379207
- if (current.lastReleaseNotesSeen === "1.41.1") {
379207
+ if (current.lastReleaseNotesSeen === "1.43.0") {
379208
379208
  return current;
379209
379209
  }
379210
379210
  return {
379211
379211
  ...current,
379212
- lastReleaseNotesSeen: "1.41.1"
379212
+ lastReleaseNotesSeen: "1.43.0"
379213
379213
  };
379214
379214
  }
379215
379215
  function _temp243(s_0) {
@@ -406936,6 +406936,139 @@ var init_context_pack2 = __esm(() => {
406936
406936
  context_pack_default = contextPack;
406937
406937
  });
406938
406938
 
406939
+ // src/services/agents/artifactsServer.ts
406940
+ import { createServer as createServer5 } from "http";
406941
+ function page(title, body) {
406942
+ return `<!doctype html>
406943
+ <html lang="en">
406944
+ <head>
406945
+ <meta charset="utf-8">
406946
+ <meta name="viewport" content="width=device-width, initial-scale=1">
406947
+ <title>${escapeXmlAttr(title)}</title>
406948
+ <style>
406949
+ :root { color-scheme: light dark; }
406950
+ body { font-family: ui-sans-serif, system-ui, sans-serif; max-width: 880px; margin: 2rem auto; padding: 0 1rem; line-height: 1.5; }
406951
+ a { color: #4078c0; text-decoration: none; }
406952
+ a:hover { text-decoration: underline; }
406953
+ table { border-collapse: collapse; width: 100%; }
406954
+ th, td { text-align: left; padding: .4rem .6rem; border-bottom: 1px solid #8884; }
406955
+ pre { background: #8881; padding: 1rem; border-radius: 6px; overflow-x: auto; }
406956
+ .badge { padding: .1rem .5rem; border-radius: 999px; color: #fff; font-size: .8rem; }
406957
+ .meta { color: #888; font-size: .9rem; }
406958
+ .feedback { border-left: 3px solid #8884; padding-left: .8rem; margin: .5rem 0; }
406959
+ </style>
406960
+ </head>
406961
+ <body>${body}</body>
406962
+ </html>
406963
+ `;
406964
+ }
406965
+ function badge(status2) {
406966
+ return `<span class="badge" style="background:${STATUS_COLOR[status2]}">${status2}</span>`;
406967
+ }
406968
+ function renderArtifactList(artifacts) {
406969
+ const rows = artifacts.map((a2) => `<tr><td><a href="/artifacts/${escapeXmlAttr(a2.id)}">${escapeXmlAttr(a2.id)}</a></td>` + `<td>${escapeXmlAttr(a2.kind)}</td><td>${escapeXmlAttr(a2.title)}</td>` + `<td>${badge(a2.status)}</td><td>${escapeXmlAttr(a2.summary ?? "")}</td></tr>`).join(`
406970
+ `);
406971
+ const table = artifacts.length ? `<table><tr><th>ID</th><th>Kind</th><th>Title</th><th>Status</th><th>Summary</th></tr>${rows}</table>` : "<p>No artifacts yet. Capture one with <code>ur artifacts capture-diff</code> or <code>ur artifacts add ...</code>.</p>";
406972
+ return page("Artifacts", `<h1>Artifacts</h1>${table}`);
406973
+ }
406974
+ function renderArtifactPage(artifact, body) {
406975
+ const feedback2 = artifact.feedback.map((f) => `<div class="feedback"><span class="meta">${escapeXmlAttr(f.at)}</span><br>${escapeXmlAttr(f.text)}</div>`).join(`
406976
+ `);
406977
+ const parts = [
406978
+ `<p><a href="/">&larr; all artifacts</a></p>`,
406979
+ `<h1>Artifact ${escapeXmlAttr(artifact.id)} <span class="meta">[${escapeXmlAttr(artifact.kind)}]</span> ${badge(artifact.status)}</h1>`,
406980
+ `<p><strong>${escapeXmlAttr(artifact.title)}</strong></p>`,
406981
+ artifact.summary ? `<p>${escapeXmlAttr(artifact.summary)}</p>` : "",
406982
+ `<p class="meta">created ${escapeXmlAttr(artifact.createdAt)} \xB7 updated ${escapeXmlAttr(artifact.updatedAt)}${artifact.file ? ` \xB7 <a href="/artifacts/${escapeXmlAttr(artifact.id)}/raw">raw</a>` : ""}</p>`,
406983
+ artifact.links?.claims?.length ? `<p class="meta">claims: ${artifact.links.claims.map(escapeXmlAttr).join(", ")}</p>` : "",
406984
+ feedback2 ? `<h2>Feedback</h2>${feedback2}` : "",
406985
+ body !== null ? `<h2>Content</h2><pre>${escapeXmlAttr(body)}</pre>` : ""
406986
+ ];
406987
+ return page(`Artifact ${artifact.id} \u2014 ${artifact.title}`, parts.filter(Boolean).join(`
406988
+ `));
406989
+ }
406990
+ function notFound4(id) {
406991
+ return page("Artifact not found", `<h1>Artifact not found: ${escapeXmlAttr(id)}</h1><p><a href="/">&larr; all artifacts</a></p>`);
406992
+ }
406993
+ function respond(res, status2, type, body) {
406994
+ res.writeHead(status2, { "content-type": `${type}; charset=utf-8` });
406995
+ res.end(body);
406996
+ }
406997
+ function handleArtifactsRequest(cwd2, url3) {
406998
+ const path22 = decodeURIComponent(new URL(url3, "http://localhost").pathname).replace(/\/+$/, "") || "/";
406999
+ if (path22 === "/" || path22 === "/artifacts") {
407000
+ return { status: 200, type: "text/html", body: renderArtifactList(listArtifacts(cwd2)) };
407001
+ }
407002
+ if (path22 === "/api/artifacts") {
407003
+ return { status: 200, type: "application/json", body: JSON.stringify({ artifacts: listArtifacts(cwd2) }, null, 2) };
407004
+ }
407005
+ let match = path22.match(/^\/api\/artifacts\/([^/]+)$/);
407006
+ if (match) {
407007
+ const artifact = getArtifact(cwd2, match[1]);
407008
+ return artifact ? { status: 200, type: "application/json", body: JSON.stringify(artifact, null, 2) } : { status: 404, type: "application/json", body: JSON.stringify({ error: `Artifact not found: ${match[1]}` }) };
407009
+ }
407010
+ match = path22.match(/^\/artifacts\/([^/]+)\/raw$/);
407011
+ if (match) {
407012
+ const body = readArtifactBody(cwd2, match[1]);
407013
+ return body !== null ? { status: 200, type: "text/plain", body } : { status: 404, type: "text/plain", body: `Artifact body not found: ${match[1]}` };
407014
+ }
407015
+ match = path22.match(/^\/(?:artifacts\/)?([^/]+)$/);
407016
+ if (match) {
407017
+ const artifact = getArtifact(cwd2, match[1]);
407018
+ if (artifact) {
407019
+ return { status: 200, type: "text/html", body: renderArtifactPage(artifact, readArtifactBody(cwd2, artifact.id)) };
407020
+ }
407021
+ return { status: 404, type: "text/html", body: notFound4(match[1]) };
407022
+ }
407023
+ return { status: 404, type: "text/html", body: notFound4(path22) };
407024
+ }
407025
+ function activeArtifactsServer() {
407026
+ return active ? { port: active.port, url: `http://127.0.0.1:${active.port}` } : null;
407027
+ }
407028
+ function startArtifactsServer(cwd2, port = 4180) {
407029
+ if (active) {
407030
+ return Promise.resolve({ port: active.port, url: `http://127.0.0.1:${active.port}`, alreadyRunning: true });
407031
+ }
407032
+ return new Promise((resolvePromise, reject2) => {
407033
+ const server2 = createServer5((req, res) => {
407034
+ if (req.method !== "GET") {
407035
+ respond(res, 405, "text/plain", "Method not allowed");
407036
+ return;
407037
+ }
407038
+ try {
407039
+ const r = handleArtifactsRequest(cwd2, req.url ?? "/");
407040
+ respond(res, r.status, r.type, r.body);
407041
+ } catch (error40) {
407042
+ respond(res, 500, "text/plain", String(error40));
407043
+ }
407044
+ });
407045
+ server2.once("error", reject2);
407046
+ server2.listen(port, "127.0.0.1", () => {
407047
+ const address = server2.address();
407048
+ const boundPort = typeof address === "object" && address ? address.port : port;
407049
+ active = { server: server2, port: boundPort };
407050
+ resolvePromise({ port: boundPort, url: `http://127.0.0.1:${boundPort}`, alreadyRunning: false });
407051
+ });
407052
+ });
407053
+ }
407054
+ async function stopArtifactsServer() {
407055
+ if (!active)
407056
+ return false;
407057
+ const { server: server2 } = active;
407058
+ active = null;
407059
+ await new Promise((resolvePromise) => server2.close(() => resolvePromise()));
407060
+ return true;
407061
+ }
407062
+ var STATUS_COLOR, active = null;
407063
+ var init_artifactsServer = __esm(() => {
407064
+ init_artifacts();
407065
+ STATUS_COLOR = {
407066
+ pending: "#b58900",
407067
+ approved: "#2aa15f",
407068
+ rejected: "#d94f4f"
407069
+ };
407070
+ });
407071
+
406939
407072
  // src/commands/artifacts/artifacts.ts
406940
407073
  var exports_artifacts = {};
406941
407074
  __export(exports_artifacts, {
@@ -406946,7 +407079,7 @@ function option18(tokens, name) {
406946
407079
  return index2 === -1 ? undefined : tokens[index2 + 1];
406947
407080
  }
406948
407081
  function positionals14(tokens) {
406949
- const withValue = new Set(["--kind", "--title", "--body", "--file", "--summary", "--feedback", "--command", "--task"]);
407082
+ const withValue = new Set(["--kind", "--title", "--body", "--file", "--summary", "--feedback", "--command", "--task", "--port"]);
406950
407083
  const values2 = [];
406951
407084
  for (let i3 = 0;i3 < tokens.length; i3++) {
406952
407085
  const token = tokens[i3];
@@ -406968,6 +407101,7 @@ function usage19() {
406968
407101
  ' ur artifacts add --kind plan --title "..." [--body "..."] [--file path] [--summary "..."]',
406969
407102
  ' ur artifacts capture-diff [--title "..."]',
406970
407103
  ' ur artifacts capture-tests --command "bun test"',
407104
+ " ur artifacts serve [--port 4180] | serve --stop",
406971
407105
  " ur artifacts approve <id>",
406972
407106
  ' ur artifacts reject <id> --feedback "..."',
406973
407107
  ' ur artifacts feedback|comment <id> --feedback "..." [--task bg_id]',
@@ -407021,6 +407155,31 @@ var KINDS, call84 = async (args) => {
407021
407155
  value: json2 ? JSON.stringify(artifact, null, 2) : `Captured test run as artifact ${artifact.id} (${artifact.summary}).`
407022
407156
  };
407023
407157
  }
407158
+ if (action3 === "serve") {
407159
+ if (tokens.includes("--stop")) {
407160
+ return {
407161
+ type: "text",
407162
+ value: await stopArtifactsServer() ? "Artifacts server stopped." : "Artifacts server is not running."
407163
+ };
407164
+ }
407165
+ const running = activeArtifactsServer();
407166
+ if (running) {
407167
+ return { type: "text", value: `Artifacts page already running at ${running.url} \u2014 open ${running.url}/artifacts/<id>.` };
407168
+ }
407169
+ const port = Number(option18(tokens, "--port") ?? 4180);
407170
+ if (!Number.isInteger(port) || port < 0 || port > 65535) {
407171
+ return { type: "text", value: `Invalid port: ${option18(tokens, "--port")}` };
407172
+ }
407173
+ try {
407174
+ const { url: url3 } = await startArtifactsServer(cwd2, port);
407175
+ return {
407176
+ type: "text",
407177
+ value: `Artifacts page: ${url3} \u2014 open ${url3}/artifacts/<id> for a single artifact. Stop with \`ur artifacts serve --stop\`.`
407178
+ };
407179
+ } catch (error40) {
407180
+ return { type: "text", value: `Failed to start artifacts server on port ${port}: ${error40}` };
407181
+ }
407182
+ }
407024
407183
  if (!id)
407025
407184
  return { type: "text", value: usage19() };
407026
407185
  if (action3 === "show") {
@@ -407061,6 +407220,7 @@ var KINDS, call84 = async (args) => {
407061
407220
  };
407062
407221
  var init_artifacts2 = __esm(() => {
407063
407222
  init_artifacts();
407223
+ init_artifactsServer();
407064
407224
  init_backgroundRunner();
407065
407225
  init_argumentSubstitution();
407066
407226
  init_cwd2();
@@ -407074,8 +407234,8 @@ var init_artifacts3 = __esm(() => {
407074
407234
  type: "local",
407075
407235
  name: "artifacts",
407076
407236
  aliases: ["artifact"],
407077
- description: "Reviewable deliverables (plans, diffs, test runs, screenshots) under .ur/artifacts with approve/reject/feedback",
407078
- argumentHint: "list|show|add|capture-diff|capture-tests|approve|reject|feedback|delete [id] [--kind ...] [--title ...] [--json]",
407237
+ description: "Reviewable deliverables (plans, diffs, test runs, screenshots) under .ur/artifacts with approve/reject/feedback and a local web page (serve)",
407238
+ argumentHint: "list|show|serve|add|capture-diff|capture-tests|approve|reject|feedback|delete [id] [--kind ...] [--title ...] [--port ...] [--json]",
407079
407239
  supportsNonInteractive: true,
407080
407240
  load: () => Promise.resolve().then(() => (init_artifacts2(), exports_artifacts))
407081
407241
  };
@@ -408940,7 +409100,7 @@ function optionValue7(tokens, flag) {
408940
409100
  const index2 = tokens.indexOf(flag);
408941
409101
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
408942
409102
  }
408943
- function notFound4(name) {
409103
+ function notFound5(name) {
408944
409104
  const available = listSuites(getCwd());
408945
409105
  const hint = available.length > 0 ? `
408946
409106
  Available: ${available.join(", ")}` : "";
@@ -409118,7 +409278,7 @@ Run it locally: ur eval run ${result.suite.name}`
409118
409278
  const suite = loadSuite(cwd2, name);
409119
409279
  if (command5 === "validate") {
409120
409280
  if (!suite)
409121
- return notFound4(name);
409281
+ return notFound5(name);
409122
409282
  const validation = validateEvalSuite(suite);
409123
409283
  if (json2)
409124
409284
  return { type: "text", value: JSON.stringify(validation, null, 2) };
@@ -409136,7 +409296,7 @@ Run it locally: ur eval run ${result.suite.name}`
409136
409296
  }
409137
409297
  if (command5 === "run") {
409138
409298
  if (!suite)
409139
- return notFound4(name);
409299
+ return notFound5(name);
409140
409300
  const validation = validateEvalSuite(suite);
409141
409301
  if (!validation.valid) {
409142
409302
  return { type: "text", value: formatSuiteValidation(suite, validation) };
@@ -410832,7 +410992,7 @@ var init_code_index2 = __esm(() => {
410832
410992
 
410833
410993
  // node_modules/typescript/lib/typescript.js
410834
410994
  var require_typescript2 = __commonJS((exports, module) => {
410835
- var __dirname = "/Users/maith/Desktop/ur3-dev/UR-1.41.0/node_modules/typescript/lib", __filename = "/Users/maith/Desktop/ur3-dev/UR-1.41.0/node_modules/typescript/lib/typescript.js";
410995
+ var __dirname = "/sessions/friendly-inspiring-goldberg/mnt/UR-1.42.0/node_modules/typescript/lib", __filename = "/sessions/friendly-inspiring-goldberg/mnt/UR-1.42.0/node_modules/typescript/lib/typescript.js";
410836
410996
  /*! *****************************************************************************
410837
410997
  Copyright (c) Microsoft Corporation. All rights reserved.
410838
410998
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -590140,8 +590300,8 @@ function resolveAgentOverrides(allAgents, activeAgents) {
590140
590300
  if (seen.has(key))
590141
590301
  continue;
590142
590302
  seen.add(key);
590143
- const active = activeMap.get(agent.agentType);
590144
- const overriddenBy = active && active.source !== agent.source ? active.source : undefined;
590303
+ const active2 = activeMap.get(agent.agentType);
590304
+ const overriddenBy = active2 && active2.source !== agent.source ? active2.source : undefined;
590145
590305
  resolved.push({ ...agent, overriddenBy });
590146
590306
  }
590147
590307
  return resolved;
@@ -596366,7 +596526,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
596366
596526
  smapsRollup,
596367
596527
  platform: process.platform,
596368
596528
  nodeVersion: process.version,
596369
- ccVersion: "1.41.1"
596529
+ ccVersion: "1.43.0"
596370
596530
  };
596371
596531
  }
596372
596532
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -596952,7 +597112,7 @@ var init_bridge_kick = __esm(() => {
596952
597112
  var call137 = async () => {
596953
597113
  return {
596954
597114
  type: "text",
596955
- value: "1.41.1"
597115
+ value: "1.43.0"
596956
597116
  };
596957
597117
  }, version2, version_default;
596958
597118
  var init_version = __esm(() => {
@@ -607045,7 +607205,7 @@ function generateHtmlReport(data, insights) {
607045
607205
  </html>`;
607046
607206
  }
607047
607207
  function buildExportData(data, insights, facets, remoteStats) {
607048
- const version3 = typeof MACRO !== "undefined" ? "1.41.1" : "unknown";
607208
+ const version3 = typeof MACRO !== "undefined" ? "1.43.0" : "unknown";
607049
607209
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
607050
607210
  const facets_summary = {
607051
607211
  total: facets.size,
@@ -611325,7 +611485,7 @@ var init_sessionStorage = __esm(() => {
611325
611485
  init_settings2();
611326
611486
  init_slowOperations();
611327
611487
  init_uuid();
611328
- VERSION5 = typeof MACRO !== "undefined" ? "1.41.1" : "unknown";
611488
+ VERSION5 = typeof MACRO !== "undefined" ? "1.43.0" : "unknown";
611329
611489
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
611330
611490
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
611331
611491
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -612530,7 +612690,7 @@ var init_filesystem = __esm(() => {
612530
612690
  });
612531
612691
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
612532
612692
  const nonce = randomBytes18(16).toString("hex");
612533
- return join202(getURTempDir(), "bundled-skills", "1.41.1", nonce);
612693
+ return join202(getURTempDir(), "bundled-skills", "1.43.0", nonce);
612534
612694
  });
612535
612695
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
612536
612696
  });
@@ -618819,7 +618979,7 @@ function computeFingerprint(messageText2, version3) {
618819
618979
  }
618820
618980
  function computeFingerprintFromMessages(messages) {
618821
618981
  const firstMessageText = extractFirstMessageText(messages);
618822
- return computeFingerprint(firstMessageText, "1.41.1");
618982
+ return computeFingerprint(firstMessageText, "1.43.0");
618823
618983
  }
618824
618984
  var FINGERPRINT_SALT = "59cf53e54c78";
618825
618985
  var init_fingerprint = () => {};
@@ -620693,7 +620853,7 @@ async function sideQuery(opts) {
620693
620853
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
620694
620854
  }
620695
620855
  const messageText2 = extractFirstUserMessageText(messages);
620696
- const fingerprint2 = computeFingerprint(messageText2, "1.41.1");
620856
+ const fingerprint2 = computeFingerprint(messageText2, "1.43.0");
620697
620857
  const attributionHeader = getAttributionHeader(fingerprint2);
620698
620858
  const systemBlocks = [
620699
620859
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -620977,7 +621137,7 @@ import {
620977
621137
  stat as stat45,
620978
621138
  unlink as unlink24
620979
621139
  } from "fs/promises";
620980
- import { createServer as createServer5 } from "net";
621140
+ import { createServer as createServer6 } from "net";
620981
621141
  import { homedir as homedir33, platform as platform6 } from "os";
620982
621142
  import { join as join205 } from "path";
620983
621143
  function log(message, ...args) {
@@ -621053,7 +621213,7 @@ class ChromeNativeHost {
621053
621213
  } catch {}
621054
621214
  }
621055
621215
  log(`Creating socket listener: ${this.socketPath}`);
621056
- this.server = createServer5((socket) => this.handleMcpClient(socket));
621216
+ this.server = createServer6((socket) => this.handleMcpClient(socket));
621057
621217
  await new Promise((resolve50, reject2) => {
621058
621218
  this.server.listen(this.socketPath, () => {
621059
621219
  log("Socket server listening for connections");
@@ -623541,7 +623701,7 @@ var init_managedEnv = __esm(() => {
623541
623701
  });
623542
623702
 
623543
623703
  // src/upstreamproxy/relay.ts
623544
- import { createServer as createServer6 } from "net";
623704
+ import { createServer as createServer7 } from "net";
623545
623705
  function encodeChunk(data) {
623546
623706
  const len = data.length;
623547
623707
  const varint = [];
@@ -623649,7 +623809,7 @@ function startBunRelay(wsUrl, authHeader, wsAuthHeader) {
623649
623809
  async function startNodeRelay(wsUrl, authHeader, wsAuthHeader) {
623650
623810
  nodeWSCtor = (await import("ws")).default;
623651
623811
  const states = new WeakMap;
623652
- const server2 = createServer6((sock) => {
623812
+ const server2 = createServer7((sock) => {
623653
623813
  const st = newConnState();
623654
623814
  states.set(sock, st);
623655
623815
  const adapter2 = {
@@ -625430,7 +625590,7 @@ function buildSystemInitMessage(inputs) {
625430
625590
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625431
625591
  apiKeySource: getURHQApiKeyWithSource().source,
625432
625592
  betas: getSdkBetas(),
625433
- ur_version: "1.41.1",
625593
+ ur_version: "1.43.0",
625434
625594
  output_style: outputStyle2,
625435
625595
  agents: inputs.agents.map((agent) => agent.agentType),
625436
625596
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -640058,7 +640218,7 @@ var init_useVoiceEnabled = __esm(() => {
640058
640218
  function getSemverPart(version3) {
640059
640219
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
640060
640220
  }
640061
- function useUpdateNotification(updatedVersion, initialVersion = "1.41.1") {
640221
+ function useUpdateNotification(updatedVersion, initialVersion = "1.43.0") {
640062
640222
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
640063
640223
  if (!updatedVersion) {
640064
640224
  return null;
@@ -640107,7 +640267,7 @@ function AutoUpdater({
640107
640267
  return;
640108
640268
  }
640109
640269
  if (false) {}
640110
- const currentVersion = "1.41.1";
640270
+ const currentVersion = "1.43.0";
640111
640271
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
640112
640272
  let latestVersion = await getLatestVersion(channel);
640113
640273
  const isDisabled = isAutoUpdaterDisabled();
@@ -640336,12 +640496,12 @@ function NativeAutoUpdater({
640336
640496
  logEvent("tengu_native_auto_updater_start", {});
640337
640497
  try {
640338
640498
  const maxVersion = await getMaxVersion();
640339
- if (maxVersion && gt("1.41.1", maxVersion)) {
640499
+ if (maxVersion && gt("1.43.0", maxVersion)) {
640340
640500
  const msg = await getMaxVersionMessage();
640341
640501
  setMaxVersionIssue(msg ?? "affects your version");
640342
640502
  }
640343
640503
  const result = await installLatest(channel);
640344
- const currentVersion = "1.41.1";
640504
+ const currentVersion = "1.43.0";
640345
640505
  const latencyMs = Date.now() - startTime;
640346
640506
  if (result.lockFailed) {
640347
640507
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -640478,17 +640638,17 @@ function PackageManagerAutoUpdater(t0) {
640478
640638
  const maxVersion = await getMaxVersion();
640479
640639
  if (maxVersion && latest && gt(latest, maxVersion)) {
640480
640640
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
640481
- if (gte("1.41.1", maxVersion)) {
640482
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.41.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
640641
+ if (gte("1.43.0", maxVersion)) {
640642
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.43.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
640483
640643
  setUpdateAvailable(false);
640484
640644
  return;
640485
640645
  }
640486
640646
  latest = maxVersion;
640487
640647
  }
640488
- const hasUpdate = latest && !gte("1.41.1", latest) && !shouldSkipVersion(latest);
640648
+ const hasUpdate = latest && !gte("1.43.0", latest) && !shouldSkipVersion(latest);
640489
640649
  setUpdateAvailable(!!hasUpdate);
640490
640650
  if (hasUpdate) {
640491
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.41.1"} -> ${latest}`);
640651
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.43.0"} -> ${latest}`);
640492
640652
  }
640493
640653
  };
640494
640654
  $3[0] = t1;
@@ -640522,7 +640682,7 @@ function PackageManagerAutoUpdater(t0) {
640522
640682
  wrap: "truncate",
640523
640683
  children: [
640524
640684
  "currentVersion: ",
640525
- "1.41.1"
640685
+ "1.43.0"
640526
640686
  ]
640527
640687
  }, undefined, true, undefined, this);
640528
640688
  $3[3] = verbose;
@@ -652974,7 +653134,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
652974
653134
  project_dir: getOriginalCwd(),
652975
653135
  added_dirs: addedDirs
652976
653136
  },
652977
- version: "1.41.1",
653137
+ version: "1.43.0",
652978
653138
  output_style: {
652979
653139
  name: outputStyleName
652980
653140
  },
@@ -653057,7 +653217,7 @@ function StatusLineInner({
653057
653217
  const taskValues = Object.values(tasks2);
653058
653218
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
653059
653219
  const defaultStatusLineText = buildDefaultStatusBar({
653060
- version: "1.41.1",
653220
+ version: "1.43.0",
653061
653221
  providerLabel: providerRuntime.providerLabel,
653062
653222
  authMode: providerRuntime.authLabel,
653063
653223
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -655371,9 +655531,9 @@ function useSwarmBanner() {
655371
655531
  };
655372
655532
  }
655373
655533
  }
655374
- const active = getActiveAgentForInput(state2);
655375
- if (active.type === "named_agent") {
655376
- const task2 = active.task;
655534
+ const active2 = getActiveAgentForInput(state2);
655535
+ if (active2.type === "named_agent") {
655536
+ const task2 = active2.task;
655377
655537
  let name;
655378
655538
  for (const [n3, id] of state2.agentNameRegistry) {
655379
655539
  if (id === task2.id) {
@@ -664545,7 +664705,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
664545
664705
  } catch {}
664546
664706
  const data = {
664547
664707
  trigger: trigger2,
664548
- version: "1.41.1",
664708
+ version: "1.43.0",
664549
664709
  platform: process.platform,
664550
664710
  transcript,
664551
664711
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -671770,8 +671930,8 @@ function applyModalPagerAction(s, act, onBeforeJump) {
671770
671930
  }
671771
671931
  case "fullPageUp":
671772
671932
  case "fullPageDown": {
671773
- const page = Math.max(1, s.getViewportHeight());
671774
- const d = act === "fullPageDown" ? page : -page;
671933
+ const page2 = Math.max(1, s.getViewportHeight());
671934
+ const d = act === "fullPageDown" ? page2 : -page2;
671775
671935
  onBeforeJump(d);
671776
671936
  return jumpBy(s, d);
671777
671937
  }
@@ -676430,7 +676590,7 @@ function WelcomeV2() {
676430
676590
  dimColor: true,
676431
676591
  children: [
676432
676592
  "v",
676433
- "1.41.1"
676593
+ "1.43.0"
676434
676594
  ]
676435
676595
  }, undefined, true, undefined, this)
676436
676596
  ]
@@ -677690,7 +677850,7 @@ function completeOnboarding() {
677690
677850
  saveGlobalConfig((current) => ({
677691
677851
  ...current,
677692
677852
  hasCompletedOnboarding: true,
677693
- lastOnboardingVersion: "1.41.1"
677853
+ lastOnboardingVersion: "1.43.0"
677694
677854
  }));
677695
677855
  }
677696
677856
  function showDialog(root2, renderer) {
@@ -682727,7 +682887,7 @@ function appendToLog(path24, message) {
682727
682887
  cwd: getFsImplementation().cwd(),
682728
682888
  userType: process.env.USER_TYPE,
682729
682889
  sessionId: getSessionId(),
682730
- version: "1.41.1"
682890
+ version: "1.43.0"
682731
682891
  };
682732
682892
  getLogWriter(path24).write(messageWithTimestamp);
682733
682893
  }
@@ -684225,11 +684385,11 @@ class CCRClient {
684225
684385
  if (cursor) {
684226
684386
  url3.searchParams.set("cursor", cursor);
684227
684387
  }
684228
- const page = await this.getWithRetry(url3.toString(), authHeaders, context4);
684229
- if (!page)
684388
+ const page2 = await this.getWithRetry(url3.toString(), authHeaders, context4);
684389
+ if (!page2)
684230
684390
  return null;
684231
- allEvents.push(...page.data ?? []);
684232
- cursor = page.next_cursor;
684391
+ allEvents.push(...page2.data ?? []);
684392
+ cursor = page2.next_cursor;
684233
684393
  } while (cursor);
684234
684394
  logForDebugging(`CCRClient: Read ${allEvents.length} internal events from ${path24}${params.subagents ? " (subagents)" : ""}`);
684235
684395
  return allEvents;
@@ -686821,8 +686981,8 @@ async function getEnvLessBridgeConfig() {
686821
686981
  }
686822
686982
  async function checkEnvLessBridgeMinVersion() {
686823
686983
  const cfg = await getEnvLessBridgeConfig();
686824
- if (cfg.min_version && lt("1.41.1", cfg.min_version)) {
686825
- return `Your version of UR (${"1.41.1"}) is too old for Remote Control.
686984
+ if (cfg.min_version && lt("1.43.0", cfg.min_version)) {
686985
+ return `Your version of UR (${"1.43.0"}) is too old for Remote Control.
686826
686986
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
686827
686987
  }
686828
686988
  return null;
@@ -687296,7 +687456,7 @@ async function initBridgeCore(params) {
687296
687456
  const rawApi = createBridgeApiClient({
687297
687457
  baseUrl,
687298
687458
  getAccessToken,
687299
- runnerVersion: "1.41.1",
687459
+ runnerVersion: "1.43.0",
687300
687460
  onDebug: logForDebugging,
687301
687461
  onAuth401,
687302
687462
  getTrustedDeviceToken
@@ -692978,7 +693138,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
692978
693138
  setCwd(cwd3);
692979
693139
  const server2 = new Server({
692980
693140
  name: "ur/tengu",
692981
- version: "1.41.1"
693141
+ version: "1.43.0"
692982
693142
  }, {
692983
693143
  capabilities: {
692984
693144
  tools: {}
@@ -693542,8 +693702,8 @@ async function providerListHandler(options2 = {}) {
693542
693702
  }
693543
693703
  async function providerStatusHandler(options2 = {}) {
693544
693704
  const settings = getInitialSettings();
693545
- const active = getActiveProviderSettings(settings).active ?? "ollama";
693546
- const result = await doctorProvider(active, { settings });
693705
+ const active2 = getActiveProviderSettings(settings).active ?? "ollama";
693706
+ const result = await doctorProvider(active2, { settings });
693547
693707
  writeOutput(formatProviderStatus(result, Boolean(options2.json)));
693548
693708
  process.exit(result.ok ? 0 : 1);
693549
693709
  }
@@ -693558,15 +693718,15 @@ async function providerDoctorHandler(providerArg, options2 = {}) {
693558
693718
  provider = resolved;
693559
693719
  }
693560
693720
  const settings = getInitialSettings();
693561
- const active = getActiveProviderSettings(settings).active ?? "ollama";
693562
- const result = await doctorProvider(provider ?? active, { settings });
693721
+ const active2 = getActiveProviderSettings(settings).active ?? "ollama";
693722
+ const result = await doctorProvider(provider ?? active2, { settings });
693563
693723
  writeOutput(formatProviderDoctor(result, Boolean(options2.json)));
693564
693724
  process.exit(result.ok ? 0 : 1);
693565
693725
  }
693566
693726
  async function providerModelsHandler(providerArg, options2 = {}) {
693567
693727
  const settings = getInitialSettings();
693568
- const active = getActiveProviderSettings(settings).active ?? "ollama";
693569
- const provider = providerArg ? resolveProviderId(providerArg) : active;
693728
+ const active2 = getActiveProviderSettings(settings).active ?? "ollama";
693729
+ const provider = providerArg ? resolveProviderId(providerArg) : active2;
693570
693730
  if (!provider) {
693571
693731
  writeError(`Unknown provider "${providerArg}". Run: ur provider list`);
693572
693732
  process.exit(1);
@@ -695020,7 +695180,7 @@ async function update() {
695020
695180
  logEvent("tengu_update_check", {});
695021
695181
  const diagnostic = await getDoctorDiagnostic();
695022
695182
  const result = await checkUpgradeStatus({
695023
- currentVersion: "1.41.1",
695183
+ currentVersion: "1.43.0",
695024
695184
  packageName: UR_AGENT_PACKAGE_NAME,
695025
695185
  installationType: diagnostic.installationType,
695026
695186
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -696266,7 +696426,7 @@ ${customInstructions}` : customInstructions;
696266
696426
  }
696267
696427
  }
696268
696428
  logForDiagnosticsNoPII("info", "started", {
696269
- version: "1.41.1",
696429
+ version: "1.43.0",
696270
696430
  is_native_binary: isInBundledMode()
696271
696431
  });
696272
696432
  registerCleanup(async () => {
@@ -697052,7 +697212,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
697052
697212
  pendingHookMessages
697053
697213
  }, renderAndRun);
697054
697214
  }
697055
- }).version("1.41.1 (UR-Nexus)", "-v, --version", "Output the version number");
697215
+ }).version("1.43.0 (UR-Nexus)", "-v, --version", "Output the version number");
697056
697216
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
697057
697217
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
697058
697218
  if (canUserConfigureAdvisor()) {
@@ -697967,7 +698127,7 @@ if (false) {}
697967
698127
  async function main2() {
697968
698128
  const args = process.argv.slice(2);
697969
698129
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
697970
- console.log(`${"1.41.1"} (UR-Nexus)`);
698130
+ console.log(`${"1.43.0"} (UR-Nexus)`);
697971
698131
  return;
697972
698132
  }
697973
698133
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -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.41.1</p>
47
+ <p class="eyebrow">Version 1.43.0</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.41.1",
5
+ "version": "1.43.0",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.41.1",
4
- "description": "UR-Nexus autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
3
+ "version": "1.43.0",
4
+ "description": "UR-Nexus \u2014 autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",
7
7
  "engines": {