xtrm-tools 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -9,19 +9,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ---
13
+
14
+ ## [0.5.0] - 2026-03-20
15
+
12
16
  ### Added
13
17
 
14
- - **`AGENTS.md` — bd (beads) issue tracking section**: Comprehensive reference for the `bd` CLI covering session protocol, issue creation, dependency management, search/view commands, advanced features (`agent`, `gate`, `mol`, `audit`), and a bd vs TodoWrite decision table.
15
- - **`xtrm install project all` / `xtrm install project '*'`**: Non-interactive install of every available project skill into the current repository.
18
+ #### xt CLI Redesign (epic hxmh)
19
+ - **`xt` binary alias**: `xt` registered as a secondary bin alias for `xtrm`
20
+ - **`xt claude` / `xt pi` runtime namespaces**: Session launcher with worktree-first flow; creates `<project>-xt-<runtime>-<date>` worktree, Dolt-bootstraps Beads server, execs the agent
21
+ - **`xt claude install/reload/status/doctor`** and **`xt pi install/setup/status/doctor/reload`**: Per-runtime management subcommands
22
+ - **`xt end`**: Session close — `xt/*` branch gate, dirty-tree gate, rebase `origin/main`, `--force-with-lease` push, `gh pr create`, optional worktree removal
23
+ - **`xt worktree list/clean/remove`**: List `xt/*` worktrees with merged status, batch-clean merged, manual remove
24
+ - **`xt init`**: Project init command
25
+ - **`skills/xt-end/SKILL.md`**: Autonomous session-close skill for agents
26
+
27
+ #### Pi Extensions — Directory Package Format
28
+ - All 13 Pi extensions converted from flat `.ts` files to directory packages: `<name>/index.ts` + `<name>/package.json` with `exports` field
29
+ - Format: `{"name": "@xtrm/pi-<name>", "version": "1.0.0", "type": "module", "exports": {".": "./index.ts"}}`
30
+
31
+ #### Pi Installer Improvements
32
+ - `xtrm pi install` now registers each extension via `pi install -l <path>` after copying
33
+ - `diffPiExtensions` now compares extension directories using `sha256(package.json + index.ts)`
34
+
35
+ ### Changed
36
+
37
+ - **`xtrm install all` / `basic`** now print a deprecation notice; primary entry point is `xtrm install`
38
+ - **Project namespace removed**: `xtrm install project <name>` removed
39
+ - **Gemini/Qwen scoped out**: no longer surfaced in `xtrm --help`
40
+ - **`exitOverride` fix**: `--help` now exits `0` instead of `1`
41
+ - **Version restarted at `0.5.0`** (was `2.4.6`)
16
42
 
17
43
  ### Fixed
18
44
 
19
- - **Claude-only target detection**: `xtrm install all` now enumerates Claude Code targets only, instead of surfacing stale Gemini/Qwen/Agents paths.
20
- - **Project-skill install-all coverage**: Added regression tests to verify merged hook counts and copied assets across all shipped project skills.
45
+ - **Pi extensions not loadable**: flat `.ts` files were silently ignored Pi requires directory packages with `package.json` + `exports`
46
+ - **Claude-only target detection**: `xtrm install all` enumerates Claude Code targets only
47
+ - **Project-skill install-all coverage**: regression tests verify merged hook counts and copied assets
21
48
 
22
- ### Roadmap
49
+ ### Previous Unreleased
23
50
 
24
- - `AGENTS.md` should be included in the `jaggers-config install-service-skills` installation flow so all target projects get agent context out of the box (see ROADMAP.md).
51
+ - **`AGENTS.md` bd (beads) issue tracking section**: comprehensive `bd` CLI reference
52
+ - **`xtrm install project all` / `xtrm install project '*'`**: non-interactive project skill install
25
53
 
26
54
  ---
27
55
 
@@ -35753,7 +35753,7 @@ var import_os2 = __toESM(require("os"), 1);
35753
35753
  var import_path = __toESM(require("path"), 1);
35754
35754
  var import_fs_extra = __toESM(require_lib2(), 1);
