ur-agent 1.67.0 → 1.68.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,6 +1,38 @@
1
1
  # Changelog
2
2
 
3
- ## 1.67.0
3
+ ## 1.68.0
4
+
5
+ - Removed `@ts-nocheck` from 73 files, putting 21,503 previously unchecked lines
6
+ under `tsc`. Every one of those files produced **zero** errors once the
7
+ suppression was lifted — they were not suppressed because they were broken,
8
+ they were suppressed and then fixed, or never needed it. The blind spot was
9
+ 33% larger than the actual debt. Typecheck remains clean at exit 0.
10
+ - Added `test/typeCheckCoverage.test.ts`, a ratchet: the `@ts-nocheck` count may
11
+ fall but never rise, and the budget must be lowered when files come off the
12
+ list so it cannot silently stop ratcheting. It also asserts that `query.ts`,
13
+ `permissions.ts`, `filesystem.ts` and `toolExecution.ts` are still suppressed
14
+ — a standing reminder that the highest-consequence files are the unchecked
15
+ ones, with instructions to delete the test when that stops being true.
16
+ - Remaining debt, measured rather than estimated: 150 files, ~870 errors, but
17
+ concentrated — 3 files hold 231 of them, while 95 files have 3 or fewer each
18
+ and 135 have 10 or fewer. Of the total, 32 are dead build-constant comparisons
19
+ from the fork (`'external' === 'ant'`) and 562 are property-access-on-`any`.
20
+ The 95 cheap files are the next batch.
21
+
22
+ - Restored the worked examples in the TodoWrite tool prompt, with their
23
+ narrated tool use removed. After 1.65.5 that
24
+ prompt was cut from 184 lines to 48, which removed every demonstration and
25
+ left only abstract rules ("work is non-trivial when it needs planning,
26
+ investigation, multiple deliverables..."). A large model infers intent from
27
+ rules; a small local model pattern-matches on examples. Task lists stopped
28
+ being produced, and the task-list gate was then hardened over five successive
29
+ commits to force what the prompt no longer taught — which is what produced
30
+ refused writes and retry loops on small models. The newer lifecycle rules are
31
+ good and are kept; what returns is seven worked examples covering when to use
32
+ the list, when not to, and why, including the single-file case where one Write
33
+ call still warrants a plan.
34
+
35
+ ### Also in this release (was staged as 1.67.0)
4
36
 
5
37
  - Two subsystems loaded behind feature flags were not merely disabled, they
6
38
  were broken in a way that only showed if you enabled them.
@@ -25,6 +57,13 @@
25
57
  `filesystem.ts`. Both defects above sat inside that blind spot.
26
58
 
27
59
 
60
+ - The original examples narrated tool use as prose ("* Uses the Edit tool to
61
+ add a comment *", "*Executes: npm install*"), which is the exact anti-pattern
62
+ the same prompt forbids in its closing paragraph — and what a small model
63
+ copies when it reports a file as written without calling Write. That is why
64
+ the examples were cut, and cutting them was not baseless; it just took the
65
+ decision guidance with it. They now return without the narration.
66
+
28
67
  ## 1.66.2
29
68
 
30
69
  - A long session on Ollama now says when it has run out of context instead of
package/dist/cli.js CHANGED
@@ -75647,7 +75647,7 @@ var init_auth = __esm(() => {
75647
75647
 
75648
75648
  // src/utils/userAgent.ts
75649
75649
  function getURCodeUserAgent() {
75650
- return `ur/${"1.67.0"}`;
75650
+ return `ur/${"1.68.0"}`;
75651
75651
  }
75652
75652
 
75653
75653
  // src/utils/workloadContext.ts
@@ -75669,7 +75669,7 @@ function getUserAgent() {
75669
75669
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
75670
75670
  const workload = getWorkload();
75671
75671
  const workloadSuffix = workload ? `, workload/${workload}` : "";
75672
- return `ur-cli/${"1.67.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75672
+ return `ur-cli/${"1.68.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75673
75673
  }
75674
75674
  function getMCPUserAgent() {
75675
75675
  const parts = [];
@@ -75683,7 +75683,7 @@ function getMCPUserAgent() {
75683
75683
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
75684
75684
  }
75685
75685
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
75686
- return `ur/${"1.67.0"}${suffix}`;
75686
+ return `ur/${"1.68.0"}${suffix}`;
75687
75687
  }
75688
75688
  function getWebFetchUserAgent() {
75689
75689
  return `UR-User (${getURCodeUserAgent()})`;
@@ -75821,7 +75821,7 @@ var init_user = __esm(() => {
75821
75821
  deviceId,
75822
75822
  sessionId: getSessionId(),
75823
75823
  email: getEmail(),
75824
- appVersion: "1.67.0",
75824
+ appVersion: "1.68.0",
75825
75825
  platform: getHostPlatformForAnalytics(),
75826
75826
  organizationUuid,
75827
75827
  accountUuid,
@@ -84021,7 +84021,7 @@ var init_metadata = __esm(() => {
84021
84021
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
84022
84022
  WHITESPACE_REGEX = /\s+/;
84023
84023
  getVersionBase = memoize_default(() => {
84024
- const match = "1.67.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
84024
+ const match = "1.68.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
84025
84025
  return match ? match[0] : undefined;
84026
84026
  });
84027
84027
  buildEnvContext = memoize_default(async () => {
@@ -84061,7 +84061,7 @@ var init_metadata = __esm(() => {
84061
84061
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
84062
84062
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
84063
84063
  isURAiAuth: isURAISubscriber(),
84064
- version: "1.67.0",
84064
+ version: "1.68.0",
84065
84065
  versionBase: getVersionBase(),
84066
84066
  buildTime: "",
84067
84067
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -84731,7 +84731,7 @@ function initialize1PEventLogging() {
84731
84731
  const platform2 = getPlatform();
84732
84732
  const attributes = {
84733
84733
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
84734
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.67.0"
84734
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.68.0"
84735
84735
  };
84736
84736
  if (platform2 === "wsl") {
84737
84737
  const wslVersion = getWslVersion();
@@ -84759,7 +84759,7 @@ function initialize1PEventLogging() {
84759
84759
  })
84760
84760
  ]
84761
84761
  });
84762
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.67.0");
84762
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.68.0");
84763
84763
  }
84764
84764
  async function reinitialize1PEventLoggingIfConfigChanged() {
84765
84765
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -94647,7 +94647,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
94647
94647
  function formatA2AAgentCard(options = {}, pretty = true) {
94648
94648
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
94649
94649
  }
94650
- var urVersion = "1.67.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94650
+ var urVersion = "1.68.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94651
94651
  var init_trends = __esm(() => {
94652
94652
  init_a2aCardSignature();
94653
94653
  coverage = [
@@ -97450,7 +97450,7 @@ function getAttributionHeader(fingerprint) {
97450
97450
  if (!isAttributionHeaderEnabled()) {
97451
97451
  return "";
97452
97452
  }
97453
- const version2 = `${"1.67.0"}.${fingerprint}`;
97453
+ const version2 = `${"1.68.0"}.${fingerprint}`;
97454
97454
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
97455
97455
  const cch = "";
97456
97456
  const workload = getWorkload();
@@ -155323,7 +155323,7 @@ var init_projectSafety = __esm(() => {
155323
155323
  function getInstruments() {
155324
155324
  if (instruments)
155325
155325
  return instruments;
155326
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.67.0");
155326
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.68.0");
155327
155327
  instruments = {
155328
155328
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
155329
155329
  description: "GenAI operation duration.",
@@ -155421,7 +155421,7 @@ function genAiAgentAttributes() {
155421
155421
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
155422
155422
  "gen_ai.provider.name": "ur",
155423
155423
  "gen_ai.agent.name": "UR-Nexus",
155424
- "gen_ai.agent.version": "1.67.0"
155424
+ "gen_ai.agent.version": "1.68.0"
155425
155425
  };
155426
155426
  }
155427
155427
  function genAiWorkflowAttributes(workflowName) {
@@ -155437,7 +155437,7 @@ function genAiWorkflowAttributes(workflowName) {
155437
155437
  function startGenAiWorkflowSpan(workflowName) {
155438
155438
  const attributes = genAiWorkflowAttributes(workflowName);
155439
155439
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
155440
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.67.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
155440
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
155441
155441
  }
155442
155442
  function endGenAiWorkflowSpan(span, options2 = {}) {
155443
155443
  try {
@@ -155475,7 +155475,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
155475
155475
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
155476
155476
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
155477
155477
  }
155478
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.67.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
155478
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
155479
155479
  }
155480
155480
  function endGenAiMemorySpan(span, options2 = {}) {
155481
155481
  try {
@@ -248958,7 +248958,7 @@ function getTelemetryAttributes() {
248958
248958
  attributes["session.id"] = sessionId;
248959
248959
  }
248960
248960
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
248961
- attributes["app.version"] = "1.67.0";
248961
+ attributes["app.version"] = "1.68.0";
248962
248962
  }
248963
248963
  const oauthAccount = getOauthAccountInfo();
248964
248964
  if (oauthAccount) {
@@ -295438,7 +295438,7 @@ function getInstallationEnv() {
295438
295438
  return;
295439
295439
  }
295440
295440
  function getURCodeVersion() {
295441
- return "1.67.0";
295441
+ return "1.68.0";
295442
295442
  }
295443
295443
  async function getInstalledVSCodeExtensionVersion(command) {
295444
295444
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -302769,7 +302769,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
302769
302769
  const client2 = new Client({
302770
302770
  name: "ur",
302771
302771
  title: "UR",
302772
- version: "1.67.0",
302772
+ version: "1.68.0",
302773
302773
  description: "UR-Nexus autonomous engineering workflow engine",
302774
302774
  websiteUrl: PRODUCT_URL
302775
302775
  }, {
@@ -303129,7 +303129,7 @@ var init_client5 = __esm(() => {
303129
303129
  const client2 = new Client({
303130
303130
  name: "ur",
303131
303131
  title: "UR",
303132
- version: "1.67.0",
303132
+ version: "1.68.0",
303133
303133
  description: "UR-Nexus autonomous engineering workflow engine",
303134
303134
  websiteUrl: PRODUCT_URL
303135
303135
  }, {
@@ -315668,7 +315668,7 @@ async function createRuntime() {
315668
315668
  bootstrapTelemetry();
315669
315669
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
315670
315670
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
315671
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.67.0"
315671
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.68.0"
315672
315672
  }));
315673
315673
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
315674
315674
  resource,
@@ -315701,11 +315701,11 @@ async function createRuntime() {
315701
315701
  setMeterProvider(meterProvider);
315702
315702
  setLoggerProvider(loggerProvider);
315703
315703
  if (meterProvider) {
315704
- const meter = meterProvider.getMeter("ur-agent", "1.67.0");
315704
+ const meter = meterProvider.getMeter("ur-agent", "1.68.0");
315705
315705
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
315706
315706
  }
315707
315707
  if (loggerProvider) {
315708
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.67.0"));
315708
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.68.0"));
315709
315709
  }
315710
315710
  if (!cleanupRegistered2) {
315711
315711
  cleanupRegistered2 = true;
@@ -316367,9 +316367,9 @@ async function assertMinVersion() {
316367
316367
  if (false) {}
316368
316368
  try {
316369
316369
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
316370
- if (versionConfig.minVersion && lt("1.67.0", versionConfig.minVersion)) {
316370
+ if (versionConfig.minVersion && lt("1.68.0", versionConfig.minVersion)) {
316371
316371
  console.error(`
316372
- It looks like your version of UR (${"1.67.0"}) needs an update.
316372
+ It looks like your version of UR (${"1.68.0"}) needs an update.
316373
316373
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
316374
316374
 
316375
316375
  To update, please run:
@@ -316585,7 +316585,7 @@ async function installGlobalPackage(specificVersion) {
316585
316585
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
316586
316586
  logEvent("tengu_auto_updater_lock_contention", {
316587
316587
  pid: process.pid,
316588
- currentVersion: "1.67.0"
316588
+ currentVersion: "1.68.0"
316589
316589
  });
316590
316590
  return "in_progress";
316591
316591
  }
@@ -316594,7 +316594,7 @@ async function installGlobalPackage(specificVersion) {
316594
316594
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
316595
316595
  logError2(new Error("Windows NPM detected in WSL environment"));
316596
316596
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
316597
- currentVersion: "1.67.0"
316597
+ currentVersion: "1.68.0"
316598
316598
  });
316599
316599
  console.error(`
316600
316600
  Error: Windows NPM detected in WSL
@@ -317129,7 +317129,7 @@ function detectLinuxGlobPatternWarnings() {
317129
317129
  }
317130
317130
  async function getDoctorDiagnostic() {
317131
317131
  const installationType = await getCurrentInstallationType();
317132
- const version2 = typeof MACRO !== "undefined" ? "1.67.0" : "unknown";
317132
+ const version2 = typeof MACRO !== "undefined" ? "1.68.0" : "unknown";
317133
317133
  const installationPath = await getInstallationPath();
317134
317134
  const invokedBinary = getInvokedBinary();
317135
317135
  const multipleInstallations = await detectMultipleInstallations();
@@ -318064,8 +318064,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
318064
318064
  const maxVersion = await getMaxVersion();
318065
318065
  if (maxVersion && gt(version2, maxVersion)) {
318066
318066
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
318067
- if (gte("1.67.0", maxVersion)) {
318068
- logForDebugging(`Native installer: current version ${"1.67.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
318067
+ if (gte("1.68.0", maxVersion)) {
318068
+ logForDebugging(`Native installer: current version ${"1.68.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
318069
318069
  logEvent("tengu_native_update_skipped_max_version", {
318070
318070
  latency_ms: Date.now() - startTime,
318071
318071
  max_version: maxVersion,
@@ -318076,7 +318076,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
318076
318076
  version2 = maxVersion;
318077
318077
  }
318078
318078
  }
318079
- if (!forceReinstall && version2 === "1.67.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
318079
+ if (!forceReinstall && version2 === "1.68.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
318080
318080
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
318081
318081
  logEvent("tengu_native_update_complete", {
318082
318082
  latency_ms: Date.now() - startTime,
@@ -339537,18 +339537,133 @@ var init_types10 = __esm(() => {
339537
339537
  });
339538
339538
 
339539
339539
  // src/tools/TodoWriteTool/prompt.ts
339540
- var PROMPT4 = `Use this tool to maintain the ordered work plan for the current session.
339540
+ var PROMPT4, DESCRIPTION9 = "Create and update the ordered todo list for multi-step work. Use proactively for tasks with 3 or more steps. Keep statuses current, keep exactly one item in_progress, and complete items only after relevant verification succeeds.";
339541
+ var init_prompt11 = __esm(() => {
339542
+ PROMPT4 = `Use this tool to create and manage the ordered work plan for the current session. It tracks progress, organises complex work, and shows the user where their request stands.
339543
+
339544
+ ## When to Use This Tool
339541
339545
 
339542
- ## When to use it
339546
+ Use this tool proactively in these scenarios:
339543
339547
 
339544
- Create a todo list before every non-trivial workspace implementation. Work is
339545
- non-trivial when it needs planning, investigation, multiple deliverables,
339546
- dependencies, several features, or post-change verification. A feature-rich
339548
+ 1. Complex multi-step tasks \u2014 when a task requires 3 or more distinct steps or actions
339549
+ 2. Non-trivial and complex tasks \u2014 tasks that require careful planning or multiple operations
339550
+ 3. User explicitly requests a todo list
339551
+ 4. User provides multiple tasks \u2014 a list of things to be done (numbered or comma-separated)
339552
+ 5. After receiving new instructions \u2014 immediately capture user requirements as todos
339553
+ 6. When you start working on a task \u2014 mark it in_progress BEFORE beginning work; only one item should be in_progress at a time
339554
+ 7. After completing a task \u2014 mark it completed and add any follow-up work discovered during implementation
339555
+
339556
+ Work is non-trivial when it needs planning, investigation, multiple
339557
+ deliverables, dependencies, several features, or post-change verification.
339558
+ Investigate first when scope is unknown so the list records concrete
339559
+ outcomes rather than guesses. A feature-rich
339547
339560
  single-file build is non-trivial even if one Write call could create it.
339548
- Investigate first when scope is unknown so the list records concrete outcomes.
339549
339561
 
339550
- Skip it only for a purely informational answer or a genuinely atomic one-shot
339551
- action with no planning, dependencies, or meaningful verification.
339562
+ ## When NOT to Use This Tool
339563
+
339564
+ Skip using this tool when:
339565
+
339566
+ 1. There is only a single, straightforward task
339567
+ 2. The task is trivial and tracking it provides no organisational benefit
339568
+ 3. The task can be completed in less than 3 trivial steps
339569
+ 4. The task is purely conversational or informational
339570
+
339571
+ If there is one trivial task to do, just do it. Ceremony on a one-line request
339572
+ is what trains users to switch this off.
339573
+
339574
+ ## Examples of When to Use the Todo List
339575
+
339576
+ <example>
339577
+ User: I want to add a dark mode toggle to the application settings. Make sure you run the tests and build when you're done!
339578
+ Assistant: *Creates todo list with the following items:*
339579
+ 1. Creating dark mode toggle component in Settings page
339580
+ 2. Adding dark mode state management (context/store)
339581
+ 3. Implementing CSS-in-JS styles for dark theme
339582
+ 4. Updating existing components to support theme switching
339583
+ 5. Running tests and build process, addressing any failures or errors that occur
339584
+ *Begins working on the first task*
339585
+
339586
+ <reasoning>
339587
+ The assistant used the todo list because:
339588
+ 1. Adding dark mode is a multi-step feature requiring UI, state management, and styling changes
339589
+ 2. The user explicitly requested tests and build be run afterward
339590
+ 3. The assistant added the verification step as its own tracked outcome
339591
+ </reasoning>
339592
+ </example>
339593
+
339594
+ <example>
339595
+ User: Help me rename the function getCwd to getCurrentWorkingDirectory across my project
339596
+ Assistant: *Uses grep or search tools to locate all instances of getCwd in the codebase*
339597
+ I've found 15 instances of 'getCwd' across 8 different files.
339598
+ *Creates todo list with specific items for each file that needs updating*
339599
+
339600
+ <reasoning>
339601
+ The assistant used the todo list because:
339602
+ 1. It searched first to understand the scope of the task
339603
+ 2. Finding multiple occurrences across files made this a multi-step task
339604
+ 3. The list ensures every instance is tracked and updated systematically
339605
+ </reasoning>
339606
+ </example>
339607
+
339608
+ <example>
339609
+ User: I need to implement these features for my e-commerce site: user registration, product catalog, shopping cart, and checkout flow.
339610
+ Assistant: *Creates a todo list breaking down each feature into specific tasks based on the project architecture*
339611
+ Let's start with user registration.
339612
+
339613
+ <reasoning>
339614
+ The assistant used the todo list because:
339615
+ 1. The user provided multiple complex features in a comma-separated list
339616
+ 2. The list organises large features into manageable outcomes
339617
+ 3. It allows tracking progress across the entire implementation
339618
+ </reasoning>
339619
+ </example>
339620
+
339621
+ <example>
339622
+ User: make me a warship space game, full advanced, one file html+js
339623
+ Assistant: *Creates todo list: 1) Scaffold the HTML shell and canvas, 2) Implement the render and game loop, 3) Implement player ship movement and physics, 4) Implement enemy fleet and AI, 5) Implement collision, damage and scoring, 6) Write the file and verify it opens in a browser*
339624
+ *Marks the first item in_progress, then writes the file*
339625
+
339626
+ <reasoning>
339627
+ The assistant used the todo list because a "full advanced" game is a
339628
+ feature-rich build with several independent systems and a verification step,
339629
+ even though the deliverable is a single file produced by one Write call. The
339630
+ number of files is not what makes work non-trivial.
339631
+ </reasoning>
339632
+ </example>
339633
+
339634
+ ## Examples of When NOT to Use the Todo List
339635
+
339636
+ <example>
339637
+ User: How do I print 'Hello World' in Python?
339638
+ Assistant: In Python, you can print "Hello World" with this simple code:
339639
+
339640
+ python
339641
+ print("Hello World")
339642
+
339643
+ <reasoning>
339644
+ A single trivial task completed in one step. Nothing to track.
339645
+ </reasoning>
339646
+ </example>
339647
+
339648
+ <example>
339649
+ User: What does the git status command do?
339650
+ Assistant: The git status command shows the current state of your working directory and staging area.
339651
+
339652
+ <reasoning>
339653
+ An informational request with no coding task to complete.
339654
+ </reasoning>
339655
+ </example>
339656
+
339657
+ <example>
339658
+ User: Can you add a comment to the calculateTotal function to explain what it does?
339659
+ Assistant: Adds the comment with a single ${FILE_EDIT_TOOL_NAME} call and reports the result.
339660
+
339661
+ <reasoning>
339662
+ A single straightforward edit confined to one location. No systematic
339663
+ organisation required. Note that the edit is performed by issuing the tool
339664
+ call, not by describing it \u2014 a narrated action is not an executed one.
339665
+ </reasoning>
339666
+ </example>
339552
339667
 
339553
339668
  ## Lifecycle
339554
339669
 
@@ -339581,7 +339696,8 @@ required todo is completed or an honest blocker has been reported.
339581
339696
 
339582
339697
  Invoke tools through their native structured interfaces. Narrating a todo,
339583
339698
  file edit, or command does not execute it, and printed arguments are not a
339584
- substitute for a tool call.`, DESCRIPTION9 = "Create and update the ordered todo list for multi-step work. Keep statuses current and complete items only after relevant verification succeeds.";
339699
+ substitute for a tool call.`;
339700
+ });
339585
339701
 
339586
339702
  // src/tools/TodoWriteTool/TodoWriteTool.ts
339587
339703
  var inputSchema9, outputSchema6, TodoWriteTool;
@@ -339593,6 +339709,7 @@ var init_TodoWriteTool = __esm(() => {
339593
339709
  init_tasks();
339594
339710
  init_types10();
339595
339711
  init_constants2();
339712
+ init_prompt11();
339596
339713
  inputSchema9 = lazySchema(() => exports_external.strictObject({
339597
339714
  todos: TodoListSchema().describe("The updated todo list")
339598
339715
  }));
@@ -358498,7 +358615,7 @@ ${sleepGuidance ? sleepGuidance + `
358498
358615
  - Before running destructive operations (e.g., git reset --hard, git push --force, git checkout --), consider whether there is a safer alternative that achieves the same goal. Only use destructive operations when they are truly the best approach.
358499
358616
  - Never skip hooks (--no-verify) or bypass signing (--no-gpg-sign, -c commit.gpgsign=false) unless the user has explicitly asked for it. If a hook fails, investigate and fix the underlying issue.`;
358500
358617
  }
358501
- var init_prompt11 = __esm(() => {
358618
+ var init_prompt12 = __esm(() => {
358502
358619
  init_envUtils();
358503
358620
  init_outputLimits();
358504
358621
  init_powershellDetection();
@@ -359020,7 +359137,7 @@ var init_PowerShellTool = __esm(() => {
359020
359137
  init_cwd2();
359021
359138
  init_commandSemantics();
359022
359139
  init_powershellPermissions();
359023
- init_prompt11();
359140
+ init_prompt12();
359024
359141
  init_readOnlyValidation2();
359025
359142
  init_UI7();
359026
359143
  jsx_dev_runtime124 = __toESM(require_jsx_dev_runtime(), 1);
@@ -361145,7 +361262,7 @@ Usage:${getPreReadInstruction2()}
361145
361262
  - The edit will FAIL if \`old_string\` is not unique in the file. Either provide a larger string with more surrounding context to make it unique or use \`replace_all\` to change every instance of \`old_string\`.${minimalUniquenessHint}
361146
361263
  - Use \`replace_all\` for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.`;
361147
361264
  }
361148
- var init_prompt12 = __esm(() => {
361265
+ var init_prompt13 = __esm(() => {
361149
361266
  init_file();
361150
361267
  init_prompt3();
361151
361268
  });
@@ -364302,7 +364419,7 @@ var init_FileEditTool = __esm(() => {
364302
364419
  init_filesystem();
364303
364420
  init_shellRuleMatching();
364304
364421
  init_validateEditTool();
364305
- init_prompt12();
364422
+ init_prompt13();
364306
364423
  init_types11();
364307
364424
  init_UI8();
364308
364425
  init_utils10();
@@ -369968,7 +370085,7 @@ var BRIEF_TOOL_NAME2 = "SendUserMessage", LEGACY_BRIEF_TOOL_NAME2 = "Brief", DES
369968
370085
  \`message\` supports markdown. \`attachments\` takes file paths (absolute or cwd-relative) for images, diffs, logs.
369969
370086
 
369970
370087
  \`status\` labels intent: 'normal' when replying to what they just asked; 'proactive' when you're initiating \u2014 a scheduled task finished, a blocker surfaced during background work, you need input on something they haven't asked about. Set it honestly; downstream routing uses it.`, BRIEF_PROACTIVE_SECTION;
369971
- var init_prompt13 = __esm(() => {
370088
+ var init_prompt14 = __esm(() => {
369972
370089
  BRIEF_PROACTIVE_SECTION = `## Talking to the user
369973
370090
 
369974
370091
  ${BRIEF_TOOL_NAME2} is where your replies go. Text outside it is visible if the user expands the detail view, but most won't \u2014 assume unread. Anything you want them to actually see goes through ${BRIEF_TOOL_NAME2}. The failure mode: the real answer lives in plain text while ${BRIEF_TOOL_NAME2} just says "done!" \u2014 they see "done!" and miss everything.
@@ -370167,7 +370284,7 @@ var init_BriefTool = __esm(() => {
370167
370284
  init_envUtils();
370168
370285
  init_stringUtils();
370169
370286
  init_attachments();
370170
- init_prompt13();
370287
+ init_prompt14();
370171
370288
  init_UI16();
370172
370289
  inputSchema26 = lazySchema(() => exports_external.strictObject({
370173
370290
  message: exports_external.string().describe("The message for the user. Supports markdown formatting."),
@@ -371452,7 +371569,7 @@ var init_inProcessTeammateHelpers = __esm(() => {
371452
371569
 
371453
371570
  // src/tools/ExitPlanModeTool/prompt.ts
371454
371571
  var ASK_USER_QUESTION_TOOL_NAME2 = "AskUserQuestion", EXIT_PLAN_MODE_V2_TOOL_PROMPT;
371455
- var init_prompt14 = __esm(() => {
371572
+ var init_prompt15 = __esm(() => {
371456
371573
  EXIT_PLAN_MODE_V2_TOOL_PROMPT = `Use this tool when you are in plan mode and have finished writing your plan to the plan file and are ready for user approval.
371457
371574
 
371458
371575
  ## How This Tool Works
@@ -371685,7 +371802,7 @@ var init_ExitPlanModeV2Tool = __esm(() => {
371685
371802
  init_slowOperations();
371686
371803
  init_teammate();
371687
371804
  init_teammateMailbox();
371688
- init_prompt14();
371805
+ init_prompt15();
371689
371806
  init_UI18();
371690
371807
  allowedPromptSchema = lazySchema(() => exports_external.object({
371691
371808
  tool: exports_external.enum(["Bash"]).describe("The tool this prompt applies to"),
@@ -373189,7 +373306,7 @@ Notes:
373189
373306
  - Returns file paths with line ranges and a short preview for each hit.`;
373190
373307
  }
373191
373308
  var CODE_SEARCH_TOOL_NAME = "CodeSearch";
373192
- var init_prompt15 = __esm(() => {
373309
+ var init_prompt16 = __esm(() => {
373193
373310
  init_prompt2();
373194
373311
  });
373195
373312
 
@@ -373209,7 +373326,7 @@ var init_CodeSearchTool = __esm(() => {
373209
373326
  init_cwd2();
373210
373327
  init_codeIndex();
373211
373328
  init_semanticNumber();
373212
- init_prompt15();
373329
+ init_prompt16();
373213
373330
  inputSchema31 = lazySchema(() => exports_external.strictObject({
373214
373331
  query: exports_external.string().describe('Natural-language description of the code you are looking for (e.g. "retry logic for failed network requests").'),
373215
373332
  limit: semanticNumber(exports_external.number().optional()).describe("Maximum number of results to return. Defaults to 10."),
@@ -375318,7 +375435,7 @@ function getEnterPlanModeToolPrompt() {
375318
375435
  return process.env.USER_TYPE === "ant" ? getEnterPlanModeToolPromptAnt() : getEnterPlanModeToolPromptExternal();
375319
375436
  }
375320
375437
  var WHAT_HAPPENS_SECTION;
375321
- var init_prompt16 = __esm(() => {
375438
+ var init_prompt17 = __esm(() => {
375322
375439
  init_planModeV2();
375323
375440
  init_prompt();
375324
375441
  WHAT_HAPPENS_SECTION = `## What Happens in Plan Mode
@@ -375397,7 +375514,7 @@ var init_EnterPlanModeTool = __esm(() => {
375397
375514
  init_PermissionUpdate();
375398
375515
  init_permissionSetup();
375399
375516
  init_planModeV2();
375400
- init_prompt16();
375517
+ init_prompt17();
375401
375518
  init_UI20();
375402
375519
  inputSchema34 = lazySchema(() => exports_external.strictObject({}));
375403
375520
  outputSchema29 = lazySchema(() => exports_external.object({
@@ -376728,7 +376845,7 @@ ${lines.join(`
376728
376845
  }
376729
376846
  }
376730
376847
  var DESCRIPTION13 = "Get or set UR configuration settings.";
376731
- var init_prompt17 = __esm(() => {
376848
+ var init_prompt18 = __esm(() => {
376732
376849
  init_modelOptions();
376733
376850
  init_voiceModeEnabled();
376734
376851
  init_supportedSettings();
@@ -377443,7 +377560,7 @@ var init_ConfigTool = __esm(() => {
377443
377560
  init_log2();
377444
377561
  init_settings2();
377445
377562
  init_slowOperations();
377446
- init_prompt17();
377563
+ init_prompt18();
377447
377564
  init_supportedSettings();
377448
377565
  init_UI23();
377449
377566
  inputSchema37 = lazySchema(() => exports_external.strictObject({
@@ -377870,7 +377987,7 @@ ${teammateTips}- Check TaskList first to avoid creating duplicate tasks
377870
377987
  `;
377871
377988
  }
377872
377989
  var DESCRIPTION14 = "Create a new task in the task list";
377873
- var init_prompt18 = __esm(() => {
377990
+ var init_prompt19 = __esm(() => {
377874
377991
  init_agentSwarmsEnabled();
377875
377992
  });
377876
377993
 
@@ -377883,7 +378000,7 @@ var init_TaskCreateTool = __esm(() => {
377883
378000
  init_tasks();
377884
378001
  init_teammate();
377885
378002
  init_taskIdInput();
377886
- init_prompt18();
378003
+ init_prompt19();
377887
378004
  inputSchema38 = lazySchema(() => {
377888
378005
  const TaskIdSchema = taskIdInputSchema("A task dependency ID. Positive integer JSON values are accepted and normalized to strings.");
377889
378006
  return exports_external.strictObject({
@@ -378730,7 +378847,7 @@ Use TaskGet with a specific task ID to view full details including description a
378730
378847
  ${teammateWorkflow}`;
378731
378848
  }
378732
378849
  var DESCRIPTION17 = "List all tasks in the task list";
378733
- var init_prompt19 = __esm(() => {
378850
+ var init_prompt20 = __esm(() => {
378734
378851
  init_agentSwarmsEnabled();
378735
378852
  });
378736
378853
 
@@ -378740,7 +378857,7 @@ var init_TaskListTool = __esm(() => {
378740
378857
  init_v4();
378741
378858
  init_Tool();
378742
378859
  init_tasks();
378743
- init_prompt19();
378860
+ init_prompt20();
378744
378861
  inputSchema41 = lazySchema(() => exports_external.strictObject({}));
378745
378862
  outputSchema36 = lazySchema(() => exports_external.object({
378746
378863
  tasks: exports_external.array(exports_external.object({
@@ -382076,7 +382193,7 @@ Usage notes:
382076
382193
 
382077
382194
  ${forkEnabled ? forkExamples : currentExamples}`;
382078
382195
  }
382079
- var init_prompt20 = __esm(() => {
382196
+ var init_prompt21 = __esm(() => {
382080
382197
  init_growthbook();
382081
382198
  init_auth();
382082
382199
  init_embeddedTools();
@@ -382145,7 +382262,7 @@ var init_AgentTool = __esm(() => {
382145
382262
  init_constants2();
382146
382263
  init_forkSubagent();
382147
382264
  init_loadAgentsDir();
382148
- init_prompt20();
382265
+ init_prompt21();
382149
382266
  init_runAgent();
382150
382267
  init_UI4();
382151
382268
  jsx_dev_runtime153 = __toESM(require_jsx_dev_runtime(), 1);
@@ -385429,7 +385546,7 @@ function getSimplePrompt() {
385429
385546
  ].join(`
385430
385547
  `);
385431
385548
  }
385432
- var init_prompt21 = __esm(() => {
385549
+ var init_prompt22 = __esm(() => {
385433
385550
  init_prompts4();
385434
385551
  init_attribution();
385435
385552
  init_embeddedTools();
@@ -385886,7 +386003,7 @@ var init_BashTool = __esm(() => {
385886
386003
  init_state();
385887
386004
  init_bashPermissions();
385888
386005
  init_commandSemantics2();
385889
- init_prompt21();
386006
+ init_prompt22();
385890
386007
  init_readOnlyValidation();
385891
386008
  init_sedEditParser();
385892
386009
  init_shouldUseSandbox();
@@ -388170,7 +388287,7 @@ function isAnyTracingEnabled() {
388170
388287
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
388171
388288
  }
388172
388289
  function getTracer() {
388173
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.67.0");
388290
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.68.0");
388174
388291
  }
388175
388292
  function createSpanAttributes(spanType, customAttributes = {}) {
388176
388293
  const baseAttributes = getTelemetryAttributes();
@@ -395957,7 +396074,7 @@ var NO_TOOLS_PREAMBLE = `CRITICAL: Respond with TEXT ONLY. Do NOT call any tools
395957
396074
  - Errors that you ran into and how you fixed them
395958
396075
  - Pay special attention to specific user feedback that you received, especially if the user told you to do something differently.
395959
396076
  2. Double-check for technical accuracy and completeness, addressing each required element thoroughly.`, BASE_COMPACT_PROMPT, PARTIAL_COMPACT_PROMPT, PARTIAL_COMPACT_UP_TO_PROMPT, NO_TOOLS_TRAILER;
395960
- var init_prompt22 = __esm(() => {
396077
+ var init_prompt23 = __esm(() => {
395961
396078
  BASE_COMPACT_PROMPT = `Your task is to create a detailed summary of the conversation so far, paying close attention to the user's explicit requests and your previous actions.
395962
396079
  This summary should be thorough in capturing technical details, code patterns, and architectural decisions that would be essential for continuing development work without losing context.
395963
396080
 
@@ -397122,7 +397239,7 @@ var init_compact = __esm(() => {
397122
397239
  init_withRetry();
397123
397240
  init_internalLogging();
397124
397241
  init_tokenEstimation();
397125
- init_prompt22();
397242
+ init_prompt23();
397126
397243
  });
397127
397244
 
397128
397245
  // src/services/compact/postCompactCleanup.ts
@@ -397662,7 +397779,7 @@ var init_sessionMemoryCompact = __esm(() => {
397662
397779
  init_sessionMemoryUtils();
397663
397780
  init_compact();
397664
397781
  init_microCompact();
397665
- init_prompt22();
397782
+ init_prompt23();
397666
397783
  DEFAULT_SM_COMPACT_CONFIG = {
397667
397784
  minTokens: 1e4,
397668
397785
  minTextBlockMessages: 5,
@@ -402662,7 +402779,7 @@ var init_attachments2 = __esm(() => {
402662
402779
  init_file();
402663
402780
  init_loadAgentsDir();
402664
402781
  init_constants2();
402665
- init_prompt20();
402782
+ init_prompt21();
402666
402783
  init_permissions2();
402667
402784
  init_auth();
402668
402785
  init_mcpStringUtils();
@@ -419414,7 +419531,7 @@ function Feedback({
419414
419531
  platform: env2.platform,
419415
419532
  gitRepo: envInfo.isGit,
419416
419533
  terminal: env2.terminal,
419417
- version: "1.67.0",
419534
+ version: "1.68.0",
419418
419535
  transcript: normalizeMessagesForAPI(messages),
419419
419536
  errors: sanitizedErrors,
419420
419537
  lastApiRequest: getLastAPIRequest(),
@@ -419606,7 +419723,7 @@ function Feedback({
419606
419723
  ", ",
419607
419724
  env2.terminal,
419608
419725
  ", v",
419609
- "1.67.0"
419726
+ "1.68.0"
419610
419727
  ]
419611
419728
  }, undefined, true, undefined, this)
419612
419729
  ]
@@ -419712,7 +419829,7 @@ ${sanitizedDescription}
419712
419829
  ` + `**Environment Info**
419713
419830
  ` + `- Platform: ${env2.platform}
419714
419831
  ` + `- Terminal: ${env2.terminal}
419715
- ` + `- Version: ${"1.67.0"}
419832
+ ` + `- Version: ${"1.68.0"}
419716
419833
  ` + `- Feedback ID: ${feedbackId}
419717
419834
  ` + `
419718
419835
  **Errors**
@@ -422822,7 +422939,7 @@ function buildPrimarySection() {
422822
422939
  }, undefined, false, undefined, this);
422823
422940
  return [{
422824
422941
  label: "Version",
422825
- value: "1.67.0"
422942
+ value: "1.68.0"
422826
422943
  }, {
422827
422944
  label: "Session name",
422828
422945
  value: nameValue
@@ -426152,7 +426269,7 @@ function Config({
426152
426269
  }
426153
426270
  }, undefined, false, undefined, this)
426154
426271
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
426155
- currentVersion: "1.67.0",
426272
+ currentVersion: "1.68.0",
426156
426273
  onChoice: (choice) => {
426157
426274
  setShowSubmenu(null);
426158
426275
  setTabsHidden(false);
@@ -426164,7 +426281,7 @@ function Config({
426164
426281
  autoUpdatesChannel: "stable"
426165
426282
  };
426166
426283
  if (choice === "stay") {
426167
- newSettings.minimumVersion = "1.67.0";
426284
+ newSettings.minimumVersion = "1.68.0";
426168
426285
  }
426169
426286
  updateSettingsForSource("userSettings", newSettings);
426170
426287
  setSettingsData((prev_27) => ({
@@ -434238,7 +434355,7 @@ function HelpV2(t0) {
434238
434355
  let t6;
434239
434356
  if ($2[31] !== tabs) {
434240
434357
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
434241
- title: `UR v${"1.67.0"}`,
434358
+ title: `UR v${"1.68.0"}`,
434242
434359
  color: "professionalBlue",
434243
434360
  defaultTab: "general",
434244
434361
  children: tabs
@@ -435171,7 +435288,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
435171
435288
  async function handleInitialize(options2) {
435172
435289
  return {
435173
435290
  name: "UR",
435174
- version: "1.67.0",
435291
+ version: "1.68.0",
435175
435292
  protocolVersion: "0.1.0",
435176
435293
  workspaceRoot: options2.cwd,
435177
435294
  capabilities: {
@@ -452279,7 +452396,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
452279
452396
  return [];
452280
452397
  }
452281
452398
  }
452282
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.67.0") {
452399
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.68.0") {
452283
452400
  if (process.env.USER_TYPE === "ant") {
452284
452401
  const changelog = "";
452285
452402
  if (changelog) {
@@ -452306,7 +452423,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.67.0")
452306
452423
  releaseNotes
452307
452424
  };
452308
452425
  }
452309
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.67.0") {
452426
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.68.0") {
452310
452427
  if (process.env.USER_TYPE === "ant") {
452311
452428
  const changelog = "";
452312
452429
  if (changelog) {
@@ -455172,7 +455289,7 @@ function getRecentActivitySync() {
455172
455289
  return cachedActivity;
455173
455290
  }
455174
455291
  function getLogoDisplayData() {
455175
- const version2 = process.env.DEMO_VERSION ?? "1.67.0";
455292
+ const version2 = process.env.DEMO_VERSION ?? "1.68.0";
455176
455293
  const serverUrl = getDirectConnectServerUrl();
455177
455294
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
455178
455295
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -456039,7 +456156,7 @@ function LogoV2() {
456039
456156
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
456040
456157
  t2 = () => {
456041
456158
  const currentConfig2 = getGlobalConfig();
456042
- if (currentConfig2.lastReleaseNotesSeen === "1.67.0") {
456159
+ if (currentConfig2.lastReleaseNotesSeen === "1.68.0") {
456043
456160
  return;
456044
456161
  }
456045
456162
  saveGlobalConfig(_temp325);
@@ -456724,12 +456841,12 @@ function LogoV2() {
456724
456841
  return t41;
456725
456842
  }
456726
456843
  function _temp325(current) {
456727
- if (current.lastReleaseNotesSeen === "1.67.0") {
456844
+ if (current.lastReleaseNotesSeen === "1.68.0") {
456728
456845
  return current;
456729
456846
  }
456730
456847
  return {
456731
456848
  ...current,
456732
- lastReleaseNotesSeen: "1.67.0"
456849
+ lastReleaseNotesSeen: "1.68.0"
456733
456850
  };
456734
456851
  }
456735
456852
  function _temp241(s_0) {
@@ -470902,7 +471019,7 @@ Mode: ${mode} \u2014 ${MODE_GUIDANCE[mode]}
470902
471019
  ${SECURITY_BOUNDARY}`;
470903
471020
  }
470904
471021
  var SECURITY_BOUNDARY, BASE, MODE_GUIDANCE, SECURITY_MODES;
470905
- var init_prompt23 = __esm(() => {
471022
+ var init_prompt24 = __esm(() => {
470906
471023
  SECURITY_BOUNDARY = "SECURITY SAFETY BOUNDARY (mandatory): operate only against systems the user owns or is explicitly authorized to test. " + "Before any active test, require a defined, approved scope. Never assist with unauthorized access, credential theft, " + "malware, stealth, persistence, evasion, exfiltration, destructive exploitation, DDoS, phishing, or attacks on third-party " + "systems. Never run destructive commands or escalate privileges silently, never auto-run exploits, and always redact secrets. " + "If a request is unsafe or unauthorized, refuse the harmful part and redirect to a defensive, lab, or authorized alternative " + "(audit, hardening, detection logic, threat model, secure-code review, local lab).";
470907
471024
  BASE = "You are 309 in security-engineering mode: a professional white-hat / blue-team / purple-team security engineer. " + "Use the Security Containment Firewall, scope, and tool-policy registry. Map findings to OWASP, CWE, CVSS, and MITRE ATT&CK " + "where relevant. Be precise and evidence-based: include severity, confidence, and remediation; never claim something is " + "exploited unless it was verified non-destructively. Prefer passive, non-destructive checks; require approval for active tools.";
470908
471025
  MODE_GUIDANCE = {
@@ -471905,7 +472022,7 @@ var init_commands2 = __esm(() => {
471905
472022
  init_attackSurface();
471906
472023
  init_reports();
471907
472024
  init_doctor3();
471908
- init_prompt23();
472025
+ init_prompt24();
471909
472026
  init_mappings();
471910
472027
  init_network();
471911
472028
  init_hardening();
@@ -471933,7 +472050,7 @@ var init_security = __esm(() => {
471933
472050
  init_findings();
471934
472051
  init_reports();
471935
472052
  init_doctor3();
471936
- init_prompt23();
472053
+ init_prompt24();
471937
472054
  init_commands2();
471938
472055
  });
471939
472056
 
@@ -473675,7 +473792,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
473675
473792
  if (spec.name !== specName) {
473676
473793
  throw new Error("Agentic CI workflow spec name does not match");
473677
473794
  }
473678
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.67.0" : "1.67.0");
473795
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.68.0" : "1.68.0");
473679
473796
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
473680
473797
  throw new Error("invalid ur-agent package version");
473681
473798
  }
@@ -474668,7 +474785,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
474668
474785
  path: ".github/workflows/ur.yml",
474669
474786
  root: "project",
474670
474787
  content: compileAgenticCiWorkflow("default", {
474671
- packageVersion: typeof MACRO !== "undefined" ? "1.67.0" : "1.67.0"
474788
+ packageVersion: typeof MACRO !== "undefined" ? "1.68.0" : "1.68.0"
474672
474789
  })
474673
474790
  },
474674
474791
  {
@@ -474738,7 +474855,7 @@ function value(tokens, flag) {
474738
474855
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
474739
474856
  }
474740
474857
  function cliVersion() {
474741
- return typeof MACRO !== "undefined" ? "1.67.0" : "1.67.0";
474858
+ return typeof MACRO !== "undefined" ? "1.68.0" : "1.68.0";
474742
474859
  }
474743
474860
  function workflowPath(cwd2) {
474744
474861
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -480603,7 +480720,7 @@ function createAcpStdioApp(deps) {
480603
480720
  }
480604
480721
  },
480605
480722
  authMethods: [],
480606
- agentInfo: { name: "UR-Nexus", version: "1.67.0" }
480723
+ agentInfo: { name: "UR-Nexus", version: "1.68.0" }
480607
480724
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
480608
480725
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
480609
480726
  await runtime2.announce({
@@ -480700,7 +480817,7 @@ function createAcpStdioAgent(deps) {
480700
480817
  }
480701
480818
  },
480702
480819
  authMethods: [],
480703
- agentInfo: { name: "UR-Nexus", version: "1.67.0" }
480820
+ agentInfo: { name: "UR-Nexus", version: "1.68.0" }
480704
480821
  });
480705
480822
  return;
480706
480823
  case "authenticate":
@@ -691860,7 +691977,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
691860
691977
  smapsRollup,
691861
691978
  platform: process.platform,
691862
691979
  nodeVersion: process.version,
691863
- ccVersion: "1.67.0"
691980
+ ccVersion: "1.68.0"
691864
691981
  };
691865
691982
  }
691866
691983
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -692440,7 +692557,7 @@ var init_bridge_kick = __esm(() => {
692440
692557
  var call153 = async () => {
692441
692558
  return {
692442
692559
  type: "text",
692443
- value: "1.67.0"
692560
+ value: "1.68.0"
692444
692561
  };
692445
692562
  }, version2, version_default;
692446
692563
  var init_version = __esm(() => {
@@ -703620,7 +703737,7 @@ function generateHtmlReport(data, insights) {
703620
703737
  </html>`;
703621
703738
  }
703622
703739
  function buildExportData(data, insights, facets, remoteStats) {
703623
- const version3 = typeof MACRO !== "undefined" ? "1.67.0" : "unknown";
703740
+ const version3 = typeof MACRO !== "undefined" ? "1.68.0" : "unknown";
703624
703741
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
703625
703742
  const facets_summary = {
703626
703743
  total: facets.size,
@@ -707947,7 +708064,7 @@ var init_sessionStorage = __esm(() => {
707947
708064
  init_settings2();
707948
708065
  init_slowOperations();
707949
708066
  init_uuid();
707950
- VERSION7 = typeof MACRO !== "undefined" ? "1.67.0" : "unknown";
708067
+ VERSION7 = typeof MACRO !== "undefined" ? "1.68.0" : "unknown";
707951
708068
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
707952
708069
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
707953
708070
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -709162,7 +709279,7 @@ var init_filesystem = __esm(() => {
709162
709279
  });
709163
709280
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
709164
709281
  const nonce = randomBytes20(16).toString("hex");
709165
- return join230(getURTempDir(), "bundled-skills", "1.67.0", nonce);
709282
+ return join230(getURTempDir(), "bundled-skills", "1.68.0", nonce);
709166
709283
  });
709167
709284
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
709168
709285
  });
@@ -715468,7 +715585,7 @@ function computeFingerprint(messageText2, version3) {
715468
715585
  }
715469
715586
  function computeFingerprintFromMessages(messages) {
715470
715587
  const firstMessageText = extractFirstMessageText(messages);
715471
- return computeFingerprint(firstMessageText, "1.67.0");
715588
+ return computeFingerprint(firstMessageText, "1.68.0");
715472
715589
  }
715473
715590
  var FINGERPRINT_SALT = "59cf53e54c78";
715474
715591
  var init_fingerprint = () => {};
@@ -717367,7 +717484,7 @@ async function sideQuery(opts) {
717367
717484
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
717368
717485
  }
717369
717486
  const messageText2 = extractFirstUserMessageText(messages);
717370
- const fingerprint2 = computeFingerprint(messageText2, "1.67.0");
717487
+ const fingerprint2 = computeFingerprint(messageText2, "1.68.0");
717371
717488
  const attributionHeader = getAttributionHeader(fingerprint2);
717372
717489
  const systemBlocks = [
717373
717490
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -722154,7 +722271,7 @@ function buildSystemInitMessage(inputs) {
722154
722271
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
722155
722272
  apiKeySource: getURHQApiKeyWithSource().source,
722156
722273
  betas: getSdkBetas(),
722157
- ur_version: "1.67.0",
722274
+ ur_version: "1.68.0",
722158
722275
  output_style: outputStyle2,
722159
722276
  agents: inputs.agents.map((agent2) => agent2.agentType),
722160
722277
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -736105,7 +736222,7 @@ var init_useVoiceEnabled = __esm(() => {
736105
736222
  function getSemverPart(version3) {
736106
736223
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
736107
736224
  }
736108
- function useUpdateNotification(updatedVersion, initialVersion = "1.67.0") {
736225
+ function useUpdateNotification(updatedVersion, initialVersion = "1.68.0") {
736109
736226
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
736110
736227
  if (!updatedVersion) {
736111
736228
  return null;
@@ -736154,7 +736271,7 @@ function AutoUpdater({
736154
736271
  return;
736155
736272
  }
736156
736273
  if (false) {}
736157
- const currentVersion = "1.67.0";
736274
+ const currentVersion = "1.68.0";
736158
736275
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
736159
736276
  let latestVersion = await getLatestVersion(channel);
736160
736277
  const isDisabled = isAutoUpdaterDisabled();
@@ -736383,12 +736500,12 @@ function NativeAutoUpdater({
736383
736500
  logEvent("tengu_native_auto_updater_start", {});
736384
736501
  try {
736385
736502
  const maxVersion = await getMaxVersion();
736386
- if (maxVersion && gt("1.67.0", maxVersion)) {
736503
+ if (maxVersion && gt("1.68.0", maxVersion)) {
736387
736504
  const msg = await getMaxVersionMessage();
736388
736505
  setMaxVersionIssue(msg ?? "affects your version");
736389
736506
  }
736390
736507
  const result = await installLatest(channel);
736391
- const currentVersion = "1.67.0";
736508
+ const currentVersion = "1.68.0";
736392
736509
  const latencyMs = Date.now() - startTime;
736393
736510
  if (result.lockFailed) {
736394
736511
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -736525,17 +736642,17 @@ function PackageManagerAutoUpdater(t0) {
736525
736642
  const maxVersion = await getMaxVersion();
736526
736643
  if (maxVersion && latest && gt(latest, maxVersion)) {
736527
736644
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
736528
- if (gte("1.67.0", maxVersion)) {
736529
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.67.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
736645
+ if (gte("1.68.0", maxVersion)) {
736646
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.68.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
736530
736647
  setUpdateAvailable(false);
736531
736648
  return;
736532
736649
  }
736533
736650
  latest = maxVersion;
736534
736651
  }
736535
- const hasUpdate = latest && !gte("1.67.0", latest) && !shouldSkipVersion(latest);
736652
+ const hasUpdate = latest && !gte("1.68.0", latest) && !shouldSkipVersion(latest);
736536
736653
  setUpdateAvailable(!!hasUpdate);
736537
736654
  if (hasUpdate) {
736538
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.67.0"} -> ${latest}`);
736655
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.68.0"} -> ${latest}`);
736539
736656
  }
736540
736657
  };
736541
736658
  $2[0] = t1;
@@ -736569,7 +736686,7 @@ function PackageManagerAutoUpdater(t0) {
736569
736686
  wrap: "truncate",
736570
736687
  children: [
736571
736688
  "currentVersion: ",
736572
- "1.67.0"
736689
+ "1.68.0"
736573
736690
  ]
736574
736691
  }, undefined, true, undefined, this);
736575
736692
  $2[3] = verbose;
@@ -747262,7 +747379,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
747262
747379
  project_dir: getOriginalCwd(),
747263
747380
  added_dirs: addedDirs
747264
747381
  },
747265
- version: "1.67.0",
747382
+ version: "1.68.0",
747266
747383
  output_style: {
747267
747384
  name: outputStyleName
747268
747385
  },
@@ -747340,7 +747457,7 @@ function StatusLineInner({
747340
747457
  const taskValues = Object.values(tasks2);
747341
747458
  const taskRunningCount = countActiveBackgroundTasks(taskValues);
747342
747459
  const defaultStatusLineText = buildDefaultStatusBar({
747343
- version: "1.67.0",
747460
+ version: "1.68.0",
747344
747461
  providerLabel: providerRuntime.providerLabel,
747345
747462
  authMode: providerRuntime.authLabel,
747346
747463
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -759520,7 +759637,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
759520
759637
  } catch {}
759521
759638
  const data = {
759522
759639
  trigger: trigger2,
759523
- version: "1.67.0",
759640
+ version: "1.68.0",
759524
759641
  platform: process.platform,
759525
759642
  transcript,
759526
759643
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -771888,7 +772005,7 @@ function WelcomeV2() {
771888
772005
  dimColor: true,
771889
772006
  children: [
771890
772007
  "v",
771891
- "1.67.0"
772008
+ "1.68.0"
771892
772009
  ]
771893
772010
  }, undefined, true, undefined, this)
771894
772011
  ]
@@ -773148,7 +773265,7 @@ function completeOnboarding() {
773148
773265
  saveGlobalConfig((current) => ({
773149
773266
  ...current,
773150
773267
  hasCompletedOnboarding: true,
773151
- lastOnboardingVersion: "1.67.0"
773268
+ lastOnboardingVersion: "1.68.0"
773152
773269
  }));
773153
773270
  }
773154
773271
  function showDialog(root2, renderer) {
@@ -778192,7 +778309,7 @@ function appendToLog(path24, message) {
778192
778309
  cwd: getFsImplementation().cwd(),
778193
778310
  userType: process.env.USER_TYPE,
778194
778311
  sessionId: getSessionId(),
778195
- version: "1.67.0"
778312
+ version: "1.68.0"
778196
778313
  };
778197
778314
  getLogWriter(path24).write(messageWithTimestamp);
778198
778315
  }
@@ -782356,8 +782473,8 @@ async function getEnvLessBridgeConfig() {
782356
782473
  }
782357
782474
  async function checkEnvLessBridgeMinVersion() {
782358
782475
  const cfg = await getEnvLessBridgeConfig();
782359
- if (cfg.min_version && lt("1.67.0", cfg.min_version)) {
782360
- return `Your version of UR (${"1.67.0"}) is too old for Remote Control.
782476
+ if (cfg.min_version && lt("1.68.0", cfg.min_version)) {
782477
+ return `Your version of UR (${"1.68.0"}) is too old for Remote Control.
782361
782478
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
782362
782479
  }
782363
782480
  return null;
@@ -782831,7 +782948,7 @@ async function initBridgeCore(params) {
782831
782948
  const rawApi = createBridgeApiClient({
782832
782949
  baseUrl,
782833
782950
  getAccessToken,
782834
- runnerVersion: "1.67.0",
782951
+ runnerVersion: "1.68.0",
782835
782952
  onDebug: logForDebugging,
782836
782953
  onAuth401,
782837
782954
  getTrustedDeviceToken
@@ -792304,7 +792421,7 @@ function getAgUiCapabilities() {
792304
792421
  name: "UR-Nexus",
792305
792422
  type: "ur-nexus",
792306
792423
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
792307
- version: "1.67.0",
792424
+ version: "1.68.0",
792308
792425
  provider: "UR",
792309
792426
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
792310
792427
  },
@@ -793444,7 +793561,7 @@ function createMCPServer(cwd4, debug2, verbose) {
793444
793561
  };
793445
793562
  const server2 = new Server({
793446
793563
  name: "ur-nexus",
793447
- version: "1.67.0"
793564
+ version: "1.68.0"
793448
793565
  }, {
793449
793566
  capabilities: {
793450
793567
  tools: {}
@@ -794602,7 +794719,7 @@ function thrownResponse(error40) {
794602
794719
  }
794603
794720
  async function createUrMcp2026Runtime(options4) {
794604
794721
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
794605
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.67.0" }, { capabilities: {} });
794722
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.68.0" }, { capabilities: {} });
794606
794723
  const [clientTransport, serverTransport] = createLinkedTransportPair();
794607
794724
  try {
794608
794725
  await server2.connect(serverTransport);
@@ -794613,7 +794730,7 @@ async function createUrMcp2026Runtime(options4) {
794613
794730
  }
794614
794731
  const runtime2 = new Mcp2026Runtime({
794615
794732
  cwd: options4.cwd,
794616
- version: "1.67.0",
794733
+ version: "1.68.0",
794617
794734
  backend: {
794618
794735
  listTools: async () => {
794619
794736
  const listed = await client2.listTools();
@@ -796746,7 +796863,7 @@ async function update() {
796746
796863
  logEvent("tengu_update_check", {});
796747
796864
  const diagnostic2 = await getDoctorDiagnostic();
796748
796865
  const result = await checkUpgradeStatus({
796749
- currentVersion: "1.67.0",
796866
+ currentVersion: "1.68.0",
796750
796867
  packageName: UR_AGENT_PACKAGE_NAME,
796751
796868
  installationType: diagnostic2.installationType,
796752
796869
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -798062,7 +798179,7 @@ ${customInstructions}` : customInstructions;
798062
798179
  }
798063
798180
  }
798064
798181
  logForDiagnosticsNoPII("info", "started", {
798065
- version: "1.67.0",
798182
+ version: "1.68.0",
798066
798183
  is_native_binary: isInBundledMode()
798067
798184
  });
798068
798185
  registerCleanup(async () => {
@@ -798848,7 +798965,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
798848
798965
  pendingHookMessages
798849
798966
  }, renderAndRun);
798850
798967
  }
798851
- }).version("1.67.0 (UR-Nexus)", "-v, --version", "Output the version number");
798968
+ }).version("1.68.0 (UR-Nexus)", "-v, --version", "Output the version number");
798852
798969
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
798853
798970
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
798854
798971
  if (canUserConfigureAdvisor()) {
@@ -799907,7 +800024,7 @@ if (false) {}
799907
800024
  async function main2() {
799908
800025
  const args = process.argv.slice(2);
799909
800026
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
799910
- console.log(`${"1.67.0"} (UR-Nexus)`);
800027
+ console.log(`${"1.68.0"} (UR-Nexus)`);
799911
800028
  return;
799912
800029
  }
799913
800030
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.67.0 (UR-Nexus)"
22
+ # expected for this release: "1.68.0 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ## 0.1 First-workspace model selection (1.45.4)
@@ -45,7 +45,7 @@
45
45
  <main id="content" class="content">
46
46
  <header class="topbar">
47
47
  <div>
48
- <p class="eyebrow">Version 1.67.0</p>
48
+ <p class="eyebrow">Version 1.68.0</p>
49
49
  <h1>UR-Nexus Documentation</h1>
50
50
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
51
51
  </div>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.67.0"
10
+ version = "1.68.0"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.67.0",
5
+ "version": "1.68.0",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.67.0",
3
+ "version": "1.68.0",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",
@@ -1,6 +1,6 @@
1
1
  # UR-Nexus — Technical Specifications
2
2
 
3
- > Audited against the executable source and tests for `ur-agent` v1.67.0.
3
+ > Audited against the executable source and tests for `ur-agent` v1.68.0.
4
4
  > Command, tool, flag, provider, and setting claims are checked against the
5
5
  > implementation rather than copied from product prose. Release validation
6
6
  > keeps this version synchronized and packages the complete `technical/`