xtrm-tools 0.5.43 → 0.5.45
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
|
@@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [0.5.43] - 2026-03-25
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- Restore specialists project hooks in `.claude/settings.json` — incorrectly removed in 0.5.42
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## [0.5.42] - 2026-03-25
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- Remove accidentally committed specialists hooks from `.claude/settings.json` (reverted in 0.5.43 — see note)
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## [0.5.41] - 2026-03-25
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- **`xt memory update`**: New CLI command that shells out to the `memory-processor` specialist to synthesize bd memories + project state into `.xtrm/memory.md`. Supports `--dry-run` (report only) and `--no-beads` flags.
|
|
28
|
+
- **`memory-processor` specialist** (`specialists/memory-processor.specialist.yaml`): Autonomous specialist that cross-references bd memories against current source code, writes a condensed `.xtrm/memory.md` (100–200 lines, 3 sections: Architecture & Decisions, Non-obvious Gotchas, Process & Workflow Rules), and prunes stale/redundant/contradicted memories from bd.
|
|
29
|
+
- **`.xtrm/memory.md` injection at SessionStart**: `using-xtrm-reminder.mjs` now appends `.xtrm/memory.md` to the system prompt when present — synthesized project context is available from turn 1.
|
|
30
|
+
- **Pi parity — memory.md injection**: `xtrm-loader` Pi extension now injects `.xtrm/memory.md` in `before_agent_start` (same semantics as Claude Code SessionStart injection).
|
|
31
|
+
- **Pi parity — memory gate prompt**: `beads` Pi extension memory gate now uses the same 4-criteria checklist and articulated ack format as the Claude hook.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- **`beads-memory-gate.mjs`**: Switched from blocking (exit 2 + stderr) to non-blocking (`additionalContext` + exit 0) — memory gate is advisory, not a hard stop.
|
|
35
|
+
- **`beads-stop-gate.mjs`**: Switched from blocking to non-blocking (`additionalContext` + exit 0) — eliminates spurious stop-gate noise between conversational turns.
|
|
36
|
+
- **Memory gate prompt** (`beads-gate-messages.mjs`): Now uses 4-criteria quality filter (hard to rediscover, non-obvious from source, will affect future decisions, still relevant in ~14 days) with mandatory articulated ack (not just `1`).
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
10
40
|
## [Unreleased]
|
|
11
41
|
|
|
12
42
|
### Added
|
package/cli/dist/index.cjs
CHANGED
|
@@ -56267,6 +56267,10 @@ function createHelpCommand() {
|
|
|
56267
56267
|
" xtrm docs cross-check [--days <n>] [--json]",
|
|
56268
56268
|
" Validate docs against recent PR activity and closed bd issues.",
|
|
56269
56269
|
"",
|
|
56270
|
+
" xtrm memory update [--dry-run] [--no-beads]",
|
|
56271
|
+
" Run memory-processor specialist to synthesize bd memories into .xtrm/memory.md.",
|
|
56272
|
+
" --dry-run: classify and report without writing memory.md or pruning.",
|
|
56273
|
+
"",
|
|
56270
56274
|
" xtrm debug [options]",
|
|
56271
56275
|
" Stream xtrm event log (tool calls, gates, session/bd lifecycle).",
|
|
56272
56276
|
" Options: --follow, --all, --session <id>, --type <domain>, --json",
|
|
@@ -57739,7 +57743,7 @@ function createMemoryCommand() {
|
|
|
57739
57743
|
return new Command("memory").description("Manage project memory (.xtrm/memory.md)").addCommand(createMemoryUpdateCommand());
|
|
57740
57744
|
}
|
|
57741
57745
|
function createMemoryUpdateCommand() {
|
|
57742
|
-
return new Command("update").description("Run memory-processor specialist to synthesize bd memories into .xtrm/memory.md").option("--dry-run", "Report only \u2014 do not modify memories or write memory.md", false).option("--no-beads", "Skip creating a tracking bead for this run", false).action((opts) => {
|
|
57746
|
+
return new Command("update").description("Run memory-processor specialist to synthesize bd memories into .xtrm/memory.md").option("--dry-run", "Report only \u2014 do not modify memories or write memory.md", false).option("--no-beads", "Skip creating a tracking bead for this run", false).action(async (opts) => {
|
|
57743
57747
|
const cwd = process.cwd();
|
|
57744
57748
|
const check2 = (0, import_node_child_process12.spawnSync)("specialists", ["--version"], { encoding: "utf8", stdio: "pipe" });
|
|
57745
57749
|
if (check2.status !== 0) {
|
|
@@ -57764,17 +57768,28 @@ function createMemoryUpdateCommand() {
|
|
|
57764
57768
|
const prompt = opts.dryRun ? "Dry run: classify all memories and show the full report. Do not call bd forget or write .xtrm/memory.md." : "Run the full memory processor workflow.";
|
|
57765
57769
|
const args = ["run", "memory-processor", "--prompt", prompt];
|
|
57766
57770
|
if (!opts.beads) args.push("--no-beads");
|
|
57771
|
+
const memPath = (0, import_node_path7.join)(cwd, ".xtrm", "memory.md");
|
|
57772
|
+
const spinnerText = opts.dryRun ? "Analyzing memories..." : `${(0, import_node_fs6.existsSync)(memPath) ? "Updating" : "Creating"} .xtrm/memory.md...`;
|
|
57767
57773
|
console.log(kleur_default.bold(`
|
|
57768
57774
|
xt memory update${opts.dryRun ? " (dry run)" : ""}
|
|
57769
57775
|
`));
|
|
57770
|
-
|
|
57771
|
-
|
|
57772
|
-
|
|
57773
|
-
|
|
57774
|
-
|
|
57776
|
+
const spinner = ora({ text: spinnerText, color: "cyan" }).start();
|
|
57777
|
+
const chunks = [];
|
|
57778
|
+
const exitCode = await new Promise((resolve2) => {
|
|
57779
|
+
const proc = (0, import_node_child_process12.spawn)("specialists", args, { cwd, stdio: ["inherit", "pipe", "pipe"] });
|
|
57780
|
+
proc.stdout.on("data", (d) => chunks.push(d.toString()));
|
|
57781
|
+
proc.stderr.on("data", (d) => chunks.push(d.toString()));
|
|
57782
|
+
proc.on("close", (code) => resolve2(code ?? 0));
|
|
57783
|
+
});
|
|
57784
|
+
if (exitCode === 0) {
|
|
57785
|
+
spinner.succeed(opts.dryRun ? "Analysis complete." : ".xtrm/memory.md written.");
|
|
57786
|
+
} else {
|
|
57787
|
+
spinner.fail("memory-processor failed.");
|
|
57775
57788
|
}
|
|
57776
|
-
const
|
|
57777
|
-
|
|
57789
|
+
const lines = chunks.join("").split("\n").filter((l) => l.trim());
|
|
57790
|
+
const tail = lines.slice(-10).map((l) => kleur_default.dim(" " + l)).join("\n");
|
|
57791
|
+
if (tail) console.log("\n" + tail + "\n");
|
|
57792
|
+
process.exit(exitCode);
|
|
57778
57793
|
});
|
|
57779
57794
|
}
|
|
57780
57795
|
|