35755
35755
 
35756
- // ../node_modules/conf/dist/source/index.js
35756
+ // node_modules/conf/dist/source/index.js
35757
35757
  var import_node_util3 = require("util");
35758
35758
  var import_node_process10 = __toESM(require("process"), 1);
35759
35759
  var import_node_fs3 = __toESM(require("fs"), 1);
@@ -36432,7 +36432,7 @@ function writeFileSync(filePath, data, options = DEFAULT_WRITE_OPTIONS) {
36432
36432
  }
36433
36433
  }
36434
36434
 
36435
- // ../node_modules/conf/dist/source/index.js
36435
+ // node_modules/conf/dist/source/index.js
36436
36436
  var import_ajv = __toESM(require_ajv(), 1);
36437
36437
  var import_ajv_formats = __toESM(require_dist2(), 1);
36438
36438
 
@@ -36546,7 +36546,7 @@ var debounceFn = (inputFunction, options = {}) => {
36546
36546
  };
36547
36547
  var debounce_fn_default = debounceFn;
36548
36548
 
36549
- // ../node_modules/conf/dist/source/index.js
36549
+ // node_modules/conf/dist/source/index.js
36550
36550
  var import_semver = __toESM(require_semver2(), 1);
36551
36551
 
36552
36552
  // ../node_modules/uint8array-extras/index.js
@@ -36588,7 +36588,7 @@ function stringToUint8Array(string4) {
36588
36588
  }
36589
36589
  var byteToHexLookupTable = Array.from({ length: 256 }, (_, index) => index.toString(16).padStart(2, "0"));
36590
36590
 
36591
- // ../node_modules/conf/dist/source/index.js
36591
+ // node_modules/conf/dist/source/index.js
36592
36592
  var Ajv = import_ajv.default.default;
36593
36593
  var ajvFormats = import_ajv_formats.default.default;
36594
36594
  var encryptionAlgorithm = "aes-256-cbc";
@@ -41286,13 +41286,27 @@ async function launchWorktreeSession(opts) {
41286
41286
  if (await import_fs_extra12.default.pathExists(mainBeadsDir)) {
41287
41287
  const worktreePortFile = import_node_path5.default.join(worktreeBeadsDir, "dolt-server.port");
41288
41288
  (0, import_node_child_process2.spawnSync)("bd", ["dolt", "stop"], { cwd: worktreePath, stdio: "pipe" });
41289
+ let mainPort = null;
41289
41290
  if (await import_fs_extra12.default.pathExists(mainPortFile)) {
41290
- const mainPort = (await import_fs_extra12.default.readFile(mainPortFile, "utf8")).trim();
41291
+ mainPort = (await import_fs_extra12.default.readFile(mainPortFile, "utf8")).trim();
41292
+ } else {
41293
+ const statusResult = (0, import_node_child_process2.spawnSync)("bd", ["dolt", "status"], {
41294
+ cwd: repoRoot,
41295
+ stdio: "pipe",
41296
+ encoding: "utf8"
41297
+ });
41298
+ const portMatch = (statusResult.stdout ?? "").match(/Port:\s*(\d+)/);
41299
+ if (portMatch) {
41300
+ mainPort = portMatch[1];
41301
+ await import_fs_extra12.default.writeFile(mainPortFile, mainPort, "utf8");
41302
+ }
41303
+ }
41304
+ if (mainPort) {
41291
41305
  await import_fs_extra12.default.ensureDir(worktreeBeadsDir);
41292
41306
  await import_fs_extra12.default.writeFile(worktreePortFile, mainPort, "utf8");
41293
41307
  console.log(kleur_default.dim(` beads: redirected to main server (port ${mainPort})`));
41294
41308
  } else {
41295
- console.log(kleur_default.dim(" beads: no port file found in main checkout, skipping redirect"));
41309
+ console.log(kleur_default.dim(" beads: main Dolt server not running, worktree will use isolated db"));
41296
41310
  }
41297
41311
  }
41298
41312
  console.log(kleur_default.green(`