ur-agent 1.44.5 → 1.44.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -4
- package/README.md +6 -0
- package/dist/cli.js +266 -96
- package/docs/CONFIGURATION.md +9 -0
- package/documentation/index.html +1 -1
- package/extensions/vscode-ur-inline-diffs/package.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.44.8
|
|
4
|
+
|
|
5
|
+
- Keep auto-memory and automatic learning on by default with explicit opt-outs.
|
|
6
|
+
Automatic learning can now be disabled with `automaticLearningEnabled: false`
|
|
7
|
+
or `UR_CODE_DISABLE_AUTO_LEARNING=1`.
|
|
8
|
+
- Make `/remember <text>` promote explicit notes into recallable auto-memory
|
|
9
|
+
topic files when auto-memory is enabled.
|
|
10
|
+
- Reduce recall token load by prefiltering memory candidates before the
|
|
11
|
+
selector model and surfacing fewer, smaller high-confidence memories.
|
|
12
|
+
|
|
13
|
+
## 1.44.7
|
|
14
|
+
|
|
15
|
+
- Add `autoApprove` permission mode for command/tool approval prompts. It
|
|
16
|
+
auto-approves operations that would otherwise require permission approval,
|
|
17
|
+
while preserving user-input dialogs and explicit denials.
|
|
18
|
+
- Hide the legacy non-interactive denial mode from user-facing mode selectors.
|
|
19
|
+
|
|
20
|
+
## 1.44.6
|
|
21
|
+
|
|
22
|
+
- Internal permission-mode iteration superseded by `1.44.7`.
|
|
23
|
+
|
|
3
24
|
## 1.44.5
|
|
4
25
|
|
|
5
|
-
-
|
|
6
|
-
that would otherwise require manual approval. Explicit deny rules and
|
|
7
|
-
security-policy blocks still apply.
|
|
8
|
-
- Expose `dontAsk` in the interactive permission-mode cycle.
|
|
26
|
+
- Internal permission-mode iteration superseded by `1.44.6`.
|
|
9
27
|
|
|
10
28
|
## 1.44.4
|
|
11
29
|
|
package/README.md
CHANGED
|
@@ -622,6 +622,8 @@ the permission boundary matters.
|
|
|
622
622
|
- Sensitive tool actions go through permission checks by default.
|
|
623
623
|
- `--allowed-tools` and `--disallowed-tools` can scope tool access for
|
|
624
624
|
automation.
|
|
625
|
+
- `permissions.defaultMode: "autoApprove"` auto-approves operations that would
|
|
626
|
+
otherwise pause for permission approval, while user-input dialogs still ask.
|
|
625
627
|
- `--dangerously-skip-permissions` should only be used inside disposable
|
|
626
628
|
sandboxes.
|
|
627
629
|
- The verifier checks for false completion claims, repeated tool-call loops,
|
|
@@ -636,6 +638,10 @@ the permission boundary matters.
|
|
|
636
638
|
rules.
|
|
637
639
|
- `ur context-pack scan` writes a repo architecture manifest from package
|
|
638
640
|
scripts, instruction files, `.ur/verify.json`, and safety config.
|
|
641
|
+
- Auto-memory and automatic learning are enabled by default. Auto-memory can be
|
|
642
|
+
disabled with `autoMemoryEnabled: false`; automatic learning can be disabled
|
|
643
|
+
with `automaticLearningEnabled: false`. The automatic learning path writes
|
|
644
|
+
local JSON stats only and uses no model tokens.
|
|
639
645
|
- The deep verification subagent is available through `/verify` and can be
|
|
640
646
|
auto-enabled with `UR_VERIFIER_AUTO_SUBAGENT=1`.
|
|
641
647
|
- UR enforces permission and sandbox policy before running UR Bash/File
|
package/dist/cli.js
CHANGED
|
@@ -71438,7 +71438,7 @@ var init_auth = __esm(() => {
|
|
|
71438
71438
|
|
|
71439
71439
|
// src/utils/userAgent.ts
|
|
71440
71440
|
function getURCodeUserAgent() {
|
|
71441
|
-
return `ur/${"1.44.
|
|
71441
|
+
return `ur/${"1.44.8"}`;
|
|
71442
71442
|
}
|
|
71443
71443
|
|
|
71444
71444
|
// src/utils/workloadContext.ts
|
|
@@ -71460,7 +71460,7 @@ function getUserAgent() {
|
|
|
71460
71460
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
71461
71461
|
const workload = getWorkload();
|
|
71462
71462
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
71463
|
-
return `ur-cli/${"1.44.
|
|
71463
|
+
return `ur-cli/${"1.44.8"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
71464
71464
|
}
|
|
71465
71465
|
function getMCPUserAgent() {
|
|
71466
71466
|
const parts = [];
|
|
@@ -71474,7 +71474,7 @@ function getMCPUserAgent() {
|
|
|
71474
71474
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
71475
71475
|
}
|
|
71476
71476
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
71477
|
-
return `ur/${"1.44.
|
|
71477
|
+
return `ur/${"1.44.8"}${suffix}`;
|
|
71478
71478
|
}
|
|
71479
71479
|
function getWebFetchUserAgent() {
|
|
71480
71480
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -71612,7 +71612,7 @@ var init_user = __esm(() => {
|
|
|
71612
71612
|
deviceId,
|
|
71613
71613
|
sessionId: getSessionId(),
|
|
71614
71614
|
email: getEmail(),
|
|
71615
|
-
appVersion: "1.44.
|
|
71615
|
+
appVersion: "1.44.8",
|
|
71616
71616
|
platform: getHostPlatformForAnalytics(),
|
|
71617
71617
|
organizationUuid,
|
|
71618
71618
|
accountUuid,
|
|
@@ -78129,7 +78129,7 @@ var init_metadata = __esm(() => {
|
|
|
78129
78129
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
78130
78130
|
WHITESPACE_REGEX = /\s+/;
|
|
78131
78131
|
getVersionBase = memoize_default(() => {
|
|
78132
|
-
const match = "1.44.
|
|
78132
|
+
const match = "1.44.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
78133
78133
|
return match ? match[0] : undefined;
|
|
78134
78134
|
});
|
|
78135
78135
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -78169,7 +78169,7 @@ var init_metadata = __esm(() => {
|
|
|
78169
78169
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
78170
78170
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
78171
78171
|
isURAiAuth: isURAISubscriber(),
|
|
78172
|
-
version: "1.44.
|
|
78172
|
+
version: "1.44.8",
|
|
78173
78173
|
versionBase: getVersionBase(),
|
|
78174
78174
|
buildTime: "",
|
|
78175
78175
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -78839,7 +78839,7 @@ function initialize1PEventLogging() {
|
|
|
78839
78839
|
const platform2 = getPlatform();
|
|
78840
78840
|
const attributes = {
|
|
78841
78841
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
78842
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.
|
|
78842
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.8"
|
|
78843
78843
|
};
|
|
78844
78844
|
if (platform2 === "wsl") {
|
|
78845
78845
|
const wslVersion = getWslVersion();
|
|
@@ -78866,7 +78866,7 @@ function initialize1PEventLogging() {
|
|
|
78866
78866
|
})
|
|
78867
78867
|
]
|
|
78868
78868
|
});
|
|
78869
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.
|
|
78869
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.8");
|
|
78870
78870
|
}
|
|
78871
78871
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
78872
78872
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -80128,9 +80128,9 @@ var EXTERNAL_PERMISSION_MODES, INTERNAL_PERMISSION_MODES, PERMISSION_MODES;
|
|
|
80128
80128
|
var init_permissions = __esm(() => {
|
|
80129
80129
|
EXTERNAL_PERMISSION_MODES = [
|
|
80130
80130
|
"acceptEdits",
|
|
80131
|
+
"autoApprove",
|
|
80131
80132
|
"bypassPermissions",
|
|
80132
80133
|
"default",
|
|
80133
|
-
"dontAsk",
|
|
80134
80134
|
"plan"
|
|
80135
80135
|
];
|
|
80136
80136
|
INTERNAL_PERMISSION_MODES = [
|
|
@@ -80142,10 +80142,7 @@ var init_permissions = __esm(() => {
|
|
|
80142
80142
|
|
|
80143
80143
|
// src/utils/permissions/PermissionMode.ts
|
|
80144
80144
|
function isExternalPermissionMode(mode) {
|
|
80145
|
-
|
|
80146
|
-
return true;
|
|
80147
|
-
}
|
|
80148
|
-
return mode !== "auto" && mode !== "bubble";
|
|
80145
|
+
return EXTERNAL_PERMISSION_MODES.includes(mode);
|
|
80149
80146
|
}
|
|
80150
80147
|
function getModeConfig(mode) {
|
|
80151
80148
|
return PERMISSION_MODE_CONFIG[mode] ?? PERMISSION_MODE_CONFIG.default;
|
|
@@ -80197,6 +80194,13 @@ var init_PermissionMode = __esm(() => {
|
|
|
80197
80194
|
color: "autoAccept",
|
|
80198
80195
|
external: "acceptEdits"
|
|
80199
80196
|
},
|
|
80197
|
+
autoApprove: {
|
|
80198
|
+
title: "Auto Approval",
|
|
80199
|
+
shortTitle: "Auto Approve",
|
|
80200
|
+
symbol: "\u23F5\u23F5",
|
|
80201
|
+
color: "warning",
|
|
80202
|
+
external: "autoApprove"
|
|
80203
|
+
},
|
|
80200
80204
|
bypassPermissions: {
|
|
80201
80205
|
title: "Bypass Permissions",
|
|
80202
80206
|
shortTitle: "Bypass",
|
|
@@ -80206,10 +80210,10 @@ var init_PermissionMode = __esm(() => {
|
|
|
80206
80210
|
},
|
|
80207
80211
|
dontAsk: {
|
|
80208
80212
|
title: "Don't Ask",
|
|
80209
|
-
shortTitle: "
|
|
80213
|
+
shortTitle: "DontAsk",
|
|
80210
80214
|
symbol: "\u23F5\u23F5",
|
|
80211
80215
|
color: "error",
|
|
80212
|
-
external: "
|
|
80216
|
+
external: "default"
|
|
80213
80217
|
},
|
|
80214
80218
|
...{}
|
|
80215
80219
|
};
|
|
@@ -81497,6 +81501,7 @@ var init_types2 = __esm(() => {
|
|
|
81497
81501
|
autoMemoryEnabled: exports_external.boolean().optional().describe("Enable auto-memory for this project. When false, UR will not read from or write to the auto-memory directory."),
|
|
81498
81502
|
autoMemoryDirectory: exports_external.string().optional().describe("Custom directory path for auto-memory storage. Supports ~/ prefix for home directory expansion. Ignored if set in projectSettings (checked-in .ur/settings.json) for security. When unset, defaults to ~/.ur/projects/<sanitized-cwd>/memory/."),
|
|
81499
81503
|
autoMemoryExtractionInterval: exports_external.number().int().min(1).optional().describe("Run the auto-memory extraction agent only every N eligible turns (default 1 = every turn). The extraction is a forked agent call on the session model, so raising this trades memory freshness for lower token/compute usage."),
|
|
81504
|
+
automaticLearningEnabled: exports_external.boolean().optional().describe("Enable automatic learning from completed ci-loop, arena, escalation, and test-first outcomes. Default: true. The automatic path is a local JSON fold and uses no model calls."),
|
|
81500
81505
|
verifier: exports_external.object({
|
|
81501
81506
|
askBeforeGates: exports_external.boolean().optional().describe("When true, UR asks whether to run project verification commands (tests, typecheck, lint) after a task instead of running them automatically. Default: false.")
|
|
81502
81507
|
}).optional().describe("Verifier behavior configuration"),
|
|
@@ -83400,7 +83405,16 @@ function saveStats(cwd2, stats) {
|
|
|
83400
83405
|
writeFileSync6(statsPath(cwd2), `${JSON.stringify(stats, null, 2)}
|
|
83401
83406
|
`);
|
|
83402
83407
|
}
|
|
83408
|
+
function isAutomaticLearningEnabled() {
|
|
83409
|
+
if (isEnvTruthy(process.env.UR_CODE_DISABLE_AUTO_LEARNING)) {
|
|
83410
|
+
return false;
|
|
83411
|
+
}
|
|
83412
|
+
return getInitialSettings().automaticLearningEnabled !== false;
|
|
83413
|
+
}
|
|
83403
83414
|
function recordOutcome(cwd2, input) {
|
|
83415
|
+
if (!isAutomaticLearningEnabled()) {
|
|
83416
|
+
return;
|
|
83417
|
+
}
|
|
83404
83418
|
try {
|
|
83405
83419
|
saveStats(cwd2, foldOutcomes(loadStats(cwd2), [outcomeFromRun(input)]));
|
|
83406
83420
|
} catch {}
|
|
@@ -83500,7 +83514,9 @@ function formatLearnResult(result, json2) {
|
|
|
83500
83514
|
}
|
|
83501
83515
|
var TEST_PASS_RE, TEST_FAIL_RE;
|
|
83502
83516
|
var init_learning = __esm(() => {
|
|
83517
|
+
init_envUtils();
|
|
83503
83518
|
init_json();
|
|
83519
|
+
init_settings2();
|
|
83504
83520
|
init_artifacts();
|
|
83505
83521
|
init_headlessAgent();
|
|
83506
83522
|
init_intentRouter();
|
|
@@ -84757,7 +84773,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
|
|
|
84757
84773
|
function formatA2AAgentCard(options = {}, pretty = true) {
|
|
84758
84774
|
return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
|
|
84759
84775
|
}
|
|
84760
|
-
var urVersion = "1.44.
|
|
84776
|
+
var urVersion = "1.44.8", coverage, priorityRoadmap;
|
|
84761
84777
|
var init_trends = __esm(() => {
|
|
84762
84778
|
coverage = [
|
|
84763
84779
|
{
|
|
@@ -86752,7 +86768,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
86752
86768
|
if (!isAttributionHeaderEnabled()) {
|
|
86753
86769
|
return "";
|
|
86754
86770
|
}
|
|
86755
|
-
const version2 = `${"1.44.
|
|
86771
|
+
const version2 = `${"1.44.8"}.${fingerprint}`;
|
|
86756
86772
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
86757
86773
|
const cch = "";
|
|
86758
86774
|
const workload = getWorkload();
|
|
@@ -194722,7 +194738,7 @@ function getTelemetryAttributes() {
|
|
|
194722
194738
|
attributes["session.id"] = sessionId;
|
|
194723
194739
|
}
|
|
194724
194740
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
194725
|
-
attributes["app.version"] = "1.44.
|
|
194741
|
+
attributes["app.version"] = "1.44.8";
|
|
194726
194742
|
}
|
|
194727
194743
|
const oauthAccount = getOauthAccountInfo();
|
|
194728
194744
|
if (oauthAccount) {
|
|
@@ -230110,7 +230126,7 @@ function getInstallationEnv() {
|
|
|
230110
230126
|
return;
|
|
230111
230127
|
}
|
|
230112
230128
|
function getURCodeVersion() {
|
|
230113
|
-
return "1.44.
|
|
230129
|
+
return "1.44.8";
|
|
230114
230130
|
}
|
|
230115
230131
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
230116
230132
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -232949,7 +232965,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
232949
232965
|
const client2 = new Client({
|
|
232950
232966
|
name: "ur",
|
|
232951
232967
|
title: "UR",
|
|
232952
|
-
version: "1.44.
|
|
232968
|
+
version: "1.44.8",
|
|
232953
232969
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
232954
232970
|
websiteUrl: PRODUCT_URL
|
|
232955
232971
|
}, {
|
|
@@ -233303,7 +233319,7 @@ var init_client5 = __esm(() => {
|
|
|
233303
233319
|
const client2 = new Client({
|
|
233304
233320
|
name: "ur",
|
|
233305
233321
|
title: "UR",
|
|
233306
|
-
version: "1.44.
|
|
233322
|
+
version: "1.44.8",
|
|
233307
233323
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
233308
233324
|
websiteUrl: PRODUCT_URL
|
|
233309
233325
|
}, {
|
|
@@ -243117,9 +243133,9 @@ async function assertMinVersion() {
|
|
|
243117
243133
|
if (false) {}
|
|
243118
243134
|
try {
|
|
243119
243135
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
243120
|
-
if (versionConfig.minVersion && lt("1.44.
|
|
243136
|
+
if (versionConfig.minVersion && lt("1.44.8", versionConfig.minVersion)) {
|
|
243121
243137
|
console.error(`
|
|
243122
|
-
It looks like your version of UR (${"1.44.
|
|
243138
|
+
It looks like your version of UR (${"1.44.8"}) needs an update.
|
|
243123
243139
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
243124
243140
|
|
|
243125
243141
|
To update, please run:
|
|
@@ -243335,7 +243351,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
243335
243351
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
243336
243352
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
243337
243353
|
pid: process.pid,
|
|
243338
|
-
currentVersion: "1.44.
|
|
243354
|
+
currentVersion: "1.44.8"
|
|
243339
243355
|
});
|
|
243340
243356
|
return "in_progress";
|
|
243341
243357
|
}
|
|
@@ -243344,7 +243360,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
243344
243360
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
243345
243361
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
243346
243362
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
243347
|
-
currentVersion: "1.44.
|
|
243363
|
+
currentVersion: "1.44.8"
|
|
243348
243364
|
});
|
|
243349
243365
|
console.error(`
|
|
243350
243366
|
Error: Windows NPM detected in WSL
|
|
@@ -243879,7 +243895,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
243879
243895
|
}
|
|
243880
243896
|
async function getDoctorDiagnostic() {
|
|
243881
243897
|
const installationType = await getCurrentInstallationType();
|
|
243882
|
-
const version2 = typeof MACRO !== "undefined" ? "1.44.
|
|
243898
|
+
const version2 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
|
|
243883
243899
|
const installationPath = await getInstallationPath();
|
|
243884
243900
|
const invokedBinary = getInvokedBinary();
|
|
243885
243901
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -244814,8 +244830,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
244814
244830
|
const maxVersion = await getMaxVersion();
|
|
244815
244831
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
244816
244832
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
244817
|
-
if (gte("1.44.
|
|
244818
|
-
logForDebugging(`Native installer: current version ${"1.44.
|
|
244833
|
+
if (gte("1.44.8", maxVersion)) {
|
|
244834
|
+
logForDebugging(`Native installer: current version ${"1.44.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
244819
244835
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
244820
244836
|
latency_ms: Date.now() - startTime,
|
|
244821
244837
|
max_version: maxVersion,
|
|
@@ -244826,7 +244842,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
244826
244842
|
version2 = maxVersion;
|
|
244827
244843
|
}
|
|
244828
244844
|
}
|
|
244829
|
-
if (!forceReinstall && version2 === "1.44.
|
|
244845
|
+
if (!forceReinstall && version2 === "1.44.8" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
244830
244846
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
244831
244847
|
logEvent("tengu_native_update_complete", {
|
|
244832
244848
|
latency_ms: Date.now() - startTime,
|
|
@@ -248525,7 +248541,13 @@ var init_coreSchemas = __esm(() => {
|
|
|
248525
248541
|
decisionClassification: PermissionDecisionClassificationSchema().optional()
|
|
248526
248542
|
})
|
|
248527
248543
|
]));
|
|
248528
|
-
PermissionModeSchema = lazySchema(() => exports_external.enum([
|
|
248544
|
+
PermissionModeSchema = lazySchema(() => exports_external.enum([
|
|
248545
|
+
"default",
|
|
248546
|
+
"acceptEdits",
|
|
248547
|
+
"autoApprove",
|
|
248548
|
+
"bypassPermissions",
|
|
248549
|
+
"plan"
|
|
248550
|
+
]).describe("Permission mode for controlling how tool executions are handled. " + "'default' - Standard behavior, prompts for dangerous operations. " + "'acceptEdits' - Auto-accept file edit operations. " + "'autoApprove' - Auto-approve permission prompts while preserving user-input dialogs. " + "'bypassPermissions' - Bypass all permission checks (requires allowDangerouslySkipPermissions). " + "'plan' - Planning mode, no actual tool execution."));
|
|
248529
248551
|
HOOK_EVENTS2 = [
|
|
248530
248552
|
"PreToolUse",
|
|
248531
248553
|
"PostToolUse",
|
|
@@ -302317,6 +302339,11 @@ var init_supportedSettings = __esm(() => {
|
|
|
302317
302339
|
type: "boolean",
|
|
302318
302340
|
description: "Enable auto-memory"
|
|
302319
302341
|
},
|
|
302342
|
+
automaticLearningEnabled: {
|
|
302343
|
+
source: "settings",
|
|
302344
|
+
type: "boolean",
|
|
302345
|
+
description: "Automatically learn from completed agent runs using local JSON stats"
|
|
302346
|
+
},
|
|
302320
302347
|
"codeIndex.autoReindex": {
|
|
302321
302348
|
source: "global",
|
|
302322
302349
|
type: "boolean",
|
|
@@ -302397,7 +302424,7 @@ var init_supportedSettings = __esm(() => {
|
|
|
302397
302424
|
source: "settings",
|
|
302398
302425
|
type: "string",
|
|
302399
302426
|
description: "Default permission mode for tool usage",
|
|
302400
|
-
options: ["default", "plan", "acceptEdits", "
|
|
302427
|
+
options: ["default", "plan", "acceptEdits", "autoApprove"]
|
|
302401
302428
|
},
|
|
302402
302429
|
language: {
|
|
302403
302430
|
source: "settings",
|
|
@@ -323419,16 +323446,44 @@ function isHumanTurn(m) {
|
|
|
323419
323446
|
}
|
|
323420
323447
|
|
|
323421
323448
|
// src/memdir/findRelevantMemories.ts
|
|
323449
|
+
function tokenizeForMemoryRecall(text) {
|
|
323450
|
+
const terms = new Set;
|
|
323451
|
+
for (const raw of text.toLowerCase().match(/[a-z0-9][a-z0-9._/-]{2,}/g) ?? []) {
|
|
323452
|
+
const term = raw.replace(/^[/._-]+|[/._-]+$/g, "");
|
|
323453
|
+
if (term.length >= 3 && !STOP_WORDS.has(term)) {
|
|
323454
|
+
terms.add(term);
|
|
323455
|
+
}
|
|
323456
|
+
}
|
|
323457
|
+
return terms;
|
|
323458
|
+
}
|
|
323459
|
+
function scoreMemoryForQuery(queryTerms, memory) {
|
|
323460
|
+
const haystack = `${memory.filename} ${memory.description ?? ""} ${memory.type ?? ""}`.toLowerCase();
|
|
323461
|
+
let score = 0;
|
|
323462
|
+
for (const term of queryTerms) {
|
|
323463
|
+
if (haystack.includes(term)) {
|
|
323464
|
+
score += memory.filename.toLowerCase().includes(term) ? 3 : 1;
|
|
323465
|
+
}
|
|
323466
|
+
}
|
|
323467
|
+
return score;
|
|
323468
|
+
}
|
|
323422
323469
|
async function findRelevantMemories(query2, memoryDir, signal, recentTools = [], alreadySurfaced = new Set) {
|
|
323423
323470
|
const memories = (await scanMemoryFiles(memoryDir, signal)).filter((m) => !alreadySurfaced.has(m.filePath));
|
|
323424
323471
|
if (memories.length === 0) {
|
|
323425
323472
|
return [];
|
|
323426
323473
|
}
|
|
323427
|
-
const
|
|
323428
|
-
|
|
323474
|
+
const queryTerms = tokenizeForMemoryRecall(query2);
|
|
323475
|
+
if (queryTerms.size === 0) {
|
|
323476
|
+
return [];
|
|
323477
|
+
}
|
|
323478
|
+
const candidates2 = memories.map((memory) => ({ memory, score: scoreMemoryForQuery(queryTerms, memory) })).filter(({ score }) => score > 0).sort((a2, b) => b.score - a2.score || b.memory.mtimeMs - a2.memory.mtimeMs).slice(0, MAX_SELECTOR_CANDIDATES).map(({ memory }) => memory);
|
|
323479
|
+
if (candidates2.length === 0) {
|
|
323480
|
+
return [];
|
|
323481
|
+
}
|
|
323482
|
+
const selectedFilenames = await selectRelevantMemories(query2, candidates2, signal, recentTools);
|
|
323483
|
+
const byFilename = new Map(candidates2.map((m) => [m.filename, m]));
|
|
323429
323484
|
const selected = selectedFilenames.map((filename) => byFilename.get(filename)).filter((m) => m !== undefined);
|
|
323430
323485
|
if (false) {}
|
|
323431
|
-
return selected.map((m) => ({ path: m.filePath, mtimeMs: m.mtimeMs }));
|
|
323486
|
+
return selected.slice(0, 3).map((m) => ({ path: m.filePath, mtimeMs: m.mtimeMs }));
|
|
323432
323487
|
}
|
|
323433
323488
|
async function selectRelevantMemories(query2, memories, signal, recentTools) {
|
|
323434
323489
|
const validFilenames = new Set(memories.map((m) => m.filename));
|
|
@@ -323481,11 +323536,11 @@ ${manifest}${toolsSection}`
|
|
|
323481
323536
|
}
|
|
323482
323537
|
var SELECT_MEMORIES_SYSTEM_PROMPT = `You are selecting memories that will be useful to UR as it processes a user's query. You will be given the user's query and a list of available memory files with their filenames and descriptions.
|
|
323483
323538
|
|
|
323484
|
-
Return a list of filenames for the memories that will clearly be useful to UR as it processes the user's query (up to
|
|
323539
|
+
Return a list of filenames for the memories that will clearly be useful to UR as it processes the user's query (up to 3). Only include memories that you are certain will be helpful based on their name and description.
|
|
323485
323540
|
- If you are unsure if a memory will be useful in processing the user's query, then do not include it in your list. Be selective and discerning.
|
|
323486
323541
|
- If there are no memories in the list that would clearly be useful, feel free to return an empty list.
|
|
323487
323542
|
- If a list of recently-used tools is provided, do not select memories that are usage reference or API documentation for those tools (UR is already exercising them). DO still select memories containing warnings, gotchas, or known issues about those tools \u2014 active use is exactly when those matter.
|
|
323488
|
-
|
|
323543
|
+
`, MAX_SELECTOR_CANDIDATES = 40, STOP_WORDS;
|
|
323489
323544
|
var init_findRelevantMemories = __esm(() => {
|
|
323490
323545
|
init_debug();
|
|
323491
323546
|
init_errors();
|
|
@@ -323493,6 +323548,45 @@ var init_findRelevantMemories = __esm(() => {
|
|
|
323493
323548
|
init_sideQuery();
|
|
323494
323549
|
init_slowOperations();
|
|
323495
323550
|
init_memoryScan();
|
|
323551
|
+
STOP_WORDS = new Set([
|
|
323552
|
+
"a",
|
|
323553
|
+
"about",
|
|
323554
|
+
"an",
|
|
323555
|
+
"and",
|
|
323556
|
+
"are",
|
|
323557
|
+
"as",
|
|
323558
|
+
"at",
|
|
323559
|
+
"be",
|
|
323560
|
+
"but",
|
|
323561
|
+
"by",
|
|
323562
|
+
"can",
|
|
323563
|
+
"do",
|
|
323564
|
+
"for",
|
|
323565
|
+
"from",
|
|
323566
|
+
"how",
|
|
323567
|
+
"i",
|
|
323568
|
+
"in",
|
|
323569
|
+
"is",
|
|
323570
|
+
"it",
|
|
323571
|
+
"me",
|
|
323572
|
+
"my",
|
|
323573
|
+
"of",
|
|
323574
|
+
"on",
|
|
323575
|
+
"or",
|
|
323576
|
+
"our",
|
|
323577
|
+
"please",
|
|
323578
|
+
"should",
|
|
323579
|
+
"that",
|
|
323580
|
+
"the",
|
|
323581
|
+
"this",
|
|
323582
|
+
"to",
|
|
323583
|
+
"use",
|
|
323584
|
+
"we",
|
|
323585
|
+
"what",
|
|
323586
|
+
"when",
|
|
323587
|
+
"with",
|
|
323588
|
+
"you"
|
|
323589
|
+
]);
|
|
323496
323590
|
});
|
|
323497
323591
|
|
|
323498
323592
|
// src/utils/attachments.ts
|
|
@@ -324176,7 +324270,7 @@ async function getRelevantMemoryAttachments(input, agents, readFileState, recent
|
|
|
324176
324270
|
});
|
|
324177
324271
|
const dirs = memoryDirs.length > 0 ? memoryDirs : [getAutoMemPath()];
|
|
324178
324272
|
const allResults = await Promise.all(dirs.map((dir) => findRelevantMemories(input, dir, signal, recentTools, alreadySurfaced).catch(() => [])));
|
|
324179
|
-
const selected = allResults.flat().filter((m) => !readFileState.has(m.path) && !alreadySurfaced.has(m.path)).slice(0,
|
|
324273
|
+
const selected = allResults.flat().filter((m) => !readFileState.has(m.path) && !alreadySurfaced.has(m.path)).slice(0, 3);
|
|
324180
324274
|
const memories = await readMemoriesForSurfacing(selected, signal);
|
|
324181
324275
|
if (memories.length === 0) {
|
|
324182
324276
|
return [];
|
|
@@ -325045,7 +325139,7 @@ function isFileReadDenied(filePath, toolPermissionContext) {
|
|
|
325045
325139
|
const denyRule = matchingRuleForInput(filePath, toolPermissionContext, "read", "deny");
|
|
325046
325140
|
return denyRule !== null;
|
|
325047
325141
|
}
|
|
325048
|
-
var BRIEF_TOOL_NAME3 = null, TODO_REMINDER_CONFIG, PLAN_MODE_ATTACHMENT_CONFIG, MAX_MEMORY_LINES =
|
|
325142
|
+
var BRIEF_TOOL_NAME3 = null, TODO_REMINDER_CONFIG, PLAN_MODE_ATTACHMENT_CONFIG, MAX_MEMORY_LINES = 120, MAX_MEMORY_BYTES = 2048, RELEVANT_MEMORIES_CONFIG, VERIFY_PLAN_REMINDER_CONFIG, INLINE_NOTIFICATION_MODES, sentSkillNames, suppressNext = false;
|
|
325049
325143
|
var init_attachments2 = __esm(() => {
|
|
325050
325144
|
init_analytics();
|
|
325051
325145
|
init_Tool();
|
|
@@ -325126,7 +325220,7 @@ var init_attachments2 = __esm(() => {
|
|
|
325126
325220
|
FULL_REMINDER_EVERY_N_ATTACHMENTS: 5
|
|
325127
325221
|
};
|
|
325128
325222
|
RELEVANT_MEMORIES_CONFIG = {
|
|
325129
|
-
MAX_SESSION_BYTES:
|
|
325223
|
+
MAX_SESSION_BYTES: 24 * 1024
|
|
325130
325224
|
};
|
|
325131
325225
|
VERIFY_PLAN_REMINDER_CONFIG = {
|
|
325132
325226
|
TURNS_BETWEEN_REMINDERS: 10
|
|
@@ -330543,6 +330637,9 @@ function withMemoryCorrectionHint(message) {
|
|
|
330543
330637
|
function AUTO_REJECT_MESSAGE(toolName) {
|
|
330544
330638
|
return `Permission to use ${toolName} has been denied. ${DENIAL_WORKAROUND_GUIDANCE}`;
|
|
330545
330639
|
}
|
|
330640
|
+
function DONT_ASK_REJECT_MESSAGE(toolName) {
|
|
330641
|
+
return `Permission to use ${toolName} has been denied because UR is running in don't ask mode. ${DENIAL_WORKAROUND_GUIDANCE}`;
|
|
330642
|
+
}
|
|
330546
330643
|
function isSyntheticMessage(message) {
|
|
330547
330644
|
return message.type !== "progress" && message.type !== "attachment" && message.type !== "system" && Array.isArray(message.message.content) && message.message.content[0]?.type === "text" && SYNTHETIC_MESSAGES.has(message.message.content[0].text);
|
|
330548
330645
|
}
|
|
@@ -335734,12 +335831,25 @@ var CLASSIFIER_FAIL_CLOSED_REFRESH_MS, PERMISSION_RULE_SOURCES, hasPermissionsTo
|
|
|
335734
335831
|
if (result.behavior === "ask") {
|
|
335735
335832
|
const appState = context3.getAppState();
|
|
335736
335833
|
if (appState.toolPermissionContext.mode === "dontAsk") {
|
|
335834
|
+
return {
|
|
335835
|
+
behavior: "deny",
|
|
335836
|
+
decisionReason: {
|
|
335837
|
+
type: "mode",
|
|
335838
|
+
mode: "dontAsk"
|
|
335839
|
+
},
|
|
335840
|
+
message: DONT_ASK_REJECT_MESSAGE(tool.name)
|
|
335841
|
+
};
|
|
335842
|
+
}
|
|
335843
|
+
if (appState.toolPermissionContext.mode === "autoApprove") {
|
|
335844
|
+
if (tool.requiresUserInteraction?.()) {
|
|
335845
|
+
return result;
|
|
335846
|
+
}
|
|
335737
335847
|
return {
|
|
335738
335848
|
behavior: "allow",
|
|
335739
335849
|
updatedInput: input,
|
|
335740
335850
|
decisionReason: {
|
|
335741
335851
|
type: "mode",
|
|
335742
|
-
mode: "
|
|
335852
|
+
mode: "autoApprove"
|
|
335743
335853
|
}
|
|
335744
335854
|
};
|
|
335745
335855
|
}
|
|
@@ -341497,7 +341607,7 @@ function Feedback({
|
|
|
341497
341607
|
platform: env2.platform,
|
|
341498
341608
|
gitRepo: envInfo.isGit,
|
|
341499
341609
|
terminal: env2.terminal,
|
|
341500
|
-
version: "1.44.
|
|
341610
|
+
version: "1.44.8",
|
|
341501
341611
|
transcript: normalizeMessagesForAPI(messages),
|
|
341502
341612
|
errors: sanitizedErrors,
|
|
341503
341613
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -341689,7 +341799,7 @@ function Feedback({
|
|
|
341689
341799
|
", ",
|
|
341690
341800
|
env2.terminal,
|
|
341691
341801
|
", v",
|
|
341692
|
-
"1.44.
|
|
341802
|
+
"1.44.8"
|
|
341693
341803
|
]
|
|
341694
341804
|
}, undefined, true, undefined, this)
|
|
341695
341805
|
]
|
|
@@ -341795,7 +341905,7 @@ ${sanitizedDescription}
|
|
|
341795
341905
|
` + `**Environment Info**
|
|
341796
341906
|
` + `- Platform: ${env2.platform}
|
|
341797
341907
|
` + `- Terminal: ${env2.terminal}
|
|
341798
|
-
` + `- Version: ${"1.44.
|
|
341908
|
+
` + `- Version: ${"1.44.8"}
|
|
341799
341909
|
` + `- Feedback ID: ${feedbackId}
|
|
341800
341910
|
` + `
|
|
341801
341911
|
**Errors**
|
|
@@ -344906,7 +345016,7 @@ function buildPrimarySection() {
|
|
|
344906
345016
|
}, undefined, false, undefined, this);
|
|
344907
345017
|
return [{
|
|
344908
345018
|
label: "Version",
|
|
344909
|
-
value: "1.44.
|
|
345019
|
+
value: "1.44.8"
|
|
344910
345020
|
}, {
|
|
344911
345021
|
label: "Session name",
|
|
344912
345022
|
value: nameValue
|
|
@@ -348236,7 +348346,7 @@ function Config({
|
|
|
348236
348346
|
}
|
|
348237
348347
|
}, undefined, false, undefined, this)
|
|
348238
348348
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
|
|
348239
|
-
currentVersion: "1.44.
|
|
348349
|
+
currentVersion: "1.44.8",
|
|
348240
348350
|
onChoice: (choice) => {
|
|
348241
348351
|
setShowSubmenu(null);
|
|
348242
348352
|
setTabsHidden(false);
|
|
@@ -348248,7 +348358,7 @@ function Config({
|
|
|
348248
348358
|
autoUpdatesChannel: "stable"
|
|
348249
348359
|
};
|
|
348250
348360
|
if (choice === "stay") {
|
|
348251
|
-
newSettings.minimumVersion = "1.44.
|
|
348361
|
+
newSettings.minimumVersion = "1.44.8";
|
|
348252
348362
|
}
|
|
348253
348363
|
updateSettingsForSource("userSettings", newSettings);
|
|
348254
348364
|
setSettingsData((prev_27) => ({
|
|
@@ -356318,7 +356428,7 @@ function HelpV2(t0) {
|
|
|
356318
356428
|
let t6;
|
|
356319
356429
|
if ($3[31] !== tabs) {
|
|
356320
356430
|
t6 = /* @__PURE__ */ jsx_dev_runtime203.jsxDEV(Tabs, {
|
|
356321
|
-
title: `UR v${"1.44.
|
|
356431
|
+
title: `UR v${"1.44.8"}`,
|
|
356322
356432
|
color: "professionalBlue",
|
|
356323
356433
|
defaultTab: "general",
|
|
356324
356434
|
children: tabs
|
|
@@ -357064,7 +357174,7 @@ function buildToolUseContext(tools, readFileStateCache) {
|
|
|
357064
357174
|
async function handleInitialize(options2) {
|
|
357065
357175
|
return {
|
|
357066
357176
|
name: "UR",
|
|
357067
|
-
version: "1.44.
|
|
357177
|
+
version: "1.44.8",
|
|
357068
357178
|
protocolVersion: "0.1.0",
|
|
357069
357179
|
workspaceRoot: options2.cwd,
|
|
357070
357180
|
capabilities: {
|
|
@@ -377206,7 +377316,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
377206
377316
|
return [];
|
|
377207
377317
|
}
|
|
377208
377318
|
}
|
|
377209
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.
|
|
377319
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.8") {
|
|
377210
377320
|
if (process.env.USER_TYPE === "ant") {
|
|
377211
377321
|
const changelog = "";
|
|
377212
377322
|
if (changelog) {
|
|
@@ -377233,7 +377343,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.5")
|
|
|
377233
377343
|
releaseNotes
|
|
377234
377344
|
};
|
|
377235
377345
|
}
|
|
377236
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.
|
|
377346
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.8") {
|
|
377237
377347
|
if (process.env.USER_TYPE === "ant") {
|
|
377238
377348
|
const changelog = "";
|
|
377239
377349
|
if (changelog) {
|
|
@@ -378412,7 +378522,7 @@ function getRecentActivitySync() {
|
|
|
378412
378522
|
return cachedActivity;
|
|
378413
378523
|
}
|
|
378414
378524
|
function getLogoDisplayData() {
|
|
378415
|
-
const version2 = process.env.DEMO_VERSION ?? "1.44.
|
|
378525
|
+
const version2 = process.env.DEMO_VERSION ?? "1.44.8";
|
|
378416
378526
|
const serverUrl = getDirectConnectServerUrl();
|
|
378417
378527
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
378418
378528
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -379201,7 +379311,7 @@ function LogoV2() {
|
|
|
379201
379311
|
if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
379202
379312
|
t2 = () => {
|
|
379203
379313
|
const currentConfig2 = getGlobalConfig();
|
|
379204
|
-
if (currentConfig2.lastReleaseNotesSeen === "1.44.
|
|
379314
|
+
if (currentConfig2.lastReleaseNotesSeen === "1.44.8") {
|
|
379205
379315
|
return;
|
|
379206
379316
|
}
|
|
379207
379317
|
saveGlobalConfig(_temp326);
|
|
@@ -379886,12 +379996,12 @@ function LogoV2() {
|
|
|
379886
379996
|
return t41;
|
|
379887
379997
|
}
|
|
379888
379998
|
function _temp326(current) {
|
|
379889
|
-
if (current.lastReleaseNotesSeen === "1.44.
|
|
379999
|
+
if (current.lastReleaseNotesSeen === "1.44.8") {
|
|
379890
380000
|
return current;
|
|
379891
380001
|
}
|
|
379892
380002
|
return {
|
|
379893
380003
|
...current,
|
|
379894
|
-
lastReleaseNotesSeen: "1.44.
|
|
380004
|
+
lastReleaseNotesSeen: "1.44.8"
|
|
379895
380005
|
};
|
|
379896
380006
|
}
|
|
379897
380007
|
function _temp241(s_0) {
|
|
@@ -410312,6 +410422,7 @@ var init_project2 = __esm(() => {
|
|
|
410312
410422
|
});
|
|
410313
410423
|
|
|
410314
410424
|
// src/ur/notes.ts
|
|
410425
|
+
import { createHash as createHash25 } from "crypto";
|
|
410315
410426
|
import { appendFileSync as appendFileSync5, existsSync as existsSync50, mkdirSync as mkdirSync43, readFileSync as readFileSync56, writeFileSync as writeFileSync42 } from "fs";
|
|
410316
410427
|
import { dirname as dirname62, join as join173 } from "path";
|
|
410317
410428
|
function readJsonl(file2) {
|
|
@@ -410333,6 +410444,58 @@ function append2(file2, rec) {
|
|
|
410333
410444
|
`);
|
|
410334
410445
|
} catch {}
|
|
410335
410446
|
}
|
|
410447
|
+
function memorySlug(text) {
|
|
410448
|
+
const words = text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").split("-").filter(Boolean).slice(0, 8).join("-");
|
|
410449
|
+
const hash2 = createHash25("sha1").update(text).digest("hex").slice(0, 8);
|
|
410450
|
+
return `${words || "remembered-note"}-${hash2}`;
|
|
410451
|
+
}
|
|
410452
|
+
function yamlSingleQuote(value) {
|
|
410453
|
+
return `'${value.replaceAll("'", "''")}'`;
|
|
410454
|
+
}
|
|
410455
|
+
function oneLine(text, max2 = 140) {
|
|
410456
|
+
const normalized = text.replace(/\s+/g, " ").trim();
|
|
410457
|
+
return normalized.length <= max2 ? normalized : `${normalized.slice(0, max2 - 1)}\u2026`;
|
|
410458
|
+
}
|
|
410459
|
+
function rememberInAutoMemory(memoryDir, text) {
|
|
410460
|
+
const trimmed = text.trim();
|
|
410461
|
+
if (!trimmed)
|
|
410462
|
+
return null;
|
|
410463
|
+
try {
|
|
410464
|
+
mkdirSync43(memoryDir, { recursive: true });
|
|
410465
|
+
const slug4 = memorySlug(trimmed);
|
|
410466
|
+
const fileName = `${slug4}.md`;
|
|
410467
|
+
const filePath = join173(memoryDir, fileName);
|
|
410468
|
+
const description = oneLine(trimmed);
|
|
410469
|
+
const now7 = new Date().toISOString();
|
|
410470
|
+
writeFileSync42(filePath, [
|
|
410471
|
+
"---",
|
|
410472
|
+
`name: ${yamlSingleQuote(description)}`,
|
|
410473
|
+
`description: ${yamlSingleQuote(description)}`,
|
|
410474
|
+
"type: feedback",
|
|
410475
|
+
"---",
|
|
410476
|
+
"",
|
|
410477
|
+
"# Remembered note",
|
|
410478
|
+
"",
|
|
410479
|
+
trimmed,
|
|
410480
|
+
"",
|
|
410481
|
+
`Saved: ${now7}`,
|
|
410482
|
+
""
|
|
410483
|
+
].join(`
|
|
410484
|
+
`));
|
|
410485
|
+
const indexPath3 = join173(memoryDir, "MEMORY.md");
|
|
410486
|
+
const indexLine = `- [Remembered note](${fileName}) \u2014 ${description}`;
|
|
410487
|
+
const existing2 = existsSync50(indexPath3) ? readFileSync56(indexPath3, "utf8") : "";
|
|
410488
|
+
if (!existing2.includes(`](${fileName})`)) {
|
|
410489
|
+
const prefix = existing2.trimEnd();
|
|
410490
|
+
writeFileSync42(indexPath3, `${prefix ? `${prefix}
|
|
410491
|
+
` : ""}${indexLine}
|
|
410492
|
+
`);
|
|
410493
|
+
}
|
|
410494
|
+
return filePath;
|
|
410495
|
+
} catch {
|
|
410496
|
+
return null;
|
|
410497
|
+
}
|
|
410498
|
+
}
|
|
410336
410499
|
function remember(cwd2, text) {
|
|
410337
410500
|
append2(memFile(cwd2), { ts: new Date().toISOString(), text, kind: "note" });
|
|
410338
410501
|
}
|
|
@@ -410376,9 +410539,13 @@ var call93 = async (args) => {
|
|
|
410376
410539
|
`) : "no memory notes yet" };
|
|
410377
410540
|
}
|
|
410378
410541
|
remember(getCwd(), text);
|
|
410542
|
+
if (isAutoMemoryEnabled()) {
|
|
410543
|
+
rememberInAutoMemory(getAutoMemPath(), text);
|
|
410544
|
+
}
|
|
410379
410545
|
return { type: "text", value: `remembered: ${text}` };
|
|
410380
410546
|
};
|
|
410381
410547
|
var init_remember = __esm(() => {
|
|
410548
|
+
init_paths();
|
|
410382
410549
|
init_cwd2();
|
|
410383
410550
|
init_notes();
|
|
410384
410551
|
});
|
|
@@ -596846,7 +597013,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
596846
597013
|
smapsRollup,
|
|
596847
597014
|
platform: process.platform,
|
|
596848
597015
|
nodeVersion: process.version,
|
|
596849
|
-
ccVersion: "1.44.
|
|
597016
|
+
ccVersion: "1.44.8"
|
|
596850
597017
|
};
|
|
596851
597018
|
}
|
|
596852
597019
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -597432,7 +597599,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
597432
597599
|
var call138 = async () => {
|
|
597433
597600
|
return {
|
|
597434
597601
|
type: "text",
|
|
597435
|
-
value: "1.44.
|
|
597602
|
+
value: "1.44.8"
|
|
597436
597603
|
};
|
|
597437
597604
|
}, version2, version_default;
|
|
597438
597605
|
var init_version = __esm(() => {
|
|
@@ -607525,7 +607692,7 @@ function generateHtmlReport(data, insights) {
|
|
|
607525
607692
|
</html>`;
|
|
607526
607693
|
}
|
|
607527
607694
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
607528
|
-
const version3 = typeof MACRO !== "undefined" ? "1.44.
|
|
607695
|
+
const version3 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
|
|
607529
607696
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
607530
607697
|
const facets_summary = {
|
|
607531
607698
|
total: facets.size,
|
|
@@ -611807,7 +611974,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
611807
611974
|
init_settings2();
|
|
611808
611975
|
init_slowOperations();
|
|
611809
611976
|
init_uuid();
|
|
611810
|
-
VERSION5 = typeof MACRO !== "undefined" ? "1.44.
|
|
611977
|
+
VERSION5 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
|
|
611811
611978
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
611812
611979
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
611813
611980
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -613012,7 +613179,7 @@ var init_filesystem = __esm(() => {
|
|
|
613012
613179
|
});
|
|
613013
613180
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
613014
613181
|
const nonce = randomBytes18(16).toString("hex");
|
|
613015
|
-
return join202(getURTempDir(), "bundled-skills", "1.44.
|
|
613182
|
+
return join202(getURTempDir(), "bundled-skills", "1.44.8", nonce);
|
|
613016
613183
|
});
|
|
613017
613184
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
613018
613185
|
});
|
|
@@ -618860,7 +619027,7 @@ var init_prompts4 = __esm(() => {
|
|
|
618860
619027
|
});
|
|
618861
619028
|
|
|
618862
619029
|
// src/utils/api.ts
|
|
618863
|
-
import { createHash as
|
|
619030
|
+
import { createHash as createHash26 } from "crypto";
|
|
618864
619031
|
function filterSwarmFieldsFromSchema(toolName, schema) {
|
|
618865
619032
|
const fieldsToRemove = SWARM_FIELDS_BY_TOOL[toolName];
|
|
618866
619033
|
if (!fieldsToRemove || fieldsToRemove.length === 0) {
|
|
@@ -618950,7 +619117,7 @@ function logAPIPrefix(systemPrompt) {
|
|
|
618950
619117
|
logEvent("tengu_sysprompt_block", {
|
|
618951
619118
|
snippet: firstSystemPrompt?.slice(0, 20),
|
|
618952
619119
|
length: firstSystemPrompt?.length ?? 0,
|
|
618953
|
-
hash: firstSystemPrompt ?
|
|
619120
|
+
hash: firstSystemPrompt ? createHash26("sha256").update(firstSystemPrompt).digest("hex") : ""
|
|
618954
619121
|
});
|
|
618955
619122
|
}
|
|
618956
619123
|
function splitSysPromptPrefix(systemPrompt, options2) {
|
|
@@ -619276,7 +619443,7 @@ var init_api3 = __esm(() => {
|
|
|
619276
619443
|
});
|
|
619277
619444
|
|
|
619278
619445
|
// src/utils/fingerprint.ts
|
|
619279
|
-
import { createHash as
|
|
619446
|
+
import { createHash as createHash27 } from "crypto";
|
|
619280
619447
|
function extractFirstMessageText(messages) {
|
|
619281
619448
|
const firstUserMessage = messages.find((msg) => msg.type === "user");
|
|
619282
619449
|
if (!firstUserMessage) {
|
|
@@ -619298,12 +619465,12 @@ function computeFingerprint(messageText2, version3) {
|
|
|
619298
619465
|
const indices = [4, 7, 20];
|
|
619299
619466
|
const chars = indices.map((i3) => messageText2[i3] || "0").join("");
|
|
619300
619467
|
const fingerprintInput = `${FINGERPRINT_SALT}${chars}${version3}`;
|
|
619301
|
-
const hash2 =
|
|
619468
|
+
const hash2 = createHash27("sha256").update(fingerprintInput).digest("hex");
|
|
619302
619469
|
return hash2.slice(0, 3);
|
|
619303
619470
|
}
|
|
619304
619471
|
function computeFingerprintFromMessages(messages) {
|
|
619305
619472
|
const firstMessageText = extractFirstMessageText(messages);
|
|
619306
|
-
return computeFingerprint(firstMessageText, "1.44.
|
|
619473
|
+
return computeFingerprint(firstMessageText, "1.44.8");
|
|
619307
619474
|
}
|
|
619308
619475
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
619309
619476
|
var init_fingerprint = () => {};
|
|
@@ -621177,7 +621344,7 @@ async function sideQuery(opts) {
|
|
|
621177
621344
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
621178
621345
|
}
|
|
621179
621346
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
621180
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.44.
|
|
621347
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.44.8");
|
|
621181
621348
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
621182
621349
|
const systemBlocks = [
|
|
621183
621350
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -625914,7 +626081,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
625914
626081
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
625915
626082
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
625916
626083
|
betas: getSdkBetas(),
|
|
625917
|
-
ur_version: "1.44.
|
|
626084
|
+
ur_version: "1.44.8",
|
|
625918
626085
|
output_style: outputStyle2,
|
|
625919
626086
|
agents: inputs.agents.map((agent) => agent.agentType),
|
|
625920
626087
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -640542,7 +640709,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
640542
640709
|
function getSemverPart(version3) {
|
|
640543
640710
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
640544
640711
|
}
|
|
640545
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.44.
|
|
640712
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.44.8") {
|
|
640546
640713
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
|
|
640547
640714
|
if (!updatedVersion) {
|
|
640548
640715
|
return null;
|
|
@@ -640591,7 +640758,7 @@ function AutoUpdater({
|
|
|
640591
640758
|
return;
|
|
640592
640759
|
}
|
|
640593
640760
|
if (false) {}
|
|
640594
|
-
const currentVersion = "1.44.
|
|
640761
|
+
const currentVersion = "1.44.8";
|
|
640595
640762
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
640596
640763
|
let latestVersion = await getLatestVersion(channel);
|
|
640597
640764
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -640820,12 +640987,12 @@ function NativeAutoUpdater({
|
|
|
640820
640987
|
logEvent("tengu_native_auto_updater_start", {});
|
|
640821
640988
|
try {
|
|
640822
640989
|
const maxVersion = await getMaxVersion();
|
|
640823
|
-
if (maxVersion && gt("1.44.
|
|
640990
|
+
if (maxVersion && gt("1.44.8", maxVersion)) {
|
|
640824
640991
|
const msg = await getMaxVersionMessage();
|
|
640825
640992
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
640826
640993
|
}
|
|
640827
640994
|
const result = await installLatest(channel);
|
|
640828
|
-
const currentVersion = "1.44.
|
|
640995
|
+
const currentVersion = "1.44.8";
|
|
640829
640996
|
const latencyMs = Date.now() - startTime;
|
|
640830
640997
|
if (result.lockFailed) {
|
|
640831
640998
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -640962,17 +641129,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
640962
641129
|
const maxVersion = await getMaxVersion();
|
|
640963
641130
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
640964
641131
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
640965
|
-
if (gte("1.44.
|
|
640966
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.
|
|
641132
|
+
if (gte("1.44.8", maxVersion)) {
|
|
641133
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
640967
641134
|
setUpdateAvailable(false);
|
|
640968
641135
|
return;
|
|
640969
641136
|
}
|
|
640970
641137
|
latest = maxVersion;
|
|
640971
641138
|
}
|
|
640972
|
-
const hasUpdate = latest && !gte("1.44.
|
|
641139
|
+
const hasUpdate = latest && !gte("1.44.8", latest) && !shouldSkipVersion(latest);
|
|
640973
641140
|
setUpdateAvailable(!!hasUpdate);
|
|
640974
641141
|
if (hasUpdate) {
|
|
640975
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.
|
|
641142
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.8"} -> ${latest}`);
|
|
640976
641143
|
}
|
|
640977
641144
|
};
|
|
640978
641145
|
$3[0] = t1;
|
|
@@ -641006,7 +641173,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
641006
641173
|
wrap: "truncate",
|
|
641007
641174
|
children: [
|
|
641008
641175
|
"currentVersion: ",
|
|
641009
|
-
"1.44.
|
|
641176
|
+
"1.44.8"
|
|
641010
641177
|
]
|
|
641011
641178
|
}, undefined, true, undefined, this);
|
|
641012
641179
|
$3[3] = verbose;
|
|
@@ -646144,15 +646311,19 @@ function getNextPermissionMode(toolPermissionContext, _teamContext) {
|
|
|
646144
646311
|
if (toolPermissionContext.isBypassPermissionsModeAvailable) {
|
|
646145
646312
|
return "bypassPermissions";
|
|
646146
646313
|
}
|
|
646147
|
-
return "
|
|
646148
|
-
case "
|
|
646314
|
+
return "autoApprove";
|
|
646315
|
+
case "autoApprove":
|
|
646149
646316
|
if (canCycleToAuto(toolPermissionContext)) {
|
|
646150
646317
|
return "auto";
|
|
646151
646318
|
}
|
|
646152
646319
|
return "default";
|
|
646153
646320
|
case "bypassPermissions":
|
|
646321
|
+
return "autoApprove";
|
|
646322
|
+
case "dontAsk":
|
|
646323
|
+
return "default";
|
|
646324
|
+
case "auto":
|
|
646154
646325
|
if (canCycleToAuto(toolPermissionContext)) {
|
|
646155
|
-
return "
|
|
646326
|
+
return "default";
|
|
646156
646327
|
}
|
|
646157
646328
|
return "default";
|
|
646158
646329
|
default:
|
|
@@ -653458,7 +653629,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
653458
653629
|
project_dir: getOriginalCwd(),
|
|
653459
653630
|
added_dirs: addedDirs
|
|
653460
653631
|
},
|
|
653461
|
-
version: "1.44.
|
|
653632
|
+
version: "1.44.8",
|
|
653462
653633
|
output_style: {
|
|
653463
653634
|
name: outputStyleName
|
|
653464
653635
|
},
|
|
@@ -653541,7 +653712,7 @@ function StatusLineInner({
|
|
|
653541
653712
|
const taskValues = Object.values(tasks2);
|
|
653542
653713
|
const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
|
|
653543
653714
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
653544
|
-
version: "1.44.
|
|
653715
|
+
version: "1.44.8",
|
|
653545
653716
|
providerLabel: providerRuntime.providerLabel,
|
|
653546
653717
|
authMode: providerRuntime.authLabel,
|
|
653547
653718
|
model: providerRuntime.model ?? renderModelName(mainLoopModel),
|
|
@@ -665472,7 +665643,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
665472
665643
|
} catch {}
|
|
665473
665644
|
const data = {
|
|
665474
665645
|
trigger: trigger2,
|
|
665475
|
-
version: "1.44.
|
|
665646
|
+
version: "1.44.8",
|
|
665476
665647
|
platform: process.platform,
|
|
665477
665648
|
transcript,
|
|
665478
665649
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -677357,7 +677528,7 @@ function WelcomeV2() {
|
|
|
677357
677528
|
dimColor: true,
|
|
677358
677529
|
children: [
|
|
677359
677530
|
"v",
|
|
677360
|
-
"1.44.
|
|
677531
|
+
"1.44.8"
|
|
677361
677532
|
]
|
|
677362
677533
|
}, undefined, true, undefined, this)
|
|
677363
677534
|
]
|
|
@@ -678617,7 +678788,7 @@ function completeOnboarding() {
|
|
|
678617
678788
|
saveGlobalConfig((current) => ({
|
|
678618
678789
|
...current,
|
|
678619
678790
|
hasCompletedOnboarding: true,
|
|
678620
|
-
lastOnboardingVersion: "1.44.
|
|
678791
|
+
lastOnboardingVersion: "1.44.8"
|
|
678621
678792
|
}));
|
|
678622
678793
|
}
|
|
678623
678794
|
function showDialog(root2, renderer) {
|
|
@@ -682259,15 +682430,14 @@ Settings load in order: user \u2192 project \u2192 local (later overrides earlie
|
|
|
682259
682430
|
"allow": ["Bash(npm:*)", "Edit(.ur)", "Read"],
|
|
682260
682431
|
"deny": ["Bash(rm -rf:*)"],
|
|
682261
682432
|
"ask": ["Write(/etc/*)"],
|
|
682262
|
-
"defaultMode": "default" | "plan" | "acceptEdits" | "
|
|
682433
|
+
"defaultMode": "default" | "plan" | "acceptEdits" | "autoApprove",
|
|
682263
682434
|
"additionalDirectories": ["/extra/dir"]
|
|
682264
682435
|
}
|
|
682265
682436
|
}
|
|
682266
682437
|
\`\`\`
|
|
682267
682438
|
|
|
682268
|
-
Set \`permissions.defaultMode\` to \`"
|
|
682269
|
-
would otherwise stop for
|
|
682270
|
-
policy blocks still apply.
|
|
682439
|
+
Set \`permissions.defaultMode\` to \`"autoApprove"\` to auto-approve operations
|
|
682440
|
+
that would otherwise stop for permission approval. User-input dialogs still ask.
|
|
682271
682441
|
|
|
682272
682442
|
**Permission Rule Syntax:**
|
|
682273
682443
|
- Exact match: \`"Bash(npm run test)"\`
|
|
@@ -683658,7 +683828,7 @@ function appendToLog(path24, message) {
|
|
|
683658
683828
|
cwd: getFsImplementation().cwd(),
|
|
683659
683829
|
userType: process.env.USER_TYPE,
|
|
683660
683830
|
sessionId: getSessionId(),
|
|
683661
|
-
version: "1.44.
|
|
683831
|
+
version: "1.44.8"
|
|
683662
683832
|
};
|
|
683663
683833
|
getLogWriter(path24).write(messageWithTimestamp);
|
|
683664
683834
|
}
|
|
@@ -687752,8 +687922,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
687752
687922
|
}
|
|
687753
687923
|
async function checkEnvLessBridgeMinVersion() {
|
|
687754
687924
|
const cfg = await getEnvLessBridgeConfig();
|
|
687755
|
-
if (cfg.min_version && lt("1.44.
|
|
687756
|
-
return `Your version of UR (${"1.44.
|
|
687925
|
+
if (cfg.min_version && lt("1.44.8", cfg.min_version)) {
|
|
687926
|
+
return `Your version of UR (${"1.44.8"}) is too old for Remote Control.
|
|
687757
687927
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
687758
687928
|
}
|
|
687759
687929
|
return null;
|
|
@@ -688227,7 +688397,7 @@ async function initBridgeCore(params) {
|
|
|
688227
688397
|
const rawApi = createBridgeApiClient({
|
|
688228
688398
|
baseUrl,
|
|
688229
688399
|
getAccessToken,
|
|
688230
|
-
runnerVersion: "1.44.
|
|
688400
|
+
runnerVersion: "1.44.8",
|
|
688231
688401
|
onDebug: logForDebugging,
|
|
688232
688402
|
onAuth401,
|
|
688233
688403
|
getTrustedDeviceToken
|
|
@@ -693909,7 +694079,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
|
|
|
693909
694079
|
setCwd(cwd3);
|
|
693910
694080
|
const server2 = new Server({
|
|
693911
694081
|
name: "ur/tengu",
|
|
693912
|
-
version: "1.44.
|
|
694082
|
+
version: "1.44.8"
|
|
693913
694083
|
}, {
|
|
693914
694084
|
capabilities: {
|
|
693915
694085
|
tools: {}
|
|
@@ -695951,7 +696121,7 @@ async function update() {
|
|
|
695951
696121
|
logEvent("tengu_update_check", {});
|
|
695952
696122
|
const diagnostic = await getDoctorDiagnostic();
|
|
695953
696123
|
const result = await checkUpgradeStatus({
|
|
695954
|
-
currentVersion: "1.44.
|
|
696124
|
+
currentVersion: "1.44.8",
|
|
695955
696125
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
695956
696126
|
installationType: diagnostic.installationType,
|
|
695957
696127
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -697197,7 +697367,7 @@ ${customInstructions}` : customInstructions;
|
|
|
697197
697367
|
}
|
|
697198
697368
|
}
|
|
697199
697369
|
logForDiagnosticsNoPII("info", "started", {
|
|
697200
|
-
version: "1.44.
|
|
697370
|
+
version: "1.44.8",
|
|
697201
697371
|
is_native_binary: isInBundledMode()
|
|
697202
697372
|
});
|
|
697203
697373
|
registerCleanup(async () => {
|
|
@@ -697983,7 +698153,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
697983
698153
|
pendingHookMessages
|
|
697984
698154
|
}, renderAndRun);
|
|
697985
698155
|
}
|
|
697986
|
-
}).version("1.44.
|
|
698156
|
+
}).version("1.44.8 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
697987
698157
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
697988
698158
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
697989
698159
|
if (canUserConfigureAdvisor()) {
|
|
@@ -698898,7 +699068,7 @@ if (false) {}
|
|
|
698898
699068
|
async function main2() {
|
|
698899
699069
|
const args = process.argv.slice(2);
|
|
698900
699070
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
698901
|
-
console.log(`${"1.44.
|
|
699071
|
+
console.log(`${"1.44.8"} (UR-Nexus)`);
|
|
698902
699072
|
return;
|
|
698903
699073
|
}
|
|
698904
699074
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -270,6 +270,15 @@ Recommended Git behavior:
|
|
|
270
270
|
- Do not commit generated `.ur/index/`, `.ur/memory/`, `.ur/cache/`, `.ur/tmp/`, or `.ur/logs/`.
|
|
271
271
|
- Do not commit `UR.local.md`.
|
|
272
272
|
|
|
273
|
+
Memory and learning defaults:
|
|
274
|
+
|
|
275
|
+
- Auto-memory is enabled by default. Disable with `autoMemoryEnabled: false`,
|
|
276
|
+
`UR_CODE_DISABLE_AUTO_MEMORY=1`, or `--bare`.
|
|
277
|
+
- Automatic learning is enabled by default. Disable with
|
|
278
|
+
`automaticLearningEnabled: false` or `UR_CODE_DISABLE_AUTO_LEARNING=1`.
|
|
279
|
+
- Automatic learning folds local outcome stats only; it does not call a model
|
|
280
|
+
unless you explicitly run `/learn run --reflect`.
|
|
281
|
+
|
|
273
282
|
## Verifier
|
|
274
283
|
|
|
275
284
|
UR runs a lightweight verifier in the agent loop (L1) to catch false "task
|
package/documentation/index.html
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
<main id="content" class="content">
|
|
45
45
|
<header class="topbar">
|
|
46
46
|
<div>
|
|
47
|
-
<p class="eyebrow">Version 1.44.
|
|
47
|
+
<p class="eyebrow">Version 1.44.8</p>
|
|
48
48
|
<h1>UR-Nexus Documentation</h1>
|
|
49
49
|
<p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
|
|
50
50
|
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "ur-inline-diffs",
|
|
3
3
|
"displayName": "UR Inline Diffs",
|
|
4
4
|
"description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
|
|
5
|
-
"version": "1.44.
|
|
5
|
+
"version": "1.44.8",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED